--- multipath/mpath_wait | 21 +++++++++++++++------ multipath/multipath.rules | 5 ++++- 2 files changed, 19 insertions(+), 7 deletions(-) Index: multipath-tools/multipath/mpath_wait =================================================================== --- multipath-tools.orig/multipath/mpath_wait +++ multipath-tools/multipath/mpath_wait @@ -3,14 +3,23 @@ retry=3 sec=1 -/sbin/dmsetup info -c --noheadings -j $1 -m $2 2> /dev/null | grep -q .*:${1}:${2}:L.*:.*:.*:.*:.* -ret=$? +dev=`/sbin/dmsetup ls --target multipath -j $1 -m $2 --exec 'echo'` +if [ -n "$dev" ]; then + /usr/bin/stat $dev > /dev/null 2>&1 + ret=$? +else + ret=1 +fi -while [ "$ret" -ne 0 -a "$retry" -gt 0 ] -do +while [ "$ret" -ne 0 -a "$retry" -gt 0 ]; do sleep $sec - /sbin/dmsetup info -c --noheadings -j $1 -m $2 2> /dev/null | grep -q .*:${1}:${2}:L.*:.*:.*:.*:.* - ret=$? + if [ -z "$dev" ]; then + dev=`/sbin/dmsetup ls --target multipath -j $1 -m $2 --exec 'echo'` + fi + if [ -n "$dev" ]; then + /usr/bin/stat $dev > /dev/null 2>&1 + ret=$? + fi retry=$(($retry - 1)) done Index: multipath-tools/multipath/multipath.rules =================================================================== --- multipath-tools.orig/multipath/multipath.rules +++ multipath-tools/multipath/multipath.rules @@ -2,7 +2,10 @@ # so name them after their devmap name SUBSYSTEM!="block", GOTO="end_mpath" RUN+="socket:/org/kernel/dm/multipath_event" +ACTION!="change", GOTO="end_mpath" KERNEL!="dm-[0-9]*", GOTO="end_mpath" +ENV{DM_SUSPENDED}=="1", GOTO="end_mpath" +ENV{DM_UUID}=="*?", ENV{DM_UUID}!="mpath-?*", GOTO="end_mpath" PROGRAM!="/sbin/mpath_wait %M %m", GOTO="end_mpath" -ACTION=="add", RUN+="/sbin/dmsetup ls --target multipath --exec '/sbin/kpartx -a -p p' -j %M -m %m" +RUN+="/sbin/dmsetup ls --target multipath --exec '/sbin/kpartx -a -p p' -j %M -m %m" LABEL="end_mpath"