does this apply to eudev as well? I'm thinking of upgrading from an older udev to eudev on our boot media. On Tue, Sep 17, 2019 at 11:11 PM NeilBrown <neilb@xxxxxxx> wrote: > > > There is a bug in udev (which will hopefully get fixed, but > we should allow for it anways). > When reading a sysfs attribute, it first reads the whole > value of the attribute, then reads again expecting to get > a read of 0 bytes, like you would with an ordinary file. > If the sysfs attribute changed between these two reads, it can > get a mixture of two values. > > In particular, if it reads when 'array_state' is changing from > 'clear' to 'inactive', it can find the value as "clear\nve". > > This causes the test for "|clear|active" to fail, so systemd is allowed > to think that the array is ready - when it isn't. > > So change the pattern to allow for this but adding a wildcard at > the end. > Also don't allow for an empty string - reading array_state will > never return an empty string - if it exists at all, it will be > non-empty. > > Signed-off-by: NeilBrown <neilb@xxxxxxx> > --- > udev-md-raid-arrays.rules | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/udev-md-raid-arrays.rules b/udev-md-raid-arrays.rules > index d3916651cf5c..c8fa8e89ef69 100644 > --- a/udev-md-raid-arrays.rules > +++ b/udev-md-raid-arrays.rules > @@ -14,7 +14,7 @@ ENV{DEVTYPE}=="partition", GOTO="md_ignore_state" > # never leave state 'inactive' > ATTR{md/metadata_version}=="external:[A-Za-z]*", ATTR{md/array_state}=="inactive", GOTO="md_ignore_state" > TEST!="md/array_state", ENV{SYSTEMD_READY}="0", GOTO="md_end" > -ATTR{md/array_state}=="|clear|inactive", ENV{SYSTEMD_READY}="0", GOTO="md_end" > +ATTR{md/array_state}=="clear*|inactive", ENV{SYSTEMD_READY}="0", GOTO="md_end" > LABEL="md_ignore_state" > > IMPORT{program}="BINDIR/mdadm --detail --no-devices --export $devnode" > -- > 2.14.0.rc0.dirty >