[dm-devel] [PATCH] Miscellaneous multipath bugfixes
Benjamin Marzinski
bmarzins at redhat.com
Fri Apr 3 04:44:19 UTC 2009
This is mostly a cleanup of some bugs that recently got introduced. In
ACT_RESIZE we were trying to create a read-only device before we tried
to create a read/write one (I also added the ability to fail back to
read-only in ACT_RELOAD). There were some printouts that I assume were
for debugging, and some duplicate code. And I switched it so that
dm_simplecmd_flush did flushing, and dm_simplecmd_noflush didn't.
Signed-off-by: Benjamin Marzinski <bmarzins at redhat.com>
---
libmultipath/configure.c | 13 ++++++++-----
libmultipath/devmapper.c | 11 ++++-------
multipathd/cli_handlers.c | 9 ++-------
3 files changed, 14 insertions(+), 19 deletions(-)
Index: multipath-tools-090402/libmultipath/configure.c
===================================================================
--- multipath-tools-090402.orig/libmultipath/configure.c
+++ multipath-tools-090402/libmultipath/configure.c
@@ -352,16 +352,19 @@ domap (struct multipath * mpp)
break;
case ACT_RELOAD:
- r = (dm_addmap_reload(mpp->alias, mpp->params, mpp->size, NULL)
- && dm_simplecmd_flush(DM_DEVICE_RESUME, mpp->alias));
+ r = dm_addmap_reload(mpp->alias, mpp->params, mpp->size, NULL);
+ if (!r)
+ r = dm_addmap_reload_ro(mpp->alias, mpp->params, mpp->size, NULL);
+ if (r)
+ r = dm_simplecmd_noflush(DM_DEVICE_RESUME, mpp->alias);
break;
case ACT_RESIZE:
- r = dm_addmap_reload_ro(mpp->alias, mpp->params, mpp->size, NULL);
+ r = dm_addmap_reload(mpp->alias, mpp->params, mpp->size, NULL);
if (!r)
- r = dm_addmap_reload(mpp->alias, mpp->params, mpp->size, NULL);
+ r = dm_addmap_reload_ro(mpp->alias, mpp->params, mpp->size, NULL);
if (r)
- r = dm_simplecmd_noflush(DM_DEVICE_RESUME, mpp->alias);
+ r = dm_simplecmd_flush(DM_DEVICE_RESUME, mpp->alias);
break;
case ACT_RENAME:
Index: multipath-tools-090402/libmultipath/devmapper.c
===================================================================
--- multipath-tools-090402.orig/libmultipath/devmapper.c
+++ multipath-tools-090402/libmultipath/devmapper.c
@@ -176,12 +176,12 @@ dm_simplecmd (int task, const char *name
extern int
dm_simplecmd_flush (int task, const char *name) {
- return dm_simplecmd(task, name, 1);
+ return dm_simplecmd(task, name, 0);
}
extern int
dm_simplecmd_noflush (int task, const char *name) {
- return dm_simplecmd(task, name, 0);
+ return dm_simplecmd(task, name, 1);
}
extern int
@@ -204,9 +204,6 @@ dm_addmap (int task, const char *name, c
if (ro)
dm_task_set_ro(dmt);
- if (ro)
- dm_task_set_ro(dmt);
-
if (uuid){
prefixed_uuid = MALLOC(UUID_PREFIX_LEN + strlen(uuid) + 1);
if (!prefixed_uuid) {
@@ -550,7 +547,7 @@ dm_flush_map (const char * mapname)
return 1;
}
- r = dm_simplecmd_noflush(DM_DEVICE_REMOVE, mapname);
+ r = dm_simplecmd_flush(DM_DEVICE_REMOVE, mapname);
if (r) {
condlog(4, "multipath map %s removed", mapname);
@@ -949,7 +946,7 @@ dm_remove_partmaps (const char * mapname
*/
condlog(4, "partition map %s removed",
names->name);
- dm_simplecmd_noflush(DM_DEVICE_REMOVE, names->name);
+ dm_simplecmd_flush(DM_DEVICE_REMOVE, names->name);
}
next = names->next;
Index: multipath-tools-090402/multipathd/cli_handlers.c
===================================================================
--- multipath-tools-090402.orig/multipathd/cli_handlers.c
+++ multipath-tools-090402/multipathd/cli_handlers.c
@@ -459,7 +459,6 @@ cli_resize(void *v, char **reply, int *l
pgp = VECTOR_SLOT(mpp->pg, 0);
pp = VECTOR_SLOT(pgp->paths, 0);
- condlog(0,"%s: reading sysfs.", mapname);
if (sysfs_get_size(pp->sysdev, &size)) {
condlog(0, "%s: couldn't get size for sysfs. cannot resize",
mapname);
@@ -473,15 +472,11 @@ cli_resize(void *v, char **reply, int *l
condlog(3, "%s old size is %llu, new size is %llu", mapname, mpp->size,
size);
- condlog(0, "%s: resize_map.", mapname);
if (resize_map(mpp, size, vecs) != 0)
return 1;
- condlog(0,"%s: dm_lib_release.", mapname);
dm_lib_release();
- condlog(0,"%s: setup multipath.", mapname);
setup_multipath(vecs, mpp);
- condlog(0,"%s: sync map state.", mapname);
sync_map_state(mpp);
return 0;
@@ -513,7 +508,7 @@ cli_suspend(void * v, char ** reply, int
{
struct vectors * vecs = (struct vectors *)data;
char * param = get_keyparam(v, MAP);
- int r = dm_simplecmd_flush(DM_DEVICE_SUSPEND, param);
+ int r = dm_simplecmd_noflush(DM_DEVICE_SUSPEND, param);
condlog(2, "%s: suspend (operator)", param);
@@ -534,7 +529,7 @@ cli_resume(void * v, char ** reply, int
{
struct vectors * vecs = (struct vectors *)data;
char * param = get_keyparam(v, MAP);
- int r = dm_simplecmd_flush(DM_DEVICE_RESUME, param);
+ int r = dm_simplecmd_noflush(DM_DEVICE_RESUME, param);
condlog(2, "%s: resume (operator)", param);
More information about the dm-devel
mailing list