166 lines
4.5 KiB
Diff
166 lines
4.5 KiB
Diff
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||
|
From: Martin Wilck <mwilck@suse.com>
|
||
|
Date: Tue, 15 Sep 2020 17:57:16 +0200
|
||
|
Subject: [PATCH] multipath-tools: don't call dm_lib_release() any more
|
||
|
|
||
|
The purpose of dm_lib_release() is to release stacked device node
|
||
|
operations in libdevmapper. This is functionality we don't need and
|
||
|
use any more, as we rely on udev to set up device nodes and symlinks.
|
||
|
|
||
|
We always set DM_UDEV_DISABLE_LIBRARY_FALLBACK when we run dm tasks.
|
||
|
In the standard CREATE and REMOVE cases, libdevmapper doesn't
|
||
|
stack any operations if this flag is set. The only exceptions are
|
||
|
|
||
|
a) RESUME operations with DM_ADD_NODE_ON_RESUME set. This happens
|
||
|
implicity when we create new maps
|
||
|
b) RENAME operations
|
||
|
|
||
|
In both cases, we call dm_udev_wait() after the libdm operation, which
|
||
|
calls update_devs() and thus has the same effect as dm_lib_release(),
|
||
|
cleaning out stacked operations.
|
||
|
|
||
|
OTOH, dm_lib_releases() accesses static variables in libdevmapper, so
|
||
|
calling it might be racy.
|
||
|
|
||
|
Drop the calls to dm_lib_release().
|
||
|
|
||
|
Reviewed-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||
|
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||
|
---
|
||
|
kpartx/kpartx.c | 1 -
|
||
|
libmpathpersist/mpath_persist.c | 1 -
|
||
|
multipath/main.c | 1 -
|
||
|
multipathd/cli_handlers.c | 2 --
|
||
|
multipathd/main.c | 15 ++-------------
|
||
|
5 files changed, 2 insertions(+), 18 deletions(-)
|
||
|
|
||
|
diff --git a/kpartx/kpartx.c b/kpartx/kpartx.c
|
||
|
index 4a0aae93..6a7933fa 100644
|
||
|
--- a/kpartx/kpartx.c
|
||
|
+++ b/kpartx/kpartx.c
|
||
|
@@ -681,7 +681,6 @@ main(int argc, char **argv){
|
||
|
}
|
||
|
|
||
|
end:
|
||
|
- dm_lib_release();
|
||
|
dm_lib_exit();
|
||
|
|
||
|
return r;
|
||
|
diff --git a/libmpathpersist/mpath_persist.c b/libmpathpersist/mpath_persist.c
|
||
|
index 4b3f3e0d..cc4a088d 100644
|
||
|
--- a/libmpathpersist/mpath_persist.c
|
||
|
+++ b/libmpathpersist/mpath_persist.c
|
||
|
@@ -56,7 +56,6 @@ mpath_lib_init (void)
|
||
|
int
|
||
|
mpath_lib_exit (struct config *conf)
|
||
|
{
|
||
|
- dm_lib_release();
|
||
|
dm_lib_exit();
|
||
|
cleanup_prio();
|
||
|
cleanup_checkers();
|
||
|
diff --git a/multipath/main.c b/multipath/main.c
|
||
|
index 9e920d89..dc4974b9 100644
|
||
|
--- a/multipath/main.c
|
||
|
+++ b/multipath/main.c
|
||
|
@@ -1063,7 +1063,6 @@ main (int argc, char *argv[])
|
||
|
condlog(3, "restart multipath configuration process");
|
||
|
|
||
|
out:
|
||
|
- dm_lib_release();
|
||
|
dm_lib_exit();
|
||
|
|
||
|
cleanup_foreign();
|
||
|
diff --git a/multipathd/cli_handlers.c b/multipathd/cli_handlers.c
|
||
|
index 235e2a2e..54635738 100644
|
||
|
--- a/multipathd/cli_handlers.c
|
||
|
+++ b/multipathd/cli_handlers.c
|
||
|
@@ -860,7 +860,6 @@ cli_add_map (void * v, char ** reply, int * len, void * data)
|
||
|
!= CP_OK)
|
||
|
condlog(2, "%s: coalesce_paths failed",
|
||
|
param);
|
||
|
- dm_lib_release();
|
||
|
FREE(refwwid);
|
||
|
}
|
||
|
} /*we attempt to create device only once*/
|
||
|
@@ -1032,7 +1031,6 @@ cli_resize(void *v, char **reply, int *len, void *data)
|
||
|
if (resize_map(mpp, size, vecs) != 0)
|
||
|
return 1;
|
||
|
|
||
|
- dm_lib_release();
|
||
|
if (setup_multipath(vecs, mpp) != 0)
|
||
|
return 1;
|
||
|
sync_map_state(mpp);
|
||
|
diff --git a/multipathd/main.c b/multipathd/main.c
|
||
|
index d1f8cc1b..5cc34357 100644
|
||
|
--- a/multipathd/main.c
|
||
|
+++ b/multipathd/main.c
|
||
|
@@ -510,7 +510,6 @@ retry:
|
||
|
sleep(1);
|
||
|
goto retry;
|
||
|
}
|
||
|
- dm_lib_release();
|
||
|
|
||
|
fail:
|
||
|
if (new_map && (retries < 0 || wait_for_events(mpp, vecs))) {
|
||
|
@@ -611,10 +610,8 @@ coalesce_maps(struct vectors *vecs, vector nmpv)
|
||
|
vector_del_slot(ompv, i);
|
||
|
i--;
|
||
|
}
|
||
|
- else {
|
||
|
- dm_lib_release();
|
||
|
+ else
|
||
|
condlog(2, "%s devmap removed", ompp->alias);
|
||
|
- }
|
||
|
} else if (reassign_maps) {
|
||
|
condlog(3, "%s: Reassign existing device-mapper"
|
||
|
" devices", ompp->alias);
|
||
|
@@ -660,10 +657,8 @@ flush_map(struct multipath * mpp, struct vectors * vecs, int nopaths)
|
||
|
}
|
||
|
return r;
|
||
|
}
|
||
|
- else {
|
||
|
- dm_lib_release();
|
||
|
+ else
|
||
|
condlog(2, "%s: map flushed", mpp->alias);
|
||
|
- }
|
||
|
|
||
|
orphan_paths(vecs->pathvec, mpp, "map flushed");
|
||
|
remove_map_and_stop_waiter(mpp, vecs);
|
||
|
@@ -1080,7 +1075,6 @@ rescan:
|
||
|
else
|
||
|
goto fail_map;
|
||
|
}
|
||
|
- dm_lib_release();
|
||
|
|
||
|
if ((mpp->action == ACT_CREATE ||
|
||
|
(mpp->action == ACT_NOTHING && start_waiter && !mpp->waiter)) &&
|
||
|
@@ -1947,8 +1941,6 @@ int reload_and_sync_map(struct multipath *mpp,
|
||
|
{
|
||
|
if (reload_map(vecs, mpp, refresh, 1))
|
||
|
return 1;
|
||
|
-
|
||
|
- dm_lib_release();
|
||
|
if (setup_multipath(vecs, mpp) != 0)
|
||
|
return 2;
|
||
|
sync_map_state(mpp);
|
||
|
@@ -2631,8 +2623,6 @@ configure (struct vectors * vecs)
|
||
|
goto fail;
|
||
|
}
|
||
|
|
||
|
- dm_lib_release();
|
||
|
-
|
||
|
if (should_exit())
|
||
|
goto fail;
|
||
|
|
||
|
@@ -3115,7 +3105,6 @@ child (__attribute__((unused)) void *param)
|
||
|
if (poll_dmevents)
|
||
|
cleanup_dmevent_waiter();
|
||
|
|
||
|
- dm_lib_release();
|
||
|
dm_lib_exit();
|
||
|
|
||
|
/* We're done here */
|
||
|
--
|
||
|
2.17.2
|
||
|
|