Make params variable local
authorHannes Reinecke <hare@suse.de>
Thu, 22 Oct 2009 14:25:57 +0000 (16:25 +0200)
committerHannes Reinecke <hare@suse.de>
Tue, 3 May 2011 11:41:36 +0000 (13:41 +0200)
The 'params' structure field in struct multipath is a purely local
variable, and as such shouldn't be part of the main structure.

Signed-off-by: Hannes Reinecke <hare@suse.de>
13 files changed:
libmultipath/configure.c
libmultipath/configure.h
libmultipath/devmapper.c
libmultipath/devmapper.h
libmultipath/dmparser.c
libmultipath/dmparser.h
libmultipath/print.c
libmultipath/print.h
libmultipath/structs.h
libmultipath/structs_vec.c
multipath/main.c
multipathd/cli_handlers.c
multipathd/main.c

index 18e97f2..048fdd7 100644 (file)
 #include "util.h"
 
 extern int
-setup_map (struct multipath * mpp)
+setup_map (struct multipath * mpp, char * params, int params_size)
 {
        struct pathgroup * pgp;
        int i;
-       
+
        /*
         * don't bother if devmap size is unknown
         */
@@ -100,7 +100,7 @@ setup_map (struct multipath * mpp)
         * transform the mp->pg vector of vectors of paths
         * into a mp->params strings to feed the device-mapper
         */
-       if (assemble_map(mpp)) {
+       if (assemble_map(mpp, params, params_size)) {
                condlog(0, "%s: problem assembing map", mpp->alias);
                return 1;
        }
@@ -326,7 +326,7 @@ fail:
 #define DOMAP_DRY      3
 
 extern int
-domap (struct multipath * mpp)
+domap (struct multipath * mpp, char * params)
 {
        int r = 0;
 
@@ -366,28 +366,28 @@ domap (struct multipath * mpp)
                        break;
                }
 
-               r = dm_addmap_create(mpp);
+               r = dm_addmap_create(mpp, params);
 
                if (!r)
-                        r = dm_addmap_create_ro(mpp);
+                       r = dm_addmap_create_ro(mpp, params);
 
                lock_multipath(mpp, 0);
                break;
 
        case ACT_RELOAD:
-               r = dm_addmap_reload(mpp);
+               r = dm_addmap_reload(mpp, params);
                if (!r)
-                       r = dm_addmap_reload_ro(mpp);
+                       r = dm_addmap_reload_ro(mpp, params);
                if (r)
                        r = dm_simplecmd_noflush(DM_DEVICE_RESUME, mpp->alias);
                break;
 
-       case ACT_RESIZE:
-               r = dm_addmap_reload(mpp);
-               if (!r)
-                       r = dm_addmap_reload_ro(mpp);
-               if (r)
-                       r = dm_simplecmd_flush(DM_DEVICE_RESUME, mpp->alias, 1);
+       case ACT_RESIZE:
+               r = dm_addmap_reload(mpp, params);
+               if (!r)
+                       r = dm_addmap_reload_ro(mpp, params);
+               if (r)
+                       r = dm_simplecmd_flush(DM_DEVICE_RESUME, mpp->alias, 1);
                break;
 
        case ACT_RENAME:
@@ -412,7 +412,7 @@ domap (struct multipath * mpp)
                        /* multipath daemon mode */
                        mpp->stat_map_loads++;
                        condlog(2, "%s: load table [0 %llu %s %s]", mpp->alias,
-                               mpp->size, TGT_MPATH, mpp->params);
+                               mpp->size, TGT_MPATH, params);
                        /*
                         * Required action is over, reset for the stateful daemon.
                         * But don't do it for creation as we use in the caller the
@@ -455,6 +455,7 @@ coalesce_paths (struct vectors * vecs, vector newmp, char * refwwid, int force_r
        int r = 1;
        int k, i;
        char empty_buff[WWID_SIZE];
+       char params[PARAMS_SIZE];
        struct multipath * mpp;
        struct path * pp1;
        struct path * pp2;
@@ -530,8 +531,9 @@ coalesce_paths (struct vectors * vecs, vector newmp, char * refwwid, int force_r
                                mpp->action = ACT_REJECT;
                }
                verify_paths(mpp, vecs, NULL);
-               
-               if (setup_map(mpp)) {
+
+               params[0] = '\0';
+               if (setup_map(mpp, params, PARAMS_SIZE)) {
                        remove_map(mpp, vecs, 0);
                        continue;
                }
@@ -539,7 +541,7 @@ coalesce_paths (struct vectors * vecs, vector newmp, char * refwwid, int force_r
                if (mpp->action == ACT_UNDEF)
                        select_action(mpp, curmp, force_reload);
 
-               r = domap(mpp);
+               r = domap(mpp, params);
 
                if (r == DOMAP_FAIL || r == DOMAP_RETRY) {
                        condlog(3, "%s: domap (%u) failure "
index 25891ba..07261d8 100644 (file)
@@ -23,8 +23,8 @@ enum actions {
 #define FLUSH_ONE 1
 #define FLUSH_ALL 2
 
-int setup_map (struct multipath * mpp);
-int domap (struct multipath * mpp);
+int setup_map (struct multipath * mpp, char * params, int params_size );
+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);
index 8703571..5624bb0 100644 (file)
@@ -262,8 +262,8 @@ dm_simplecmd_noflush (int task, const char *name) {
 }
 
 extern int
-dm_addmap (int task, const char *target, struct multipath *mpp, int use_uuid,
-          int ro) {
+dm_addmap (int task, const char *target, struct multipath *mpp, char * params,
+          int use_uuid, int ro) {
        int r = 0;
        struct dm_task *dmt;
        char *prefixed_uuid = NULL;
@@ -274,7 +274,7 @@ dm_addmap (int task, const char *target, struct multipath *mpp, int use_uuid,
        if (!dm_task_set_name (dmt, mpp->alias))
                goto addout;
 
-       if (!dm_task_add_target (dmt, 0, mpp->size, target, mpp->params))
+       if (!dm_task_add_target (dmt, 0, mpp->size, target, params))
                goto addout;
 
        if (ro)
@@ -301,6 +301,8 @@ dm_addmap (int task, const char *target, struct multipath *mpp, int use_uuid,
        if (mpp->attribute_flags & (1 << ATTR_GID) &&
            !dm_task_set_gid(dmt, mpp->gid))
                goto freeout;
+       condlog(4, "%s: addmap [0 %llu %s %s]\n", mpp->alias, mpp->size,
+               target, params);
 
        dm_task_no_open_count(dmt);
 
@@ -320,9 +322,9 @@ dm_addmap (int task, const char *target, struct multipath *mpp, int use_uuid,
 }
 
 static int
-_dm_addmap_create (struct multipath *mpp, int ro) {
+_dm_addmap_create (struct multipath *mpp, char * params, int ro) {
        int r;
-       r = dm_addmap(DM_DEVICE_CREATE, TGT_MPATH, mpp, 1, ro);
+       r = dm_addmap(DM_DEVICE_CREATE, TGT_MPATH, mpp, params, 1, ro);
        /*
         * DM_DEVICE_CREATE is actually DM_DEV_CREATE + DM_TABLE_LOAD.
         * Failing the second part leaves an empty map. Clean it up.
@@ -339,23 +341,23 @@ _dm_addmap_create (struct multipath *mpp, int ro) {
 #define ADDMAP_RO 1
 
 extern int
-dm_addmap_create (struct multipath *mpp) {
-       return _dm_addmap_create(mpp, ADDMAP_RW);
+dm_addmap_create (struct multipath *mpp, char *params) {
+       return _dm_addmap_create(mpp, params, ADDMAP_RW);
 }
 
 extern int
-dm_addmap_create_ro (struct multipath *mpp) {
-       return _dm_addmap_create(mpp, ADDMAP_RO);
+dm_addmap_create_ro (struct multipath *mpp, char *params) {
+       return _dm_addmap_create(mpp, params, ADDMAP_RO);
 }
 
 extern int
-dm_addmap_reload (struct multipath *mpp) {
-       return dm_addmap(DM_DEVICE_RELOAD, TGT_MPATH, mpp, 0, ADDMAP_RW);
+dm_addmap_reload (struct multipath *mpp, char *params) {
+       return dm_addmap(DM_DEVICE_RELOAD, TGT_MPATH, mpp, params, 0, ADDMAP_RW);
 }
 
 extern int
-dm_addmap_reload_ro (struct multipath *mpp) {
-       return dm_addmap(DM_DEVICE_RELOAD, TGT_MPATH, mpp, 0, ADDMAP_RO);
+dm_addmap_reload_ro (struct multipath *mpp, char *params) {
+       return dm_addmap(DM_DEVICE_RELOAD, TGT_MPATH, mpp, params, 0, ADDMAP_RO);
 }
 
 extern int
@@ -414,6 +416,10 @@ dm_get_map(char * name, unsigned long long * size, char * outparams)
        if (size)
                *size = length;
 
+       if (!outparams) {
+               r = 0;
+               goto out;
+       }
        if (snprintf(outparams, PARAMS_SIZE, "%s", params) <= PARAMS_SIZE)
                r = 0;
 out:
@@ -822,7 +828,7 @@ dm_get_maps (vector mp)
                        goto out1;
 
                if (info > 0) {
-                       if (dm_get_map(names->name, &mpp->size, mpp->params))
+                       if (dm_get_map(names->name, &mpp->size, NULL))
                                goto out1;
 
                        if (dm_get_status(names->name, mpp->status))
index 3e9657a..8306993 100644 (file)
@@ -11,10 +11,10 @@ int dm_prereq (void);
 int dm_drv_get_rq (void);
 int dm_simplecmd_flush (int, const char *, int);
 int dm_simplecmd_noflush (int, const char *);
-int dm_addmap_create (struct multipath *mpp);
-int dm_addmap_create_ro (struct multipath *mpp);
-int dm_addmap_reload (struct multipath *mpp);
-int dm_addmap_reload_ro (struct multipath *mpp);
+int dm_addmap_create (struct multipath *mpp, char *params);
+int dm_addmap_create_ro (struct multipath *mpp, char *params);
+int dm_addmap_reload (struct multipath *mpp, char *params);
+int dm_addmap_reload_ro (struct multipath *mpp, char *params);
 int dm_map_present (const char *);
 int dm_get_map(char *, unsigned long long *, char *);
 int dm_get_status(char *, char *);
index 0803bec..027254a 100644 (file)
@@ -47,7 +47,7 @@ merge_words (char ** dst, char * word, int space)
  * Transforms the path group vector into a proper device map string
  */
 int
-assemble_map (struct multipath * mp)
+assemble_map (struct multipath * mp, char * params, int len)
 {
        int i, j;
        int shift, freechar;
@@ -58,8 +58,8 @@ assemble_map (struct multipath * mp)
        struct path * pp;
 
        minio = mp->minio;
-       p = mp->params;
-       freechar = sizeof(mp->params);
+       p = params;
+       freechar = sizeof(params);
 
        nr_priority_groups = VECTOR_SIZE(mp->pg);
        initial_pg_nr = (nr_priority_groups ? mp->bestpg : 0);
index bf4b2c3..1b45df0 100644 (file)
@@ -1,3 +1,3 @@
-int assemble_map (struct multipath *);
+int assemble_map (struct multipath *, char *, int);
 int disassemble_map (vector, char *, struct multipath *);
 int disassemble_status (char *, struct multipath *);
index cf634ba..f6fe621 100644 (file)
@@ -1349,11 +1349,11 @@ print_pathgroup (struct pathgroup * pgp, char * style)
 }
 
 extern void
-print_map (struct multipath * mpp)
+print_map (struct multipath * mpp, char * params)
 {
-       if (mpp->size && mpp->params)
+       if (mpp->size && params)
                printf("0 %llu %s %s\n",
-                        mpp->size, TGT_MPATH, mpp->params);
+                        mpp->size, TGT_MPATH, params);
        return;
 }
 
index 47f4257..aef182b 100644 (file)
@@ -55,7 +55,7 @@ void print_multipath_topology (struct multipath * mpp, int verbosity);
 void print_path (struct path * pp, char * style);
 void print_multipath (struct multipath * mpp, char * style);
 void print_pathgroup (struct pathgroup * pgp, char * style);
-void print_map (struct multipath * mpp);
+void print_map (struct multipath * mpp, char * params);
 void print_all_paths (vector pathvec, int banner);
 void print_all_paths_custo (vector pathvec, int banner, char *fmt);
 void print_hwtable (vector hwtable);
index e2d2e28..02fed46 100644 (file)
@@ -191,7 +191,6 @@ struct multipath {
        unsigned long long size;
        vector paths;
        vector pg;
-       char params[PARAMS_SIZE];
        char status[PARAMS_SIZE];
        struct dm_info * dmi;
 
index 3f574c1..9bcc8bb 100644 (file)
@@ -242,13 +242,15 @@ extract_hwe_from_path(struct multipath * mpp)
 static int
 update_multipath_table (struct multipath *mpp, vector pathvec)
 {
+       char params[PARAMS_SIZE] = {0};
+
        if (!mpp)
                return 1;
 
-       if (dm_get_map(mpp->alias, &mpp->size, mpp->params))
+       if (dm_get_map(mpp->alias, &mpp->size, params))
                return 1;
 
-       if (disassemble_map(pathvec, mpp->params, mpp))
+       if (disassemble_map(pathvec, params, mpp))
                return 1;
 
        return 0;
index 3c26c06..fc676dc 100644 (file)
@@ -160,6 +160,7 @@ get_dm_mpvec (vector curmp, vector pathvec, char * refwwid)
 {
        int i;
        struct multipath * mpp;
+       char params[PARAMS_SIZE];
 
        if (dm_get_maps(curmp))
                return 1;
@@ -177,10 +178,11 @@ get_dm_mpvec (vector curmp, vector pathvec, char * refwwid)
                        continue;
                }
 
-               condlog(3, "params = %s", mpp->params);
+               dm_get_map(mpp->alias, &mpp->size, params);
+               condlog(3, "params = %s", params);
                condlog(3, "status = %s", mpp->status);
 
-               disassemble_map(pathvec, mpp->params, mpp);
+               disassemble_map(pathvec, params, mpp);
 
                /*
                 * disassemble_map() can add new paths to pathvec.
index 71a73ff..bbe2d7c 100644 (file)
@@ -423,11 +423,13 @@ cli_del_map (void * v, char ** reply, int * len, void * data)
 int resize_map(struct multipath *mpp, unsigned long long size,
               struct vectors * vecs)
 {
+       char params[PARAMS_SIZE] = {0};
+
        mpp->size = size;
        update_mpp_paths(mpp, vecs->pathvec);
-       setup_map(mpp);
+       setup_map(mpp, params, PARAMS_SIZE);
        mpp->action = ACT_RESIZE;
-       if (domap(mpp) <= 0) {
+       if (domap(mpp, params) <= 0) {
                condlog(0, "%s: failed to resize map : %s", mpp->alias,
                        strerror(errno));
                return 1;
index 769abb2..1723ddc 100644 (file)
@@ -353,6 +353,7 @@ ev_add_path (char * devname, struct vectors * vecs)
        struct multipath * mpp;
        struct path * pp;
        char empty_buff[WWID_SIZE] = {0};
+       char params[PARAMS_SIZE] = {0};
 
        if (strstr(devname, "..") != NULL) {
                /*
@@ -445,7 +446,7 @@ rescan:
        /*
         * push the map to the device-mapper
         */
-       if (setup_map(mpp)) {
+       if (setup_map(mpp, params, PARAMS_SIZE)) {
                condlog(0, "%s: failed to setup map for addition of new "
                        "path %s", mpp->alias, devname);
                goto fail_map;
@@ -453,7 +454,7 @@ rescan:
        /*
         * reload the map for the multipath mapped device
         */
-       if (domap(mpp) <= 0) {
+       if (domap(mpp, params) <= 0) {
                condlog(0, "%s: failed in domap for addition of new "
                        "path %s", mpp->alias, devname);
                /*
@@ -511,6 +512,7 @@ ev_remove_path (char * devname, struct vectors * vecs)
        struct multipath * mpp;
        struct path * pp;
        int i, retval = 0;
+       char params[PARAMS_SIZE] = {0};
 
        pp = find_path_by_dev(vecs->pathvec, devname);
 
@@ -565,7 +567,7 @@ ev_remove_path (char * devname, struct vectors * vecs)
                         */
                }
 
-               if (setup_map(mpp)) {
+               if (setup_map(mpp, params, PARAMS_SIZE)) {
                        condlog(0, "%s: failed to setup map for"
                                " removal of path %s", mpp->alias,
                                devname);
@@ -575,7 +577,7 @@ ev_remove_path (char * devname, struct vectors * vecs)
                 * reload the map
                 */
                mpp->action = ACT_RELOAD;
-               if (domap(mpp) <= 0) {
+               if (domap(mpp, params) <= 0) {
                        condlog(0, "%s: failed in domap for "
                                "removal of path %s",
                                mpp->alias, devname);
@@ -950,15 +952,19 @@ 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);
        }
-       setup_map(mpp);
+       params[0] = '\0';
+       if (setup_map(mpp, params, PARAMS_SIZE))
+               return 1;
+
        mpp->action = ACT_RELOAD;
-       if (domap(mpp) <= 0) {
+       if (domap(mpp, params) <= 0) {
                condlog(0, "%s: failed to update map : %s", mpp->alias,
                        strerror(errno));
                return 1;