]> git.ipfire.org Git - thirdparty/dracut.git/commitdiff
lvm/dm/md: switch from lockfiles to $sys/$devpath/holders/*
authorHarald Hoyer <harald@redhat.com>
Wed, 16 Sep 2009 13:34:13 +0000 (15:34 +0200)
committerHarald Hoyer <harald@redhat.com>
Wed, 16 Sep 2009 13:34:13 +0000 (15:34 +0200)
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
modules.d/90lvm/64-lvm.rules
modules.d/90mdraid/65-md-incremental-imsm.rules

index 801395abf06e63baefbdd6e4948477e4604606e0..4d608ccb90c47b71c8a7bd388fe948a585115347 100644 (file)
@@ -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"
index a200add8971a0e36dc6c9a4e4087b08fb6e45022..1c28b548e08cc1232b62c9bf1938a51800ef1e97 100644 (file)
@@ -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"
index 604185c453090b3b53e1d7a7fc82ff4d510c517e..750a794b87de95b6ffeccf48450e7206a4b20f71 100644 (file)
@@ -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"