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 -- 2.43.2