From 439f52954a6f94f55bdb0943a1e8f5ca913e8a81 Mon Sep 17 00:00:00 2001 From: Benjamin Marzinski Date: Thu, 25 Mar 2010 12:52:06 -0500 Subject: multipath: don't let init script stop multipathd for root devices This patch modifies the redhat init script, so that it doesn't allow multipathd to be stopped when the root device is on it. Signed-off-by: Benjamin Marzinski --- multipathd/multipathd.init.redhat | 38 +++++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/multipathd/multipathd.init.redhat b/multipathd/multipathd.init.redhat index ee776f0..e46b1b8 100644 --- a/multipathd/multipathd.init.redhat +++ b/multipathd/multipathd.init.redhat @@ -2,7 +2,7 @@ # # multipathd Starts the multipath daemon # -# chkconfig: - 13 87 +# chkconfig: - 06 87 # description: Manages device-mapper multipath devices ### BEGIN INIT INFO @@ -17,6 +17,7 @@ prog=`basename $DAEMON` initdir=/etc/rc.d/init.d lockdir=/var/lock/subsys sysconfig=/etc/sysconfig +syspath=/sys/block . $initdir/functions @@ -25,6 +26,36 @@ test -r $sysconfig/$prog && . $sysconfig/$prog RETVAL=0 +teardown_slaves() +{ +pushd $1 > /dev/null +if [ -d "slaves" ]; then +for slave in slaves/*; +do + if [ "$slave" = "slaves/*" ]; then + read dev < $1/dev + tablename=`dmsetup table --target multipath | sed -n "s/\(.*\): .* $dev .*/\1/p"` + if ! [ -z $tablename ]; then + echo "Root is on a multipathed device, multipathd can not be stopped" + exit 1 + fi + else + local_slave=`readlink -f $slave`; + teardown_slaves $local_slave; + fi + done + +else + read dev < $1/dev + tablename=`dmsetup table --target multipath | sed -n "s/\(.*\): .* $dev .*/\1/p"` + if ! [ -z $tablename ]; then + echo "Root is on a multipathed device, multipathd can not be stopped" + exit 1 + fi +fi +popd > /dev/null +} + # # See how we were called. # @@ -39,6 +70,11 @@ start() { } stop() { + root_dev=$(awk '{ if ($1 !~ /^[ \t]*#/ && $2 == "/") { print $1; }}' /etc/mtab) + dm_num=`dmsetup info -c --noheadings -o minor $root_dev` + root_dm_device="dm-$dm_num" + [ -d $syspath/$root_dm_device ] && teardown_slaves $syspath/$root_dm_device + echo -n $"Stopping $prog daemon: " killproc $DAEMON RETVAL=$? -- cgit v1.2.3