On 3/1/24 23:40, Martin Wilck wrote: > We use DM_UDEV_DISABLE_OTHER_RULES_FLAG to tell upper non-DM layers > to keep their hands off the device in question, for any reason. > One possible reason is that the device is supended; another is that > the cookie carries the flag of the same name. > > DM_SUSPENDED is not restored from the db, but evaluated anew for every > uevent. Therefore DM_UDEV_DISABLE_OTHER_RULES_FLAG shouldn't be > restored, either. Use a new variable DM_COOKIE_DISABLE_OTHER_RULES_FLAG > to save and restore the original value from the cookie. > > Signed-off-by: Martin Wilck <mwilck@xxxxxxxx> > --- > udev/10-dm.rules.in | 12 ++++++++++-- > 1 file changed, 10 insertions(+), 2 deletions(-) > > diff --git a/udev/10-dm.rules.in b/udev/10-dm.rules.in > index c08d829..ef36209 100644 > --- a/udev/10-dm.rules.in > +++ b/udev/10-dm.rules.in > @@ -48,7 +48,14 @@ ACTION!="add|change", GOTO="dm_end" > # These flags are encoded in DM_COOKIE variable that was introduced in > # kernel version 2.6.31. Therefore, we can use this feature with > # kernels >= 2.6.31 only. Cookie is not decoded for remove event. > -ENV{DM_COOKIE}=="?*", IMPORT{program}="(DM_EXEC)/dmsetup udevflags $env{DM_COOKIE}" > +ENV{DM_COOKIE}!="?*", GOTO="dm_no_cookie" > +IMPORT{program}="(DM_EXEC)/dmsetup udevflags $env{DM_COOKIE}" > + > +# Store the original flag from the cookie as DM_COOKIE_DISABLE_OTHER_RULES_FLAG > +# in the udev db. DM_UDEV_DISABLE_OTHER_RULES_FLAG will be or'd with other > +# conditions for use by upper, non-dm layers. > +ENV{DM_COOKIE_DISABLE_OTHER_RULES_FLAG}="%E{DM_UDEV_DISABLE_OTHER_RULES_FLAG}" > +LABEL="dm_no_cookie" > > # There is no cookie set nor any flags encoded in events not originating > # in libdevmapper so we need to detect this and try to behave correctly. > @@ -58,12 +65,13 @@ ENV{DM_UDEV_PRIMARY_SOURCE_FLAG}=="1", ENV{DM_ACTIVATION}="1", GOTO="dm_flags_do > IMPORT{db}="DM_UDEV_DISABLE_DM_RULES_FLAG" > IMPORT{db}="DM_UDEV_DISABLE_SUBSYSTEM_RULES_FLAG" > IMPORT{db}="DM_UDEV_DISABLE_DISK_RULES_FLAG" > -IMPORT{db}="DM_UDEV_DISABLE_OTHER_RULES_FLAG" > +IMPORT{db}="DM_COOKIE_DISABLE_OTHER_RULES_FLAG" > IMPORT{db}="DM_UDEV_LOW_PRIORITY_FLAG" > IMPORT{db}="DM_UDEV_DISABLE_LIBRARY_FALLBACK_FLAG" > IMPORT{db}="DM_UDEV_PRIMARY_SOURCE_FLAG" > IMPORT{db}="DM_UDEV_FLAG7" > IMPORT{db}="DM_UDEV_RULES_VSN" > +ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}="%E{DM_COOKIE_DISABLE_OTHER_RULES_FLAG}" > LABEL="dm_flags_done" > > # Normally, we operate on "change" events. But when coldplugging, there's an Looks good... -- Peter