108 lines
4.6 KiB
Diff
108 lines
4.6 KiB
Diff
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||
|
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||
|
Date: Wed, 12 Apr 2017 09:07:51 -0500
|
||
|
Subject: [PATCH] multipath: attempt at common multipath.rules
|
||
|
|
||
|
This is a proposal to try and bring the Redhat and SuSE multipath.rules
|
||
|
closer. There are a couple of changes that I'd like some input on.
|
||
|
|
||
|
The big change is moving the kpartx call into the multipath rules. Half
|
||
|
of the current kpartx.rules file is about creating symlinks for multiple
|
||
|
types of dm devices. The other half auto-creates kpartx devices on top
|
||
|
of multipath devices. Since it is only creating kpartx devices on top of
|
||
|
multipath devices, I've moved the these rules into multipath.rules, or
|
||
|
rather, I've replaced them with the redhat rules in multipath.rules. The
|
||
|
biggest difference is the kpartx isn't run on every reload. It works
|
||
|
with the 11-dm-mpath.rules code to not run kpartx on multipathd
|
||
|
generated reloads or when there aren't any working paths. It does
|
||
|
remember if it didn't get to run kpartx when it was supposed to (because
|
||
|
there were no valid paths or the device was suspended) and will make
|
||
|
sure to run it on the next possible uevent.
|
||
|
|
||
|
The other change is the redhat multipath rules remove the partition
|
||
|
device nodes for devices claimed by multipath. The udev rule will only
|
||
|
do this one time (both to keep from running partx on every event, and so
|
||
|
that if users manually reread the partition table, we don't keep
|
||
|
removing them when clearly they are wanted). Redhat does this because we
|
||
|
had multiple customer issues where they were using the scsi partitions
|
||
|
instead of the kpartx devices. Obviously, with setting the partition
|
||
|
devices to not ready and clearing their fs_type, this isn't essential,
|
||
|
but it has helped make customers do the right thing.
|
||
|
|
||
|
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||
|
---
|
||
|
kpartx/kpartx.rules | 8 --------
|
||
|
multipath/multipath.rules | 27 ++++++++++++++++++++++++---
|
||
|
2 files changed, 24 insertions(+), 11 deletions(-)
|
||
|
|
||
|
diff --git a/kpartx/kpartx.rules b/kpartx/kpartx.rules
|
||
|
index a958791..906e320 100644
|
||
|
--- a/kpartx/kpartx.rules
|
||
|
+++ b/kpartx/kpartx.rules
|
||
|
@@ -34,12 +34,4 @@ ENV{ID_FS_LABEL_ENC}=="?*", IMPORT{db}="ID_FS_LABEL_ENC"
|
||
|
ENV{ID_FS_USAGE}=="filesystem|other", ENV{ID_FS_LABEL_ENC}=="?*", \
|
||
|
SYMLINK+="disk/by-label/$env{ID_FS_LABEL_ENC}"
|
||
|
|
||
|
-# Create dm tables for partitions
|
||
|
-ENV{DM_ACTION}=="PATH_FAILED|PATH_REINSTATED", GOTO="kpartx_end"
|
||
|
-ENV{DM_NR_VALID_PATHS}=="0", GOTO="kpartx_end"
|
||
|
-ENV{ENV{DM_UDEV_PRIMARY_SOURCE_FLAG}!="1", IMPORT{db}="DM_SUBSYSTEM_UDEV_FLAG1"
|
||
|
-ENV{DM_SUBSYSTEM_UDEV_FLAG1}=="1", GOTO="kpartx_end"
|
||
|
-ENV{DM_STATE}!="SUSPENDED", ENV{DM_UUID}=="mpath-*", \
|
||
|
- RUN+="/sbin/kpartx -un -p -part /dev/$name"
|
||
|
-
|
||
|
LABEL="kpartx_end"
|
||
|
diff --git a/multipath/multipath.rules b/multipath/multipath.rules
|
||
|
index 86defc0..616a04c 100644
|
||
|
--- a/multipath/multipath.rules
|
||
|
+++ b/multipath/multipath.rules
|
||
|
@@ -1,13 +1,13 @@
|
||
|
# Set DM_MULTIPATH_DEVICE_PATH if the device should be handled by multipath
|
||
|
SUBSYSTEM!="block", GOTO="end_mpath"
|
||
|
ACTION!="add|change", GOTO="end_mpath"
|
||
|
-KERNEL!="sd*|dasd*", GOTO="end_mpath"
|
||
|
-
|
||
|
+KERNEL!="sd*|dasd*|rbd*|dm-*", GOTO="end_mpath"
|
||
|
IMPORT{cmdline}="nompath"
|
||
|
ENV{nompath}=="?*", GOTO="end_mpath"
|
||
|
IMPORT{cmdline}="multipath"
|
||
|
ENV{multipath}=="off", GOTO="end_mpath"
|
||
|
|
||
|
+KERNEL=="dm-*", GOTO="check_kpartx"
|
||
|
ENV{DEVTYPE}!="partition", GOTO="test_dev"
|
||
|
IMPORT{parent}="DM_MULTIPATH_DEVICE_PATH"
|
||
|
ENV{DM_MULTIPATH_DEVICE_PATH}=="1", ENV{ID_FS_TYPE}="none", \
|
||
|
@@ -21,7 +21,28 @@ TEST!="$env{MPATH_SBIN_PATH}/multipath", ENV{MPATH_SBIN_PATH}="/usr/sbin"
|
||
|
|
||
|
ENV{DM_MULTIPATH_DEVICE_PATH}!="1", \
|
||
|
PROGRAM=="$env{MPATH_SBIN_PATH}/multipath -u %k", \
|
||
|
- ENV{DM_MULTIPATH_DEVICE_PATH}="1", ENV{ID_FS_TYPE}="none", \
|
||
|
+ ENV{DM_MULTIPATH_DEVICE_PATH}="1", ENV{ID_FS_TYPE}="mpath_member", \
|
||
|
ENV{SYSTEMD_READY}="0"
|
||
|
|
||
|
+ENV{DM_MULTIPATH_DEVICE_PATH}!="1", GOTO="end_mpath"
|
||
|
+
|
||
|
+IMPORT{db}="DM_MULTIPATH_WIPE_PARTS"
|
||
|
+ENV{DM_MULTIPATH_WIPE_PARTS}!="1", ENV{DM_MULTIPATH_WIPE_PARTS}="1", \
|
||
|
+ RUN+="/sbin/partx -d --nr 1-1024 $env{DEVNAME}"
|
||
|
+GOTO="end_mpath"
|
||
|
+
|
||
|
+LABEL="check_kpartx"
|
||
|
+
|
||
|
+IMPORT{db}="DM_MULTIPATH_NEED_KPARTX"
|
||
|
+ENV{DM_UDEV_PRIMARY_SOURCE_FLAG}!="1", IMPORT{db}="DM_SUBSYSTEM_UDEV_FLAG1"
|
||
|
+ENV{DM_SUBSYSTEM_UDEV_FLAG1}=="1", GOTO="end_mpath"
|
||
|
+ACTION!="change", GOTO="end_mpath"
|
||
|
+ENV{DM_UUID}!="mpath-?*", GOTO="end_mpath"
|
||
|
+ENV{DM_ACTIVATION}=="1", ENV{DM_MULTIPATH_NEED_KPARTX}="1"
|
||
|
+ENV{DM_SUSPENDED}=="1", GOTO="end_mpath"
|
||
|
+ENV{DM_ACTION}=="PATH_FAILED", GOTO="end_mpath"
|
||
|
+ENV{DM_ACTIVATION}!="1", ENV{DM_MULTIPATH_NEED_KPARTX}!="1", GOTO="end_mpath"
|
||
|
+RUN+="/sbin/kpartx -un -p -part /dev/$name"
|
||
|
+ENV{DM_MULTIPATH_NEED_KPARTX}=""
|
||
|
+
|
||
|
LABEL="end_mpath"
|
||
|
--
|
||
|
2.7.4
|
||
|
|