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.
246 lines
8.7 KiB
246 lines
8.7 KiB
--- |
|
kpartx/devmapper.c | 4 ++-- |
|
kpartx/devmapper.h | 8 +++++++- |
|
kpartx/kpartx.c | 6 +++--- |
|
libmultipath/configure.c | 4 ++-- |
|
libmultipath/devmapper.c | 26 ++++++++++++++------------ |
|
libmultipath/devmapper.h | 10 ++++++++-- |
|
multipathd/cli_handlers.c | 4 ++-- |
|
7 files changed, 38 insertions(+), 24 deletions(-) |
|
|
|
Index: multipath-tools-130222/kpartx/devmapper.c |
|
=================================================================== |
|
--- multipath-tools-130222.orig/kpartx/devmapper.c |
|
+++ multipath-tools-130222/kpartx/devmapper.c |
|
@@ -60,7 +60,7 @@ dm_prereq (char * str, int x, int y, int |
|
} |
|
|
|
extern int |
|
-dm_simplecmd (int task, const char *name, int no_flush, uint32_t *cookie) { |
|
+dm_simplecmd (int task, const char *name, int no_flush, uint32_t *cookie, uint16_t udev_flags) { |
|
int r = 0; |
|
int udev_wait_flag = (task == DM_DEVICE_RESUME || |
|
task == DM_DEVICE_REMOVE); |
|
@@ -78,7 +78,7 @@ 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)) |
|
+ if (udev_wait_flag && !dm_task_set_cookie(dmt, cookie, ((udev_sync)? 0 : DM_UDEV_DISABLE_LIBRARY_FALLBACK) | udev_flags)) |
|
goto out; |
|
r = dm_task_run(dmt); |
|
|
|
Index: multipath-tools-130222/kpartx/devmapper.h |
|
=================================================================== |
|
--- multipath-tools-130222.orig/kpartx/devmapper.h |
|
+++ multipath-tools-130222/kpartx/devmapper.h |
|
@@ -2,10 +2,16 @@ |
|
#define MINOR(dev) ((dev & 0xff) | ((dev >> 12) & 0xfff00)) |
|
#define MKDEV(ma,mi) ((mi & 0xff) | (ma << 8) | ((mi & ~0xff) << 12)) |
|
|
|
+#ifdef DM_SUBSYSTEM_UDEV_FLAG0 |
|
+#define MPATH_UDEV_RELOAD_FLAG DM_SUBSYSTEM_UDEV_FLAG0 |
|
+#else |
|
+#define MPATH_UDEV_RELOAD_FLAG 0 |
|
+#endif |
|
+ |
|
extern int udev_sync; |
|
|
|
int dm_prereq (char *, int, int, int); |
|
-int dm_simplecmd (int, const char *, int, uint32_t *); |
|
+int dm_simplecmd (int, const char *, int, uint32_t *, 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 dm_map_present (char *); |
|
Index: multipath-tools-130222/kpartx/kpartx.c |
|
=================================================================== |
|
--- multipath-tools-130222.orig/kpartx/kpartx.c |
|
+++ multipath-tools-130222/kpartx/kpartx.c |
|
@@ -421,7 +421,7 @@ main(int argc, char **argv){ |
|
continue; |
|
|
|
if (!dm_simplecmd(DM_DEVICE_REMOVE, partname, |
|
- 0, &cookie)) { |
|
+ 0, &cookie, 0)) { |
|
r++; |
|
continue; |
|
} |
|
@@ -473,7 +473,7 @@ main(int argc, char **argv){ |
|
} |
|
if (op == DM_DEVICE_RELOAD && |
|
!dm_simplecmd(DM_DEVICE_RESUME, partname, |
|
- 1, &cookie)) { |
|
+ 1, &cookie, MPATH_UDEV_RELOAD_FLAG)) { |
|
fprintf(stderr, "resume failed on %s\n", |
|
partname); |
|
r++; |
|
@@ -505,7 +505,7 @@ main(int argc, char **argv){ |
|
continue; |
|
|
|
if (!dm_simplecmd(DM_DEVICE_REMOVE, |
|
- partname, 1, &cookie)) { |
|
+ partname, 1, &cookie, 0)) { |
|
r++; |
|
continue; |
|
} |
|
Index: multipath-tools-130222/libmultipath/configure.c |
|
=================================================================== |
|
--- multipath-tools-130222.orig/libmultipath/configure.c |
|
+++ multipath-tools-130222/libmultipath/configure.c |
|
@@ -390,13 +390,13 @@ domap (struct multipath * mpp, char * pa |
|
case ACT_RELOAD: |
|
r = dm_addmap_reload(mpp, params); |
|
if (r) |
|
- r = dm_simplecmd_noflush(DM_DEVICE_RESUME, mpp->alias); |
|
+ r = dm_simplecmd_noflush(DM_DEVICE_RESUME, mpp->alias, MPATH_UDEV_RELOAD_FLAG); |
|
break; |
|
|
|
case ACT_RESIZE: |
|
r = dm_addmap_reload(mpp, params); |
|
if (r) |
|
- r = dm_simplecmd_flush(DM_DEVICE_RESUME, mpp->alias, 1); |
|
+ r = dm_simplecmd_flush(DM_DEVICE_RESUME, mpp->alias, 1, 0); |
|
break; |
|
|
|
case ACT_RENAME: |
|
Index: multipath-tools-130222/libmultipath/devmapper.c |
|
=================================================================== |
|
--- multipath-tools-130222.orig/libmultipath/devmapper.c |
|
+++ multipath-tools-130222/libmultipath/devmapper.c |
|
@@ -103,7 +103,9 @@ dm_lib_prereq (void) |
|
{ |
|
char version[64]; |
|
int v[3]; |
|
-#ifdef LIBDM_API_COOKIE |
|
+#if defined(DM_SUBSYSTEM_UDEV_FLAG0) |
|
+ int minv[3] = {1, 2, 82}; |
|
+#elif defined(LIBDM_API_COOKIE) |
|
int minv[3] = {1, 2, 38}; |
|
#else |
|
int minv[3] = {1, 2, 8}; |
|
@@ -200,7 +202,7 @@ dm_prereq (void) |
|
} |
|
|
|
static int |
|
-dm_simplecmd (int task, const char *name, int no_flush, int need_sync) { |
|
+dm_simplecmd (int task, const char *name, int no_flush, int need_sync, uint16_t udev_flags) { |
|
int r = 0; |
|
int udev_wait_flag = (need_sync && (task == DM_DEVICE_RESUME || |
|
task == DM_DEVICE_REMOVE)); |
|
@@ -219,7 +221,7 @@ dm_simplecmd (int task, const char *name |
|
dm_task_no_flush(dmt); /* for DM_DEVICE_SUSPEND/RESUME */ |
|
#endif |
|
|
|
- if (udev_wait_flag && !dm_task_set_cookie(dmt, &conf->cookie, (conf->daemon)? DM_UDEV_DISABLE_LIBRARY_FALLBACK : 0)) |
|
+ if (udev_wait_flag && !dm_task_set_cookie(dmt, &conf->cookie, ((conf->daemon)? DM_UDEV_DISABLE_LIBRARY_FALLBACK : 0) | udev_flags)) |
|
goto out; |
|
r = dm_task_run (dmt); |
|
|
|
@@ -229,13 +231,13 @@ dm_simplecmd (int task, const char *name |
|
} |
|
|
|
extern int |
|
-dm_simplecmd_flush (int task, const char *name, int needsync) { |
|
- return dm_simplecmd(task, name, 0, needsync); |
|
+dm_simplecmd_flush (int task, const char *name, int needsync, uint16_t udev_flags) { |
|
+ return dm_simplecmd(task, name, 0, needsync, udev_flags); |
|
} |
|
|
|
extern int |
|
-dm_simplecmd_noflush (int task, const char *name) { |
|
- return dm_simplecmd(task, name, 1, 1); |
|
+dm_simplecmd_noflush (int task, const char *name, uint16_t udev_flags) { |
|
+ return dm_simplecmd(task, name, 1, 1, udev_flags); |
|
} |
|
|
|
extern int |
|
@@ -670,7 +672,7 @@ _dm_flush_map (const char * mapname, int |
|
return 1; |
|
} |
|
|
|
- r = dm_simplecmd_flush(DM_DEVICE_REMOVE, mapname, need_sync); |
|
+ r = dm_simplecmd_flush(DM_DEVICE_REMOVE, mapname, need_sync, 0); |
|
|
|
if (r) { |
|
condlog(4, "multipath map %s removed", mapname); |
|
@@ -703,14 +705,14 @@ dm_suspend_and_flush_map (const char * m |
|
if (s) |
|
queue_if_no_path = 0; |
|
else |
|
- s = dm_simplecmd_flush(DM_DEVICE_SUSPEND, mapname, 0); |
|
+ s = dm_simplecmd_flush(DM_DEVICE_SUSPEND, mapname, 0, 0); |
|
|
|
if (!dm_flush_map(mapname)) { |
|
condlog(4, "multipath map %s removed", mapname); |
|
return 0; |
|
} |
|
condlog(2, "failed to remove multipath map %s", mapname); |
|
- dm_simplecmd_noflush(DM_DEVICE_RESUME, mapname); |
|
+ dm_simplecmd_noflush(DM_DEVICE_RESUME, mapname, 0); |
|
if (queue_if_no_path) |
|
s = dm_queue_if_no_path((char *)mapname, 1); |
|
return 1; |
|
@@ -1077,7 +1079,7 @@ dm_remove_partmaps (const char * mapname |
|
condlog(4, "partition map %s removed", |
|
names->name); |
|
dm_simplecmd_flush(DM_DEVICE_REMOVE, names->name, |
|
- need_sync); |
|
+ need_sync, 0); |
|
} |
|
|
|
next = names->next; |
|
@@ -1305,7 +1307,7 @@ int dm_reassign_table(const char *name, |
|
condlog(3, "%s: failed to reassign targets", name); |
|
goto out_reload; |
|
} |
|
- dm_simplecmd_noflush(DM_DEVICE_RESUME, name); |
|
+ dm_simplecmd_noflush(DM_DEVICE_RESUME, name, MPATH_UDEV_RELOAD_FLAG); |
|
} |
|
r = 1; |
|
|
|
Index: multipath-tools-130222/libmultipath/devmapper.h |
|
=================================================================== |
|
--- multipath-tools-130222.orig/libmultipath/devmapper.h |
|
+++ multipath-tools-130222/libmultipath/devmapper.h |
|
@@ -6,11 +6,17 @@ |
|
#define TGT_MPATH "multipath" |
|
#define TGT_PART "linear" |
|
|
|
+#ifdef DM_SUBSYSTEM_UDEV_FLAG0 |
|
+#define MPATH_UDEV_RELOAD_FLAG DM_SUBSYSTEM_UDEV_FLAG0 |
|
+#else |
|
+#define MPATH_UDEV_RELOAD_FLAG 0 |
|
+#endif |
|
+ |
|
void dm_init(void); |
|
int dm_prereq (void); |
|
int dm_drv_version (unsigned int * version, char * str); |
|
-int dm_simplecmd_flush (int, const char *, int); |
|
-int dm_simplecmd_noflush (int, const char *); |
|
+int dm_simplecmd_flush (int, const char *, int, uint16_t); |
|
+int dm_simplecmd_noflush (int, const char *, uint16_t); |
|
int dm_addmap_create (struct multipath *mpp, char *params); |
|
int dm_addmap_reload (struct multipath *mpp, char *params); |
|
int dm_map_present (const char *); |
|
Index: multipath-tools-130222/multipathd/cli_handlers.c |
|
=================================================================== |
|
--- multipath-tools-130222.orig/multipathd/cli_handlers.c |
|
+++ multipath-tools-130222/multipathd/cli_handlers.c |
|
@@ -783,7 +783,7 @@ cli_suspend(void * v, char ** reply, int |
|
{ |
|
struct vectors * vecs = (struct vectors *)data; |
|
char * param = get_keyparam(v, MAP); |
|
- int r = dm_simplecmd_noflush(DM_DEVICE_SUSPEND, param); |
|
+ int r = dm_simplecmd_noflush(DM_DEVICE_SUSPEND, param, 0); |
|
|
|
param = convert_dev(param, 0); |
|
condlog(2, "%s: suspend (operator)", param); |
|
@@ -805,7 +805,7 @@ cli_resume(void * v, char ** reply, int |
|
{ |
|
struct vectors * vecs = (struct vectors *)data; |
|
char * param = get_keyparam(v, MAP); |
|
- int r = dm_simplecmd_noflush(DM_DEVICE_RESUME, param); |
|
+ int r = dm_simplecmd_noflush(DM_DEVICE_RESUME, param, 0); |
|
|
|
param = convert_dev(param, 0); |
|
condlog(2, "%s: resume (operator)", param);
|
|
|