# Udev rules for device-mapper devices. # See /usr/share/doc/dmsetup/README.udev for further information. KERNEL=="device-mapper", NAME="mapper/control" SUBSYSTEM!="block", GOTO="dm_end" KERNEL!="dm-[0-9]*", GOTO="dm_end" # Decode udev control flags and set environment variables appropriately. # 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. ENV{DM_COOKIE}=="?*", IMPORT{program}="/sbin/dmsetup udevflags $env{DM_COOKIE}" ACTION!="add|change", GOTO="dm_end" # Normally, we operate on "change" events only. But when # coldplugging, there's an "add" event present. We have to # recognize this and do our actions in this particular # situation, too. Also, we don't want the nodes to be # created prematurely on "add" events while not coldplugging. # What idiot thought this was a good idea? #ACTION=="add", ENV{STARTUP}!="1", NAME="", GOTO="dm_end" # "dm" sysfs subdirectory is available in newer versions of DM # only (kernels >= 2.6.29). We have to check for its existence # and use dmsetup tool instead to get the DM name, uuid and # suspended state if the "dm" subdirectory is not present. # The "suspended" item was added even later (kernels >= 2.6.31), # so we also have to call dmsetup if the kernel version used # is in between these releases. TEST=="dm", ENV{DM_NAME}="$attr{dm/name}", ENV{DM_UUID}="$attr{dm/uuid}", ENV{DM_SUSPENDED}="$attr{dm/suspended}" TEST!="dm", IMPORT{program}="/sbin/dmsetup info -j %M -m %m -c --nameprefixes --noheadings --rows -o name,uuid,suspended" ENV{DM_SUSPENDED}!="?*", IMPORT{program}="/sbin/dmsetup info -j %M -m %m -c --nameprefixes --noheadings --rows -o suspended" # dmsetup tool provides suspended state information in textual # form with values "Suspended"/"Active". We translate it to # 0/1 respectively to be consistent with sysfs values. ENV{DM_SUSPENDED}=="Active", ENV{DM_SUSPENDED}="0" ENV{DM_SUSPENDED}=="Suspended", ENV{DM_SUSPENDED}="1" ENV{DM_NAME}=="?*", NAME="mapper/$env{DM_NAME}", SYMLINK+="$kernel" ENV{DM_UDEV_RULES}="1" # We have to ignore further rule application for inappropriate events # and devices. But still send the notification if cookie exists. ENV{DM_UUID}=="mpath-?*", ENV{DM_ACTION}=="PATH_FAILED", ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}="1" ENV{DM_UUID}=="CRYPT-TEMP-?*", ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}="1" ENV{DM_UUID}!="?*", ENV{DM_NAME}=="temporary-cryptsetup-?*", ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}="1" ENV{DM_SUSPENDED}=="1", ENV{DM_UDEV_DISABLE_DISK_RULES_FLAG}="1" ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}!="", ENV{DM_UDEV_DISABLE_DISK_RULES_FLAG}="1" LABEL="dm_end"