99 lines
2.9 KiB
Diff
99 lines
2.9 KiB
Diff
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||
|
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||
|
Date: Fri, 19 Jan 2018 22:35:26 -0600
|
||
|
Subject: [PATCH] multipathd: remove coalesce_paths from ev_add_map
|
||
|
|
||
|
If ev_add_map is called for a multipath device that doesn't exist in
|
||
|
device-mapper, it will call coalesce_paths to add it. This doesn't work
|
||
|
and hasn't for years. It doesn't add the map to the mpvec, or start up
|
||
|
waiters, or do any of the necessary things that do get done when you
|
||
|
call ev_add_map for a map that does exist in device mapper.
|
||
|
|
||
|
Fortunately, there are only two things that call ev_add_map. uev_add_map
|
||
|
makes sure that the device does exist in device-mapper before calling
|
||
|
ev_add_map, and cli_add_map creates the device first and then calls
|
||
|
ev_add_map, if the device doesn't exist.
|
||
|
|
||
|
So, there is no reason for coalesce_paths to be in ev_add_map. This
|
||
|
removes it.
|
||
|
|
||
|
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||
|
---
|
||
|
multipathd/main.c | 46 ++++++++++++++--------------------------------
|
||
|
1 file changed, 14 insertions(+), 32 deletions(-)
|
||
|
|
||
|
diff --git a/multipathd/main.c b/multipathd/main.c
|
||
|
index 27cf234..dbf9890 100644
|
||
|
--- a/multipathd/main.c
|
||
|
+++ b/multipathd/main.c
|
||
|
@@ -412,18 +412,19 @@ uev_add_map (struct uevent * uev, struct vectors * vecs)
|
||
|
return rc;
|
||
|
}
|
||
|
|
||
|
+/*
|
||
|
+ * ev_add_map expects that the multipath device already exists in kernel
|
||
|
+ * before it is called. It just adds a device to multipathd or updates an
|
||
|
+ * existing device.
|
||
|
+ */
|
||
|
int
|
||
|
ev_add_map (char * dev, char * alias, struct vectors * vecs)
|
||
|
{
|
||
|
- char * refwwid;
|
||
|
struct multipath * mpp;
|
||
|
- int map_present;
|
||
|
- int r = 1, delayed_reconfig, reassign_maps;
|
||
|
+ int delayed_reconfig, reassign_maps;
|
||
|
struct config *conf;
|
||
|
|
||
|
- map_present = dm_map_present(alias);
|
||
|
-
|
||
|
- if (map_present && !dm_is_mpath(alias)) {
|
||
|
+ if (!dm_is_mpath(alias)) {
|
||
|
condlog(4, "%s: not a multipath map", alias);
|
||
|
return 0;
|
||
|
}
|
||
|
@@ -468,33 +469,14 @@ ev_add_map (char * dev, char * alias, struct vectors * vecs)
|
||
|
/*
|
||
|
* now we can register the map
|
||
|
*/
|
||
|
- if (map_present) {
|
||
|
- if ((mpp = add_map_without_path(vecs, alias))) {
|
||
|
- sync_map_state(mpp);
|
||
|
- condlog(2, "%s: devmap %s registered", alias, dev);
|
||
|
- return 0;
|
||
|
- } else {
|
||
|
- condlog(2, "%s: uev_add_map failed", dev);
|
||
|
- return 1;
|
||
|
- }
|
||
|
- }
|
||
|
- r = get_refwwid(CMD_NONE, dev, DEV_DEVMAP, vecs->pathvec, &refwwid);
|
||
|
-
|
||
|
- if (refwwid) {
|
||
|
- r = coalesce_paths(vecs, NULL, refwwid, FORCE_RELOAD_NONE,
|
||
|
- CMD_NONE);
|
||
|
- dm_lib_release();
|
||
|
+ if ((mpp = add_map_without_path(vecs, alias))) {
|
||
|
+ sync_map_state(mpp);
|
||
|
+ condlog(2, "%s: devmap %s registered", alias, dev);
|
||
|
+ return 0;
|
||
|
+ } else {
|
||
|
+ condlog(2, "%s: ev_add_map failed", dev);
|
||
|
+ return 1;
|
||
|
}
|
||
|
-
|
||
|
- if (!r)
|
||
|
- condlog(2, "%s: devmap %s added", alias, dev);
|
||
|
- else if (r == 2)
|
||
|
- condlog(2, "%s: uev_add_map %s blacklisted", alias, dev);
|
||
|
- else
|
||
|
- condlog(0, "%s: uev_add_map %s failed", alias, dev);
|
||
|
-
|
||
|
- FREE(refwwid);
|
||
|
- return r;
|
||
|
}
|
||
|
|
||
|
static int
|
||
|
--
|
||
|
2.7.4
|
||
|
|