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.
286 lines
8.4 KiB
286 lines
8.4 KiB
--- |
|
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();
|
|
|