Re: mdadm udev rules change

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Monday April 6, dledford@xxxxxxxxxx wrote:
> 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.

So you aren't really talking about events on md devices, but rather on
events that might become components of md devices - correct?
So in udev-md-raid.rules we currently have

....
ACTION!="add|change", GOTO="md_end"

# 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
KERNEL!="md*", GOTO="md_end"
......

And you are saying that if we uncomment the "#ENV{...." line, then we
only want it to fire on add devices.  So something like:

....
 ACTION!="add|change", GOTO="md_end"
+ACTION=="change", GOTO="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="no_incr"
 KERNEL!="md*", GOTO="md_end"
......

Is that correct?

Your explanation certainly seems reasonable.

Thanks.
NeilBrown
--
To unsubscribe from this list: send the line "unsubscribe linux-raid" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux RAID Wiki]     [ATA RAID]     [Linux SCSI Target Infrastructure]     [Linux Block]     [Linux IDE]     [Linux SCSI]     [Linux Hams]     [Device Mapper]     [Device Mapper Cryptographics]     [Kernel]     [Linux Admin]     [Linux Net]     [GFS]     [RPM]     [git]     [Yosemite Forum]


  Powered by Linux