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.
71 lines
2.3 KiB
71 lines
2.3 KiB
--- |
|
libmultipath/devmapper.c | 21 +++++++++++++++++---- |
|
libmultipath/devmapper.h | 2 +- |
|
2 files changed, 18 insertions(+), 5 deletions(-) |
|
|
|
Index: multipath-tools-130222/libmultipath/devmapper.c |
|
=================================================================== |
|
--- multipath-tools-130222.orig/libmultipath/devmapper.c |
|
+++ multipath-tools-130222/libmultipath/devmapper.c |
|
@@ -363,7 +363,7 @@ out: |
|
} |
|
|
|
extern int |
|
-dm_get_map(char * name, unsigned long long * size, char * outparams) |
|
+dm_get_map(const char * name, unsigned long long * size, char * outparams) |
|
{ |
|
int r = 1; |
|
struct dm_task *dmt; |
|
@@ -682,7 +682,9 @@ _dm_flush_map (const char * mapname, int |
|
extern int |
|
dm_suspend_and_flush_map (const char * mapname) |
|
{ |
|
- int s; |
|
+ int s = 0, queue_if_no_path = 0; |
|
+ unsigned long long mapsize; |
|
+ char params[PARAMS_SIZE] = {0}; |
|
|
|
if (!dm_map_present(mapname)) |
|
return 0; |
|
@@ -690,8 +692,17 @@ dm_suspend_and_flush_map (const char * m |
|
if (dm_type(mapname, TGT_MPATH) <= 0) |
|
return 0; /* nothing to do */ |
|
|
|
- s = dm_queue_if_no_path((char *)mapname, 0); |
|
- if (!s) |
|
+ if (!dm_get_map(mapname, &mapsize, params)) { |
|
+ if (strstr(params, "queue_if_no_path")) |
|
+ queue_if_no_path = 1; |
|
+ } |
|
+ |
|
+ if (queue_if_no_path) |
|
+ s = dm_queue_if_no_path((char *)mapname, 0); |
|
+ /* Leave queue_if_no_path alone if unset failed */ |
|
+ if (s) |
|
+ queue_if_no_path = 0; |
|
+ else |
|
s = dm_simplecmd_flush(DM_DEVICE_SUSPEND, mapname, 0); |
|
|
|
if (!dm_flush_map(mapname)) { |
|
@@ -700,6 +711,8 @@ dm_suspend_and_flush_map (const char * m |
|
} |
|
condlog(2, "failed to remove multipath map %s", mapname); |
|
dm_simplecmd_noflush(DM_DEVICE_RESUME, mapname); |
|
+ if (queue_if_no_path) |
|
+ s = dm_queue_if_no_path((char *)mapname, 1); |
|
return 1; |
|
} |
|
|
|
Index: multipath-tools-130222/libmultipath/devmapper.h |
|
=================================================================== |
|
--- multipath-tools-130222.orig/libmultipath/devmapper.h |
|
+++ multipath-tools-130222/libmultipath/devmapper.h |
|
@@ -14,7 +14,7 @@ int dm_simplecmd_noflush (int, const cha |
|
int dm_addmap_create (struct multipath *mpp, char *params); |
|
int dm_addmap_reload (struct multipath *mpp, char *params); |
|
int dm_map_present (const char *); |
|
-int dm_get_map(char *, unsigned long long *, char *); |
|
+int dm_get_map(const char *, unsigned long long *, char *); |
|
int dm_get_status(char *, char *); |
|
int dm_type(const char *, char *); |
|
int _dm_flush_map (const char *, int);
|
|
|