2b0cd7cceb
Rebased on top of Martin Wilck's queue of ACKed upstream commits * https://github.com/openSUSE/multipath-tools/tree/upstream-queue * All previous patches have been reordered, with the exception of 0011-libdmmp-Add-support-for-upcoming-json-c-0.14.0.patch which has been replaced with 0029-fix-boolean-value-with-json-c-0.14.patch Modify 0054-RH-add-mpathconf.patch * remove default enable_foreign and property blacklist_exceptions settings, and deal with the builtin default change from 0031-libmultipath-set-enable_foreign-to-NONE-by-default.patch. Fixes bz #1853668 Add 0048-Makefile.inc-trim-extra-information-from-systemd-ver.patch Add 0049-kpartx-fix-Wsign-compare-error.patch * The above two patches have been submitted upstream
90 lines
2.4 KiB
Diff
90 lines
2.4 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Benjamin Marzinski <bmarzins@redhat.com>
|
|
Date: Tue, 19 May 2020 12:08:40 -0500
|
|
Subject: [PATCH] libmultipath: make libmp_dm_init optional
|
|
|
|
Move dm_initialized out of libmp_dm_task_create(), and add
|
|
a function skip_libmp_dm_init() so that users of libmultipath can skip
|
|
initializing device-mapper. This is needed for other programs that
|
|
use libmultipath (or a library that depends on it) but want to control
|
|
how device-mapper is set up.
|
|
|
|
Also make dm_prereq a global function.
|
|
|
|
Reviewed-by: Martin Wilck <mwilck@suse.com>
|
|
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
|
---
|
|
libmultipath/devmapper.c | 17 +++++++++++++----
|
|
libmultipath/devmapper.h | 3 ++-
|
|
2 files changed, 15 insertions(+), 5 deletions(-)
|
|
|
|
diff --git a/libmultipath/devmapper.c b/libmultipath/devmapper.c
|
|
index 13a1cf53..7ed494a1 100644
|
|
--- a/libmultipath/devmapper.c
|
|
+++ b/libmultipath/devmapper.c
|
|
@@ -33,6 +33,8 @@
|
|
#define MAX_WAIT 5
|
|
#define LOOPS_PER_SEC 5
|
|
|
|
+static pthread_once_t dm_initialized = PTHREAD_ONCE_INIT;
|
|
+
|
|
static int dm_conf_verbosity;
|
|
|
|
#ifdef LIBDM_API_DEFERRED
|
|
@@ -229,7 +231,7 @@ dm_tgt_prereq (unsigned int *ver)
|
|
return 1;
|
|
}
|
|
|
|
-static int dm_prereq(unsigned int *v)
|
|
+int dm_prereq(unsigned int *v)
|
|
{
|
|
if (dm_lib_prereq())
|
|
return 1;
|
|
@@ -243,7 +245,7 @@ void libmp_udev_set_sync_support(int on)
|
|
libmp_dm_udev_sync = !!on;
|
|
}
|
|
|
|
-void libmp_dm_init(void)
|
|
+static void libmp_dm_init(void)
|
|
{
|
|
struct config *conf;
|
|
int verbosity;
|
|
@@ -262,11 +264,18 @@ void libmp_dm_init(void)
|
|
dm_udev_set_sync_support(libmp_dm_udev_sync);
|
|
}
|
|
|
|
+static void _do_skip_libmp_dm_init(void)
|
|
+{
|
|
+}
|
|
+
|
|
+void skip_libmp_dm_init(void)
|
|
+{
|
|
+ pthread_once(&dm_initialized, _do_skip_libmp_dm_init);
|
|
+}
|
|
+
|
|
struct dm_task*
|
|
libmp_dm_task_create(int task)
|
|
{
|
|
- static pthread_once_t dm_initialized = PTHREAD_ONCE_INIT;
|
|
-
|
|
pthread_once(&dm_initialized, libmp_dm_init);
|
|
return dm_task_create(task);
|
|
}
|
|
diff --git a/libmultipath/devmapper.h b/libmultipath/devmapper.h
|
|
index 7557a86b..17fc9faf 100644
|
|
--- a/libmultipath/devmapper.h
|
|
+++ b/libmultipath/devmapper.h
|
|
@@ -28,7 +28,8 @@
|
|
#define UUID_PREFIX_LEN (sizeof(UUID_PREFIX) - 1)
|
|
|
|
void dm_init(int verbosity);
|
|
-void libmp_dm_init(void);
|
|
+int dm_prereq(unsigned int *v);
|
|
+void skip_libmp_dm_init(void);
|
|
void libmp_udev_set_sync_support(int on);
|
|
struct dm_task *libmp_dm_task_create(int task);
|
|
int dm_drv_version (unsigned int * version);
|
|
--
|
|
2.17.2
|
|
|