Doug Ledford: mdadm udev rules change

Martin F. Krafft madduck at alioth.debian.org
Thu May 7 12:11:39 UTC 2009


Module: mdadm
Branch: debian/experimental
Commit: a9934ce44184660332549965c7d83a6a023ffd33
URL:    http://git.debian.org/?p=pkg-mdadm/mdadm.git;a=commit;h=a9934ce44184660332549965c7d83a6a023ffd33

Author: Doug Ledford <dledford at redhat.com>
Date:   Wed Apr  8 17:32:55 2009 +1000

mdadm udev rules change

I'm not attaching a patch for this because it's so simple.  Long story
short, watching both add and change events in udev rules is bad for md
devices.  Specifically, the kernel will generate a change event on
things like array stop, and on things like fdisk close.  In the case
of array stop, it can result in the array being assembled again
immediately.  In the case of fdisk close, the situation is worse.
Let's say you stop all the md devices on some block device in order to
repartition.  You run fdisk, change the partition table, then issue a
write of the table.  The write of the table triggers the change event
*before* the kernel updates the partition table in memory for the
block device, causing udev to rerun the incremental rules on the old
partition table and restart all the arrays you just stopped with the
old partition table layout, at which point the kernel is unable to
reread the partition table.  So, once you've enable incremental
assembly, it becomes apparent that what we really want is to only
start devices on add, not on add|change.

--

Doug Ledford <dledford at redhat.com>

---

 udev-md-raid.rules |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/udev-md-raid.rules b/udev-md-raid.rules
index 1b0da38..4b0a416 100644
--- a/udev-md-raid.rules
+++ b/udev-md-raid.rules
@@ -2,10 +2,12 @@
 
 SUBSYSTEM!="block", GOTO="md_end"
 ACTION!="add|change", GOTO="md_end"
+ACTION=="change", GOTO="md_no_incr"
 
 # import data from a raid member and activate it
 #ENV{ID_FS_TYPE}=="linux_raid_member", IMPORT{program}="/sbin/mdadm --examine --export $tempnode", RUN+="/sbin/mdadm --incremental $env{DEVNAME}"
 # import data from a raid set
+LABEL="md_no_incr"
 KERNEL!="md*", GOTO="md_end"
 
 # container devices have a metadata version of e.g. 'external:ddf' and




More information about the pkg-mdadm-commits mailing list