From 094097fab3e2819d19ed71b3128d7bc62cbed87a Mon Sep 17 00:00:00 2001 From: Harald Hoyer Date: Wed, 16 Sep 2009 15:34:13 +0200 Subject: [PATCH] lvm/dm/md: switch from lockfiles to $sys/$devpath/holders/* This is a more sane solution, than ignoring subsequent "change" events. The only danger is that we could loop, if a lvm scan triggers a broken md partition, which triggers a broken PV and so on. Better fix the scanning tools, not to emit change events for devices, if no action was taken. --- modules.d/90dmraid/61-dmraid-imsm.rules | 13 ++++---- modules.d/90lvm/64-lvm.rules | 9 +++--- .../90mdraid/65-md-incremental-imsm.rules | 31 +++++-------------- 3 files changed, 19 insertions(+), 34 deletions(-) diff --git a/modules.d/90dmraid/61-dmraid-imsm.rules b/modules.d/90dmraid/61-dmraid-imsm.rules index 801395ab..4d608ccb 100644 --- a/modules.d/90dmraid/61-dmraid-imsm.rules +++ b/modules.d/90dmraid/61-dmraid-imsm.rules @@ -9,17 +9,16 @@ ENV{ID_FS_TYPE}=="linux_raid_member", GOTO="dm_end" ENV{ID_FS_TYPE}!="*_raid_member", , GOTO="dm_end" -TEST=="/tmp/.dmraid_scan-%k", GOTO="dm_end" - -ENV{DEVTYPE}!="partition", \ - RUN+="/sbin/partx -d --nr 1-1024 $env{DEVNAME}" - ENV{ID_FS_TYPE}=="isw_raid_member", ENV{rd_NO_MDIMSM}!="?*", GOTO="dm_end" ENV{rd_NO_DM}=="?*", GOTO="dm_end" -RUN+="/sbin/initqueue --onetime --unique --settled /sbin/dmraid_scan" +PROGRAM=="/bin/sh -c 'for i in $sys/$devpath/holders/dm-[0-9]*; do [ -e $$i ] && exit 0; done; exit 1;' ", \ + GOTO="dm_end" -ACTION=="change", RUN+="/bin/sh -c '>/tmp/.dmraid_scan-%k'" +ENV{DEVTYPE}!="partition", \ + RUN+="/sbin/partx -d --nr 1-1024 $env{DEVNAME}" + +RUN+="/sbin/initqueue --onetime --unique --settled /sbin/dmraid_scan" LABEL="dm_end" diff --git a/modules.d/90lvm/64-lvm.rules b/modules.d/90lvm/64-lvm.rules index a200add8..1c28b548 100644 --- a/modules.d/90lvm/64-lvm.rules +++ b/modules.d/90lvm/64-lvm.rules @@ -9,10 +9,11 @@ ACTION!="add|change", GOTO="lvm_end" KERNEL=="dm-[0-9]*", ACTION=="add", GOTO="lvm_end" ENV{ID_FS_TYPE}!="LVM2_member", GOTO="lvm_end" -TEST!="/tmp/.lvm_change-%k", \ - RUN+="/sbin/initqueue --settled --onetime --unique /sbin/lvm_scan" -ACTION=="add", RUN+="/bin/sh -c '>/tmp/.lvm_scan-%k;'" -ACTION=="change", RUN+="/bin/sh -c '>/tmp/.lvm_change-%k;>/tmp/.lvm_scan-%k;'" +PROGRAM=="/bin/sh -c 'for i in $sys/$devpath/holders/dm-[0-9]*; do [ -e $$i ] && exit 0; done; exit 1;' ", \ + GOTO="lvm_end" + +RUN+="/sbin/initqueue --settled --onetime --unique /sbin/lvm_scan" +RUN+="/bin/sh -c '>/tmp/.lvm_scan-%k;'" LABEL="lvm_end" diff --git a/modules.d/90mdraid/65-md-incremental-imsm.rules b/modules.d/90mdraid/65-md-incremental-imsm.rules index 604185c4..750a794b 100644 --- a/modules.d/90mdraid/65-md-incremental-imsm.rules +++ b/modules.d/90mdraid/65-md-incremental-imsm.rules @@ -6,15 +6,15 @@ ACTION!="add|change", GOTO="md_inc_end" SUBSYSTEM!="block", GOTO="md_inc_end" ENV{ID_FS_TYPE}!="linux_raid_member|isw_raid_member", GOTO="md_inc_end" -ENV{DEVTYPE}!="partition", \ - RUN+="/sbin/partx -d --nr 1-1024 $env{DEVNAME}" - ENV{ID_FS_TYPE}=="isw_raid_member", ENV{rd_NO_MDIMSM}=="?*", GOTO="md_inc_end" ENV{rd_NO_MD}=="?*", GOTO="md_inc_end" -TEST=="/tmp/.mdraid_start-%k", GOTO="md_inc_end" -TEST=="/tmp/.mdraid_container-%k", GOTO="md_inc_end" +PROGRAM=="/bin/sh -c 'for i in $sys/$devpath/holders/md[0-9]*; do [ -e $$i ] && exit 0; done; exit 1;' ", \ + GOTO="md_inc_end" + +ENV{DEVTYPE}!="partition", \ + RUN+="/sbin/partx -d --nr 1-1024 $env{DEVNAME}" KERNEL!="md*", IMPORT{program}="/sbin/mdadm --examine --export $tempnode" @@ -28,11 +28,7 @@ LABEL="do_md_inc" # ENV{rd_MDADMCONF}!="?*", GOTO="md_auto_end" -ACTION=="change", \ - RUN+="/bin/sh -c '>/tmp/.mdraid_auto-%k'" - -TEST!="/tmp/.mdraid_auto-%k", \ - RUN+="/bin/sh -c 'ln -s /sbin/md_finished.sh /initqueue-finished/md_finished.sh;/sbin/initqueue --settled --onetime --unique /sbin/mdadm_auto'" +RUN+="/bin/sh -c 'ln -s /sbin/md_finished.sh /initqueue-finished/md_finished.sh;/sbin/initqueue --settled --onetime --unique /sbin/mdadm_auto'" GOTO="md_inc_end" @@ -43,9 +39,6 @@ LABEL="md_auto_end" # RUN+="/sbin/mdadm -I --no-degraded $env{DEVNAME}" -ACTION=="change", \ - RUN+="/bin/sh -c '>/tmp/.mdraid_start-%k'" - RUN+="/bin/ln -s /sbin/md_finished.sh /initqueue-finished/md_finished.sh" LABEL="md_inc_end" @@ -65,11 +58,7 @@ GOTO="end_raidstart" LABEL="do_raidstart" -TEST!="/tmp/.mdraid_start-%k", \ - RUN+="/bin/sh -c 'ln -s /sbin/md_finished.sh /initqueue-finished/md_finished.sh;/sbin/initqueue --settled --onetime --unique /sbin/mdraid_start'" - -ACTION=="change", \ - RUN+="/bin/sh -c '>/tmp/.mdraid_start-%k'" +RUN+="/bin/sh -c 'ln -s /sbin/md_finished.sh /initqueue-finished/md_finished.sh;/sbin/initqueue --settled --onetime --unique /sbin/mdraid_start'" LABEL="end_raidstart" @@ -88,10 +77,6 @@ GOTO="end_container" LABEL="do_container" -TEST!="/tmp/.mdcontainer_start-%k", \ - RUN+="/bin/sh -c 'ln -s /sbin/md_finished.sh /initqueue-finished/md_finished.sh;/sbin/initqueue --settled --onetime --unique --name mdcontainer_start-%k /sbin/mdcontainer_start $env{DEVNAME}'" - -ACTION=="change", \ - RUN+="/bin/sh -c '>/tmp/.mdcontainer_start-%k'" +RUN+="/bin/sh -c 'ln -s /sbin/md_finished.sh /initqueue-finished/md_finished.sh;/sbin/initqueue --settled --onetime --unique --name mdcontainer_start-%k /sbin/mdcontainer_start $env{DEVNAME}'" LABEL="end_container"