You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
107 lines
4.0 KiB
107 lines
4.0 KiB
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 |
|
From: Benjamin Marzinski <bmarzins@redhat.com> |
|
Date: Wed, 15 Oct 2014 10:39:30 -0500 |
|
Subject: [PATCH] RH: don't start without a config file |
|
|
|
If /etc/multipath.conf doesn't exist, don't start multipathd and blacklist |
|
all devices when running multipath. A completely blank configuration file |
|
is almost never what users want. Also, people may have the multipath |
|
packages installed but don't want to use them. This patch provides a |
|
simple way to disable multipath. Simply removing or renaming |
|
/etc/multipath.conf will keep multipath from doing anything. |
|
|
|
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com> |
|
--- |
|
libmultipath/config.c | 13 +++++++++++++ |
|
libmultipath/config.h | 1 + |
|
multipath/multipath.rules | 1 + |
|
multipathd/multipathd.8 | 2 ++ |
|
multipathd/multipathd.service | 1 + |
|
multipathd/multipathd.socket | 1 + |
|
6 files changed, 19 insertions(+) |
|
|
|
diff --git a/libmultipath/config.c b/libmultipath/config.c |
|
index 30046a17..5f35c3d3 100644 |
|
--- a/libmultipath/config.c |
|
+++ b/libmultipath/config.c |
|
@@ -895,6 +895,19 @@ int _init_config (const char *file, struct config *conf) |
|
goto out; |
|
} |
|
factorize_hwtable(conf->hwtable, builtin_hwtable_size, file); |
|
+ } else { |
|
+ condlog(0, "/etc/multipath.conf does not exist, blacklisting all devices."); |
|
+ if (conf->blist_devnode == NULL) { |
|
+ conf->blist_devnode = vector_alloc(); |
|
+ if (!conf->blist_devnode) { |
|
+ condlog(0, "cannot allocate blacklist\n"); |
|
+ goto out; |
|
+ } |
|
+ } |
|
+ if (store_ble(conf->blist_devnode, ".*", ORIGIN_NO_CONFIG)) { |
|
+ condlog(0, "cannot store default no-config blacklist\n"); |
|
+ goto out; |
|
+ } |
|
} |
|
|
|
conf->processed_main_config = 1; |
|
diff --git a/libmultipath/config.h b/libmultipath/config.h |
|
index 933fe0d1..5f01c1fc 100644 |
|
--- a/libmultipath/config.h |
|
+++ b/libmultipath/config.h |
|
@@ -9,6 +9,7 @@ |
|
|
|
#define ORIGIN_DEFAULT 0 |
|
#define ORIGIN_CONFIG 1 |
|
+#define ORIGIN_NO_CONFIG 2 |
|
|
|
enum devtypes { |
|
DEV_NONE, |
|
diff --git a/multipath/multipath.rules b/multipath/multipath.rules |
|
index 9df11a95..0486bf70 100644 |
|
--- a/multipath/multipath.rules |
|
+++ b/multipath/multipath.rules |
|
@@ -9,6 +9,7 @@ IMPORT{cmdline}="nompath" |
|
ENV{nompath}=="?*", GOTO="end_mpath" |
|
IMPORT{cmdline}="multipath" |
|
ENV{multipath}=="off", GOTO="end_mpath" |
|
+TEST!="/etc/multipath.conf", GOTO="end_mpath" |
|
|
|
ENV{DEVTYPE}!="partition", GOTO="test_dev" |
|
IMPORT{parent}="DM_MULTIPATH_DEVICE_PATH" |
|
diff --git a/multipathd/multipathd.8 b/multipathd/multipathd.8 |
|
index 048a838d..8bd47a80 100644 |
|
--- a/multipathd/multipathd.8 |
|
+++ b/multipathd/multipathd.8 |
|
@@ -39,6 +39,8 @@ map regains its maximum performance and redundancy. |
|
This daemon executes the external \fBmultipath\fR tool when events occur. |
|
In turn, the multipath tool signals the multipathd daemon when it is done with |
|
devmap reconfiguration, so that it can refresh its failed path list. |
|
+ |
|
+In this Linux distribution, multipathd does not run unless a /etc/multipath.conf file exists. |
|
. |
|
. |
|
.\" ---------------------------------------------------------------------------- |
|
diff --git a/multipathd/multipathd.service b/multipathd/multipathd.service |
|
index 0b2ac814..6d57c7e8 100644 |
|
--- a/multipathd/multipathd.service |
|
+++ b/multipathd/multipathd.service |
|
@@ -4,6 +4,7 @@ Wants=systemd-udev-trigger.service systemd-udev-settle.service |
|
Before=iscsi.service iscsid.service lvm2-activation-early.service |
|
Before=local-fs-pre.target blk-availability.service shutdown.target |
|
After=multipathd.socket systemd-udev-trigger.service systemd-udev-settle.service |
|
+ConditionPathExists=/etc/multipath.conf |
|
DefaultDependencies=no |
|
Conflicts=shutdown.target |
|
ConditionKernelCommandLine=!nompath |
|
diff --git a/multipathd/multipathd.socket b/multipathd/multipathd.socket |
|
index c777e5e3..3c20a2ff 100644 |
|
--- a/multipathd/multipathd.socket |
|
+++ b/multipathd/multipathd.socket |
|
@@ -1,6 +1,7 @@ |
|
[Unit] |
|
Description=multipathd control socket |
|
DefaultDependencies=no |
|
+ConditionPathExists=/etc/multipath.conf |
|
ConditionKernelCommandLine=!nompath |
|
ConditionKernelCommandLine=!multipath=off |
|
ConditionVirtualization=!container
|
|
|