libmultipath: use explicit 'config' argument for configuration file parsing
authorHannes Reinecke <hare@suse.de>
Tue, 14 Jun 2016 11:08:54 +0000 (13:08 +0200)
committerHannes Reinecke <hare@suse.de>
Mon, 4 Jul 2016 06:49:58 +0000 (08:49 +0200)
When parsing the configuration file we should be passing in
'struct config' as an explicit argument.

Signed-off-by: Hannes Reinecke <hare@suse.com>
18 files changed:
libmpathpersist/mpath_persist.c
libmultipath/config.c
libmultipath/configure.c
libmultipath/dict.c
libmultipath/discovery.c
libmultipath/parser.c
libmultipath/parser.h
libmultipath/print.c
libmultipath/print.h
libmultipath/propsel.c
libmultipath/propsel.h
libmultipath/structs_vec.c
libmultipath/structs_vec.h
libmultipath/waiter.c
mpathpersist/main.c
multipath/main.c
multipathd/cli_handlers.c
multipathd/main.c

index d557da3..1c51397 100644 (file)
@@ -317,7 +317,7 @@ int mpath_persistent_reserve_out ( int fd, int rq_servact, int rq_scope,
                goto out1;
        }
 
-       select_reservation_key(mpp);
+       select_reservation_key(conf, mpp);
 
        switch(rq_servact)
        {
index 3e59205..28e94b9 100644 (file)
@@ -542,7 +542,7 @@ free_config (struct config * conf)
 /* if multipath fails to process the config directory, it should continue,
  * with just a warning message */
 static void
-process_config_dir(vector keywords, char *dir)
+process_config_dir(struct config *conf, vector keywords, char *dir)
 {
        struct dirent **namelist;
        int i, n;
@@ -569,7 +569,7 @@ process_config_dir(vector keywords, char *dir)
                old_hwtable_size = VECTOR_SIZE(conf->hwtable);
                snprintf(path, LINE_MAX, "%s/%s", dir, namelist[i]->d_name);
                path[LINE_MAX-1] = '\0';
-               process_file(path);
+               process_file(conf, path);
                if (VECTOR_SIZE(conf->hwtable) > old_hwtable_size)
                        factorize_hwtable(conf->hwtable, old_hwtable_size);
 
@@ -640,7 +640,7 @@ load_config (char * file)
                int builtin_hwtable_size;
 
                builtin_hwtable_size = VECTOR_SIZE(conf->hwtable);
-               if (process_file(file)) {
+               if (process_file(conf, file)) {
                        condlog(0, "error parsing config file");
                        goto out;
                }
@@ -658,7 +658,7 @@ load_config (char * file)
        if (conf->config_dir == NULL)
                conf->config_dir = set_default(DEFAULT_CONFIG_DIR);
        if (conf->config_dir && conf->config_dir[0] != '\0')
-               process_config_dir(conf->keywords, conf->config_dir);
+               process_config_dir(conf, conf->keywords, conf->config_dir);
 
        /*
         * fill the voids left in the config file
index 53d89b0..5da49b8 100644 (file)
@@ -275,24 +275,24 @@ setup_map (struct multipath * mpp, char * params, int params_size)
        /*
         * properties selectors
         */
-       select_pgfailback(mpp);
-       select_pgpolicy(mpp);
-       select_selector(mpp);
-       select_features(mpp);
-       select_hwhandler(mpp);
-       select_rr_weight(mpp);
-       select_minio(mpp);
-       select_no_path_retry(mpp);
-       select_mode(mpp);
-       select_uid(mpp);
-       select_gid(mpp);
-       select_fast_io_fail(mpp);
-       select_dev_loss(mpp);
-       select_reservation_key(mpp);
-       select_retain_hwhandler(mpp);
-       select_deferred_remove(mpp);
-       select_delay_watch_checks(mpp);
-       select_delay_wait_checks(mpp);
+       select_pgfailback(conf, mpp);
+       select_pgpolicy(conf, mpp);
+       select_selector(conf, mpp);
+       select_features(conf, mpp);
+       select_hwhandler(conf, mpp);
+       select_rr_weight(conf, mpp);
+       select_minio(conf, mpp);
+       select_no_path_retry(conf, mpp);
+       select_mode(conf, mpp);
+       select_uid(conf, mpp);
+       select_gid(conf, mpp);
+       select_fast_io_fail(conf, mpp);
+       select_dev_loss(conf, mpp);
+       select_reservation_key(conf, mpp);
+       select_retain_hwhandler(conf, mpp);
+       select_deferred_remove(conf, mpp);
+       select_delay_watch_checks(conf, mpp);
+       select_delay_wait_checks(conf, mpp);
 
        sysfs_set_scsi_tmo(mpp, conf->checkint);
        /*
index 9920a9b..ed0502a 100644 (file)
@@ -135,21 +135,21 @@ print_yes_no_undef (char *buff, int len, void *ptr)
 
 #define declare_def_handler(option, function)                          \
 static int                                                             \
-def_ ## option ## _handler (vector strvec)                             \
+def_ ## option ## _handler (struct config *conf, vector strvec)                \
 {                                                                      \
        return function (strvec, &conf->option);                        \
 }
 
 #define declare_def_snprint(option, function)                          \
 static int                                                             \
-snprint_def_ ## option (char * buff, int len, void * data)             \
+snprint_def_ ## option (struct config *conf, char * buff, int len, void * data) \
 {                                                                      \
        return function (buff, len, &conf->option);                     \
 }
 
 #define declare_def_snprint_defint(option, function, value)            \
 static int                                                             \
-snprint_def_ ## option (char * buff, int len, void * data)             \
+snprint_def_ ## option (struct config *conf, char * buff, int len, void * data) \
 {                                                                      \
        int i = value;                                                  \
        if (!conf->option)                                              \
@@ -159,7 +159,7 @@ snprint_def_ ## option (char * buff, int len, void * data)          \
 
 #define declare_def_snprint_defstr(option, function, value)            \
 static int                                                             \
-snprint_def_ ## option (char * buff, int len, void * data)             \
+snprint_def_ ## option (struct config *conf, char * buff, int len, void * data) \
 {                                                                      \
        char *s = value;                                                \
        if (!conf->option)                                              \
@@ -169,7 +169,7 @@ snprint_def_ ## option (char * buff, int len, void * data)          \
 
 #define declare_hw_handler(option, function)                           \
 static int                                                             \
-hw_ ## option ## _handler (vector strvec)                              \
+hw_ ## option ## _handler (struct config *conf, vector strvec)         \
 {                                                                      \
        struct hwentry * hwe = VECTOR_LAST_SLOT(conf->hwtable);         \
        if (!hwe)                                                       \
@@ -179,7 +179,7 @@ hw_ ## option ## _handler (vector strvec)                           \
 
 #define declare_hw_snprint(option, function)                           \
 static int                                                             \
-snprint_hw_ ## option (char * buff, int len, void * data)              \
+snprint_hw_ ## option (struct config *conf, char * buff, int len, void * data) \
 {                                                                      \
        struct hwentry * hwe = (struct hwentry *)data;                  \
        return function (buff, len, &hwe->option);                      \
@@ -187,7 +187,7 @@ snprint_hw_ ## option (char * buff, int len, void * data)           \
 
 #define declare_ovr_handler(option, function)                          \
 static int                                                             \
-ovr_ ## option ## _handler (vector strvec)                             \
+ovr_ ## option ## _handler (struct config *conf, vector strvec)                \
 {                                                                      \
        if (!conf->overrides)                                           \
                return 1;                                               \
@@ -196,14 +196,14 @@ ovr_ ## option ## _handler (vector strvec)                                \
 
 #define declare_ovr_snprint(option, function)                          \
 static int                                                             \
-snprint_ovr_ ## option (char * buff, int len, void * data)             \
+snprint_ovr_ ## option (struct config *conf, char * buff, int len, void * data) \
 {                                                                      \
        return function (buff, len, &conf->overrides->option);          \
 }
 
 #define declare_mp_handler(option, function)                           \
 static int                                                             \
-mp_ ## option ## _handler (vector strvec)                              \
+mp_ ## option ## _handler (struct config *conf, vector strvec)         \
 {                                                                      \
        struct mpentry * mpe = VECTOR_LAST_SLOT(conf->mptable);         \
        if (!mpe)                                                       \
@@ -213,7 +213,7 @@ mp_ ## option ## _handler (vector strvec)                           \
 
 #define declare_mp_snprint(option, function)                           \
 static int                                                             \
-snprint_mp_ ## option (char * buff, int len, void * data)              \
+snprint_mp_ ## option (struct config *conf, char * buff, int len, void * data) \
 {                                                                      \
        struct mpentry * mpe = (struct mpentry *)data;                  \
        return function (buff, len, &mpe->option);                      \
@@ -324,7 +324,8 @@ declare_mp_snprint(minio_rq, print_nonzero)
 
 declare_def_handler(queue_without_daemon, set_yes_no)
 static int
-snprint_def_queue_without_daemon (char * buff, int len, void * data)
+snprint_def_queue_without_daemon (struct config *conf,
+                                 char * buff, int len, void * data)
 {
        switch (conf->queue_without_daemon) {
        case QUE_NO_DAEMON_OFF:
@@ -403,7 +404,7 @@ declare_def_handler(strict_timing, set_yes_no)
 declare_def_snprint(strict_timing, print_yes_no)
 
 static int
-def_config_dir_handler(vector strvec)
+def_config_dir_handler(struct config *conf, vector strvec)
 {
        /* this is only valid in the main config file */
        if (conf->processed_main_config)
@@ -414,14 +415,14 @@ declare_def_snprint(config_dir, print_str)
 
 #define declare_def_attr_handler(option, function)                     \
 static int                                                             \
-def_ ## option ## _handler (vector strvec)                             \
+def_ ## option ## _handler (struct config *conf, vector strvec)                \
 {                                                                      \
        return function (strvec, &conf->option, &conf->attribute_flags);\
 }
 
 #define declare_def_attr_snprint(option, function)                     \
 static int                                                             \
-snprint_def_ ## option (char * buff, int len, void * data)             \
+snprint_def_ ## option (struct config *conf, char * buff, int len, void * data) \
 {                                                                      \
        return function (buff, len, &conf->option,                      \
                         &conf->attribute_flags);                       \
@@ -429,7 +430,7 @@ snprint_def_ ## option (char * buff, int len, void * data)          \
 
 #define declare_mp_attr_handler(option, function)                      \
 static int                                                             \
-mp_ ## option ## _handler (vector strvec)                              \
+mp_ ## option ## _handler (struct config *conf, vector strvec)         \
 {                                                                      \
        struct mpentry * mpe = VECTOR_LAST_SLOT(conf->mptable);         \
        if (!mpe)                                                       \
@@ -439,7 +440,7 @@ mp_ ## option ## _handler (vector strvec)                           \
 
 #define declare_mp_attr_snprint(option, function)                      \
 static int                                                             \
-snprint_mp_ ## option (char * buff, int len, void * data)              \
+snprint_mp_ ## option (struct config *conf, char * buff, int len, void * data) \
 {                                                                      \
        struct mpentry * mpe = (struct mpentry *)data;                  \
        return function (buff, len, &mpe->option,                       \
@@ -708,7 +709,7 @@ get_sys_max_fds(int *max_fds)
 
 
 static int
-max_fds_handler(vector strvec)
+max_fds_handler(struct config *conf, vector strvec)
 {
        char * buff;
        int r = 0, max_fds;
@@ -738,7 +739,7 @@ max_fds_handler(vector strvec)
 }
 
 static int
-snprint_max_fds (char * buff, int len, void * data)
+snprint_max_fds (struct config *conf, char * buff, int len, void * data)
 {
        int r = 0, max_fds;
 
@@ -898,7 +899,7 @@ declare_mp_handler(no_path_retry, set_no_path_retry)
 declare_mp_snprint(no_path_retry, print_no_path_retry)
 
 static int
-def_log_checker_err_handler(vector strvec)
+def_log_checker_err_handler(struct config *conf, vector strvec)
 {
        char * buff;
 
@@ -917,7 +918,7 @@ def_log_checker_err_handler(vector strvec)
 }
 
 static int
-snprint_def_log_checker_err (char * buff, int len, void * data)
+snprint_def_log_checker_err (struct config *conf, char * buff, int len, void * data)
 {
        if (conf->log_checker_err == LOG_CHKR_ERR_ONCE)
                return snprintf(buff, len, "once");
@@ -1050,7 +1051,7 @@ declare_mp_handler(delay_wait_checks, set_delay_checks)
 declare_mp_snprint(delay_wait_checks, print_delay_checks)
 
 static int
-def_uxsock_timeout_handler(vector strvec)
+def_uxsock_timeout_handler(struct config *conf, vector strvec)
 {
        unsigned int uxsock_timeout;
        char *buff;
@@ -1073,7 +1074,7 @@ def_uxsock_timeout_handler(vector strvec)
  * blacklist block handlers
  */
 static int
-blacklist_handler(vector strvec)
+blacklist_handler(struct config *conf, vector strvec)
 {
        if (!conf->blist_devnode)
                conf->blist_devnode = vector_alloc();
@@ -1092,7 +1093,7 @@ blacklist_handler(vector strvec)
 }
 
 static int
-blacklist_exceptions_handler(vector strvec)
+blacklist_exceptions_handler(struct config *conf, vector strvec)
 {
        if (!conf->elist_devnode)
                conf->elist_devnode = vector_alloc();
@@ -1112,7 +1113,7 @@ blacklist_exceptions_handler(vector strvec)
 
 #define declare_ble_handler(option)                                    \
 static int                                                             \
-ble_ ## option ## _handler (vector strvec)                             \
+ble_ ## option ## _handler (struct config *conf, vector strvec)                \
 {                                                                      \
        char * buff;                                                    \
                                                                        \
@@ -1128,7 +1129,7 @@ ble_ ## option ## _handler (vector strvec)                                \
 
 #define declare_ble_device_handler(name, option, vend, prod)           \
 static int                                                             \
-ble_ ## option ## _ ## name ## _handler (vector strvec)                        \
+ble_ ## option ## _ ## name ## _handler (struct config *conf, vector strvec) \
 {                                                                      \
        char * buff;                                                    \
                                                                        \
@@ -1150,13 +1151,13 @@ declare_ble_handler(blist_property)
 declare_ble_handler(elist_property)
 
 static int
-snprint_def_uxsock_timeout(char * buff, int len, void * data)
+snprint_def_uxsock_timeout(struct config *conf, char * buff, int len, void * data)
 {
        return snprintf(buff, len, "%u", conf->uxsock_timeout);
 }
 
 static int
-snprint_ble_simple (char * buff, int len, void * data)
+snprint_ble_simple (struct config *conf, char * buff, int len, void * data)
 {
        struct blentry * ble = (struct blentry *)data;
 
@@ -1164,13 +1165,13 @@ snprint_ble_simple (char * buff, int len, void * data)
 }
 
 static int
-ble_device_handler(vector strvec)
+ble_device_handler(struct config *conf, vector strvec)
 {
        return alloc_ble_device(conf->blist_device);
 }
 
 static int
-ble_except_device_handler(vector strvec)
+ble_except_device_handler(struct config *conf, vector strvec)
 {
        return alloc_ble_device(conf->elist_device);
 }
@@ -1181,7 +1182,7 @@ declare_ble_device_handler(product, blist_device, NULL, buff)
 declare_ble_device_handler(product, elist_device, NULL, buff)
 
 static int
-snprint_bled_vendor (char * buff, int len, void * data)
+snprint_bled_vendor (struct config *conf, char * buff, int len, void * data)
 {
        struct blentry_device * bled = (struct blentry_device *)data;
 
@@ -1189,7 +1190,7 @@ snprint_bled_vendor (char * buff, int len, void * data)
 }
 
 static int
-snprint_bled_product (char * buff, int len, void * data)
+snprint_bled_product (struct config *conf, char * buff, int len, void * data)
 {
        struct blentry_device * bled = (struct blentry_device *)data;
 
@@ -1200,7 +1201,7 @@ snprint_bled_product (char * buff, int len, void * data)
  * devices block handlers
  */
 static int
-devices_handler(vector strvec)
+devices_handler(struct config *conf, vector strvec)
 {
        if (!conf->hwtable)
                conf->hwtable = vector_alloc();
@@ -1212,7 +1213,7 @@ devices_handler(vector strvec)
 }
 
 static int
-device_handler(vector strvec)
+device_handler(struct config *conf, vector strvec)
 {
        struct hwentry * hwe;
 
@@ -1249,7 +1250,7 @@ declare_hw_snprint(hwhandler, print_str)
  * overrides handlers
  */
 static int
-overrides_handler(vector strvec)
+overrides_handler(struct config *conf, vector strvec)
 {
        if (!conf->overrides)
                conf->overrides = alloc_hwe();
@@ -1266,7 +1267,7 @@ overrides_handler(vector strvec)
  * multipaths block handlers
  */
 static int
-multipaths_handler(vector strvec)
+multipaths_handler(struct config *conf, vector strvec)
 {
        if (!conf->mptable)
                conf->mptable = vector_alloc();
@@ -1278,7 +1279,7 @@ multipaths_handler(vector strvec)
 }
 
 static int
-multipath_handler(vector strvec)
+multipath_handler(struct config *conf, vector strvec)
 {
        struct mpentry * mpe;
 
@@ -1307,7 +1308,7 @@ declare_mp_snprint(alias, print_str)
  */
 
 static int
-deprecated_handler(vector strvec)
+deprecated_handler(struct config *conf, vector strvec)
 {
        char * buff;
 
@@ -1321,7 +1322,7 @@ deprecated_handler(vector strvec)
 }
 
 static int
-snprint_deprecated (char * buff, int len, void * data)
+snprint_deprecated (struct config *conf, char * buff, int len, void * data)
 {
        return 0;
 }
index 69b7b34..b059f32 100644 (file)
@@ -1412,7 +1412,7 @@ get_state (struct path * pp, struct config *conf, int daemon)
                                return PATH_UNCHECKED;
                        }
                }
-               select_checker(pp);
+               select_checker(conf, pp);
                if (!checker_selected(c)) {
                        condlog(3, "%s: No checker selected", pp->dev);
                        return PATH_UNCHECKED;
@@ -1452,8 +1452,8 @@ get_prio (struct path * pp)
        struct prio * p = &pp->prio;
 
        if (!prio_selected(p)) {
-               select_detect_prio(pp);
-               select_prio(pp);
+               select_detect_prio(conf, pp);
+               select_prio(conf, pp);
                if (!prio_selected(p)) {
                        condlog(3, "%s: no prio selected", pp->dev);
                        pp->priority = PRIO_UNDEF;
@@ -1520,7 +1520,7 @@ get_uid (struct path * pp, int path_state)
        ssize_t len = 0;
 
        if (!pp->uid_attribute && !pp->getuid)
-               select_getuid(pp);
+               select_getuid(conf, pp);
 
        if (!pp->udev) {
                condlog(1, "%s: no udev information", pp->dev);
index e4296ee..96bc872 100644 (file)
@@ -20,6 +20,8 @@
 #include <syslog.h>
 #include <errno.h>
 
+#include "vector.h"
+#include "config.h"
 #include "parser.h"
 #include "memory.h"
 #include "debug.h"
@@ -37,8 +39,9 @@ void set_current_keywords (vector *k)
 }
 
 int
-keyword_alloc(vector keywords, char *string, int (*handler) (vector),
-               int (*print) (char *, int, void *), int unique)
+keyword_alloc(vector keywords, char *string,
+             int (*handler) (struct config *, vector),
+             int (*print) (struct config *, char *, int, void *), int unique)
 {
        struct keyword *keyword;
 
@@ -62,7 +65,7 @@ keyword_alloc(vector keywords, char *string, int (*handler) (vector),
 }
 
 int
-install_keyword_root(char *string, int (*handler) (vector))
+install_keyword_root(char *string, int (*handler) (struct config *, vector))
 {
        int r = keyword_alloc(keywords, string, handler, NULL, 1);
        if (!r)
@@ -83,8 +86,8 @@ install_sublevel_end(void)
 }
 
 int
-_install_keyword(char *string, int (*handler) (vector),
-               int (*print) (char *, int, void *), int unique)
+_install_keyword(char *string, int (*handler) (struct config *, vector),
+                int (*print) (struct config *, char *, int, void *), int unique)
 {
        int i = 0;
        struct keyword *keyword;
@@ -179,7 +182,7 @@ snprint_keyword(char *buff, int len, char *fmt, struct keyword *kw, void *data)
                        fwd += snprintf(buff + fwd, len - fwd, "%s", kw->string);
                        break;
                case 'v':
-                       r = kw->print(buff + fwd, len - fwd, data);
+                       r = kw->print(conf, buff + fwd, len - fwd, data);
                        if (!r) { /* no output if no value */
                                buff = '\0';
                                return 0;
@@ -466,7 +469,7 @@ validate_config_strvec(vector strvec, char *file)
 }
 
 static int
-process_stream(FILE *stream, vector keywords, char *file)
+process_stream(struct config *conf, FILE *stream, vector keywords, char *file)
 {
        int i;
        int r = 0, t;
@@ -520,7 +523,7 @@ process_stream(FILE *stream, vector keywords, char *file)
                                                goto out;
                                }
                                if (keyword->handler) {
-                                       t = (*keyword->handler) (strvec);
+                                   t = (*keyword->handler) (conf, strvec);
                                        r += t;
                                        if (t)
                                                condlog(1, "multipath.conf +%d, parsing failed: %s",
@@ -529,7 +532,7 @@ process_stream(FILE *stream, vector keywords, char *file)
 
                                if (keyword->sub) {
                                        kw_level++;
-                                       r += process_stream(stream,
+                                       r += process_stream(conf, stream,
                                                            keyword->sub, file);
                                        kw_level--;
                                }
@@ -562,7 +565,7 @@ int alloc_keywords(void)
 
 /* Data initialization */
 int
-process_file(char *file)
+process_file(struct config *conf, char *file)
 {
        int r;
        FILE *stream;
@@ -580,7 +583,7 @@ process_file(char *file)
 
        /* Stream handling */
        line_nr = 0;
-       r = process_stream(stream, keywords, file);
+       r = process_stream(conf, stream, keywords, file);
        fclose(stream);
        //free_keywords(keywords);
 
index 70697f4..822b2b4 100644 (file)
@@ -33,6 +33,7 @@
 
 /* local includes */
 #include "vector.h"
+#include "config.h"
 
 /* Global definitions */
 #define EOB  "}"
@@ -41,8 +42,8 @@
 /* ketword definition */
 struct keyword {
        char *string;
-       int (*handler) (vector);
-       int (*print) (char *, int, void *);
+       int (*handler) (struct config *, vector);
+       int (*print) (struct config *, char *, int, void *);
        vector sub;
        int unique;
 };
@@ -57,13 +58,14 @@ struct keyword {
        for (i = 0; i < (k)->sub->allocated && ((p) = (k)->sub->slot[i]); i++)
 
 /* Prototypes */
-extern int keyword_alloc(vector keywords, char *string, int (*handler) (vector),
-                        int (*print) (char *, int, void *), int unique);
-extern int install_keyword_root(char *string, int (*handler) (vector));
+extern int keyword_alloc(vector keywords, char *string,
+                        int (*handler) (struct config *, vector),
+                        int (*print) (struct config *, char *, int, void *), int unique);
+extern int install_keyword_root(char *string, int (*handler) (struct config *, vector));
 extern void install_sublevel(void);
 extern void install_sublevel_end(void);
-extern int _install_keyword(char *string, int (*handler) (vector),
-                           int (*print) (char *, int, void *), int unique);
+extern int _install_keyword(char *string, int (*handler) (struct config *, vector),
+                           int (*print) (struct config *, char *, int, void *), int unique);
 #define install_keyword(str, vec, pri) _install_keyword(str, vec, pri, 1)
 #define install_keyword_multi(str, vec, pri) _install_keyword(str, vec, pri, 0)
 extern void dump_keywords(vector keydump, int level);
@@ -71,7 +73,7 @@ extern void free_keywords(vector keywords);
 extern vector alloc_strvec(char *string);
 extern void *set_value(vector strvec);
 extern int alloc_keywords(void);
-extern int process_file(char *conf_file);
+extern int process_file(struct config *conf, char *conf_file);
 extern struct keyword * find_keyword(vector v, char * name);
 void set_current_keywords (vector *k);
 int snprint_keyword(char *buff, int len, char *fmt, struct keyword *kw,
index 03c7859..fe3902f 100644 (file)
 #include "vector.h"
 #include "structs.h"
 #include "structs_vec.h"
-#include "print.h"
 #include "dmparser.h"
 #include "config.h"
 #include "configure.h"
 #include "pgpolicies.h"
+#include "print.h"
 #include "defaults.h"
 #include "parser.h"
 #include "blacklist.h"
@@ -1354,7 +1354,7 @@ out:
 }
 
 extern int
-snprint_defaults (char * buff, int len)
+snprint_defaults (struct config *conf, char * buff, int len)
 {
        int fwd = 0;
        int i;
@@ -1436,7 +1436,7 @@ snprint_blacklist_devgroup (char *buff, int len, int *fwd, vector *vec)
 }
 
 extern int
-snprint_blacklist_report (char * buff, int len)
+snprint_blacklist_report (struct config *conf, char * buff, int len)
 {
        int threshold = MAX_LINE_LEN;
        int fwd = 0;
@@ -1499,7 +1499,7 @@ snprint_blacklist_report (char * buff, int len)
 }
 
 extern int
-snprint_blacklist (char * buff, int len)
+snprint_blacklist (struct config *conf, char * buff, int len)
 {
        int i;
        struct blentry * ble;
@@ -1576,7 +1576,7 @@ snprint_blacklist (char * buff, int len)
 }
 
 extern int
-snprint_blacklist_except (char * buff, int len)
+snprint_blacklist_except (struct config *conf, char * buff, int len)
 {
        int i;
        struct blentry * ele;
@@ -1685,7 +1685,7 @@ snprint_status (char * buff, int len, struct vectors *vecs)
 }
 
 extern int
-snprint_devices (char * buff, int len, struct vectors *vecs)
+snprint_devices (struct config *conf, char * buff, int len, struct vectors *vecs)
 {
        DIR *blkdir;
        struct dirent *blkdev;
index 72758ad..023f520 100644 (file)
@@ -102,13 +102,13 @@ int snprint_multipath_topology_json (char * buff, int len,
                                struct vectors * vecs);
 int snprint_multipath_map_json (char * buff, int len,
                                struct multipath * mpp, int last);
-int snprint_defaults (char *, int);
-int snprint_blacklist (char *, int);
-int snprint_blacklist_except (char *, int);
-int snprint_blacklist_report (char *, int);
+int snprint_defaults (struct config *, char *, int);
+int snprint_blacklist (struct config *, char *, int);
+int snprint_blacklist_except (struct config *, char *, int);
+int snprint_blacklist_report (struct config *, char *, int);
 int snprint_wildcards (char *, int);
 int snprint_status (char *, int, struct vectors *);
-int snprint_devices (char *, int, struct vectors *);
+int snprint_devices (struct config *, char *, int, struct vectors *);
 int snprint_hwtable (char *, int, vector);
 int snprint_mptable (char *, int, vector);
 int snprint_overrides (char *, int, struct hwentry *);
index 28e7414..beb0798 100644 (file)
@@ -82,7 +82,7 @@ do_attr_set(var, mp->mpe, shift, "(LUN setting)")
 do_attr_set(var, conf, shift, "(config file default)")
 
 extern int
-select_mode (struct multipath *mp)
+select_mode (struct config *conf, struct multipath *mp)
 {
        char *origin;
 
@@ -96,7 +96,7 @@ out:
 }
 
 extern int
-select_uid (struct multipath *mp)
+select_uid (struct config *conf, struct multipath *mp)
 {
        char *origin;
 
@@ -110,7 +110,7 @@ out:
 }
 
 extern int
-select_gid (struct multipath *mp)
+select_gid (struct config *conf, struct multipath *mp)
 {
        char *origin;
 
@@ -129,7 +129,7 @@ out:
  * stop at first explicit setting found
  */
 extern int
-select_rr_weight (struct multipath * mp)
+select_rr_weight (struct config *conf, struct multipath * mp)
 {
        char *origin, buff[13];
 
@@ -145,7 +145,7 @@ out:
 }
 
 extern int
-select_pgfailback (struct multipath * mp)
+select_pgfailback (struct config *conf, struct multipath * mp)
 {
        char *origin, buff[13];
 
@@ -161,7 +161,7 @@ out:
 }
 
 extern int
-select_pgpolicy (struct multipath * mp)
+select_pgpolicy (struct config *conf, struct multipath * mp)
 {
        char *origin, buff[POLICY_NAME_SIZE];
 
@@ -183,7 +183,7 @@ out:
 }
 
 extern int
-select_selector (struct multipath * mp)
+select_selector (struct config *conf, struct multipath * mp)
 {
        char *origin;
 
@@ -200,7 +200,7 @@ out:
 }
 
 static void
-select_alias_prefix (struct multipath * mp)
+select_alias_prefix (struct config *conf, struct multipath * mp)
 {
        char *origin;
 
@@ -214,7 +214,7 @@ out:
 }
 
 static int
-want_user_friendly_names(struct multipath * mp)
+want_user_friendly_names(struct config *conf, struct multipath * mp)
 {
 
        char *origin;
@@ -237,7 +237,7 @@ out:
 }
 
 extern int
-select_alias (struct multipath * mp)
+select_alias (struct config *conf, struct multipath * mp)
 {
        char *origin = NULL;
 
@@ -248,10 +248,10 @@ select_alias (struct multipath * mp)
        }
 
        mp->alias = NULL;
-       if (!want_user_friendly_names(mp))
+       if (!want_user_friendly_names(conf, mp))
                goto out;
 
-       select_alias_prefix(mp);
+       select_alias_prefix(conf, mp);
 
        if (strlen(mp->alias_old) > 0) {
                mp->alias = use_existing_alias(mp->wwid, conf->bindings_file,
@@ -277,7 +277,7 @@ out:
 }
 
 extern int
-select_features (struct multipath * mp)
+select_features (struct config *conf, struct multipath * mp)
 {
        char *origin;
 
@@ -303,7 +303,7 @@ out:
 }
 
 extern int
-select_hwhandler (struct multipath * mp)
+select_hwhandler (struct config *conf, struct multipath * mp)
 {
        char *origin;
 
@@ -318,7 +318,7 @@ out:
 }
 
 extern int
-select_checker(struct path *pp)
+select_checker(struct config *conf, struct path *pp)
 {
        char *origin, *checker_name;
        struct checker * c = &pp->checker;
@@ -347,7 +347,7 @@ out:
 }
 
 extern int
-select_getuid (struct path * pp)
+select_getuid (struct config *conf, struct path * pp)
 {
        char *origin;
 
@@ -369,7 +369,7 @@ out:
 }
 
 void
-detect_prio(struct path * pp)
+detect_prio(struct config *conf, struct path * pp)
 {
        int ret;
        struct prio *p = &pp->prio;
@@ -387,24 +387,24 @@ detect_prio(struct path * pp)
        prio_get(conf->multipath_dir, p, PRIO_ALUA, DEFAULT_PRIO_ARGS);
 }
 
-#define set_prio(dir, src, msg)                                                \
+#define set_prio(dir, src, msg)                                        \
 do {                                                                   \
        if (src && src->prio_name) {                                    \
-               prio_get(dir, p, src->prio_name, src->prio_args); \
+               prio_get(dir, p, src->prio_name, src->prio_args);       \
                origin = msg;                                           \
                goto out;                                               \
        }                                                               \
 } while(0)
 
 extern int
-select_prio (struct path * pp)
+select_prio (struct config *conf, struct path * pp)
 {
        char *origin;
        struct mpentry * mpe;
        struct prio * p = &pp->prio;
 
        if (pp->detect_prio == DETECT_PRIO_ON) {
-               detect_prio(pp);
+               detect_prio(conf, pp);
                if (prio_selected(p)) {
                        origin = "(detected setting)";
                        goto out;
@@ -435,7 +435,7 @@ out:
 }
 
 extern int
-select_no_path_retry(struct multipath *mp)
+select_no_path_retry(struct config *conf, struct multipath *mp)
 {
        char *origin = NULL;
        char buff[12];
@@ -464,7 +464,7 @@ out:
 }
 
 int
-select_minio_rq (struct multipath * mp)
+select_minio_rq (struct config *conf, struct multipath * mp)
 {
        char *origin;
 
@@ -479,7 +479,7 @@ out:
 }
 
 int
-select_minio_bio (struct multipath * mp)
+select_minio_bio (struct config *conf, struct multipath * mp)
 {
        char *origin;
 
@@ -494,18 +494,18 @@ out:
 }
 
 extern int
-select_minio (struct multipath * mp)
+select_minio (struct config *conf, struct multipath * mp)
 {
        unsigned int minv_dmrq[3] = {1, 1, 0};
 
        if (VERSION_GE(conf->version, minv_dmrq))
-               return select_minio_rq(mp);
+               return select_minio_rq(conf, mp);
        else
-               return select_minio_bio(mp);
+               return select_minio_bio(conf, mp);
 }
 
 extern int
-select_fast_io_fail(struct multipath *mp)
+select_fast_io_fail(struct config *conf, struct multipath *mp)
 {
        char *origin, buff[12];
 
@@ -520,7 +520,7 @@ out:
 }
 
 extern int
-select_dev_loss(struct multipath *mp)
+select_dev_loss(struct config *conf, struct multipath *mp)
 {
        char *origin, buff[12];
 
@@ -536,7 +536,7 @@ out:
 }
 
 extern int
-select_flush_on_last_del(struct multipath *mp)
+select_flush_on_last_del(struct config *conf, struct multipath *mp)
 {
        char *origin;
 
@@ -554,7 +554,7 @@ out:
 }
 
 extern int
-select_reservation_key (struct multipath * mp)
+select_reservation_key (struct config *conf, struct multipath * mp)
 {
        char *origin, buff[12];
 
@@ -569,7 +569,7 @@ out:
 }
 
 extern int
-select_retain_hwhandler (struct multipath * mp)
+select_retain_hwhandler (struct config *conf, struct multipath * mp)
 {
        char *origin;
        unsigned int minv_dm_retain[3] = {1, 5, 0};
@@ -591,7 +591,7 @@ out:
 }
 
 extern int
-select_detect_prio (struct path * pp)
+select_detect_prio (struct config *conf, struct path * pp)
 {
        char *origin;
 
@@ -606,7 +606,7 @@ out:
 }
 
 extern int
-select_deferred_remove (struct multipath *mp)
+select_deferred_remove (struct config *conf, struct multipath *mp)
 {
        char *origin;
 
@@ -632,7 +632,7 @@ out:
 }
 
 extern int
-select_delay_watch_checks(struct multipath *mp)
+select_delay_watch_checks(struct config *conf, struct multipath *mp)
 {
        char *origin, buff[12];
 
@@ -648,7 +648,7 @@ out:
 }
 
 extern int
-select_delay_wait_checks(struct multipath *mp)
+select_delay_wait_checks(struct config *conf, struct multipath *mp)
 {
        char *origin, buff[12];
 
index f9598e7..5941a5f 100644 (file)
@@ -1,24 +1,24 @@
-int select_rr_weight (struct multipath * mp);
-int select_pgfailback (struct multipath * mp);
-int select_pgpolicy (struct multipath * mp);
-int select_selector (struct multipath * mp);
-int select_alias (struct multipath * mp);
-int select_features (struct multipath * mp);
-int select_hwhandler (struct multipath * mp);
-int select_checker(struct path *pp);
-int select_getuid (struct path * pp);
-int select_prio (struct path * pp);
-int select_no_path_retry(struct multipath *mp);
-int select_flush_on_last_del(struct multipath *mp);
-int select_minio(struct multipath *mp);
-int select_mode(struct multipath *mp);
-int select_uid(struct multipath *mp);
-int select_gid(struct multipath *mp);
-int select_fast_io_fail(struct multipath *mp);
-int select_dev_loss(struct multipath *mp);
-int select_reservation_key(struct multipath *mp);
-int select_retain_hwhandler (struct multipath * mp);
-int select_detect_prio(struct path * pp);
-int select_deferred_remove(struct multipath *mp);
-int select_delay_watch_checks (struct multipath * mp);
-int select_delay_wait_checks (struct multipath * mp);
+int select_rr_weight (struct config *conf, struct multipath * mp);
+int select_pgfailback (struct config *conf, struct multipath * mp);
+int select_pgpolicy (struct config *conf, struct multipath * mp);
+int select_selector (struct config *conf, struct multipath * mp);
+int select_alias (struct config *conf, struct multipath * mp);
+int select_features (struct config *conf, struct multipath * mp);
+int select_hwhandler (struct config *conf, struct multipath * mp);
+int select_checker(struct config *conf, struct path *pp);
+int select_getuid (struct config *conf, struct path * pp);
+int select_prio (struct config *conf, struct path * pp);
+int select_no_path_retry(struct config *conf, struct multipath *mp);
+int select_flush_on_last_del(struct config *conf, struct multipath *mp);
+int select_minio(struct config *conf, struct multipath *mp);
+int select_mode(struct config *conf, struct multipath *mp);
+int select_uid(struct config *conf, struct multipath *mp);
+int select_gid(struct config *conf, struct multipath *mp);
+int select_fast_io_fail(struct config *conf, struct multipath *mp);
+int select_dev_loss(struct config *conf, struct multipath *mp);
+int select_reservation_key(struct config *conf, struct multipath *mp);
+int select_retain_hwhandler (struct config *conf, struct multipath * mp);
+int select_detect_prio(struct config *conf, struct path * pp);
+int select_deferred_remove(struct config *conf, struct multipath *mp);
+int select_delay_watch_checks (struct config *conf, struct multipath * mp);
+int select_delay_wait_checks (struct config *conf, struct multipath * mp);
index dee6447..74db124 100644 (file)
@@ -6,13 +6,13 @@
 #include "vector.h"
 #include "defaults.h"
 #include "debug.h"
+#include "config.h"
 #include "structs.h"
 #include "structs_vec.h"
 #include "sysfs.h"
 #include "waiter.h"
 #include "devmapper.h"
 #include "dmparser.h"
-#include "config.h"
 #include "propsel.h"
 #include "discovery.h"
 #include "prio.h"
@@ -337,11 +337,11 @@ update_multipath_strings (struct multipath *mpp, vector pathvec, int is_daemon)
 }
 
 extern void
-set_no_path_retry(struct multipath *mpp)
+set_no_path_retry(struct config *conf, struct multipath *mpp)
 {
        mpp->retry_tick = 0;
        mpp->nr_active = pathcount(mpp, PATH_UP) + pathcount(mpp, PATH_GHOST);
-       select_no_path_retry(mpp);
+       select_no_path_retry(conf, mpp);
 
        switch (mpp->no_path_retry) {
        case NO_PATH_RETRY_UNDEF:
@@ -396,10 +396,10 @@ __setup_multipath (struct vectors * vecs, struct multipath * mpp,
                        mpp->alias);
        }
        if (reset) {
-               select_rr_weight(mpp);
-               select_pgfailback(mpp);
-               set_no_path_retry(mpp);
-               select_flush_on_last_del(mpp);
+               select_rr_weight(conf, mpp);
+               select_pgfailback(conf, mpp);
+               set_no_path_retry(conf, mpp);
+               select_flush_on_last_del(conf, mpp);
                if (VECTOR_SIZE(mpp->paths) != 0)
                        dm_cancel_deferred_remove(mpp);
        }
@@ -475,7 +475,7 @@ add_map_with_path (struct vectors * vecs,
 
        strcpy(mpp->wwid, pp->wwid);
        find_existing_alias(mpp, vecs);
-       if (select_alias(mpp))
+       if (select_alias(conf, mpp))
                goto out;
        mpp->size = pp->size;
 
index c8e78b5..8ef547d 100644 (file)
@@ -1,6 +1,8 @@
 #ifndef _STRUCTS_VEC_H
 #define _STRUCTS_VEC_H
 
+#include "vector.h"
+#include "config.h"
 #include "lock.h"
 /*
 struct mutex_lock {
@@ -13,7 +15,7 @@ struct vectors {
        vector mpvec;
 };
 
-void set_no_path_retry(struct multipath *mpp);
+void set_no_path_retry(struct config *conf, struct multipath *mpp);
 
 int adopt_paths (vector pathvec, struct multipath * mpp);
 void orphan_paths (vector pathvec, struct multipath * mpp);
index 6937034..219876b 100644 (file)
@@ -13,6 +13,7 @@
 #include "vector.h"
 #include "memory.h"
 #include "checkers.h"
+#include "config.h"
 #include "structs.h"
 #include "structs_vec.h"
 #include "devmapper.h"
index b80d3bc..5194511 100644 (file)
@@ -5,6 +5,7 @@
 #include <fcntl.h>
 #include <checkers.h>
 #include <vector.h>
+#include <config.h>
 #include <structs.h>
 #include <getopt.h>
 #include <libudev.h>
index a6f593f..0d95572 100644 (file)
 #include <devmapper.h>
 #include <util.h>
 #include <defaults.h>
+#include <config.h>
 #include <structs.h>
 #include <structs_vec.h>
 #include <dmparser.h>
 #include <sysfs.h>
-#include <config.h>
 #include <blacklist.h>
 #include <discovery.h>
 #include <debug.h>
@@ -395,7 +395,7 @@ out:
 }
 
 static int
-dump_config (void)
+dump_config (struct config *conf)
 {
        char * c, * tmp = NULL;
        char * reply;
@@ -411,19 +411,19 @@ dump_config (void)
                        return 1;
                }
                c = tmp = reply;
-               c += snprint_defaults(c, reply + maxlen - c);
+               c += snprint_defaults(conf, c, reply + maxlen - c);
                again = ((c - reply) == maxlen);
                if (again) {
                        reply = REALLOC(reply, maxlen *= 2);
                        continue;
                }
-               c += snprint_blacklist(c, reply + maxlen - c);
+               c += snprint_blacklist(conf, c, reply + maxlen - c);
                again = ((c - reply) == maxlen);
                if (again) {
                        reply = REALLOC(reply, maxlen *= 2);
                        continue;
                }
-               c += snprint_blacklist_except(c, reply + maxlen - c);
+               c += snprint_blacklist_except(conf, c, reply + maxlen - c);
                again = ((c - reply) == maxlen);
                if (again) {
                        reply = REALLOC(reply, maxlen *= 2);
@@ -549,7 +549,7 @@ main (int argc, char *argv[])
                        conf->ignore_wwids = 1;
                        break;
                case 't':
-                       r = dump_config();
+                       r = dump_config(conf);
                        goto out_free_config;
                case 'h':
                        usage(argv[0]);
index 90259ae..36c77da 100644 (file)
@@ -233,17 +233,17 @@ show_config (char ** r, int * len)
                if (!reply)
                        return 1;
                c = reply;
-               c += snprint_defaults(c, reply + maxlen - c);
+               c += snprint_defaults(conf, c, reply + maxlen - c);
                again = ((c - reply) == maxlen);
                REALLOC_REPLY(reply, again, maxlen);
                if (again)
                        continue;
-               c += snprint_blacklist(c, reply + maxlen - c);
+               c += snprint_blacklist(conf, c, reply + maxlen - c);
                again = ((c - reply) == maxlen);
                REALLOC_REPLY(reply, again, maxlen);
                if (again)
                        continue;
-               c += snprint_blacklist_except(c, reply + maxlen - c);
+               c += snprint_blacklist_except(conf, c, reply + maxlen - c);
                again = ((c - reply) == maxlen);
                REALLOC_REPLY(reply, again, maxlen);
                if (again)
@@ -1162,7 +1162,7 @@ show_blacklist (char ** r, int * len)
                        return 1;
 
                c = reply;
-               c += snprint_blacklist_report(c, maxlen);
+               c += snprint_blacklist_report(conf, c, maxlen);
                again = ((c - reply) == maxlen);
                REALLOC_REPLY(reply, again, maxlen);
        }
@@ -1196,7 +1196,7 @@ show_devices (char ** r, int * len, struct vectors *vecs)
                        return 1;
 
                c = reply;
-               c += snprint_devices(c, maxlen, vecs);
+               c += snprint_devices(conf, c, maxlen, vecs);
                again = ((c - reply) == maxlen);
                REALLOC_REPLY(reply, again, maxlen);
        }
index f0caca5..66388f8 100644 (file)
@@ -21,8 +21,6 @@
 #include <systemd/sd-daemon.h>
 #endif
 #include <semaphore.h>
-#include <mpath_cmd.h>
-#include <mpath_persist.h>
 #include <time.h>
 
 /*
@@ -65,6 +63,10 @@ int uxsock_timeout;
 #include <pgpolicies.h>
 #include <uevent.h>
 #include <log.h>
+
+#include <mpath_cmd.h>
+#include <mpath_persist.h>
+
 #include "prioritizers/alua_rtpg.h"
 
 #include "main.h"