Revert to ACT_RELOAD in domap if the map exists
authorHannes Reinecke <hare@suse.de>
Thu, 21 Aug 2014 09:57:55 +0000 (11:57 +0200)
committerChristophe Varoqui <christophe.varoqui@opensvc.com>
Sun, 29 Mar 2015 16:15:53 +0000 (18:15 +0200)
ACT_CREATE checks for an existing map already, so we might as
well revert to ACT_RELOAD in these cases and avoid an error
during configuration.

Signed-off-by: Hannes Reinecke <hare@suse.de>
libmultipath/configure.c
libmultipath/devmapper.c

index ef217de..24ad948 100644 (file)
@@ -577,7 +577,7 @@ fail:
 extern int
 domap (struct multipath * mpp, char * params)
 {
-       int r = 0;
+       int r = DOMAP_FAIL;
 
        /*
         * last chance to quit before touching the devmaps
@@ -587,6 +587,12 @@ domap (struct multipath * mpp, char * params)
                return DOMAP_DRY;
        }
 
+       if (mpp->action == ACT_CREATE &&
+           dm_map_present(mpp->alias)) {
+               condlog(3, "%s: map already present", mpp->alias);
+               mpp->action = ACT_RELOAD;
+       }
+
        switch (mpp->action) {
        case ACT_REJECT:
        case ACT_NOTHING:
@@ -609,12 +615,6 @@ domap (struct multipath * mpp, char * params)
                        return DOMAP_RETRY;
                }
 
-               if (dm_map_present(mpp->alias)) {
-                       condlog(3, "%s: map already present", mpp->alias);
-                       lock_multipath(mpp, 0);
-                       break;
-               }
-
                r = dm_addmap_create(mpp, params);
 
                lock_multipath(mpp, 0);
@@ -650,7 +650,7 @@ domap (struct multipath * mpp, char * params)
                break;
        }
 
-       if (r) {
+       if (r == DOMAP_OK) {
                /*
                 * DM_DEVICE_CREATE, DM_DEVICE_RENAME, or DM_DEVICE_RELOAD
                 * succeeded
index 1712c56..560d418 100644 (file)
@@ -347,8 +347,11 @@ dm_addmap_create (struct multipath *mpp, char * params) {
                        condlog(3, "%s: failed to load map (a path might be in use)", mpp->alias);
                        dm_flush_map_nosync(mpp->alias);
                }
-               if (err != EROFS)
+               if (err != EROFS) {
+                       condlog(3, "%s: failed to load map, error %d",
+                               mpp->alias, err);
                        break;
+               }
        }
        return 0;
 }