|
|
|
---
|
|
|
|
kpartx/devmapper.c | 41 ++++++++++++++++++++++++++++-------------
|
|
|
|
kpartx/devmapper.h | 4 ++--
|
|
|
|
kpartx/kpartx.c | 16 ++++++++--------
|
|
|
|
libmultipath/config.h | 1 -
|
|
|
|
libmultipath/devmapper.c | 19 +++++++++++++------
|
|
|
|
multipath/main.c | 2 --
|
|
|
|
6 files changed, 51 insertions(+), 32 deletions(-)
|
|
|
|
|
|
|
|
Index: multipath-tools-130222/kpartx/devmapper.c
|
|
|
|
===================================================================
|
|
|
|
--- multipath-tools-130222.orig/kpartx/devmapper.c
|
|
|
|
+++ multipath-tools-130222/kpartx/devmapper.c
|
|
|
|
@@ -14,13 +14,6 @@
|
|
|
|
#define MAX_PREFIX_LEN 8
|
|
|
|
#define PARAMS_SIZE 1024
|
|
|
|
|
|
|
|
-#ifndef LIBDM_API_COOKIE
|
|
|
|
-static inline int dm_task_set_cookie(struct dm_task *dmt, uint32_t *c, int a)
|
|
|
|
-{
|
|
|
|
- return 1;
|
|
|
|
-}
|
|
|
|
-#endif
|
|
|
|
-
|
|
|
|
extern int
|
|
|
|
dm_prereq (char * str, int x, int y, int z)
|
|
|
|
{
|
|
|
|
@@ -60,10 +53,13 @@ dm_prereq (char * str, int x, int y, int
|
|
|
|
}
|
|
|
|
|
|
|
|
extern int
|
|
|
|
-dm_simplecmd (int task, const char *name, int no_flush, uint32_t *cookie, uint16_t udev_flags) {
|
|
|
|
+dm_simplecmd (int task, const char *name, int no_flush, uint16_t udev_flags) {
|
|
|
|
int r = 0;
|
|
|
|
int udev_wait_flag = (task == DM_DEVICE_RESUME ||
|
|
|
|
task == DM_DEVICE_REMOVE);
|
|
|
|
+#ifdef LIBDM_API_COOKIE
|
|
|
|
+ uint32_t cookie = 0;
|
|
|
|
+#endif
|
|
|
|
struct dm_task *dmt;
|
|
|
|
|
|
|
|
if (!(dmt = dm_task_create(task)))
|
|
|
|
@@ -78,10 +74,17 @@ dm_simplecmd (int task, const char *name
|
|
|
|
if (no_flush)
|
|
|
|
dm_task_no_flush(dmt);
|
|
|
|
|
|
|
|
- if (udev_wait_flag && !dm_task_set_cookie(dmt, cookie, ((udev_sync)? 0 : DM_UDEV_DISABLE_LIBRARY_FALLBACK) | udev_flags))
|
|
|
|
+#ifdef LIBDM_API_COOKIE
|
|
|
|
+ if (!udev_sync)
|
|
|
|
+ udev_flags |= DM_UDEV_DISABLE_LIBRARY_FALLBACK;
|
|
|
|
+ if (udev_wait_flag && !dm_task_set_cookie(dmt, &cookie, udev_flags))
|
|
|
|
goto out;
|
|
|
|
+#endif
|
|
|
|
r = dm_task_run(dmt);
|
|
|
|
-
|
|
|
|
+#ifdef LIBDM_API_COOKIE
|
|
|
|
+ if (udev_wait_flag)
|
|
|
|
+ dm_udev_wait(cookie);
|
|
|
|
+#endif
|
|
|
|
out:
|
|
|
|
dm_task_destroy(dmt);
|
|
|
|
return r;
|
|
|
|
@@ -90,10 +93,14 @@ dm_simplecmd (int task, const char *name
|
|
|
|
extern int
|
|
|
|
dm_addmap (int task, const char *name, const char *target,
|
|
|
|
const char *params, uint64_t size, int ro, const char *uuid, int part,
|
|
|
|
- mode_t mode, uid_t uid, gid_t gid, uint32_t *cookie) {
|
|
|
|
+ mode_t mode, uid_t uid, gid_t gid) {
|
|
|
|
int r = 0;
|
|
|
|
struct dm_task *dmt;
|
|
|
|
char *prefixed_uuid = NULL;
|
|
|
|
+#ifdef LIBDM_API_COOKIE
|
|
|
|
+ uint32_t cookie = 0;
|
|
|
|
+ uint16_t udev_flags = 0;
|
|
|
|
+#endif
|
|
|
|
|
|
|
|
if (!(dmt = dm_task_create (task)))
|
|
|
|
return 0;
|
|
|
|
@@ -128,10 +135,18 @@ dm_addmap (int task, const char *name, c
|
|
|
|
|
|
|
|
dm_task_no_open_count(dmt);
|
|
|
|
|
|
|
|
- if (task == DM_DEVICE_CREATE && !dm_task_set_cookie(dmt, cookie, (udev_sync)? 0 : DM_UDEV_DISABLE_LIBRARY_FALLBACK))
|
|
|
|
+#ifdef LIBDM_API_COOKIE
|
|
|
|
+ if (!udev_sync)
|
|
|
|
+ udev_flags = DM_UDEV_DISABLE_LIBRARY_FALLBACK;
|
|
|
|
+ if (task == DM_DEVICE_CREATE &&
|
|
|
|
+ !dm_task_set_cookie(dmt, &cookie, udev_flags))
|
|
|
|
goto addout;
|
|
|
|
+#endif
|
|
|
|
r = dm_task_run (dmt);
|
|
|
|
-
|
|
|
|
+#ifdef LIBDM_API_COOKIE
|
|
|
|
+ if (task == DM_DEVICE_CREATE)
|
|
|
|
+ dm_udev_wait(cookie);
|
|
|
|
+#endif
|
|
|
|
addout:
|
|
|
|
dm_task_destroy (dmt);
|
|
|
|
free(prefixed_uuid);
|
|
|
|
Index: multipath-tools-130222/kpartx/devmapper.h
|
|
|
|
===================================================================
|
|
|
|
--- multipath-tools-130222.orig/kpartx/devmapper.h
|
|
|
|
+++ multipath-tools-130222/kpartx/devmapper.h
|
|
|
|
@@ -11,9 +11,9 @@
|
|
|
|
extern int udev_sync;
|
|
|
|
|
|
|
|
int dm_prereq (char *, int, int, int);
|
|
|
|
-int dm_simplecmd (int, const char *, int, uint32_t *, uint16_t);
|
|
|
|
+int dm_simplecmd (int, const char *, int, uint16_t);
|
|
|
|
int dm_addmap (int, const char *, const char *, const char *, uint64_t,
|
|
|
|
- int, const char *, int, mode_t, uid_t, gid_t, uint32_t *);
|
|
|
|
+ int, const char *, int, mode_t, uid_t, gid_t);
|
|
|
|
int dm_map_present (char *, char **);
|
|
|
|
char * dm_mapname(int major, int minor);
|
|
|
|
dev_t dm_get_first_dep(char *devname);
|
|
|
|
Index: multipath-tools-130222/kpartx/kpartx.c
|
|
|
|
===================================================================
|
|
|
|
--- multipath-tools-130222.orig/kpartx/kpartx.c
|
|
|
|
+++ multipath-tools-130222/kpartx/kpartx.c
|
|
|
|
@@ -224,7 +224,6 @@ main(int argc, char **argv){
|
|
|
|
int hotplug = 0;
|
|
|
|
int loopcreated = 0;
|
|
|
|
struct stat buf;
|
|
|
|
- uint32_t cookie = 0;
|
|
|
|
|
|
|
|
initpts();
|
|
|
|
init_crc32();
|
|
|
|
@@ -300,6 +299,8 @@ main(int argc, char **argv){
|
|
|
|
#ifdef LIBDM_API_COOKIE
|
|
|
|
if (!udev_sync)
|
|
|
|
dm_udev_set_sync_support(0);
|
|
|
|
+ else
|
|
|
|
+ dm_udev_set_sync_support(1);
|
|
|
|
#endif
|
|
|
|
|
|
|
|
if (dm_prereq(DM_TARGET, 0, 0, 0) && (what == ADD || what == DELETE || what == UPDATE)) {
|
|
|
|
@@ -451,7 +452,7 @@ main(int argc, char **argv){
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!dm_simplecmd(DM_DEVICE_REMOVE, partname,
|
|
|
|
- 0, &cookie, 0)) {
|
|
|
|
+ 0, 0)) {
|
|
|
|
r++;
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
@@ -508,7 +509,7 @@ main(int argc, char **argv){
|
|
|
|
if (!dm_addmap(op, partname, DM_TARGET, params,
|
|
|
|
slices[j].size, ro, uuid, j+1,
|
|
|
|
buf.st_mode & 0777, buf.st_uid,
|
|
|
|
- buf.st_gid, &cookie)) {
|
|
|
|
+ buf.st_gid)) {
|
|
|
|
fprintf(stderr, "create/reload failed on %s\n",
|
|
|
|
partname);
|
|
|
|
r++;
|
|
|
|
@@ -516,12 +517,13 @@ main(int argc, char **argv){
|
|
|
|
}
|
|
|
|
if (op == DM_DEVICE_RELOAD &&
|
|
|
|
!dm_simplecmd(DM_DEVICE_RESUME, partname,
|
|
|
|
- 1, &cookie, MPATH_UDEV_RELOAD_FLAG)) {
|
|
|
|
+ 1, MPATH_UDEV_RELOAD_FLAG)) {
|
|
|
|
fprintf(stderr, "resume failed on %s\n",
|
|
|
|
partname);
|
|
|
|
r++;
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
+
|
|
|
|
dm_devn(partname, &slices[j].major,
|
|
|
|
&slices[j].minor);
|
|
|
|
|
|
|
|
@@ -560,7 +562,7 @@ main(int argc, char **argv){
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!dm_simplecmd(DM_DEVICE_REMOVE,
|
|
|
|
- partname, 1, &cookie, 0)) {
|
|
|
|
+ partname, 1, 0)) {
|
|
|
|
r++;
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
@@ -586,9 +588,7 @@ main(int argc, char **argv){
|
|
|
|
}
|
|
|
|
printf("loop deleted : %s\n", device);
|
|
|
|
}
|
|
|
|
-#ifdef LIBDM_API_COOKIE
|
|
|
|
- dm_udev_wait(cookie);
|
|
|
|
-#endif
|
|
|
|
+
|
|
|
|
dm_lib_release();
|
|
|
|
dm_lib_exit();
|
|
|
|
|
|
|
|
Index: multipath-tools-130222/libmultipath/config.h
|
|
|
|
===================================================================
|
|
|
|
--- multipath-tools-130222.orig/libmultipath/config.h
|
|
|
|
+++ multipath-tools-130222/libmultipath/config.h
|
|
|
|
@@ -129,7 +129,6 @@ struct config {
|
|
|
|
uid_t uid;
|
|
|
|
gid_t gid;
|
|
|
|
mode_t mode;
|
|
|
|
- uint32_t cookie;
|
|
|
|
int reassign_maps;
|
|
|
|
int retain_hwhandler;
|
|
|
|
int detect_prio;
|
|
|
|
Index: multipath-tools-130222/libmultipath/devmapper.c
|
|
|
|
===================================================================
|
|
|
|
--- multipath-tools-130222.orig/libmultipath/devmapper.c
|
|
|
|
+++ multipath-tools-130222/libmultipath/devmapper.c
|
|
|
|
@@ -215,6 +215,7 @@ dm_simplecmd (int task, const char *name
|
|
|
|
int r = 0;
|
|
|
|
int udev_wait_flag = (need_sync && (task == DM_DEVICE_RESUME ||
|
|
|
|
task == DM_DEVICE_REMOVE));
|
|
|
|
+ uint32_t cookie = 0;
|
|
|
|
struct dm_task *dmt;
|
|
|
|
|
|
|
|
if (!(dmt = dm_task_create (task)))
|
|
|
|
@@ -233,10 +234,12 @@ dm_simplecmd (int task, const char *name
|
|
|
|
if (do_deferred(deferred_remove))
|
|
|
|
dm_task_deferred_remove(dmt);
|
|
|
|
#endif
|
|
|
|
- if (udev_wait_flag && !dm_task_set_cookie(dmt, &conf->cookie, ((conf->daemon)? DM_UDEV_DISABLE_LIBRARY_FALLBACK : 0) | udev_flags))
|
|
|
|
+ if (udev_wait_flag && !dm_task_set_cookie(dmt, &cookie, ((conf->daemon)? DM_UDEV_DISABLE_LIBRARY_FALLBACK : 0) | udev_flags))
|
|
|
|
goto out;
|
|
|
|
r = dm_task_run (dmt);
|
|
|
|
|
|
|
|
+ if (udev_wait_flag)
|
|
|
|
+ udev_wait(cookie);
|
|
|
|
out:
|
|
|
|
dm_task_destroy (dmt);
|
|
|
|
return r;
|
|
|
|
@@ -264,6 +267,7 @@ dm_addmap (int task, const char *target,
|
|
|
|
int r = 0;
|
|
|
|
struct dm_task *dmt;
|
|
|
|
char *prefixed_uuid = NULL;
|
|
|
|
+ uint32_t cookie = 0;
|
|
|
|
|
|
|
|
if (!(dmt = dm_task_create (task)))
|
|
|
|
return 0;
|
|
|
|
@@ -304,10 +308,12 @@ dm_addmap (int task, const char *target,
|
|
|
|
dm_task_no_open_count(dmt);
|
|
|
|
|
|
|
|
if (task == DM_DEVICE_CREATE &&
|
|
|
|
- !dm_task_set_cookie(dmt, &conf->cookie, (conf->daemon)? DM_UDEV_DISABLE_LIBRARY_FALLBACK : 0))
|
|
|
|
+ !dm_task_set_cookie(dmt, &cookie, (conf->daemon)? DM_UDEV_DISABLE_LIBRARY_FALLBACK : 0))
|
|
|
|
goto freeout;
|
|
|
|
r = dm_task_run (dmt);
|
|
|
|
|
|
|
|
+ if (task == DM_DEVICE_CREATE)
|
|
|
|
+ udev_wait(cookie);
|
|
|
|
freeout:
|
|
|
|
if (prefixed_uuid)
|
|
|
|
FREE(prefixed_uuid);
|
|
|
|
@@ -1366,6 +1372,7 @@ dm_rename (const char * old, char * new)
|
|
|
|
{
|
|
|
|
int r = 0;
|
|
|
|
struct dm_task *dmt;
|
|
|
|
+ uint32_t cookie;
|
|
|
|
|
|
|
|
if (dm_rename_partmaps(old, new))
|
|
|
|
return r;
|
|
|
|
@@ -1381,12 +1388,12 @@ dm_rename (const char * old, char * new)
|
|
|
|
|
|
|
|
dm_task_no_open_count(dmt);
|
|
|
|
|
|
|
|
- if (!dm_task_set_cookie(dmt, &conf->cookie, (conf->daemon)? DM_UDEV_DISABLE_LIBRARY_FALLBACK : 0))
|
|
|
|
- goto out;
|
|
|
|
- if (!dm_task_run(dmt))
|
|
|
|
+ if (!dm_task_set_cookie(dmt, &cookie, (conf->daemon)? DM_UDEV_DISABLE_LIBRARY_FALLBACK : 0))
|
|
|
|
goto out;
|
|
|
|
+ r = dm_task_run(dmt);
|
|
|
|
+
|
|
|
|
+ udev_wait(cookie);
|
|
|
|
|
|
|
|
- r = 1;
|
|
|
|
out:
|
|
|
|
dm_task_destroy(dmt);
|
|
|
|
return r;
|
|
|
|
Index: multipath-tools-130222/multipath/main.c
|
|
|
|
===================================================================
|
|
|
|
--- multipath-tools-130222.orig/multipath/main.c
|
|
|
|
+++ multipath-tools-130222/multipath/main.c
|
|
|
|
@@ -681,8 +681,6 @@ main (int argc, char *argv[])
|
|
|
|
condlog(3, "restart multipath configuration process");
|
|
|
|
|
|
|
|
out:
|
|
|
|
- udev_wait(conf->cookie);
|
|
|
|
-
|
|
|
|
dm_lib_release();
|
|
|
|
dm_lib_exit();
|
|
|
|
|