+++ /dev/null
----
- libmultipath/config.h | 15 ++++++++-
- libmultipath/configure.c | 2 -
- libmultipath/discovery.c | 5 +--
- multipath/main.c | 75 +++++++++++++++++++++++++----------------------
- multipath/multipath.8 | 5 ++-
- 5 files changed, 61 insertions(+), 41 deletions(-)
-
-Index: multipath-tools-130222/libmultipath/config.h
-===================================================================
---- multipath-tools-130222.orig/libmultipath/config.h
-+++ multipath-tools-130222/libmultipath/config.h
-@@ -23,6 +23,17 @@ enum devtypes {
- DEV_DEVMAP
- };
-
-+enum mpath_cmds {
-+ CMD_CREATE,
-+ CMD_DRY_RUN,
-+ CMD_LIST_SHORT,
-+ CMD_LIST_LONG,
-+ CMD_VALID_PATH,
-+ CMD_REMOVE_WWID,
-+ CMD_RESET_WWIDS,
-+ CMD_ADD_WWID,
-+};
-+
- struct hwentry {
- char * vendor;
- char * product;
-@@ -79,8 +90,7 @@ struct mpentry {
-
- struct config {
- int verbosity;
-- int dry_run;
-- int list;
-+ enum mpath_cmds cmd;
- int pgpolicy_flag;
- int pgpolicy;
- enum devtypes dev_type;
-@@ -98,6 +108,7 @@ struct config {
- int max_fds;
- int force_reload;
- int queue_without_daemon;
-+ int ignore_wwids;
- int checker_timeout;
- int daemon;
- int flush_on_last_del;
-Index: multipath-tools-130222/multipath/main.c
-===================================================================
---- multipath-tools-130222.orig/multipath/main.c
-+++ multipath-tools-130222/multipath/main.c
-@@ -85,7 +85,7 @@ usage (char * progname)
- {
- fprintf (stderr, VERSION_STRING);
- fprintf (stderr, "Usage:\n");
-- fprintf (stderr, " %s [-a|-A|-c|-w|-W] [-d] [-T tm:val] [-r] [-v lvl] [-p pol] [-b fil] [-q] [dev]\n", progname);
-+ fprintf (stderr, " %s [-a|-A|-c|-w|-W] [-d] [-T tm:val] [-r] [-i] [-v lvl] [-p pol] [-b fil] [-q] [dev]\n", progname);
- fprintf (stderr, " %s -l|-ll|-f [-v lvl] [-b fil] [dev]\n", progname);
- fprintf (stderr, " %s -F [-v lvl]\n", progname);
- fprintf (stderr, " %s -t\n", progname);
-@@ -109,6 +109,7 @@ usage (char * progname)
- " -d dry run, do not create or update devmaps\n" \
- " -t dump internal hardware table\n" \
- " -r force devmap reload\n" \
-+ " -i ignore wwids file\n" \
- " -B treat the bindings file as read only\n" \
- " -p policy failover|multibus|group_by_serial|group_by_prio\n" \
- " -b fil bindings file location\n" \
-@@ -209,18 +210,19 @@ get_dm_mpvec (vector curmp, vector pathv
- * If not in "fast list mode", we need to fetch information
- * about them
- */
-- if (conf->list != 1)
-+ if (conf->cmd != CMD_LIST_SHORT)
- update_paths(mpp);
-
-- if (conf->list > 1)
-+ if (conf->cmd == CMD_LIST_LONG)
- mpp->bestpg = select_path_group(mpp);
-
- disassemble_status(status, mpp);
-
-- if (conf->list)
-+ if (conf->cmd == CMD_LIST_SHORT ||
-+ conf->cmd == CMD_LIST_LONG)
- print_multipath_topology(mpp, conf->verbosity);
-
-- if (!conf->dry_run)
-+ if (conf->cmd == CMD_CREATE)
- reinstate_paths(mpp);
- }
- return 0;
-@@ -262,10 +264,11 @@ configure (void)
- /*
- * if we have a blacklisted device parameter, exit early
- */
-- if (dev && conf->dev_type == DEV_DEVNODE && conf->dry_run != 3 &&
-+ if (dev && conf->dev_type == DEV_DEVNODE &&
-+ conf->cmd != CMD_REMOVE_WWID &&
- (filter_devnode(conf->blist_devnode,
- conf->elist_devnode, dev) > 0)) {
-- if (conf->dry_run == 2)
-+ if (conf->cmd == CMD_VALID_PATH)
- printf("%s is not a valid multipath device path\n",
- conf->dev);
- goto out;
-@@ -278,13 +281,13 @@ configure (void)
- int failed = get_refwwid(conf->dev, conf->dev_type, pathvec,
- &refwwid);
- if (!refwwid) {
-- if (failed == 2 && conf->dry_run == 2)
-+ if (failed == 2 && conf->cmd == CMD_VALID_PATH)
- printf("%s is not a valid multipath device path\n", conf->dev);
- else
- condlog(3, "scope is nul");
- goto out;
- }
-- if (conf->dry_run == 3) {
-+ if (conf->cmd == CMD_REMOVE_WWID) {
- r = remove_wwid(refwwid);
- if (r == 0)
- printf("wwid '%s' removed\n", refwwid);
-@@ -295,7 +298,7 @@ configure (void)
- }
- goto out;
- }
-- if (conf->dry_run == 5) {
-+ if (conf->cmd == CMD_ADD_WWID) {
- r = remember_wwid(refwwid);
- if (r == 0)
- printf("wwid '%s' added\n", refwwid);
-@@ -305,13 +308,13 @@ configure (void)
- goto out;
- }
- condlog(3, "scope limited to %s", refwwid);
-- if (conf->dry_run == 2) {
-- if (check_wwids_file(refwwid, 0) == 0){
-- printf("%s is a valid multipath device path\n", conf->dev);
-+ if (conf->cmd == CMD_VALID_PATH) {
-+ if (conf->ignore_wwids ||
-+ check_wwids_file(refwwid, 0) == 0)
- r = 0;
-- }
-- else
-- printf("%s is not a valid multipath device path\n", conf->dev);
-+
-+ printf("%s %s a valid multipath device path\n",
-+ conf->dev, r == 0 ? "is" : "is not");
- goto out;
- }
- }
-@@ -319,13 +322,13 @@ configure (void)
- /*
- * get a path list
- */
-- if (conf->dev && !conf->list)
-+ if (conf->dev)
- di_flag = DI_WWID;
-
-- if (conf->list > 1)
-+ if (conf->cmd == CMD_LIST_LONG)
- /* extended path info '-ll' */
- di_flag |= DI_SYSFS | DI_CHECKER;
-- else if (conf->list)
-+ else if (conf->cmd == CMD_LIST_SHORT)
- /* minimum path info '-l' */
- di_flag |= DI_SYSFS;
- else
-@@ -345,7 +348,7 @@ configure (void)
-
- filter_pathvec(pathvec, refwwid);
-
-- if (conf->list) {
-+ if (conf->cmd != CMD_CREATE && conf->cmd != CMD_DRY_RUN) {
- r = 0;
- goto out;
- }
-@@ -440,7 +443,7 @@ main (int argc, char *argv[])
- int r = 1;
- long int timestamp = -1;
- int valid = -1;
-- while ((arg = getopt(argc, argv, ":aAdchl::FfM:v:p:b:BrtT:qwW")) != EOF ) {
-+ while ((arg = getopt(argc, argv, ":aAdchl::FfM:v:p:b:BritT:qwW")) != EOF ) {
- switch(arg) {
- case 'T':
- if (optarg[0] == ':')
-@@ -476,7 +479,7 @@ main (int argc, char *argv[])
- if (dm_prereq())
- exit(1);
-
-- while ((arg = getopt(argc, argv, ":aAdchl::FfM:v:p:b:BrtT:qwW")) != EOF ) {
-+ while ((arg = getopt(argc, argv, ":aAdchl::FfM:v:p:b:BritT:qwW")) != EOF ) {
- switch(arg) {
- case 1: printf("optarg : %s\n",optarg);
- break;
-@@ -499,11 +502,11 @@ main (int argc, char *argv[])
- conf->allow_queueing = 1;
- break;
- case 'c':
-- conf->dry_run = 2;
-+ conf->cmd = CMD_VALID_PATH;
- break;
- case 'd':
-- if (!conf->dry_run)
-- conf->dry_run = 1;
-+ if (conf->cmd == CMD_CREATE)
-+ conf->cmd = CMD_DRY_RUN;
- break;
- case 'f':
- conf->remove = FLUSH_ONE;
-@@ -512,11 +515,10 @@ main (int argc, char *argv[])
- conf->remove = FLUSH_ALL;
- break;
- case 'l':
-- conf->list = 1;
-- conf->dry_run = 1;
--
- if (optarg && !strncmp(optarg, "l", 1))
-- conf->list++;
-+ conf->cmd = CMD_LIST_LONG;
-+ else
-+ conf->cmd = CMD_LIST_SHORT;
-
- break;
- case 'M':
-@@ -535,6 +537,9 @@ main (int argc, char *argv[])
- case 'r':
- conf->force_reload = 1;
- break;
-+ case 'i':
-+ conf->ignore_wwids = 1;
-+ break;
- case 't':
- r = dump_config();
- goto out;
-@@ -548,13 +553,13 @@ main (int argc, char *argv[])
- usage(argv[0]);
- exit(0);
- case 'w':
-- conf->dry_run = 3;
-+ conf->cmd = CMD_REMOVE_WWID;
- break;
- case 'W':
-- conf->dry_run = 4;
-+ conf->cmd = CMD_RESET_WWIDS;
- break;
- case 'a':
-- conf->dry_run = 5;
-+ conf->cmd = CMD_ADD_WWID;
- break;
- case ':':
- fprintf(stderr, "Missing option argument\n");
-@@ -600,16 +605,16 @@ main (int argc, char *argv[])
- }
- dm_init();
-
-- if (conf->dry_run == 2 &&
-+ if (conf->cmd == CMD_VALID_PATH &&
- (!conf->dev || conf->dev_type == DEV_DEVMAP)) {
- condlog(0, "the -c option requires a path to check");
- goto out;
- }
-- if (conf->dry_run == 3 && !conf->dev) {
-+ if (conf->cmd == CMD_REMOVE_WWID && !conf->dev) {
- condlog(0, "the -w option requires a device");
- goto out;
- }
-- if (conf->dry_run == 4) {
-+ if (conf->cmd == CMD_RESET_WWIDS) {
- struct multipath * mpp;
- int i;
- vector curmp;
-Index: multipath-tools-130222/multipath/multipath.8
-===================================================================
---- multipath-tools-130222.orig/multipath/multipath.8
-+++ multipath-tools-130222/multipath/multipath.8
-@@ -8,7 +8,7 @@ multipath \- Device mapper target autoco
- .RB [\| \-b\ \c
- .IR bindings_file \|]
- .RB [\| \-d \|]
--.RB [\| \-h | \-l | \-ll | \-f | \-t | \-F | \-B | \-c | \-q | \|-r | \-a | \-A | \-w | \-W \|]
-+.RB [\| \-h | \-l | \-ll | \-f | \-t | \-F | \-B | \-c | \-q | \|-r | \-r | \-a | \-A | \-w | \-W \|]
- .RB [\| \-p\ \c
- .BR failover | multibus | group_by_serial | group_by_prio | group_by_node_name \|]
- .RB [\| device \|]
-@@ -55,6 +55,9 @@ print internal hardware table to stdout
- .B \-r
- force devmap reload
- .TP
-+.B \-i
-+ignore wwids file when processing devices
-+.TP
- .B \-B
- treat the bindings file as read only
- .TP
-Index: multipath-tools-130222/libmultipath/configure.c
-===================================================================
---- multipath-tools-130222.orig/libmultipath/configure.c
-+++ multipath-tools-130222/libmultipath/configure.c
-@@ -580,7 +580,7 @@ domap (struct multipath * mpp, char * pa
- /*
- * last chance to quit before touching the devmaps
- */
-- if (conf->dry_run && mpp->action != ACT_NOTHING) {
-+ if (conf->cmd == CMD_DRY_RUN && mpp->action != ACT_NOTHING) {
- print_multipath_topology(mpp, conf->verbosity);
- return DOMAP_DRY;
- }
-Index: multipath-tools-130222/libmultipath/discovery.c
-===================================================================
---- multipath-tools-130222.orig/libmultipath/discovery.c
-+++ multipath-tools-130222/libmultipath/discovery.c
-@@ -54,7 +54,8 @@ store_pathinfo (vector pathvec, vector h
- }
- pp->udev = udev_device_ref(udevice);
- err = pathinfo(pp, hwtable,
-- (conf->dry_run == 3)? flag : (flag | DI_BLACKLIST));
-+ (conf->cmd == CMD_REMOVE_WWID)? flag :
-+ (flag | DI_BLACKLIST));
- if (err)
- goto out;
-
-@@ -1101,7 +1102,7 @@ get_uid (struct path * pp)
-
- memset(pp->wwid, 0, WWID_SIZE);
- value = udev_device_get_property_value(pp->udev, pp->uid_attribute);
-- if ((!value || strlen(value) == 0) && conf->dry_run == 2)
-+ if ((!value || strlen(value) == 0) && conf->cmd == CMD_VALID_PATH)
- value = getenv(pp->uid_attribute);
- if (value && strlen(value)) {
- size_t len = WWID_SIZE;