Do not trigger a map reload on priority updates
authorHannes Reinecke <hare@suse.de>
Tue, 8 Jan 2013 13:53:47 +0000 (14:53 +0100)
committerChristophe Varoqui <christophe.varoqui@opensvc.com>
Tue, 8 Jan 2013 22:28:55 +0000 (23:28 +0100)
update_path_groups() is just there to update the priority groups,
so it should trigger a table reload only if the priority has
indeed changed.

Signed-off-by: Hannes Reinecke <hare@suse.de>
libmultipath/configure.c
libmultipath/configure.h
multipathd/cli_handlers.c
multipathd/main.c

index 1bb45a3..0f1fe43 100644 (file)
@@ -765,14 +765,17 @@ out:
        return NULL;
 }
 
-extern int reload_map(struct vectors *vecs, struct multipath *mpp)
+extern int reload_map(struct vectors *vecs, struct multipath *mpp, int refresh)
 {
-       char params[PARAMS_SIZE];
-       int r;
+       char params[PARAMS_SIZE] = {0};
+       struct path *pp;
+       int i, r;
 
        update_mpp_paths(mpp, vecs->pathvec);
-
-       params[0] = '\0';
+       if (refresh) {
+               vector_foreach_slot (mpp->paths, pp, i)
+                       pathinfo(pp, conf->hwtable, DI_PRIO);
+       }
        if (setup_map(mpp, params, PARAMS_SIZE)) {
                condlog(0, "%s: failed to setup map", mpp->alias);
                return 1;
index 6c1c493..d13c0ac 100644 (file)
@@ -28,5 +28,5 @@ int domap (struct multipath * mpp, char * params);
 int reinstate_paths (struct multipath *mpp);
 int coalesce_paths (struct vectors *vecs, vector curmp, char * refwwid, int force_reload);
 char * get_refwwid (char * dev, enum devtypes dev_type, vector pathvec);
-int reload_map(struct vectors *vecs, struct multipath *mpp);
+int reload_map(struct vectors *vecs, struct multipath *mpp, int refresh);
 
index 544cbfb..6053b5a 100644 (file)
@@ -561,7 +561,7 @@ cli_reload(void *v, char **reply, int *len, void *data)
                return 1;
        }
 
-       return reload_map(vecs, mpp);
+       return reload_map(vecs, mpp, 0);
 }
 
 int resize_map(struct multipath *mpp, unsigned long long size,
index 84574b2..7fe9c5b 100644 (file)
@@ -674,11 +674,12 @@ uev_update_path (struct uevent *uev, struct vectors * vecs)
                                uev->kernel);
                        return 1;
                }
-               if (pp->mpp)
-                       retval = reload_map(vecs, pp->mpp);
+               if (pp->mpp) {
+                       retval = reload_map(vecs, pp->mpp, 0);
 
-               condlog(2, "%s: map %s reloaded (retval %d)",
-                       uev->kernel, pp->mpp->alias, retval);
+                       condlog(2, "%s: map %s reloaded (retval %d)",
+                               uev->kernel, pp->mpp->alias, retval);
+               }
 
        }
 
@@ -1086,25 +1087,9 @@ int update_prio(struct path *pp, int refresh_all)
 
 int update_path_groups(struct multipath *mpp, struct vectors *vecs, int refresh)
 {
-       int i;
-       struct path * pp;
-       char params[PARAMS_SIZE];
-
-       update_mpp_paths(mpp, vecs->pathvec);
-       if (refresh) {
-               vector_foreach_slot (mpp->paths, pp, i)
-                       pathinfo(pp, conf->hwtable, DI_PRIO);
-       }
-       params[0] = '\0';
-       if (setup_map(mpp, params, PARAMS_SIZE))
+       if (reload_map(vecs, mpp, refresh))
                return 1;
 
-       mpp->action = ACT_RELOAD;
-       if (domap(mpp, params) <= 0) {
-               condlog(0, "%s: failed to update map : %s", mpp->alias,
-                       strerror(errno));
-               return 1;
-       }
        dm_lib_release();
        if (setup_multipath(vecs, mpp) != 0)
                return 1;