Browse Source

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.
master
Harald Hoyer 16 years ago
parent
commit
094097fab3
  1. 13
      modules.d/90dmraid/61-dmraid-imsm.rules
  2. 9
      modules.d/90lvm/64-lvm.rules
  3. 31
      modules.d/90mdraid/65-md-incremental-imsm.rules

13
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" 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{ID_FS_TYPE}=="isw_raid_member", ENV{rd_NO_MDIMSM}!="?*", GOTO="dm_end"


ENV{rd_NO_DM}=="?*", 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" LABEL="dm_end"

9
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" KERNEL=="dm-[0-9]*", ACTION=="add", GOTO="lvm_end"
ENV{ID_FS_TYPE}!="LVM2_member", 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;'" PROGRAM=="/bin/sh -c 'for i in $sys/$devpath/holders/dm-[0-9]*; do [ -e $$i ] && exit 0; done; exit 1;' ", \
ACTION=="change", RUN+="/bin/sh -c '>/tmp/.lvm_change-%k;>/tmp/.lvm_scan-%k;'" GOTO="lvm_end"

RUN+="/sbin/initqueue --settled --onetime --unique /sbin/lvm_scan"
RUN+="/bin/sh -c '>/tmp/.lvm_scan-%k;'"


LABEL="lvm_end" LABEL="lvm_end"

31
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" SUBSYSTEM!="block", GOTO="md_inc_end"
ENV{ID_FS_TYPE}!="linux_raid_member|isw_raid_member", 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{ID_FS_TYPE}=="isw_raid_member", ENV{rd_NO_MDIMSM}=="?*", GOTO="md_inc_end"


ENV{rd_NO_MD}=="?*", GOTO="md_inc_end" ENV{rd_NO_MD}=="?*", GOTO="md_inc_end"


TEST=="/tmp/.mdraid_start-%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;' ", \
TEST=="/tmp/.mdraid_container-%k", GOTO="md_inc_end" 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" KERNEL!="md*", IMPORT{program}="/sbin/mdadm --examine --export $tempnode"


@ -28,11 +28,7 @@ LABEL="do_md_inc"
# #
ENV{rd_MDADMCONF}!="?*", GOTO="md_auto_end" ENV{rd_MDADMCONF}!="?*", GOTO="md_auto_end"


ACTION=="change", \ 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 '>/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'"


GOTO="md_inc_end" GOTO="md_inc_end"


@ -43,9 +39,6 @@ LABEL="md_auto_end"
# #
RUN+="/sbin/mdadm -I --no-degraded $env{DEVNAME}" 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" RUN+="/bin/ln -s /sbin/md_finished.sh /initqueue-finished/md_finished.sh"


LABEL="md_inc_end" LABEL="md_inc_end"
@ -65,11 +58,7 @@ GOTO="end_raidstart"


LABEL="do_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'"
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'"


LABEL="end_raidstart" LABEL="end_raidstart"


@ -88,10 +77,6 @@ GOTO="end_container"


LABEL="do_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}'"
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'"


LABEL="end_container" LABEL="end_container"

Loading…
Cancel
Save