diff options
author | Hannes Reinecke <hare@suse.de> | 2009-02-09 13:59:57 +0100 |
---|---|---|
committer | Christophe Varoqui <christophe.varoqui@free.fr> | 2009-04-22 01:44:53 +0200 |
commit | 44b1e84d7eb72a3c03cec486a227dc1beaa9ccd6 (patch) | |
tree | 3da5ed60b4f2c8e6c81832d3073c4aff64145a38 /kpartx | |
parent | 35ad40b49bf57222bd22ef4c62cc792f866a269d (diff) | |
download | multipath-tools-44b1e84d7eb72a3c03cec486a227dc1beaa9ccd6.tar.gz multipath-tools-44b1e84d7eb72a3c03cec486a227dc1beaa9ccd6.tar.bz2 multipath-tools-44b1e84d7eb72a3c03cec486a227dc1beaa9ccd6.zip |
Use noflush for kpartx
kpartx has to use 'noflush' to be able to complete for an all-paths
down scenario. Otherwise no uevent might be sent and multipath
will stall.
References: 473352
Signed-off-by: Hannes Reinecke <hare@suse.de>
Diffstat (limited to 'kpartx')
-rw-r--r-- | kpartx/devmapper.c | 6 | ||||
-rw-r--r-- | kpartx/devmapper.h | 2 | ||||
-rw-r--r-- | kpartx/kpartx.c | 8 |
3 files changed, 11 insertions, 5 deletions
diff --git a/kpartx/devmapper.c b/kpartx/devmapper.c index 893d6dd..5686276 100644 --- a/kpartx/devmapper.c +++ b/kpartx/devmapper.c @@ -53,7 +53,7 @@ dm_prereq (char * str, int x, int y, int z) } extern int -dm_simplecmd (int task, const char *name) { +dm_simplecmd (int task, const char *name, int no_flush) { int r = 0; struct dm_task *dmt; @@ -64,6 +64,10 @@ dm_simplecmd (int task, const char *name) { goto out; dm_task_no_open_count(dmt); + dm_task_skip_lockfs(dmt); + + if (no_flush) + dm_task_no_flush(dmt); r = dm_task_run(dmt); diff --git a/kpartx/devmapper.h b/kpartx/devmapper.h index 2bd27d2..ca05239 100644 --- a/kpartx/devmapper.h +++ b/kpartx/devmapper.h @@ -1,5 +1,5 @@ int dm_prereq (char *, int, int, int); -int dm_simplecmd (int, const char *); +int dm_simplecmd (int, const char *, int); int dm_addmap (int, const char *, const char *, const char *, uint64_t, const char *, int); int dm_map_present (char *); diff --git a/kpartx/kpartx.c b/kpartx/kpartx.c index d1c06d2..afb956e 100644 --- a/kpartx/kpartx.c +++ b/kpartx/kpartx.c @@ -414,7 +414,8 @@ main(int argc, char **argv){ if (!slices[j].size || !dm_map_present(partname)) continue; - if (!dm_simplecmd(DM_DEVICE_REMOVE, partname)) { + if (!dm_simplecmd(DM_DEVICE_REMOVE, + partname, 0)) { r++; continue; } @@ -467,7 +468,8 @@ main(int argc, char **argv){ r++; } if (op == DM_DEVICE_RELOAD && - !dm_simplecmd(DM_DEVICE_RESUME, partname)) { + !dm_simplecmd(DM_DEVICE_RESUME, + partname, 1)) { fprintf(stderr, "resume failed on %s\n", partname); r++; @@ -526,7 +528,7 @@ main(int argc, char **argv){ if (op == DM_DEVICE_RELOAD) dm_simplecmd(DM_DEVICE_RESUME, - partname); + partname, 1); dm_devn(partname, &slices[j].major, &slices[j].minor); |