[device-mapper-multipath] Updated to latest upstream 0.4.9 code : multipath-tools-120613.tgz (git commit id: cb0f7127ba90ab5

Benjamin Marzinski bmarzins at fedoraproject.org
Thu Jun 28 23:32:23 UTC 2012


commit 91daccef68640e2e9f9a30205f19dde324201e9a
Author: Benjamin Marzinski <bmarzins at redhat.com>
Date:   Thu Jun 28 12:41:03 2012 -0500

    Updated to latest upstream 0.4.9 code : multipath-tools-120613.tgz
      (git commit id: cb0f7127ba90ab5e8e71fc534a0a16cdbe96a88f)
    Add 0001-RH-remove_callout.patch
      * multipath no longer uses the getuid callout.  It now gets the
        wwid from the udev database or the environment variables
    Add 0004-RH-fix-cciss-names.patch
      * convert cciss device names from cciss/cXdY to sysfs style cciss!cXdY
    Split 0009-RH-add-find-multipaths.patch into 0002-RH-add-wwids-file.patch
          and 0010-RH-add-find-multipaths.patch
    Add 0016-RH-change-configs.patch
      * default fast_io_fail to 5 and don't set the path selector in the
        builtin configs.
    Resolves: bz #831978

 .gitignore                                         |    1 +
 0001-RH-fix-async-tur.patch                        |  242 ---------
 0001-RH-remove_callout.patch                       |  279 ++++++++++
 ...ultipaths.patch => 0002-RH-add-wwids-file.patch |  458 +++++++----------
 ...ollowover.patch => 0003-RH-add-followover.patch |  137 ++++-
 0004-RH-fix-cciss-names.patch                      |   34 ++
 0004-RH-update-init-script.patch                   |   76 ---
 0005-RH-cciss_id.patch                             |  219 --------
 ...atch => 0005-RH-dont_start_with_no_config.patch |    0
 ...th.rules.patch => 0006-RH-multipath.rules.patch |   23 +-
 ...7-RH-Make-build-system-RH-Fedora-friendly.patch |   65 ++-
 ...08-RH-multipathd-blacklist-all-by-default.patch |   20 +-
 ...-mpathconf.patch => 0009-RH-add-mpathconf.patch |  102 +---
 0010-RH-add-find-multipaths.patch                  |  222 ++++++++
 0010-RH-check-if-multipath-owns-path.patch         |  119 -----
 0011-RH-add-hp_tur-checker.patch                   |   26 +-
 ...s.patch => 0012-RH-RHEL5-style-partitions.patch |    0
 0012-RH-update-on-show-topology.patch              |  141 -----
 ...atch => 0013-RH-dont-remove-map-on-enomem.patch |    8 +-
 0013-RH-manpage-update.patch                       |  169 ------
 ...e.patch => 0014-RH-deprecate-uid-gid-mode.patch |    0
 ...e-nodes.patch => 0015-RH-use-sync-support.patch |    6 +-
 0016-RH-change-configs.patch                       |  541 ++++++++++++++++++++
 0017-RH-fix-shutdown-crash.patch                   |   69 ---
 0018-RH-warn-on-bad-dev-loss-tmo.patch             |   68 ---
 0020-RH-dont-remove-map-twice.patch                |   17 -
 0021-RH-validate-guid-partitions.patch             |   24 -
 0022-RH-adjust-messages.patch                      |   32 --
 0023-RH-manpage-update.patch                       |   19 -
 0024-RH-libudev-monitor.patch                      |  218 --------
 device-mapper-multipath.spec                       |   86 ++--
 sources                                            |    2 +-
 32 files changed, 1533 insertions(+), 1890 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index b1123c3..dbde256 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,3 @@
 multipath-tools-091027.tar.gz
 /multipath-tools-120123.tgz
+/multipath-tools-120613.tgz
diff --git a/0001-RH-remove_callout.patch b/0001-RH-remove_callout.patch
new file mode 100644
index 0000000..0c03cc4
--- /dev/null
+++ b/0001-RH-remove_callout.patch
@@ -0,0 +1,279 @@
+---
+ libmultipath/Makefile    |    2 
+ libmultipath/callout.c   |  217 -----------------------------------------------
+ libmultipath/callout.h   |    7 -
+ libmultipath/discovery.c |    1 
+ multipathd/main.c        |    1 
+ 5 files changed, 1 insertion(+), 227 deletions(-)
+
+Index: multipath-tools-120518/libmultipath/Makefile
+===================================================================
+--- multipath-tools-120518.orig/libmultipath/Makefile
++++ multipath-tools-120518/libmultipath/Makefile
+@@ -9,7 +9,7 @@ DEVLIB = libmultipath.so
+ LIBS = $(DEVLIB).$(SONAME)
+ LIBDEPS = -lpthread -ldl -ldevmapper -ludev
+ 
+-OBJS = memory.o parser.o vector.o devmapper.o callout.o \
++OBJS = memory.o parser.o vector.o devmapper.o \
+        hwtable.o blacklist.o util.o dmparser.o config.o \
+        structs.o discovery.o propsel.o dict.o \
+        pgpolicies.o debug.o regex.o defaults.o uevent.o \
+Index: multipath-tools-120518/libmultipath/callout.c
+===================================================================
+--- multipath-tools-120518.orig/libmultipath/callout.c
++++ /dev/null
+@@ -1,217 +0,0 @@
+-/*
+- * Source: copy of the udev package source file
+- *
+- * Copyrights of the source file apply
+- * Copyright (c) 2004 Christophe Varoqui
+- */
+-#include <stdio.h>
+-#include <sys/stat.h>
+-#include <string.h>
+-#include <unistd.h>
+-#include <sys/types.h>
+-#include <stdlib.h>
+-#include <fcntl.h>
+-#include <sys/wait.h>
+-#include <errno.h>
+-
+-#include "checkers.h"
+-#include "vector.h"
+-#include "structs.h"
+-#include "util.h"
+-#include "debug.h"
+-
+-int execute_program(char *path, char *value, int len)
+-{
+-	int retval;
+-	int count;
+-	int status;
+-	int fds[2], null_fd;
+-	pid_t pid;
+-	char *pos;
+-	char arg[CALLOUT_MAX_SIZE];
+-	int argc = sizeof(arg) / 2;
+-	char *argv[argc + 1];
+-	int i;
+-
+-	i = 0;
+-
+-	if (strchr(path, ' ')) {
+-		strlcpy(arg, path, sizeof(arg));
+-		pos = arg;
+-		while (pos != NULL && i < argc) {
+-			if (pos[0] == '\'') {
+-				/* don't separate if in apostrophes */
+-				pos++;
+-				argv[i] = strsep(&pos, "\'");
+-				while (pos[0] == ' ')
+-					pos++;
+-			} else {
+-				argv[i] = strsep(&pos, " ");
+-			}
+-			i++;
+-		}
+-	} else {
+-		argv[i++] = path;
+-	}
+-	argv[i] =  NULL;
+-
+-	retval = pipe(fds);
+-
+-	if (retval != 0) {
+-		condlog(0, "error creating pipe for callout: %s", strerror(errno));
+-		return -1;
+-	}
+-
+-	pid = fork();
+-
+-	switch(pid) {
+-	case 0:
+-		/* child */
+-		close(STDOUT_FILENO);
+-
+-		/* dup write side of pipe to STDOUT */
+-		if (dup(fds[1]) < 0)
+-			return -1;
+-
+-		/* Ignore writes to stderr */
+-		null_fd = open("/dev/null", O_WRONLY);
+-		if (null_fd > 0) {
+-			close(STDERR_FILENO);
+-			dup(null_fd);
+-			close(null_fd);
+-		}
+-
+-		retval = execv(argv[0], argv);
+-		condlog(0, "error execing %s : %s", argv[0], strerror(errno));
+-		exit(-1);
+-	case -1:
+-		condlog(0, "fork failed: %s", strerror(errno));
+-		close(fds[0]);
+-		close(fds[1]);
+-		return -1;
+-	default:
+-		/* parent reads from fds[0] */
+-		close(fds[1]);
+-		retval = 0;
+-		i = 0;
+-		while (1) {
+-			count = read(fds[0], value + i, len - i-1);
+-			if (count <= 0)
+-				break;
+-
+-			i += count;
+-			if (i >= len-1) {
+-				condlog(0, "not enough space for response from %s", argv[0]);
+-				retval = -1;
+-				break;
+-			}
+-		}
+-
+-		if (count < 0) {
+-			condlog(0, "no response from %s", argv[0]);
+-			retval = -1;
+-		}
+-
+-		if (i > 0 && value[i-1] == '\n')
+-			i--;
+-		value[i] = '\0';
+-
+-		wait(&status);
+-		close(fds[0]);
+-
+-		retval = -1;
+-		if (WIFEXITED(status)) {
+-			status = WEXITSTATUS(status);
+-			if (status == 0)
+-				retval = 0;
+-			else
+-				condlog(0, "%s exitted with %d", argv[0], status);
+-		}
+-		else if (WIFSIGNALED(status))
+-			condlog(0, "%s was terminated by signal %d", argv[0], WTERMSIG(status));
+-		else
+-			condlog(0, "%s terminated abnormally", argv[0]);
+-	}
+-	return retval;
+-}
+-
+-extern int
+-apply_format (char * string, char * cmd, struct path * pp)
+-{
+-	char * pos;
+-	char * dst;
+-	char * p;
+-	char * q;
+-	int len;
+-	int myfree;
+-
+-	if (!string)
+-		return 1;
+-
+-	if (!cmd)
+-		return 1;
+-
+-	dst = cmd;
+-	p = dst;
+-	pos = strchr(string, '%');
+-	myfree = CALLOUT_MAX_SIZE;
+-
+-	if (!pos) {
+-		strcpy(dst, string);
+-		return 0;
+-	}
+-
+-	len = (int) (pos - string) + 1;
+-	myfree -= len;
+-
+-	if (myfree < 2)
+-		return 1;
+-
+-	snprintf(p, len, "%s", string);
+-	p += len - 1;
+-	pos++;
+-
+-	switch (*pos) {
+-	case 'n':
+-		len = strlen(pp->dev) + 1;
+-		myfree -= len;
+-
+-		if (myfree < 2)
+-			return 1;
+-
+-		snprintf(p, len, "%s", pp->dev);
+-		for (q = p; q < p + len; q++) {
+-			if (q && *q == '!')
+-				*q = '/';
+-		}
+-		p += len - 1;
+-		break;
+-	case 'd':
+-		len = strlen(pp->dev_t) + 1;
+-		myfree -= len;
+-
+-		if (myfree < 2)
+-			return 1;
+-
+-		snprintf(p, len, "%s", pp->dev_t);
+-		p += len - 1;
+-		break;
+-	default:
+-		break;
+-	}
+-	pos++;
+-
+-	if (!*pos)
+-		return 0;
+-
+-	len = strlen(pos) + 1;
+-	myfree -= len;
+-
+-	if (myfree < 2)
+-		return 1;
+-
+-	snprintf(p, len, "%s", pos);
+-	condlog(3, "reformated callout = %s", dst);
+-	return 0;
+-}
+-
+Index: multipath-tools-120518/libmultipath/callout.h
+===================================================================
+--- multipath-tools-120518.orig/libmultipath/callout.h
++++ /dev/null
+@@ -1,7 +0,0 @@
+-#ifndef _CALLOUT_H
+-#define _CALLOUT_H
+-
+-int execute_program(char *, char *, int);
+-int apply_format (char *, char *, struct path *);
+-
+-#endif /* _CALLOUT_H */
+Index: multipath-tools-120518/libmultipath/discovery.c
+===================================================================
+--- multipath-tools-120518.orig/libmultipath/discovery.c
++++ multipath-tools-120518/libmultipath/discovery.c
+@@ -20,7 +20,6 @@
+ #include "structs.h"
+ #include "config.h"
+ #include "blacklist.h"
+-#include "callout.h"
+ #include "debug.h"
+ #include "propsel.h"
+ #include "sg_include.h"
+Index: multipath-tools-120518/multipathd/main.c
+===================================================================
+--- multipath-tools-120518.orig/multipathd/main.c
++++ multipath-tools-120518/multipathd/main.c
+@@ -35,7 +35,6 @@
+ #include <hwtable.h>
+ #include <defaults.h>
+ #include <structs.h>
+-#include <callout.h>
+ #include <blacklist.h>
+ #include <structs_vec.h>
+ #include <dmparser.h>
diff --git a/0009-RH-add-find-multipaths.patch b/0002-RH-add-wwids-file.patch
similarity index 62%
rename from 0009-RH-add-find-multipaths.patch
rename to 0002-RH-add-wwids-file.patch
index b706687..f3014ba 100644
--- a/0009-RH-add-find-multipaths.patch
+++ b/0002-RH-add-wwids-file.patch
@@ -1,24 +1,21 @@
 ---
  libmultipath/Makefile    |    2 
- libmultipath/alias.c     |  151 ---------------------------------------
+ libmultipath/alias.c     |  153 ---------------------------------------
  libmultipath/alias.h     |    1 
- libmultipath/config.c    |    1 
- libmultipath/config.h    |    1 
- libmultipath/configure.c |   14 +++
- libmultipath/defaults.h  |    2 
- libmultipath/dict.c      |   34 ++++++++
- libmultipath/file.c      |  178 +++++++++++++++++++++++++++++++++++++++++++++++
+ libmultipath/configure.c |    3 
+ libmultipath/defaults.h  |    1 
+ libmultipath/discovery.c |    2 
+ libmultipath/file.c      |  180 +++++++++++++++++++++++++++++++++++++++++++++++
  libmultipath/file.h      |   11 ++
- libmultipath/finder.c    |  165 +++++++++++++++++++++++++++++++++++++++++++
- libmultipath/finder.h    |   18 ++++
- multipath/main.c         |    4 -
- multipathd/main.c        |    6 +
- 14 files changed, 437 insertions(+), 151 deletions(-)
+ libmultipath/wwids.c     |  139 ++++++++++++++++++++++++++++++++++++
+ libmultipath/wwids.h     |   18 ++++
+ multipath/main.c         |   37 ++++++++-
+ 11 files changed, 389 insertions(+), 158 deletions(-)
 
-Index: multipath-tools-111219/libmultipath/alias.c
+Index: multipath-tools-120518/libmultipath/alias.c
 ===================================================================
---- multipath-tools-111219.orig/libmultipath/alias.c
-+++ multipath-tools-111219/libmultipath/alias.c
+--- multipath-tools-120518.orig/libmultipath/alias.c
++++ multipath-tools-120518/libmultipath/alias.c
 @@ -3,19 +3,16 @@
   * Copyright (c) 2005 Benjamin Marzinski, Redhat
   */
@@ -40,7 +37,7 @@ Index: multipath-tools-111219/libmultipath/alias.c
  
  
  /*
-@@ -36,148 +33,6 @@
+@@ -36,150 +33,6 @@
   * See the file COPYING included with this distribution for more details.
   */
  
@@ -173,7 +170,9 @@ Index: multipath-tools-111219/libmultipath/alias.c
 -				"Cannot write header to bindings file : %s",
 -				strerror(errno));
 -			/* cleanup partially written header */
--			ftruncate(fd, 0);
+-			if (ftruncate(fd, 0))
+-				condlog(0, "Cannot truncate the header : %s",
+-					strerror(errno));
 -			goto fail;
 -		}
 -		fsync(fd);
@@ -189,7 +188,7 @@ Index: multipath-tools-111219/libmultipath/alias.c
  
  static int
  format_devname(char *name, int id, int len, char *prefix)
-@@ -366,7 +221,7 @@ get_user_friendly_alias(char *wwid, char
+@@ -370,7 +223,7 @@ get_user_friendly_alias(char *wwid, char
  		return NULL;
  	}
  
@@ -198,7 +197,7 @@ Index: multipath-tools-111219/libmultipath/alias.c
  	if (fd < 0)
  		return NULL;
  
-@@ -416,7 +271,7 @@ get_user_friendly_wwid(char *alias, char
+@@ -414,7 +267,7 @@ get_user_friendly_wwid(char *alias, char
  		return NULL;
  	}
  
@@ -207,40 +206,28 @@ Index: multipath-tools-111219/libmultipath/alias.c
  	if (fd < 0)
  		return NULL;
  
-Index: multipath-tools-111219/libmultipath/alias.h
+Index: multipath-tools-120518/libmultipath/alias.h
 ===================================================================
---- multipath-tools-111219.orig/libmultipath/alias.h
-+++ multipath-tools-111219/libmultipath/alias.h
+--- multipath-tools-120518.orig/libmultipath/alias.h
++++ multipath-tools-120518/libmultipath/alias.h
 @@ -1,4 +1,3 @@
 -#define BINDINGS_FILE_TIMEOUT 30
  #define BINDINGS_FILE_HEADER \
  "# Multipath bindings, Version : 1.0\n" \
  "# NOTE: this file is automatically maintained by the multipath program.\n" \
-Index: multipath-tools-111219/libmultipath/config.c
+Index: multipath-tools-120518/libmultipath/configure.c
 ===================================================================
---- multipath-tools-111219.orig/libmultipath/config.c
-+++ multipath-tools-111219/libmultipath/config.c
-@@ -504,6 +504,7 @@ load_config (char * file)
- 	conf->reassign_maps = DEFAULT_REASSIGN_MAPS;
- 	conf->checkint = DEFAULT_CHECKINT;
- 	conf->max_checkint = MAX_CHECKINT(conf->checkint);
-+	conf->find_multipaths = DEFAULT_FIND_MULTIPATHS;
- 
- 	/*
- 	 * preload default hwtable
-Index: multipath-tools-111219/libmultipath/configure.c
-===================================================================
---- multipath-tools-111219.orig/libmultipath/configure.c
-+++ multipath-tools-111219/libmultipath/configure.c
-@@ -36,6 +36,7 @@
+--- multipath-tools-120518.orig/libmultipath/configure.c
++++ multipath-tools-120518/libmultipath/configure.c
+@@ -37,6 +37,7 @@
  #include "prio.h"
  #include "util.h"
  #include "uxsock.h"
-+#include "finder.h"
++#include "wwids.h"
  
  extern int
  setup_map (struct multipath * mpp, char * params, int params_size)
-@@ -405,6 +406,8 @@ domap (struct multipath * mpp, char * pa
+@@ -407,6 +408,8 @@ domap (struct multipath * mpp, char * pa
  		 * DM_DEVICE_CREATE, DM_DEVICE_RENAME, or DM_DEVICE_RELOAD
  		 * succeeded
  		 */
@@ -249,114 +236,22 @@ Index: multipath-tools-111219/libmultipath/configure.c
  		if (!conf->daemon) {
  			/* multipath client mode */
  			dm_switchgroup(mpp->alias, mpp->bestpg);
-@@ -492,6 +495,10 @@ coalesce_paths (struct vectors * vecs, v
- 
- 	memset(empty_buff, 0, WWID_SIZE);
- 
-+	/* ignore refwwid if it's empty */
-+	if (refwwid && !strlen(refwwid))
-+		refwwid = NULL;
-+
- 	if (force_reload) {
- 		vector_foreach_slot (pathvec, pp1, k) {
- 			pp1->mpp = NULL;
-@@ -521,6 +528,13 @@ coalesce_paths (struct vectors * vecs, v
- 		if (refwwid && strncmp(pp1->wwid, refwwid, WWID_SIZE))
- 			continue;
- 
-+		/* If find_multipaths was selected check if the path is valid */
-+		if (conf->find_multipaths && !refwwid &&
-+		    !should_multipath(pp1, pathvec)) {
-+			orphan_path(pp1);
-+			continue;
-+		}
-+
- 		/*
- 		 * at this point, we know we really got a new mp
- 		 */
-Index: multipath-tools-111219/libmultipath/defaults.h
+Index: multipath-tools-120518/libmultipath/defaults.h
 ===================================================================
---- multipath-tools-111219.orig/libmultipath/defaults.h
-+++ multipath-tools-111219/libmultipath/defaults.h
-@@ -15,6 +15,7 @@
- #define DEFAULT_USER_FRIENDLY_NAMES    0
- #define DEFAULT_VERBOSITY	2
- #define DEFAULT_REASSIGN_MAPS	1
-+#define DEFAULT_FIND_MULTIPATHS 0
- 
- #define DEFAULT_CHECKINT	5
- #define MAX_CHECKINT(a)		(a << 2)
-@@ -24,5 +25,6 @@
+--- multipath-tools-120518.orig/libmultipath/defaults.h
++++ multipath-tools-120518/libmultipath/defaults.h
+@@ -24,5 +24,6 @@
  #define DEFAULT_SOCKET		"/var/run/multipathd.sock"
  #define DEFAULT_CONFIGFILE	"/etc/multipath.conf"
  #define DEFAULT_BINDINGS_FILE	"/etc/multipath/bindings"
 +#define DEFAULT_WWIDS_FILE	"/etc/multipath/wwids"
  
  char * set_default (char * str);
-Index: multipath-tools-111219/libmultipath/dict.c
-===================================================================
---- multipath-tools-111219.orig/libmultipath/dict.c
-+++ multipath-tools-111219/libmultipath/dict.c
-@@ -544,6 +544,27 @@ def_log_checker_err_handler(vector strve
- }
- 
- static int
-+def_find_multipaths_handler(vector strvec)
-+{
-+	char * buff;
-+
-+	buff = set_value(strvec);
-+
-+	if (!buff)
-+		return 1;
-+
-+	if ((strlen(buff) == 2 && !strcmp(buff, "no")) ||
-+	    (strlen(buff) == 1 && !strcmp(buff, "0")))
-+		conf->find_multipaths = 0;
-+	else if ((strlen(buff) == 3 && !strcmp(buff, "yes")) ||
-+		 (strlen(buff) == 1 && !strcmp(buff, "1")))
-+		conf->find_multipaths = 1;
-+
-+	FREE(buff);
-+	return 0;
-+}
-+
-+static int
- names_handler(vector strvec)
- {
- 	char * buff;
-@@ -2365,6 +2386,18 @@ snprint_def_log_checker_err (char * buff
- }
- 
- static int
-+snprint_def_find_multipaths (char * buff, int len, void * data)
-+{
-+	if (conf->find_multipaths == DEFAULT_FIND_MULTIPATHS)
-+		return 0;
-+	if (!conf->find_multipaths)
-+		return snprintf(buff, len, "no");
-+
-+	return snprintf(buff, len, "yes");
-+}
-+
-+
-+static int
- snprint_def_user_friendly_names (char * buff, int len, void * data)
- {
- 	if (!conf->user_friendly_names)
-@@ -2456,6 +2489,7 @@ init_keywords(void)
- 	install_keyword("dev_loss_tmo", &def_dev_loss_handler, &snprint_def_dev_loss);
- 	install_keyword("bindings_file", &bindings_file_handler, &snprint_def_bindings_file);
- 	install_keyword("log_checker_err", &def_log_checker_err_handler, &snprint_def_log_checker_err);
-+	install_keyword("find_multipaths", &def_find_multipaths_handler, &snprint_def_find_multipaths);
- 	__deprecated install_keyword("default_selector", &def_selector_handler, NULL);
- 	__deprecated install_keyword("default_path_grouping_policy", &def_pgpolicy_handler, NULL);
- 	__deprecated install_keyword("default_getuid_callout", &def_getuid_callout_handler, NULL);
-Index: multipath-tools-111219/libmultipath/file.c
+Index: multipath-tools-120518/libmultipath/file.c
 ===================================================================
 --- /dev/null
-+++ multipath-tools-111219/libmultipath/file.c
-@@ -0,0 +1,178 @@
++++ multipath-tools-120518/libmultipath/file.c
+@@ -0,0 +1,180 @@
 +/*
 + * Copyright (c) 2005 Christophe Varoqui
 + * Copyright (c) 2005 Benjamin Marzinski, Redhat
@@ -522,7 +417,9 @@ Index: multipath-tools-111219/libmultipath/file.c
 +				"Cannot write header to file %s : %s", file,
 +				strerror(errno));
 +			/* cleanup partially written header */
-+			ftruncate(fd, 0);
++			if (ftruncate(fd, 0))
++				condlog(0, "Cannot truncate header : %s",
++					strerror(errno));
 +			goto fail;
 +		}
 +		fsync(fd);
@@ -535,10 +432,10 @@ Index: multipath-tools-111219/libmultipath/file.c
 +	close(fd);
 +	return -1;
 +}
-Index: multipath-tools-111219/libmultipath/file.h
+Index: multipath-tools-120518/libmultipath/file.h
 ===================================================================
 --- /dev/null
-+++ multipath-tools-111219/libmultipath/file.h
++++ multipath-tools-120518/libmultipath/file.h
 @@ -0,0 +1,11 @@
 +/*
 + * Copyright (c) 2010 Benjamin Marzinski, Redhat
@@ -551,11 +448,129 @@ Index: multipath-tools-111219/libmultipath/file.h
 +int open_file(char *file, int *can_write, char *header);
 +
 +#endif /* _FILE_H */
-Index: multipath-tools-111219/libmultipath/finder.c
+Index: multipath-tools-120518/multipath/main.c
+===================================================================
+--- multipath-tools-120518.orig/multipath/main.c
++++ multipath-tools-120518/multipath/main.c
+@@ -53,6 +53,7 @@
+ #include <errno.h>
+ #include <sys/time.h>
+ #include <sys/resource.h>
++#include <wwids.h>
+ #include "dev_t.h"
+ 
+ int logsink;
+@@ -82,7 +83,7 @@ usage (char * progname)
+ {
+ 	fprintf (stderr, VERSION_STRING);
+ 	fprintf (stderr, "Usage:\n");
+-	fprintf (stderr, "  %s [-d] [-r] [-v lvl] [-p pol] [-b fil] [-q] [dev]\n", progname);
++	fprintf (stderr, "  %s [-c] [-d] [-r] [-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);
+@@ -95,6 +96,7 @@ usage (char * progname)
+ 		"  -ll     show multipath topology (maximum info)\n" \
+ 		"  -f      flush a multipath device map\n" \
+ 		"  -F      flush all multipath device maps\n" \
++		"  -c      check if a device should be a path in a multipath device\n" \
+ 		"  -q      allow queue_if_no_path when multipathd is not running\n"\
+ 		"  -d      dry run, do not create or update devmaps\n" \
+ 		"  -t      dump internal hardware table\n" \
+@@ -209,6 +211,7 @@ get_dm_mpvec (vector curmp, vector pathv
+ 
+ 		if (!conf->dry_run)
+ 			reinstate_paths(mpp);
++		remember_wwid(mpp->wwid);
+ 	}
+ 	return 0;
+ }
+@@ -259,9 +262,13 @@ configure (void)
+ 	 * if we have a blacklisted device parameter, exit early
+ 	 */
+ 	if (dev &&
+-	    (filter_devnode(conf->blist_devnode, conf->elist_devnode, dev) > 0))
+-			goto out;
+-
++	    (filter_devnode(conf->blist_devnode,
++			    conf->elist_devnode, dev) > 0)) {
++		if (conf->dry_run == 2)
++			printf("%s is not a valid multipath device path\n",
++			       conf->dev);
++		goto out;
++	}
+ 	/*
+ 	 * scope limiting must be translated into a wwid
+ 	 * failing the translation is fatal (by policy)
+@@ -277,6 +284,15 @@ configure (void)
+ 		if (filter_wwid(conf->blist_wwid, conf->elist_wwid,
+ 				refwwid) > 0)
+ 			goto out;
++		if (conf->dry_run == 2) {
++			if (check_wwids_file(refwwid, 0) == 0){
++				printf("%s is a valid multipath device path\n", conf->dev);
++				r = 0;
++			}
++			else
++				printf("%s is not a valid multipath device path\n", conf->dev);
++			goto out;
++		}
+ 	}
+ 
+ 	/*
+@@ -412,7 +428,7 @@ main (int argc, char *argv[])
+ 	if (load_config(DEFAULT_CONFIGFILE))
+ 		exit(1);
+ 
+-	while ((arg = getopt(argc, argv, ":dhl::FfM:v:p:b:Brtq")) != EOF ) {
++	while ((arg = getopt(argc, argv, ":dchl::FfM:v:p:b:Brtq")) != EOF ) {
+ 		switch(arg) {
+ 		case 1: printf("optarg : %s\n",optarg);
+ 			break;
+@@ -434,8 +450,12 @@ main (int argc, char *argv[])
+ 		case 'q':
+ 			conf->allow_queueing = 1;
+ 			break;
++		case 'c':
++			conf->dry_run = 2;
++			break;
+ 		case 'd':
+-			conf->dry_run = 1;
++			if (!conf->dry_run)
++				conf->dry_run = 1;
+ 			break;
+ 		case 'f':
+ 			conf->remove = FLUSH_ONE;
+@@ -517,6 +537,11 @@ main (int argc, char *argv[])
+ 	}
+ 	dm_init();
+ 
++	if (conf->dry_run == 2 &&
++	    (!conf->dev || conf->dev_type == DEV_DEVMAP)) {
++		condlog(0, "the -c option requires a path to check");
++		goto out;
++	}
+ 	if (conf->remove == FLUSH_ONE) {
+ 		if (conf->dev_type == DEV_DEVMAP)
+ 			r = dm_flush_map(conf->dev);
+Index: multipath-tools-120518/libmultipath/Makefile
+===================================================================
+--- multipath-tools-120518.orig/libmultipath/Makefile
++++ multipath-tools-120518/libmultipath/Makefile
+@@ -15,7 +15,7 @@ OBJS = memory.o parser.o vector.o devmap
+        pgpolicies.o debug.o regex.o defaults.o uevent.o \
+        switchgroup.o uxsock.o print.o alias.o log_pthread.o \
+        log.o configure.o structs_vec.o sysfs.o prio.o checkers.o \
+-       lock.o waiter.o
++       lock.o waiter.o file.o wwids.o
+ 
+ LIBDM_API_FLUSH = $(shell grep -Ecs '^[a-z]*[[:space:]]+dm_task_no_flush' /usr/include/libdevmapper.h)
+ 
+Index: multipath-tools-120518/libmultipath/wwids.c
 ===================================================================
 --- /dev/null
-+++ multipath-tools-111219/libmultipath/finder.c
-@@ -0,0 +1,165 @@
++++ multipath-tools-120518/libmultipath/wwids.c
+@@ -0,0 +1,139 @@
 +#include <stdlib.h>
 +#include <errno.h>
 +#include <unistd.h>
@@ -569,7 +584,7 @@ Index: multipath-tools-111219/libmultipath/finder.c
 +#include "debug.h"
 +#include "uxsock.h"
 +#include "file.h"
-+#include "finder.h"
++#include "wwids.h"
 +#include "defaults.h"
 +
 +/*
@@ -630,33 +645,27 @@ Index: multipath-tools-111219/libmultipath/finder.c
 +	if (write_all(fd, buf, strlen(buf)) != strlen(buf)) {
 +		condlog(0, "cannot write wwid to wwids file : %s",
 +			strerror(errno));
-+		ftruncate(fd, offset);
++		if (ftruncate(fd, offset))
++			condlog(0, "cannot truncate failed wwid write : %s",
++				strerror(errno));
 +		return -1;
 +	}
 +	return 1;
 +}
 +
-+static int
++int
 +check_wwids_file(char *wwid, int write_wwid)
 +{
-+	int scan_fd, fd, can_write, found, ret;
++	int fd, can_write, found, ret;
 +	FILE *f;
 +	fd = open_file(DEFAULT_WWIDS_FILE, &can_write, WWIDS_FILE_HEADER);
 +	if (fd < 0)
 +		return -1;
 +
-+	scan_fd = dup(fd);
-+	if (scan_fd < 0) {
-+		condlog(0, "can't dup wwids file descriptor : %s",
-+			strerror(errno));
-+		close(fd);
-+		return -1;
-+	}
-+	f = fdopen(scan_fd, "r");
++	f = fdopen(fd, "r");
 +	if (!f) {
 +		condlog(0,"can't fdopen wwids file : %s", strerror(errno));
 +		close(fd);
-+		close(scan_fd);
 +		return -1;
 +	}
 +	found = lookup_wwid(f, wwid);
@@ -673,41 +682,21 @@ Index: multipath-tools-111219/libmultipath/finder.c
 +		ret = -1;
 +		goto out;
 +	}
++
++	if (fflush(f) != 0) {
++		condlog(0, "cannot fflush wwids file stream : %s",
++			strerror(errno));
++		ret = -1;
++		goto out;
++	}
++
 +	ret = write_out_wwid(fd, wwid);
 +out:
 +	fclose(f);
-+	close(scan_fd);
-+	close(fd);
 +	return ret;
 +}
 +
 +int
-+should_multipath(struct path *pp1, vector pathvec)
-+{
-+	int i;
-+	struct path *pp2;
-+
-+	condlog(4, "checking if %s should be multipathed", pp1->dev);
-+	vector_foreach_slot(pathvec, pp2, i) {
-+		if (pp1->dev == pp2->dev)
-+			continue;
-+		if (strncmp(pp1->wwid, pp2->wwid, WWID_SIZE) == 0) {
-+			condlog(3, "found multiple paths with wwid %s, "
-+				"multipathing %s", pp1->wwid, pp1->dev);
-+			return 1;
-+		}
-+	}
-+	if (check_wwids_file(pp1->wwid, 0) < 0) {
-+		condlog(3, "wwid %s not in wwids file, skipping %s",
-+			pp1->wwid, pp1->dev);
-+		return 0;
-+	}
-+	condlog(3, "found wwid %s in wwids file, multipathing %s", pp1->wwid,
-+		pp1->dev);
-+	return 1;
-+}
-+
-+int
 +remember_wwid(char *wwid)
 +{
 +	int ret = check_wwids_file(wwid, 1);
@@ -721,17 +710,17 @@ Index: multipath-tools-111219/libmultipath/finder.c
 +		condlog(4, "wwid %s already in wwids file", wwid);
 +	return 0;
 +}
-Index: multipath-tools-111219/libmultipath/finder.h
+Index: multipath-tools-120518/libmultipath/wwids.h
 ===================================================================
 --- /dev/null
-+++ multipath-tools-111219/libmultipath/finder.h
++++ multipath-tools-120518/libmultipath/wwids.h
 @@ -0,0 +1,18 @@
 +/*
 + * Copyright (c) 2010 Benjamin Marzinski, Redhat
 + */
 +
-+#ifndef _FINDER_H
-+#define _FINDER_H
++#ifndef _WWIDS_H
++#define _WWIDS_H
 +
 +#define WWIDS_FILE_HEADER \
 +"# Multipath wwids, Version : 1.0\n" \
@@ -740,85 +729,20 @@ Index: multipath-tools-111219/libmultipath/finder.h
 +"#\n" \
 +"# Valid WWIDs:\n"
 +
-+int should_multipath(struct path *pp, vector pathvec);
 +int remember_wwid(char *wwid);
++int check_wwids_file(char *wwid, int write_wwid);
 +
-+#endif /* _FINDER_H */
-Index: multipath-tools-111219/multipath/main.c
-===================================================================
---- multipath-tools-111219.orig/multipath/main.c
-+++ multipath-tools-111219/multipath/main.c
-@@ -53,6 +53,7 @@
- #include <errno.h>
- #include <sys/time.h>
- #include <sys/resource.h>
-+#include <finder.h>
- #include "dev_t.h"
- 
- int logsink;
-@@ -209,6 +210,7 @@ get_dm_mpvec (vector curmp, vector pathv
- 
- 		if (!conf->dry_run)
- 			reinstate_paths(mpp);
-+		remember_wwid(mpp->wwid);
- 	}
- 	return 0;
- }
-@@ -316,7 +318,7 @@ configure (void)
- 	/*
- 	 * core logic entry point
- 	 */
--	r = coalesce_paths(&vecs, NULL, NULL, conf->force_reload);
-+	r = coalesce_paths(&vecs, NULL, refwwid, conf->force_reload);
- 
- out:
- 	if (refwwid)
-Index: multipath-tools-111219/multipathd/main.c
-===================================================================
---- multipath-tools-111219.orig/multipathd/main.c
-+++ multipath-tools-111219/multipathd/main.c
-@@ -48,6 +48,7 @@
- #include <print.h>
- #include <configure.h>
- #include <prio.h>
-+#include <finder.h>
- #include <pgpolicies.h>
- #include <uevent.h>
- 
-@@ -471,6 +472,11 @@ rescan:
- 			return 1;
- 		}
- 
-+		if (conf->find_multipaths &&
-+		    !should_multipath(pp, vecs->pathvec)) {
-+			orphan_path(pp);
-+			return 0;
-+		}
- 		condlog(4,"%s: creating new map", pp->dev);
- 		if ((mpp = add_map_with_path(vecs, pp, 1))) {
- 			mpp->action = ACT_CREATE;
-Index: multipath-tools-111219/libmultipath/Makefile
++#endif /* _WWIDS_H */
+Index: multipath-tools-120518/libmultipath/discovery.c
 ===================================================================
---- multipath-tools-111219.orig/libmultipath/Makefile
-+++ multipath-tools-111219/libmultipath/Makefile
-@@ -15,7 +15,7 @@ OBJS = memory.o parser.o vector.o devmap
-        pgpolicies.o debug.o regex.o defaults.o uevent.o \
-        switchgroup.o uxsock.o print.o alias.o log_pthread.o \
-        log.o configure.o structs_vec.o sysfs.o prio.o checkers.o \
--       lock.o waiter.o
-+       lock.o waiter.o file.o finder.o
+--- multipath-tools-120518.orig/libmultipath/discovery.c
++++ multipath-tools-120518/libmultipath/discovery.c
+@@ -810,6 +810,8 @@ get_uid (struct path * pp)
  
- LIBDM_API_FLUSH = $(shell grep -Ecs '^[a-z]*[[:space:]]+dm_task_no_flush' /usr/include/libdevmapper.h)
+ 	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)
++		value = getenv(pp->uid_attribute);
+ 	if (value && strlen(value)) {
+ 		size_t len = WWID_SIZE;
  
-Index: multipath-tools-111219/libmultipath/config.h
-===================================================================
---- multipath-tools-111219.orig/libmultipath/config.h
-+++ multipath-tools-111219/libmultipath/config.h
-@@ -95,6 +95,7 @@ struct config {
- 	unsigned int dev_loss;
- 	int log_checker_err;
- 	int allow_queueing;
-+	int find_multipaths;
- 	uid_t uid;
- 	gid_t gid;
- 	mode_t mode;
diff --git a/0015-RH-add-followover.patch b/0003-RH-add-followover.patch
similarity index 50%
rename from 0015-RH-add-followover.patch
rename to 0003-RH-add-followover.patch
index 9f28342..9aeecf4 100644
--- a/0015-RH-add-followover.patch
+++ b/0003-RH-add-followover.patch
@@ -1,16 +1,18 @@
 ---
  libmultipath/dict.c        |   12 ++++++++++++
+ libmultipath/discovery.c   |    6 +++---
  libmultipath/print.c       |    2 ++
- libmultipath/structs.h     |    3 ++-
+ libmultipath/structs.h     |    4 +++-
+ multipath/main.c           |    2 +-
  multipath/multipath.conf.5 |    5 +++++
- multipathd/main.c          |   29 ++++++++++++++++++++++++++++-
- 5 files changed, 49 insertions(+), 2 deletions(-)
+ multipathd/main.c          |   35 ++++++++++++++++++++++++++++++++++-
+ 7 files changed, 60 insertions(+), 6 deletions(-)
 
-Index: multipath-tools-120123/libmultipath/dict.c
+Index: multipath-tools-120518/libmultipath/dict.c
 ===================================================================
---- multipath-tools-120123.orig/libmultipath/dict.c
-+++ multipath-tools-120123/libmultipath/dict.c
-@@ -406,6 +406,8 @@ default_failback_handler(vector strvec)
+--- multipath-tools-120518.orig/libmultipath/dict.c
++++ multipath-tools-120518/libmultipath/dict.c
+@@ -398,6 +398,8 @@ default_failback_handler(vector strvec)
  		conf->pgfailback = -FAILBACK_MANUAL;
  	else if (strlen(buff) == 9 && !strcmp(buff, "immediate"))
  		conf->pgfailback = -FAILBACK_IMMEDIATE;
@@ -19,7 +21,7 @@ Index: multipath-tools-120123/libmultipath/dict.c
  	else
  		conf->pgfailback = atoi(buff);
  
-@@ -1031,6 +1033,8 @@ hw_failback_handler(vector strvec)
+@@ -1053,6 +1055,8 @@ hw_failback_handler(vector strvec)
  		hwe->pgfailback = -FAILBACK_MANUAL;
  	else if (strlen(buff) == 9 && !strcmp(buff, "immediate"))
  		hwe->pgfailback = -FAILBACK_IMMEDIATE;
@@ -28,7 +30,7 @@ Index: multipath-tools-120123/libmultipath/dict.c
  	else
  		hwe->pgfailback = atoi(buff);
  
-@@ -1303,6 +1307,8 @@ mp_failback_handler(vector strvec)
+@@ -1351,6 +1355,8 @@ mp_failback_handler(vector strvec)
  		mpe->pgfailback = -FAILBACK_MANUAL;
  	else if (strlen(buff) == 9 && !strcmp(buff, "immediate"))
  		mpe->pgfailback = -FAILBACK_IMMEDIATE;
@@ -37,7 +39,7 @@ Index: multipath-tools-120123/libmultipath/dict.c
  	else
  		mpe->pgfailback = atoi(buff);
  
-@@ -1646,6 +1652,8 @@ snprint_mp_failback (char * buff, int le
+@@ -1769,6 +1775,8 @@ snprint_mp_failback (char * buff, int le
  		return snprintf(buff, len, "manual");
  	case -FAILBACK_IMMEDIATE:
  		return snprintf(buff, len, "immediate");
@@ -46,7 +48,7 @@ Index: multipath-tools-120123/libmultipath/dict.c
  	default:
  		return snprintf(buff, len, "%i", mpe->pgfailback);
  	}
-@@ -1985,6 +1993,8 @@ snprint_hw_failback (char * buff, int le
+@@ -2130,6 +2138,8 @@ snprint_hw_failback (char * buff, int le
  		return snprintf(buff, len, "manual");
  	case -FAILBACK_IMMEDIATE:
  		return snprintf(buff, len, "immediate");
@@ -55,7 +57,7 @@ Index: multipath-tools-120123/libmultipath/dict.c
  	default:
  		return snprintf(buff, len, "%i", hwe->pgfailback);
  	}
-@@ -2243,6 +2253,8 @@ snprint_def_failback (char * buff, int l
+@@ -2394,6 +2404,8 @@ snprint_def_failback (char * buff, int l
  		return snprintf(buff, len, "manual");
  	case -FAILBACK_IMMEDIATE:
  		return snprintf(buff, len, "immediate");
@@ -64,10 +66,10 @@ Index: multipath-tools-120123/libmultipath/dict.c
  	default:
  		return snprintf(buff, len, "%i", conf->pgfailback);
  	}
-Index: multipath-tools-120123/libmultipath/print.c
+Index: multipath-tools-120518/libmultipath/print.c
 ===================================================================
---- multipath-tools-120123.orig/libmultipath/print.c
-+++ multipath-tools-120123/libmultipath/print.c
+--- multipath-tools-120518.orig/libmultipath/print.c
++++ multipath-tools-120518/libmultipath/print.c
 @@ -143,6 +143,8 @@ snprint_failback (char * buff, size_t le
  {
  	if (mpp->pgfailback == -FAILBACK_IMMEDIATE)
@@ -77,10 +79,10 @@ Index: multipath-tools-120123/libmultipath/print.c
  
  	if (!mpp->failback_tick)
  		return snprintf(buff, len, "-");
-Index: multipath-tools-120123/libmultipath/structs.h
+Index: multipath-tools-120518/libmultipath/structs.h
 ===================================================================
---- multipath-tools-120123.orig/libmultipath/structs.h
-+++ multipath-tools-120123/libmultipath/structs.h
+--- multipath-tools-120518.orig/libmultipath/structs.h
++++ multipath-tools-120518/libmultipath/structs.h
 @@ -39,7 +39,8 @@ enum rr_weight_mode {
  enum failback_mode {
  	FAILBACK_UNDEF,
@@ -91,11 +93,19 @@ Index: multipath-tools-120123/libmultipath/structs.h
  };
  
  enum sysfs_buses {
-Index: multipath-tools-120123/multipathd/main.c
+@@ -151,6 +152,7 @@ struct path {
+ 	int offline;
+ 	int state;
+ 	int dmstate;
++	int chkrstate;
+ 	int failcount;
+ 	int priority;
+ 	int pgindex;
+Index: multipath-tools-120518/multipathd/main.c
 ===================================================================
---- multipath-tools-120123.orig/multipathd/main.c
-+++ multipath-tools-120123/multipathd/main.c
-@@ -1011,6 +1011,32 @@ mpvec_garbage_collector (struct vectors
+--- multipath-tools-120518.orig/multipathd/main.c
++++ multipath-tools-120518/multipathd/main.c
+@@ -995,6 +995,32 @@ mpvec_garbage_collector (struct vectors
  	}
  }
  
@@ -119,7 +129,7 @@ Index: multipath-tools-120123/multipathd/main.c
 +	vector_foreach_slot(pgp->paths, pp1, i) {
 +		if (pp1 == pp)
 +			continue;
-+		if (pp1->state != PATH_DOWN && pp1->state != PATH_SHAKY)
++		if (pp1->chkrstate != PATH_DOWN && pp1->chkrstate != PATH_SHAKY)
 +			return 0;
 +	}
 +	return 1;
@@ -128,21 +138,48 @@ Index: multipath-tools-120123/multipathd/main.c
  static void
  defered_failback_tick (vector mpvec)
  {
-@@ -1238,7 +1264,8 @@ check_path (struct vectors * vecs, struc
+@@ -1092,6 +1118,8 @@ check_path (struct vectors * vecs, struc
+ {
+ 	int newstate;
+ 	int new_path_up = 0;
++	int chkr_new_path_up = 0;
++	int oldchkrstate = pp->chkrstate;
+ 
+ 	if (!pp->mpp)
+ 		return;
+@@ -1130,6 +1158,7 @@ check_path (struct vectors * vecs, struc
+ 			pp->dev);
+ 		pp->dmstate = PSTATE_UNDEF;
+ 	}
++	pp->chkrstate = newstate;
+ 	if (newstate != pp->state) {
+ 		int oldstate = pp->state;
+ 		pp->state = newstate;
+@@ -1182,6 +1211,9 @@ check_path (struct vectors * vecs, struc
+ 
+ 		new_path_up = 1;
+ 
++		if (oldchkrstate != PATH_UP && oldchkrstate != PATH_GHOST)
++			chkr_new_path_up = 1;
++
+ 		/*
+ 		 * if at least one path is up in a group, and
+ 		 * the group is disabled, re-enable it
+@@ -1233,7 +1265,8 @@ check_path (struct vectors * vecs, struc
  		    (new_path_up || pp->mpp->failback_tick <= 0))
  			pp->mpp->failback_tick =
  				pp->mpp->pgfailback + 1;
 -		else if (pp->mpp->pgfailback == -FAILBACK_IMMEDIATE)
 +		else if (pp->mpp->pgfailback == -FAILBACK_IMMEDIATE ||
-+			 followover_should_failback(pp))
++			 (chkr_new_path_up && followover_should_failback(pp)))
  			switch_pathgroup(pp->mpp);
  	}
  }
-Index: multipath-tools-120123/multipath/multipath.conf.5
+Index: multipath-tools-120518/multipath/multipath.conf.5
 ===================================================================
---- multipath-tools-120123.orig/multipath/multipath.conf.5
-+++ multipath-tools-120123/multipath/multipath.conf.5
-@@ -258,6 +258,11 @@ active paths.
+--- multipath-tools-120518.orig/multipath/multipath.conf.5
++++ multipath-tools-120518/multipath/multipath.conf.5
+@@ -254,6 +254,11 @@ active paths.
  .B manual
  Do not perform automatic failback.
  .TP
@@ -154,3 +191,45 @@ Index: multipath-tools-120123/multipath/multipath.conf.5
  .B values > 0
  deferred failback (time to defer in seconds)
  .TP
+Index: multipath-tools-120518/libmultipath/discovery.c
+===================================================================
+--- multipath-tools-120518.orig/libmultipath/discovery.c
++++ multipath-tools-120518/libmultipath/discovery.c
+@@ -878,13 +878,13 @@ pathinfo (struct path *pp, vector hwtabl
+ 
+ 	if (mask & DI_CHECKER) {
+ 		if (path_state == PATH_UP) {
+-			pp->state = get_state(pp, 0);
++			pp->chkrstate = pp->state = get_state(pp, 0);
+ 			if (pp->state == PATH_UNCHECKED ||
+ 			    pp->state == PATH_WILD)
+ 				goto blank;
+ 		} else {
+ 			condlog(3, "%s: path inaccessible", pp->dev);
+-			pp->state = path_state;
++			pp->chkrstate = pp->state = path_state;
+ 		}
+ 	}
+ 
+@@ -912,7 +912,7 @@ blank:
+ 	 * Recoverable error, for example faulty or offline path
+ 	 */
+ 	memset(pp->wwid, 0, WWID_SIZE);
+-	pp->state = PATH_DOWN;
++	pp->chkrstate = pp->state = PATH_DOWN;
+ 
+ 	return 0;
+ }
+Index: multipath-tools-120518/multipath/main.c
+===================================================================
+--- multipath-tools-120518.orig/multipath/main.c
++++ multipath-tools-120518/multipath/main.c
+@@ -144,7 +144,7 @@ update_paths (struct multipath * mpp)
+ 					/*
+ 					 * path is not in sysfs anymore
+ 					 */
+-					pp->state = PATH_DOWN;
++					pp->chkrstate = pp->state = PATH_DOWN;
+ 					continue;
+ 				}
+ 				pp->mpp = mpp;
diff --git a/0004-RH-fix-cciss-names.patch b/0004-RH-fix-cciss-names.patch
new file mode 100644
index 0000000..890a483
--- /dev/null
+++ b/0004-RH-fix-cciss-names.patch
@@ -0,0 +1,34 @@
+---
+ multipath/main.c |   12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+Index: multipath-tools-120518/multipath/main.c
+===================================================================
+--- multipath-tools-120518.orig/multipath/main.c
++++ multipath-tools-120518/multipath/main.c
+@@ -409,6 +409,16 @@ get_dev_type(char *dev) {
+ 		return DEV_DEVMAP;
+ }
+ 
++static void
++convert_dev(char *dev)
++{
++	char *ptr = strstr(dev, "cciss/");
++	if (ptr) {
++		ptr += 5;
++		*ptr = '!';
++	}
++}
++
+ int
+ main (int argc, char *argv[])
+ {
+@@ -514,6 +524,8 @@ main (int argc, char *argv[])
+ 
+ 		strncpy(conf->dev, argv[optind], FILE_NAME_SIZE);
+ 		conf->dev_type = get_dev_type(conf->dev);
++		if (conf->dev_type == DEV_DEVNODE)
++			convert_dev(conf->dev);
+ 	}
+ 	conf->daemon = 0;
+ 
diff --git a/0002-RH-dont_start_with_no_config.patch b/0005-RH-dont_start_with_no_config.patch
similarity index 100%
rename from 0002-RH-dont_start_with_no_config.patch
rename to 0005-RH-dont_start_with_no_config.patch
diff --git a/0003-RH-multipath.rules.patch b/0006-RH-multipath.rules.patch
similarity index 79%
rename from 0003-RH-multipath.rules.patch
rename to 0006-RH-multipath.rules.patch
index 97e5397..bfcfc98 100644
--- a/0003-RH-multipath.rules.patch
+++ b/0006-RH-multipath.rules.patch
@@ -1,13 +1,13 @@
 ---
  multipath/Makefile        |    6 +++---
- multipath/multipath.rules |   29 +++++++++++++++++++++++------
- 2 files changed, 26 insertions(+), 9 deletions(-)
+ multipath/multipath.rules |   30 ++++++++++++++++++++++++------
+ 2 files changed, 27 insertions(+), 9 deletions(-)
 
-Index: multipath-tools-111219/multipath/multipath.rules
+Index: multipath-tools-120613/multipath/multipath.rules
 ===================================================================
---- multipath-tools-111219.orig/multipath/multipath.rules
-+++ multipath-tools-111219/multipath/multipath.rules
-@@ -1,7 +1,24 @@
+--- multipath-tools-120613.orig/multipath/multipath.rules
++++ multipath-tools-120613/multipath/multipath.rules
+@@ -1,7 +1,25 @@
 -#
 -# udev rules for multipathing.
 -# The persistent symlinks are created with the kpartx rules
@@ -23,6 +23,7 @@ Index: multipath-tools-111219/multipath/multipath.rules
 +
 +ACTION=="add", ENV{DEVTYPE}!="partition", \
 +	ENV{DM_MULTIPATH_DEVICE_PATH}!="1", \
++	TEST=="/etc/multipath.conf", \
 +	PROGRAM=="$env{MPATH_SBIN_PATH}/multipath -c $tempnode", \
 +	ENV{DM_MULTIPATH_DEVICE_PATH}="1"
 +
@@ -38,10 +39,10 @@ Index: multipath-tools-111219/multipath/multipath.rules
 +ENV{DM_ACTION}=="PATH_FAILED", GOTO="end_mpath"
 +RUN+="$env{MPATH_SBIN_PATH}/kpartx -a -p p $tempnode"
 +LABEL="end_mpath"
-Index: multipath-tools-111219/multipath/Makefile
+Index: multipath-tools-120613/multipath/Makefile
 ===================================================================
---- multipath-tools-111219.orig/multipath/Makefile
-+++ multipath-tools-111219/multipath/Makefile
+--- multipath-tools-120613.orig/multipath/Makefile
++++ multipath-tools-120613/multipath/Makefile
 @@ -21,15 +21,15 @@ $(EXEC): $(OBJS)
  install:
  	$(INSTALL_PROGRAM) -d $(DESTDIR)$(bindir)
@@ -49,7 +50,7 @@ Index: multipath-tools-111219/multipath/Makefile
 -	$(INSTALL_PROGRAM) -d $(DESTDIR)/etc/udev/rules.d
 -	$(INSTALL_PROGRAM) -m 644 multipath.rules $(DESTDIR)/etc/udev/rules.d/
 +	$(INSTALL_PROGRAM) -d $(DESTDIR)/lib/udev/rules.d
-+	$(INSTALL_PROGRAM) -m 644 multipath.rules $(DESTDIR)/lib/udev/rules.d/40-multipath.rules
++	$(INSTALL_PROGRAM) -m 644 multipath.rules $(DESTDIR)/lib/udev/rules.d/62-multipath.rules
  	$(INSTALL_PROGRAM) -d $(DESTDIR)$(mandir)
  	$(INSTALL_PROGRAM) -m 644 $(EXEC).8.gz $(DESTDIR)$(mandir)
  	$(INSTALL_PROGRAM) -d $(DESTDIR)$(man5dir)
@@ -57,7 +58,7 @@ Index: multipath-tools-111219/multipath/Makefile
  
  uninstall:
 -	rm $(DESTDIR)/etc/udev/rules.d/multipath.rules
-+	rm $(DESTDIR)/lib/udev/rules.d/40-multipath.rules
++	rm $(DESTDIR)/lib/udev/rules.d/62-multipath.rules
  	rm $(DESTDIR)$(bindir)/$(EXEC)
  	rm $(DESTDIR)$(mandir)/$(EXEC).8.gz
  	rm $(DESTDIR)$(man5dir)/$(EXEC).conf.5.gz
diff --git a/0006-RH-Make-build-system-RH-Fedora-friendly.patch b/0007-RH-Make-build-system-RH-Fedora-friendly.patch
similarity index 54%
rename from 0006-RH-Make-build-system-RH-Fedora-friendly.patch
rename to 0007-RH-Make-build-system-RH-Fedora-friendly.patch
index 7d5db31..bc5d17d 100644
--- a/0006-RH-Make-build-system-RH-Fedora-friendly.patch
+++ b/0007-RH-Make-build-system-RH-Fedora-friendly.patch
@@ -8,29 +8,30 @@ Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
 :100644 100644 7ec25d5... 06fb625... M	Makefile.inc
 :100644 100644 21e4ad4... 06d79c0... M	kpartx/Makefile
 :100644 100644 32d9ef5... 25e1483... M	multipathd/Makefile
- Makefile.inc          |    2 +-
- kpartx/Makefile       |    8 ++++----
- libmultipath/Makefile |    2 ++
- multipathd/Makefile   |    1 +
- 4 files changed, 8 insertions(+), 5 deletions(-)
+ Makefile.inc             |    2 +-
+ kpartx/Makefile          |    8 ++++----
+ libmpathpersist/Makefile |    7 ++-----
+ libmultipath/Makefile    |    2 ++
+ multipathd/Makefile      |    1 +
+ 5 files changed, 10 insertions(+), 10 deletions(-)
 
-Index: multipath-tools-120123/Makefile.inc
+Index: multipath-tools-120613/Makefile.inc
 ===================================================================
---- multipath-tools-120123.orig/Makefile.inc
-+++ multipath-tools-120123/Makefile.inc
-@@ -28,7 +28,7 @@ libudevdir  = ${prefix}/lib/udev
- multipathdir = $(TOPDIR)/libmultipath
+--- multipath-tools-120613.orig/Makefile.inc
++++ multipath-tools-120613/Makefile.inc
+@@ -29,7 +29,7 @@ multipathdir = $(TOPDIR)/libmultipath
  mandir      = $(prefix)/usr/share/man/man8
  man5dir     = $(prefix)/usr/share/man/man5
+ man3dir      = $(prefix)/usr/share/man/man3
 -rcdir	    = $(prefix)/etc/init.d
 +rcdir	    = $(prefix)/etc/rc.d/init.d
  syslibdir   = $(prefix)/$(LIB)
  libdir	    = $(prefix)/$(LIB)/multipath
  unitdir     = $(prefix)/lib/systemd/system
-Index: multipath-tools-120123/kpartx/Makefile
+Index: multipath-tools-120613/kpartx/Makefile
 ===================================================================
---- multipath-tools-120123.orig/kpartx/Makefile
-+++ multipath-tools-120123/kpartx/Makefile
+--- multipath-tools-120613.orig/kpartx/Makefile
++++ multipath-tools-120613/kpartx/Makefile
 @@ -26,10 +26,10 @@ $(EXEC): $(OBJS)
  install: $(EXEC) $(EXEC).8
  	$(INSTALL_PROGRAM) -d $(DESTDIR)$(bindir)
@@ -46,10 +47,10 @@ Index: multipath-tools-120123/kpartx/Makefile
  	$(INSTALL_PROGRAM) -d $(DESTDIR)$(mandir)
  	$(INSTALL_PROGRAM) -m 644 $(EXEC).8.gz $(DESTDIR)$(mandir)
  
-Index: multipath-tools-120123/multipathd/Makefile
+Index: multipath-tools-120613/multipathd/Makefile
 ===================================================================
---- multipath-tools-120123.orig/multipathd/Makefile
-+++ multipath-tools-120123/multipathd/Makefile
+--- multipath-tools-120613.orig/multipathd/Makefile
++++ multipath-tools-120613/multipathd/Makefile
 @@ -35,6 +35,7 @@ install:
  	$(INSTALL_PROGRAM) -d $(DESTDIR)$(bindir)
  	$(INSTALL_PROGRAM) -m 755 $(EXEC) $(DESTDIR)$(bindir)
@@ -58,11 +59,11 @@ Index: multipath-tools-120123/multipathd/Makefile
  	$(INSTALL_PROGRAM) -d $(DESTDIR)$(unitdir)
  	$(INSTALL_PROGRAM) -m 644 $(EXEC).service $(DESTDIR)$(unitdir)
  	$(INSTALL_PROGRAM) -d $(DESTDIR)$(mandir)
-Index: multipath-tools-120123/libmultipath/Makefile
+Index: multipath-tools-120613/libmultipath/Makefile
 ===================================================================
---- multipath-tools-120123.orig/libmultipath/Makefile
-+++ multipath-tools-120123/libmultipath/Makefile
-@@ -39,9 +39,11 @@ install:
+--- multipath-tools-120613.orig/libmultipath/Makefile
++++ multipath-tools-120613/libmultipath/Makefile
+@@ -46,9 +46,11 @@ install:
  	$(INSTALL_PROGRAM) -d $(DESTDIR)$(syslibdir)
  	$(INSTALL_PROGRAM) -m 755 $(LIBS) $(DESTDIR)$(syslibdir)/$(LIBS)
  	$(INSTALL_PROGRAM) -m 755 -d $(DESTDIR)$(libdir)
@@ -74,3 +75,27 @@ Index: multipath-tools-120123/libmultipath/Makefile
  
  clean:
  	rm -f core *.a *.o *.gz *.so *.so.*
+Index: multipath-tools-120613/libmpathpersist/Makefile
+===================================================================
+--- multipath-tools-120613.orig/libmpathpersist/Makefile
++++ multipath-tools-120613/libmpathpersist/Makefile
+@@ -28,17 +28,14 @@ $(LIBS):
+ install: $(LIBS)
+ 	$(INSTALL_PROGRAM) -d $(DESTDIR)$(syslibdir)
+ 	$(INSTALL_PROGRAM) -m 755 $(LIBS) $(DESTDIR)$(syslibdir)/$(LIBS)
+-	$(INSTALL_PROGRAM) -m 755 -d $(DESTDIR)$(syslibdir)
+ 	$(INSTALL_PROGRAM) -m 755 -d $(DESTDIR)$(man3dir)
+-	$(INSTALL_PROGRAM) -m 755 -d $(DESTDIR)/usr/include/
+-	$(INSTALL_PROGRAM) -m 755 -d $(DESTDIR)/usr/share/doc/mpathpersist/
+-	ln -sf $(DESTDIR)$(syslibdir)/$(LIBS) $(DESTDIR)$(syslibdir)/$(DEVLIB)
++	ln -sf $(LIBS) $(DESTDIR)$(syslibdir)/$(DEVLIB)
+ 	install -m 644 mpath_persistent_reserve_in.3.gz $(DESTDIR)$(man3dir)	
+ 	install -m 644 mpath_persistent_reserve_out.3.gz $(DESTDIR)$(man3dir)	
+-	install -m 644 mpath_persist.h $(DESTDIR)/usr/include/
+ 
+ uninstall:
+ 	rm -f $(DESTDIR)$(syslibdir)/$(LIBS)
++	rm -f $(DESTDIR)$(syslibdir)/$(DEVLIB)
+ 	rm $(DESTDIR)$(mandir)/mpath_persistent_reserve_in.3.gz	
+ 	rm $(DESTDIR)$(mandir)/mpath_persistent_reserve_out.3.gz	
+ 
diff --git a/0007-RH-multipathd-blacklist-all-by-default.patch b/0008-RH-multipathd-blacklist-all-by-default.patch
similarity index 78%
rename from 0007-RH-multipathd-blacklist-all-by-default.patch
rename to 0008-RH-multipathd-blacklist-all-by-default.patch
index 6e64237..5bbf3ca 100644
--- a/0007-RH-multipathd-blacklist-all-by-default.patch
+++ b/0008-RH-multipathd-blacklist-all-by-default.patch
@@ -16,11 +16,11 @@ Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
  libmultipath/config.h |    1 +
  2 files changed, 17 insertions(+)
 
-Index: multipath-tools-111219/libmultipath/config.c
+Index: multipath-tools-120518/libmultipath/config.c
 ===================================================================
---- multipath-tools-111219.orig/libmultipath/config.c
-+++ multipath-tools-111219/libmultipath/config.c
-@@ -20,6 +20,7 @@
+--- multipath-tools-120518.orig/libmultipath/config.c
++++ multipath-tools-120518/libmultipath/config.c
+@@ -21,6 +21,7 @@
  #include "defaults.h"
  #include "prio.h"
  #include "devmapper.h"
@@ -28,7 +28,7 @@ Index: multipath-tools-111219/libmultipath/config.c
  
  static int
  hwe_strmatch (struct hwentry *hwe1, struct hwentry *hwe2)
-@@ -539,6 +540,21 @@ load_config (char * file)
+@@ -549,6 +550,21 @@ load_config (char * file)
  
  	} else {
  		init_keywords();
@@ -50,15 +50,15 @@ Index: multipath-tools-111219/libmultipath/config.c
  	}
  
  	/*
-Index: multipath-tools-111219/libmultipath/config.h
+Index: multipath-tools-120518/libmultipath/config.h
 ===================================================================
---- multipath-tools-111219.orig/libmultipath/config.h
-+++ multipath-tools-111219/libmultipath/config.h
+--- multipath-tools-120518.orig/libmultipath/config.h
++++ multipath-tools-120518/libmultipath/config.h
 @@ -6,6 +6,7 @@
  
  #define ORIGIN_DEFAULT 0
  #define ORIGIN_CONFIG  1
 +#define ORIGIN_NO_CONFIG 2
  
- enum devtypes {
- 	DEV_NONE,
+ /*
+  * In kernel, fast_io_fail == 0 means immediate failure on rport delete.
diff --git a/0008-RH-add-mpathconf.patch b/0009-RH-add-mpathconf.patch
similarity index 83%
rename from 0008-RH-add-mpathconf.patch
rename to 0009-RH-add-mpathconf.patch
index 800c113..2a5bec8 100644
--- a/0008-RH-add-mpathconf.patch
+++ b/0009-RH-add-mpathconf.patch
@@ -2,15 +2,15 @@
  libmultipath/config.c |    1 
  multipath/Makefile    |    5 
  multipath/main.c      |    4 
- multipath/mpathconf   |  351 ++++++++++++++++++++++++++++++++++++++++++++++++++
- multipath/mpathconf.8 |  116 ++++++++++++++++
- 5 files changed, 475 insertions(+), 2 deletions(-)
+ multipath/mpathconf   |  312 ++++++++++++++++++++++++++++++++++++++++++++++++++
+ multipath/mpathconf.8 |  103 ++++++++++++++++
+ 5 files changed, 423 insertions(+), 2 deletions(-)
 
-Index: multipath-tools-111219/libmultipath/config.c
+Index: multipath-tools-120613/libmultipath/config.c
 ===================================================================
---- multipath-tools-111219.orig/libmultipath/config.c
-+++ multipath-tools-111219/libmultipath/config.c
-@@ -543,6 +543,7 @@ load_config (char * file)
+--- multipath-tools-120613.orig/libmultipath/config.c
++++ multipath-tools-120613/libmultipath/config.c
+@@ -553,6 +553,7 @@ load_config (char * file)
  		condlog(0, "/etc/multipath.conf does not exist, blacklisting all devices.");
  		condlog(0, "A default multipath.conf file is located at");
  		condlog(0, "/usr/share/doc/device-mapper-multipath-%d.%d.%d/multipath.conf", MULTIPATH_VERSION(VERSION_CODE));
@@ -18,10 +18,10 @@ Index: multipath-tools-111219/libmultipath/config.c
  		if (conf->blist_devnode == NULL) {
  			conf->blist_devnode = vector_alloc();
  			if (!conf->blist_devnode) {
-Index: multipath-tools-111219/multipath/Makefile
+Index: multipath-tools-120613/multipath/Makefile
 ===================================================================
---- multipath-tools-111219.orig/multipath/Makefile
-+++ multipath-tools-111219/multipath/Makefile
+--- multipath-tools-120613.orig/multipath/Makefile
++++ multipath-tools-120613/multipath/Makefile
 @@ -17,22 +17,27 @@ $(EXEC): $(OBJS)
  	$(CC) $(CFLAGS) $(OBJS) -o $(EXEC) $(LDFLAGS)
  	$(GZIP) $(EXEC).8 > $(EXEC).8.gz
@@ -33,7 +33,7 @@ Index: multipath-tools-111219/multipath/Makefile
  	$(INSTALL_PROGRAM) -m 755 $(EXEC) $(DESTDIR)$(bindir)/
 +	$(INSTALL_PROGRAM) -m 755 mpathconf $(DESTDIR)$(bindir)/
  	$(INSTALL_PROGRAM) -d $(DESTDIR)/lib/udev/rules.d
- 	$(INSTALL_PROGRAM) -m 644 multipath.rules $(DESTDIR)/lib/udev/rules.d/40-multipath.rules
+ 	$(INSTALL_PROGRAM) -m 644 multipath.rules $(DESTDIR)/lib/udev/rules.d/62-multipath.rules
  	$(INSTALL_PROGRAM) -d $(DESTDIR)$(mandir)
  	$(INSTALL_PROGRAM) -m 644 $(EXEC).8.gz $(DESTDIR)$(mandir)
  	$(INSTALL_PROGRAM) -d $(DESTDIR)$(man5dir)
@@ -41,7 +41,7 @@ Index: multipath-tools-111219/multipath/Makefile
 +	$(INSTALL_PROGRAM) -m 644 mpathconf.8.gz $(DESTDIR)$(mandir)
  
  uninstall:
- 	rm $(DESTDIR)/lib/udev/rules.d/40-multipath.rules
+ 	rm $(DESTDIR)/lib/udev/rules.d/62-multipath.rules
  	rm $(DESTDIR)$(bindir)/$(EXEC)
 +	rm $(DESTDIR)$(bindir)/mpathconf
  	rm $(DESTDIR)$(mandir)/$(EXEC).8.gz
@@ -50,11 +50,11 @@ Index: multipath-tools-111219/multipath/Makefile
  
  clean:
  	rm -f core *.o $(EXEC) *.gz
-Index: multipath-tools-111219/multipath/main.c
+Index: multipath-tools-120613/multipath/main.c
 ===================================================================
---- multipath-tools-111219.orig/multipath/main.c
-+++ multipath-tools-111219/multipath/main.c
-@@ -406,10 +406,10 @@ main (int argc, char *argv[])
+--- multipath-tools-120613.orig/multipath/main.c
++++ multipath-tools-120613/multipath/main.c
+@@ -432,10 +432,10 @@ main (int argc, char *argv[])
  		exit(1);
  	}
  
@@ -66,12 +66,12 @@ Index: multipath-tools-111219/multipath/main.c
 +	if (dm_prereq())
  		exit(1);
  
- 	if (sysfs_init(conf->sysfs_dir, FILE_NAME_SIZE)) {
-Index: multipath-tools-111219/multipath/mpathconf
+ 	while ((arg = getopt(argc, argv, ":dchl::FfM:v:p:b:Brtq")) != EOF ) {
+Index: multipath-tools-120613/multipath/mpathconf
 ===================================================================
 --- /dev/null
-+++ multipath-tools-111219/multipath/mpathconf
-@@ -0,0 +1,351 @@
++++ multipath-tools-120613/multipath/mpathconf
+@@ -0,0 +1,312 @@
 +#!/bin/sh
 +#
 +# Copyright (C) 2010 Red Hat, Inc. All rights reserved.
@@ -91,7 +91,7 @@ Index: multipath-tools-111219/multipath/mpathconf
 +# This program was largely ripped off from lvmconf
 +#
 +
-+unset ENABLE FIND FRIENDLY MODULE MULTIPATHD CHKCONFIG HAVE_DISABLE HAVE_FIND HAVE_BLACKLIST HAVE_DEFAULTS HAVE_FRIENDLY HAVE_MULTIPATHD HAVE_CHKCONFIG HAVE_MODULE SHOW_STATUS CHANGED_CONFIG
++unset ENABLE FIND FRIENDLY MODULE MULTIPATHD HAVE_DISABLE HAVE_FIND HAVE_BLACKLIST HAVE_DEFAULTS HAVE_FRIENDLY HAVE_MULTIPATHD HAVE_MODULE SHOW_STATUS CHANGED_CONFIG
 +
 +DEFAULT_CONFIGFILE="/usr/share/doc/device-mapper-multipath-0.4.9/multipath.conf"
 +CONFIGFILE="/etc/multipath.conf"
@@ -109,7 +109,6 @@ Index: multipath-tools-111219/multipath/mpathconf
 +	echo "Set find_multipaths (Default n): --find_multipaths <y|n>"
 +	echo "Load the dm-multipath modules on enable (Default y): --with_module <y|n>"
 +	echo "start/stop/reload multipathd (Default n): --with_multipathd <y|n>"
-+	echo "chkconfig on/off multipathd (Default y): --with_chkconfig <y|n>"
 +	echo ""
 +}
 +
@@ -161,15 +160,6 @@ Index: multipath-tools-111219/multipath/mpathconf
 +					exit 1
 +				fi
 +				;;
-+			--with_chkconfig)
-+				if [ -n "$2" ]; then
-+					CHKCONFIG=$2
-+					shift 2
-+				else
-+					usage
-+					exit 1
-+				fi
-+				;;
 +			*)
 +				usage
 +				exit
@@ -204,10 +194,6 @@ Index: multipath-tools-111219/multipath/mpathconf
 +		echo "--with_multipathd must be either 'y' or 'n'"
 +		exit 1
 +	fi
-+	if [ -n "$CHKCONFIG" ] && [ "$CHKCONFIG" != "y" -a "$CHKCONFIG" != "n" ]; then
-+		echo "--with_chkconfig must be either 'y' or 'n'"
-+		exit 1
-+	fi
 +}
 +
 +umask 0077
@@ -254,18 +240,6 @@ Index: multipath-tools-111219/multipath/mpathconf
 +	fi
 +fi
 +
-+if [ -z "$CHKCONFIG" -o "$CHKCONFIG" = "y" ]; then
-+	chkconfig --list multipathd > /dev/null 2>&1
-+	if [ $? != 0 ]; then
-+		chkconfig --add multipathd
-+	fi
-+	if chkconfig --list multipathd | grep -q "on" ; then
-+		HAVE_CHKCONFIG=1
-+	else
-+		HAVE_CHKCONFIG=0
-+	fi
-+fi
-+
 +if [ "$HAVE_BLACKLIST" = "1" ]; then
 +	if sed -n '/^blacklist[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*devnode \"\.\?\*\"" ; then
 +		HAVE_DISABLE=1
@@ -313,13 +287,6 @@ Index: multipath-tools-111219/multipath/mpathconf
 +	if [ -n "$HAVE_MULTIPATHD" ]; then
 +		service multipathd status
 +	fi
-+	if [ -n "$HAVE_CHKCONFIG" ]; then
-+		if [ "$HAVE_CHKCONFIG" = 1 ]; then
-+			echo "multipathd is chkconfiged on"
-+		else
-+			echo "multipathd is chkconfiged off"
-+		fi
-+	fi
 +	exit 0
 +fi
 +
@@ -410,24 +377,18 @@ Index: multipath-tools-111219/multipath/mpathconf
 +	if [ "$HAVE_MULTIPATHD" = 0 ]; then
 +		service multipathd start
 +	fi
-+	if [ "$HAVE_CHKCONFIG" = 0 ]; then
-+		chkconfig multipathd on
-+	fi
 +elif [ "$ENABLE" = 0 ]; then
 +	if [ "$HAVE_MULTIPATHD" = 1 ]; then
 +		service multipathd stop
 +	fi
-+	if [ "$HAVE_CHKCONFIG" = 1 ]; then
-+		chkconfig multipathd off
-+	fi
 +elif [ -n "$CHANGED_CONFIG" -a "$HAVE_MULTIPATHD" = 1 ]; then
 +	service multipathd reload
 +fi
-Index: multipath-tools-111219/multipath/mpathconf.8
+Index: multipath-tools-120613/multipath/mpathconf.8
 ===================================================================
 --- /dev/null
-+++ multipath-tools-111219/multipath/mpathconf.8
-@@ -0,0 +1,116 @@
++++ multipath-tools-120613/multipath/mpathconf.8
+@@ -0,0 +1,103 @@
 +.TH MPATHCONF 8 "June 2010" "" "Linux Administrator's Manual"
 +.SH NAME
 +mpathconf - A tool for configuring device-mapper-multipath
@@ -453,15 +414,11 @@ Index: multipath-tools-111219/multipath/mpathconf.8
 +
 +The default options for mpathconf are
 +.B --with_module
-+and
-+.B --with_chkconfig.
 +The
 +.B --with_multipathd
 +option is not set by default.  Enabling multipathing will load the
 +.B dm_multipath
-+module and chkconfig
-+.B multipathd
-+to start on the next boot, but it will not immediately start it. This is so
++module but it will not immediately start it. This is so
 +that users can manually edit their config file if necessary, before starting
 +.B multipathd.
 +
@@ -525,19 +482,10 @@ Index: multipath-tools-111219/multipath/mpathconf.8
 +to reconfigure multipathd on \fB--user_frindly_names\fP and
 +\fB--find_multipaths\fP.
 +This option is set to \fBn\fP by default.
-+.TP
-+.B --with_chkconfig { \fBy\fP | \fBn\fP }
-+If set to \fBy\fP, this runs
-+.B chkconfig multipathd on
-+to set multipathd to start automatically on \fB--enable\fP and
-+.B chkconfig multipathd off
-+to stop multipathd for starting automatically on \fB--disable\fP.
-+This option is set to \fBy\fP by default.
 +.SH FILES
 +.BR /etc/multipath.conf
 +.SH "SEE ALSO"
 +.BR multipath.conf (5),
-+.BR chkconfig (8),
 +.BR modprobe (8),
 +.BR multipath (8),
 +.BR multipathd (8),
diff --git a/0010-RH-add-find-multipaths.patch b/0010-RH-add-find-multipaths.patch
new file mode 100644
index 0000000..57eb0a8
--- /dev/null
+++ b/0010-RH-add-find-multipaths.patch
@@ -0,0 +1,222 @@
+---
+ libmultipath/config.c    |    1 +
+ libmultipath/config.h    |    1 +
+ libmultipath/configure.c |   11 +++++++++++
+ libmultipath/defaults.h  |    1 +
+ libmultipath/dict.c      |   34 ++++++++++++++++++++++++++++++++++
+ libmultipath/wwids.c     |   26 ++++++++++++++++++++++++++
+ libmultipath/wwids.h     |    1 +
+ multipath/main.c         |    2 +-
+ multipathd/main.c        |    6 ++++++
+ 9 files changed, 82 insertions(+), 1 deletion(-)
+
+Index: multipath-tools-120518/libmultipath/config.c
+===================================================================
+--- multipath-tools-120518.orig/libmultipath/config.c
++++ multipath-tools-120518/libmultipath/config.c
+@@ -514,6 +514,7 @@ load_config (char * file)
+ 	conf->reassign_maps = DEFAULT_REASSIGN_MAPS;
+ 	conf->checkint = DEFAULT_CHECKINT;
+ 	conf->max_checkint = MAX_CHECKINT(conf->checkint);
++	conf->find_multipaths = DEFAULT_FIND_MULTIPATHS;
+ 
+ 	/*
+ 	 * preload default hwtable
+Index: multipath-tools-120518/libmultipath/configure.c
+===================================================================
+--- multipath-tools-120518.orig/libmultipath/configure.c
++++ multipath-tools-120518/libmultipath/configure.c
+@@ -497,6 +497,10 @@ coalesce_paths (struct vectors * vecs, v
+ 
+ 	memset(empty_buff, 0, WWID_SIZE);
+ 
++	/* ignore refwwid if it's empty */
++	if (refwwid && !strlen(refwwid))
++		refwwid = NULL;
++
+ 	if (force_reload) {
+ 		vector_foreach_slot (pathvec, pp1, k) {
+ 			pp1->mpp = NULL;
+@@ -526,6 +530,13 @@ coalesce_paths (struct vectors * vecs, v
+ 		if (refwwid && strncmp(pp1->wwid, refwwid, WWID_SIZE))
+ 			continue;
+ 
++		/* If find_multipaths was selected check if the path is valid */
++		if (conf->find_multipaths && !refwwid &&
++		    !should_multipath(pp1, pathvec)) {
++			orphan_path(pp1);
++			continue;
++		}
++
+ 		/*
+ 		 * at this point, we know we really got a new mp
+ 		 */
+Index: multipath-tools-120518/libmultipath/defaults.h
+===================================================================
+--- multipath-tools-120518.orig/libmultipath/defaults.h
++++ multipath-tools-120518/libmultipath/defaults.h
+@@ -15,6 +15,7 @@
+ #define DEFAULT_USER_FRIENDLY_NAMES    0
+ #define DEFAULT_VERBOSITY	2
+ #define DEFAULT_REASSIGN_MAPS	1
++#define DEFAULT_FIND_MULTIPATHS 0
+ 
+ #define DEFAULT_CHECKINT	5
+ #define MAX_CHECKINT(a)		(a << 2)
+Index: multipath-tools-120518/libmultipath/dict.c
+===================================================================
+--- multipath-tools-120518.orig/libmultipath/dict.c
++++ multipath-tools-120518/libmultipath/dict.c
+@@ -585,6 +585,27 @@ def_reservation_key_handler(vector strve
+ }
+ 
+ static int
++def_find_multipaths_handler(vector strvec)
++{
++	char * buff;
++
++	buff = set_value(strvec);
++
++	if (!buff)
++		return 1;
++
++	if ((strlen(buff) == 2 && !strcmp(buff, "no")) ||
++	    (strlen(buff) == 1 && !strcmp(buff, "0")))
++		conf->find_multipaths = 0;
++	else if ((strlen(buff) == 3 && !strcmp(buff, "yes")) ||
++		 (strlen(buff) == 1 && !strcmp(buff, "1")))
++		conf->find_multipaths = 1;
++
++	FREE(buff);
++	return 0;
++}
++
++static int
+ def_names_handler(vector strvec)
+ {
+ 	char * buff;
+@@ -2549,6 +2570,18 @@ snprint_def_log_checker_err (char * buff
+ }
+ 
+ static int
++snprint_def_find_multipaths (char * buff, int len, void * data)
++{
++	if (conf->find_multipaths == DEFAULT_FIND_MULTIPATHS)
++		return 0;
++	if (!conf->find_multipaths)
++		return snprintf(buff, len, "no");
++
++	return snprintf(buff, len, "yes");
++}
++
++
++static int
+ snprint_def_user_friendly_names (char * buff, int len, void * data)
+ {
+ 	if (conf->user_friendly_names  == USER_FRIENDLY_NAMES_ON)
+@@ -2646,6 +2679,7 @@ init_keywords(void)
+ 	install_keyword("bindings_file", &bindings_file_handler, &snprint_def_bindings_file);
+ 	install_keyword("log_checker_err", &def_log_checker_err_handler, &snprint_def_log_checker_err);
+ 	install_keyword("reservation_key", &def_reservation_key_handler, &snprint_def_reservation_key);
++	install_keyword("find_multipaths", &def_find_multipaths_handler, &snprint_def_find_multipaths);
+ 	__deprecated install_keyword("default_selector", &def_selector_handler, NULL);
+ 	__deprecated install_keyword("default_path_grouping_policy", &def_pgpolicy_handler, NULL);
+ 	__deprecated install_keyword("default_uid_attribute", &def_uid_attribute_handler, NULL);
+Index: multipath-tools-120518/libmultipath/wwids.c
+===================================================================
+--- multipath-tools-120518.orig/libmultipath/wwids.c
++++ multipath-tools-120518/libmultipath/wwids.c
+@@ -124,6 +124,32 @@ out:
+ }
+ 
+ int
++should_multipath(struct path *pp1, vector pathvec)
++{
++	int i;
++	struct path *pp2;
++
++	condlog(4, "checking if %s should be multipathed", pp1->dev);
++	vector_foreach_slot(pathvec, pp2, i) {
++		if (pp1->dev == pp2->dev)
++			continue;
++		if (strncmp(pp1->wwid, pp2->wwid, WWID_SIZE) == 0) {
++			condlog(3, "found multiple paths with wwid %s, "
++				"multipathing %s", pp1->wwid, pp1->dev);
++			return 1;
++		}
++	}
++	if (check_wwids_file(pp1->wwid, 0) < 0) {
++		condlog(3, "wwid %s not in wwids file, skipping %s",
++			pp1->wwid, pp1->dev);
++		return 0;
++	}
++	condlog(3, "found wwid %s in wwids file, multipathing %s", pp1->wwid,
++		pp1->dev);
++	return 1;
++}
++
++int
+ remember_wwid(char *wwid)
+ {
+ 	int ret = check_wwids_file(wwid, 1);
+Index: multipath-tools-120518/libmultipath/wwids.h
+===================================================================
+--- multipath-tools-120518.orig/libmultipath/wwids.h
++++ multipath-tools-120518/libmultipath/wwids.h
+@@ -12,6 +12,7 @@
+ "#\n" \
+ "# Valid WWIDs:\n"
+ 
++int should_multipath(struct path *pp, vector pathvec);
+ int remember_wwid(char *wwid);
+ int check_wwids_file(char *wwid, int write_wwid);
+ 
+Index: multipath-tools-120518/multipath/main.c
+===================================================================
+--- multipath-tools-120518.orig/multipath/main.c
++++ multipath-tools-120518/multipath/main.c
+@@ -332,7 +332,7 @@ configure (void)
+ 	/*
+ 	 * core logic entry point
+ 	 */
+-	r = coalesce_paths(&vecs, NULL, NULL, conf->force_reload);
++	r = coalesce_paths(&vecs, NULL, refwwid, conf->force_reload);
+ 
+ out:
+ 	if (refwwid)
+Index: multipath-tools-120518/multipathd/main.c
+===================================================================
+--- multipath-tools-120518.orig/multipathd/main.c
++++ multipath-tools-120518/multipathd/main.c
+@@ -49,6 +49,7 @@
+ #include <print.h>
+ #include <configure.h>
+ #include <prio.h>
++#include <wwids.h>
+ #include <pgpolicies.h>
+ #include <uevent.h>
+ 
+@@ -473,6 +474,11 @@ rescan:
+ 			return 1;
+ 		}
+ 
++		if (conf->find_multipaths &&
++		    !should_multipath(pp, vecs->pathvec)) {
++			orphan_path(pp);
++			return 0;
++		}
+ 		condlog(4,"%s: creating new map", pp->dev);
+ 		if ((mpp = add_map_with_path(vecs, pp, 1))) {
+ 			mpp->action = ACT_CREATE;
+Index: multipath-tools-120518/libmultipath/config.h
+===================================================================
+--- multipath-tools-120518.orig/libmultipath/config.h
++++ multipath-tools-120518/libmultipath/config.h
+@@ -104,6 +104,7 @@ struct config {
+ 	unsigned int dev_loss;
+ 	int log_checker_err;
+ 	int allow_queueing;
++	int find_multipaths;
+ 	uid_t uid;
+ 	gid_t gid;
+ 	mode_t mode;
diff --git a/0011-RH-add-hp_tur-checker.patch b/0011-RH-add-hp_tur-checker.patch
index dadf392..bc8d73b 100644
--- a/0011-RH-add-hp_tur-checker.patch
+++ b/0011-RH-add-hp_tur-checker.patch
@@ -5,10 +5,10 @@
  multipath.conf.annotated       |    5 +
  4 files changed, 128 insertions(+), 7 deletions(-)
 
-Index: multipath-tools-111219/libmultipath/checkers.h
+Index: multipath-tools-120613/libmultipath/checkers.h
 ===================================================================
---- multipath-tools-111219.orig/libmultipath/checkers.h
-+++ multipath-tools-111219/libmultipath/checkers.h
+--- multipath-tools-120613.orig/libmultipath/checkers.h
++++ multipath-tools-120613/libmultipath/checkers.h
 @@ -60,6 +60,7 @@ enum path_check_state {
  
  #define DIRECTIO     "directio"
@@ -33,10 +33,10 @@ Index: multipath-tools-111219/libmultipath/checkers.h
  	void * context;                      /* store for persistent data */
  	void ** mpcontext;                   /* store for persistent data shared
  						multipath-wide. Use MALLOC if
-Index: multipath-tools-111219/libmultipath/checkers/Makefile
+Index: multipath-tools-120613/libmultipath/checkers/Makefile
 ===================================================================
---- multipath-tools-111219.orig/libmultipath/checkers/Makefile
-+++ multipath-tools-111219/libmultipath/checkers/Makefile
+--- multipath-tools-120613.orig/libmultipath/checkers/Makefile
++++ multipath-tools-120613/libmultipath/checkers/Makefile
 @@ -8,6 +8,7 @@ LIBS= \
  	libcheckcciss_tur.so \
  	libcheckreadsector0.so \
@@ -55,10 +55,10 @@ Index: multipath-tools-111219/libmultipath/checkers/Makefile
  install:
  	$(INSTALL_PROGRAM) -m 755 $(LIBS) $(DESTDIR)$(libdir)
  
-Index: multipath-tools-111219/libmultipath/checkers/tur.c
+Index: multipath-tools-120613/libmultipath/checkers/tur.c
 ===================================================================
---- multipath-tools-111219.orig/libmultipath/checkers/tur.c
-+++ multipath-tools-111219/libmultipath/checkers/tur.c
+--- multipath-tools-120613.orig/libmultipath/checkers/tur.c
++++ multipath-tools-120613/libmultipath/checkers/tur.c
 @@ -24,12 +24,101 @@
  #define TUR_CMD_LEN 6
  #define HEAVY_CHECK_COUNT       10
@@ -249,10 +249,10 @@ Index: multipath-tools-111219/libmultipath/checkers/tur.c
  		}
  		pthread_attr_destroy(&attr);
  		tur_timeout(&tsp);
-Index: multipath-tools-111219/multipath.conf.annotated
+Index: multipath-tools-120613/multipath.conf.annotated
 ===================================================================
---- multipath-tools-111219.orig/multipath.conf.annotated
-+++ multipath-tools-111219/multipath.conf.annotated
+--- multipath-tools-120613.orig/multipath.conf.annotated
++++ multipath-tools-120613/multipath.conf.annotated
 @@ -96,7 +96,8 @@
  #	# name    : path_checker, checker
  #	# scope   : multipath & multipathd
@@ -265,7 +265,7 @@ Index: multipath-tools-111219/multipath.conf.annotated
  #	path_checker	directio
 @@ -493,7 +494,7 @@
  #		# scope   : multipathd & multipathd
- #		# desc    : path checking alorithm to use to check path state
+ #		# desc    : path checking algorithm to use to check path state
  #		# values  : readsector0|tur|emc_clariion|hp_sw|directio|rdac|
 -#		#           cciss_tur
 +#		#           cciss_tur|hp_tur
diff --git a/0014-RH-RHEL5-style-partitions.patch b/0012-RH-RHEL5-style-partitions.patch
similarity index 100%
rename from 0014-RH-RHEL5-style-partitions.patch
rename to 0012-RH-RHEL5-style-partitions.patch
diff --git a/0016-RH-dont-remove-map-on-enomem.patch b/0013-RH-dont-remove-map-on-enomem.patch
similarity index 69%
rename from 0016-RH-dont-remove-map-on-enomem.patch
rename to 0013-RH-dont-remove-map-on-enomem.patch
index 5b54a4a..b7ee42c 100644
--- a/0016-RH-dont-remove-map-on-enomem.patch
+++ b/0013-RH-dont-remove-map-on-enomem.patch
@@ -2,11 +2,11 @@
  multipathd/main.c |    3 ++-
  1 file changed, 2 insertions(+), 1 deletion(-)
 
-Index: multipath-tools-120123/multipathd/main.c
+Index: multipath-tools-120518/multipathd/main.c
 ===================================================================
---- multipath-tools-120123.orig/multipathd/main.c
-+++ multipath-tools-120123/multipathd/main.c
-@@ -1003,7 +1003,8 @@ mpvec_garbage_collector (struct vectors
+--- multipath-tools-120518.orig/multipathd/main.c
++++ multipath-tools-120518/multipathd/main.c
+@@ -993,7 +993,8 @@ mpvec_garbage_collector (struct vectors
  		return;
  
  	vector_foreach_slot (vecs->mpvec, mpp, i) {
diff --git a/0019-RH-deprecate-uid-gid-mode.patch b/0014-RH-deprecate-uid-gid-mode.patch
similarity index 100%
rename from 0019-RH-deprecate-uid-gid-mode.patch
rename to 0014-RH-deprecate-uid-gid-mode.patch
diff --git a/0025-RHBZ-822714-update-nodes.patch b/0015-RH-use-sync-support.patch
similarity index 65%
rename from 0025-RHBZ-822714-update-nodes.patch
rename to 0015-RH-use-sync-support.patch
index 52e652b..c5dee9d 100644
--- a/0025-RHBZ-822714-update-nodes.patch
+++ b/0015-RH-use-sync-support.patch
@@ -2,10 +2,10 @@
  libmultipath/devmapper.c |    2 ++
  1 file changed, 2 insertions(+)
 
-Index: multipath-tools-120123/libmultipath/devmapper.c
+Index: multipath-tools-120518/libmultipath/devmapper.c
 ===================================================================
---- multipath-tools-120123.orig/libmultipath/devmapper.c
-+++ multipath-tools-120123/libmultipath/devmapper.c
+--- multipath-tools-120518.orig/libmultipath/devmapper.c
++++ multipath-tools-120518/libmultipath/devmapper.c
 @@ -1272,6 +1272,8 @@ dm_rename (char * old, char * new)
  		goto out;
  	if (!dm_task_run(dmt))
diff --git a/0016-RH-change-configs.patch b/0016-RH-change-configs.patch
new file mode 100644
index 0000000..7942ea8
--- /dev/null
+++ b/0016-RH-change-configs.patch
@@ -0,0 +1,541 @@
+---
+ libmultipath/config.c  |    1 
+ libmultipath/hwtable.c |   65 -------------------------------------------------
+ 2 files changed, 1 insertion(+), 65 deletions(-)
+
+Index: multipath-tools-120613/libmultipath/config.c
+===================================================================
+--- multipath-tools-120613.orig/libmultipath/config.c
++++ multipath-tools-120613/libmultipath/config.c
+@@ -515,6 +515,7 @@ load_config (char * file)
+ 	conf->checkint = DEFAULT_CHECKINT;
+ 	conf->max_checkint = MAX_CHECKINT(conf->checkint);
+ 	conf->find_multipaths = DEFAULT_FIND_MULTIPATHS;
++	conf->fast_io_fail = 5;
+ 
+ 	/*
+ 	 * preload default hwtable
+Index: multipath-tools-120613/libmultipath/hwtable.c
+===================================================================
+--- multipath-tools-120613.orig/libmultipath/hwtable.c
++++ multipath-tools-120613/libmultipath/hwtable.c
+@@ -28,7 +28,6 @@ static struct hwentry default_hw[] = {
+ 		.product       = "Compellent Vol",
+ 		.features      = DEFAULT_FEATURES,
+ 		.hwhandler     = DEFAULT_HWHANDLER,
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = MULTIBUS,
+ 		.pgfailback    = -FAILBACK_IMMEDIATE,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -50,7 +49,6 @@ static struct hwentry default_hw[] = {
+ 		.product       = "Xserve RAID ",
+ 		.features      = DEFAULT_FEATURES,
+ 		.hwhandler     = DEFAULT_HWHANDLER,
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = MULTIBUS,
+ 		.pgfailback    = FAILBACK_UNDEF,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -72,7 +70,6 @@ static struct hwentry default_hw[] = {
+ 		.product       = "VV",
+ 		.features      = DEFAULT_FEATURES,
+ 		.hwhandler     = DEFAULT_HWHANDLER,
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = MULTIBUS,
+ 		.pgfailback    = FAILBACK_UNDEF,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -88,7 +85,6 @@ static struct hwentry default_hw[] = {
+ 		.product       = "HSG80",
+ 		.features      = "1 queue_if_no_path",
+ 		.hwhandler     = "1 hp_sw",
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = GROUP_BY_PRIO,
+ 		.pgfailback    = FAILBACK_UNDEF,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -104,7 +100,6 @@ static struct hwentry default_hw[] = {
+ 		.product       = "A6189A",
+ 		.features      = DEFAULT_FEATURES,
+ 		.hwhandler     = DEFAULT_HWHANDLER,
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = MULTIBUS,
+ 		.pgfailback    = FAILBACK_UNDEF,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -121,7 +116,6 @@ static struct hwentry default_hw[] = {
+ 		.product       = "(MSA|HSV)1.0.*",
+ 		.features      = "1 queue_if_no_path",
+ 		.hwhandler     = "1 hp_sw",
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = GROUP_BY_PRIO,
+ 		.pgfailback    = FAILBACK_UNDEF,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -137,7 +131,6 @@ static struct hwentry default_hw[] = {
+ 		.product       = "MSA VOLUME",
+ 		.features      = DEFAULT_FEATURES,
+ 		.hwhandler     = DEFAULT_HWHANDLER,
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = GROUP_BY_PRIO,
+ 		.pgfailback    = -FAILBACK_IMMEDIATE,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -153,7 +146,6 @@ static struct hwentry default_hw[] = {
+ 		.product       = "HSV1[01]1|HSV2[01]0|HSV300|HSV4[05]0",
+ 		.features      = DEFAULT_FEATURES,
+ 		.hwhandler     = DEFAULT_HWHANDLER,
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = GROUP_BY_PRIO,
+ 		.pgfailback    = -FAILBACK_IMMEDIATE,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -169,7 +161,6 @@ static struct hwentry default_hw[] = {
+ 		.product       = "MSA2[02]12fc|MSA2012i",
+ 		.features      = DEFAULT_FEATURES,
+ 		.hwhandler     = DEFAULT_HWHANDLER,
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = MULTIBUS,
+ 		.pgfailback    = -FAILBACK_IMMEDIATE,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -185,7 +176,6 @@ static struct hwentry default_hw[] = {
+ 		.product       = "MSA2012sa|MSA23(12|24)(fc|i|sa)|MSA2000s VOLUME",
+ 		.features      = DEFAULT_FEATURES,
+ 		.hwhandler     = DEFAULT_HWHANDLER,
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = GROUP_BY_PRIO,
+ 		.pgfailback    = -FAILBACK_IMMEDIATE,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -202,7 +192,6 @@ static struct hwentry default_hw[] = {
+ 		.product       = "HSVX700",
+ 		.features      = DEFAULT_FEATURES,
+ 		.hwhandler     = "1 alua",
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = GROUP_BY_PRIO,
+ 		.pgfailback    = -FAILBACK_IMMEDIATE,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -219,7 +208,6 @@ static struct hwentry default_hw[] = {
+ 		.product       = "LOGICAL VOLUME.*",
+ 		.features      = DEFAULT_FEATURES,
+ 		.hwhandler     = DEFAULT_HWHANDLER,
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = MULTIBUS,
+ 		.pgfailback    = FAILBACK_UNDEF,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -236,7 +224,6 @@ static struct hwentry default_hw[] = {
+ 		.product       = "P2000 G3 FC|P2000G3 FC/iSCSI|P2000 G3 SAS|P2000 G3 iSCSI",
+ 		.features      = DEFAULT_FEATURES,
+ 		.hwhandler     = DEFAULT_HWHANDLER,
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = GROUP_BY_PRIO,
+ 		.pgfailback    = -FAILBACK_IMMEDIATE,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -258,7 +245,6 @@ static struct hwentry default_hw[] = {
+ 		.product       = "SAN DataDirector",
+ 		.features      = DEFAULT_FEATURES,
+ 		.hwhandler     = DEFAULT_HWHANDLER,
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = MULTIBUS,
+ 		.pgfailback    = FAILBACK_UNDEF,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -280,7 +266,6 @@ static struct hwentry default_hw[] = {
+ 		.product       = "SYMMETRIX",
+ 		.features      = DEFAULT_FEATURES,
+ 		.hwhandler     = DEFAULT_HWHANDLER,
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = MULTIBUS,
+ 		.pgfailback    = FAILBACK_UNDEF,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -297,7 +282,6 @@ static struct hwentry default_hw[] = {
+ 		.bl_product    = "LUNZ",
+ 		.features      = "1 queue_if_no_path",
+ 		.hwhandler     = "1 emc",
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = GROUP_BY_PRIO,
+ 		.pgfailback    = -FAILBACK_IMMEDIATE,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -314,7 +298,6 @@ static struct hwentry default_hw[] = {
+ 		.bl_product    = "LUNZ",
+ 		.features      = DEFAULT_FEATURES,
+ 		.hwhandler     = DEFAULT_HWHANDLER,
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = MULTIBUS,
+ 		.pgfailback    = FAILBACK_UNDEF,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -336,7 +319,6 @@ static struct hwentry default_hw[] = {
+ 		.product       = "CentricStor",
+ 		.features      = DEFAULT_FEATURES,
+ 		.hwhandler     = DEFAULT_HWHANDLER,
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = GROUP_BY_SERIAL,
+ 		.pgfailback    = FAILBACK_UNDEF,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -352,7 +334,6 @@ static struct hwentry default_hw[] = {
+ 		.product       = "ETERNUS_DX(L|400|8000)",
+ 		.features      = "1 queue_if_no_path",
+ 		.hwhandler     = DEFAULT_HWHANDLER,
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = GROUP_BY_PRIO,
+ 		.pgfailback    = -FAILBACK_IMMEDIATE,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -373,7 +354,6 @@ static struct hwentry default_hw[] = {
+ 		.product       = "OPEN-.*",
+ 		.features      = DEFAULT_FEATURES,
+ 		.hwhandler     = DEFAULT_HWHANDLER,
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = MULTIBUS,
+ 		.pgfailback    = FAILBACK_UNDEF,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -389,7 +369,6 @@ static struct hwentry default_hw[] = {
+ 		.product       = "DF.*",
+ 		.features      = "1 queue_if_no_path",
+ 		.hwhandler     = DEFAULT_HWHANDLER,
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = GROUP_BY_PRIO,
+ 		.pgfailback    = -FAILBACK_IMMEDIATE,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -411,7 +390,6 @@ static struct hwentry default_hw[] = {
+ 		.product       = "ProFibre 4000R",
+ 		.features      = DEFAULT_FEATURES,
+ 		.hwhandler     = DEFAULT_HWHANDLER,
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = MULTIBUS,
+ 		.pgfailback    = FAILBACK_UNDEF,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -429,7 +407,6 @@ static struct hwentry default_hw[] = {
+ 		.bl_product    = "Universal Xport",
+ 		.features      = "1 queue_if_no_path",
+ 		.hwhandler     = "1 rdac",
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = GROUP_BY_PRIO,
+ 		.pgfailback    = -FAILBACK_IMMEDIATE,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -447,7 +424,6 @@ static struct hwentry default_hw[] = {
+ 		.bl_product    = "Universal Xport",
+ 		.features      = "1 queue_if_no_path",
+ 		.hwhandler     = "1 rdac",
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = GROUP_BY_PRIO,
+ 		.pgfailback    = -FAILBACK_IMMEDIATE,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -465,7 +441,6 @@ static struct hwentry default_hw[] = {
+ 		.bl_product    = "Universal Xport",
+ 		.features      = "1 queue_if_no_path",
+ 		.hwhandler     = "1 rdac",
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = GROUP_BY_PRIO,
+ 		.pgfailback    = -FAILBACK_IMMEDIATE,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -483,7 +458,6 @@ static struct hwentry default_hw[] = {
+ 		.bl_product    = "Universal Xport",
+ 		.features      = DEFAULT_FEATURES,
+ 		.hwhandler     = "1 rdac",
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = GROUP_BY_PRIO,
+ 		.pgfailback    = -FAILBACK_IMMEDIATE,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -500,7 +474,6 @@ static struct hwentry default_hw[] = {
+ 		.bl_product    = "Universal Xport",
+ 		.features      = "2 pg_init_retries 50",
+ 		.hwhandler     = "1 rdac",
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = GROUP_BY_PRIO,
+ 		.pgfailback    = -FAILBACK_IMMEDIATE,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -518,7 +491,6 @@ static struct hwentry default_hw[] = {
+ 		.bl_product    = "Universal Xport",
+ 		.features      = DEFAULT_FEATURES,
+ 		.hwhandler     = "1 rdac",
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = GROUP_BY_PRIO,
+ 		.pgfailback    = -FAILBACK_IMMEDIATE,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -536,7 +508,6 @@ static struct hwentry default_hw[] = {
+ 		.bl_product    = "Universal Xport",
+ 		.features      = DEFAULT_FEATURES,
+ 		.hwhandler     = "1 rdac",
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = GROUP_BY_PRIO,
+ 		.pgfailback    = -FAILBACK_IMMEDIATE,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -554,7 +525,6 @@ static struct hwentry default_hw[] = {
+ 		.bl_product    = "Universal Xport",
+ 		.features      = DEFAULT_FEATURES,
+ 		.hwhandler     = "1 rdac",
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = GROUP_BY_PRIO,
+ 		.pgfailback    = -FAILBACK_IMMEDIATE,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -572,7 +542,6 @@ static struct hwentry default_hw[] = {
+ 		.bl_product    = "Universal Xport",
+ 		.features      = DEFAULT_FEATURES,
+ 		.hwhandler     = "1 rdac",
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = GROUP_BY_PRIO,
+ 		.pgfailback    = -FAILBACK_IMMEDIATE,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -589,7 +558,6 @@ static struct hwentry default_hw[] = {
+ 		.product       = "^3542",
+ 		.features      = DEFAULT_FEATURES,
+ 		.hwhandler     = DEFAULT_HWHANDLER,
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = GROUP_BY_SERIAL,
+ 		.pgfailback    = FAILBACK_UNDEF,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -606,7 +574,6 @@ static struct hwentry default_hw[] = {
+ 		.product       = "^2105800",
+ 		.features      = "1 queue_if_no_path",
+ 		.hwhandler     = DEFAULT_HWHANDLER,
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = GROUP_BY_SERIAL,
+ 		.pgfailback    = FAILBACK_UNDEF,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -623,7 +590,6 @@ static struct hwentry default_hw[] = {
+ 		.product       = "^2105F20",
+ 		.features      = "1 queue_if_no_path",
+ 		.hwhandler     = DEFAULT_HWHANDLER,
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = GROUP_BY_SERIAL,
+ 		.pgfailback    = FAILBACK_UNDEF,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -640,7 +606,6 @@ static struct hwentry default_hw[] = {
+ 		.product       = "^1750500",
+ 		.features      = "1 queue_if_no_path",
+ 		.hwhandler     = DEFAULT_HWHANDLER,
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = GROUP_BY_PRIO,
+ 		.pgfailback    = -FAILBACK_IMMEDIATE,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -657,7 +622,6 @@ static struct hwentry default_hw[] = {
+ 		.product       = "^2107900",
+ 		.features      = "1 queue_if_no_path",
+ 		.hwhandler     = DEFAULT_HWHANDLER,
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = MULTIBUS,
+ 		.pgfailback    = FAILBACK_UNDEF,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -674,7 +638,6 @@ static struct hwentry default_hw[] = {
+ 		.product       = "^2145",
+ 		.features      = "1 queue_if_no_path",
+ 		.hwhandler     = DEFAULT_HWHANDLER,
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = GROUP_BY_PRIO,
+ 		.pgfailback    = -FAILBACK_IMMEDIATE,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -693,7 +656,6 @@ static struct hwentry default_hw[] = {
+ 		.uid_attribute = "ID_UID",
+ 		.features      = "1 queue_if_no_path",
+ 		.hwhandler     = DEFAULT_HWHANDLER,
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = MULTIBUS,
+ 		.pgfailback    = FAILBACK_UNDEF,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -712,7 +674,6 @@ static struct hwentry default_hw[] = {
+ 		.uid_attribute = "ID_UID",
+ 		.features      = "1 queue_if_no_path",
+ 		.hwhandler     = DEFAULT_HWHANDLER,
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = MULTIBUS,
+ 		.pgfailback    = FAILBACK_UNDEF,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -729,7 +690,6 @@ static struct hwentry default_hw[] = {
+ 		.product       = "^IPR.*",
+ 		.features      = "1 queue_if_no_path",
+ 		.hwhandler     = "1 alua",
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = GROUP_BY_PRIO,
+ 		.pgfailback    = -FAILBACK_IMMEDIATE,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -746,7 +706,6 @@ static struct hwentry default_hw[] = {
+ 		.product       = "1820N00",
+ 		.features      = DEFAULT_FEATURES,
+ 		.hwhandler     = DEFAULT_HWHANDLER,
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = GROUP_BY_PRIO,
+ 		.pgfailback    = -FAILBACK_IMMEDIATE,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -763,7 +722,6 @@ static struct hwentry default_hw[] = {
+ 		.product       = "2810XIV",
+ 		.features      = "1 queue_if_no_path",
+ 		.hwhandler     = DEFAULT_HWHANDLER,
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = MULTIBUS,
+ 		.pgfailback    = 15,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -786,7 +744,6 @@ static struct hwentry default_hw[] = {
+ 		.product       = "VDASD",
+ 		.features      = DEFAULT_FEATURES,
+ 		.hwhandler     = DEFAULT_HWHANDLER,
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = MULTIBUS,
+ 		.pgfailback    = -FAILBACK_IMMEDIATE,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -803,7 +760,6 @@ static struct hwentry default_hw[] = {
+ 		.product       = "3303      NVDISK",
+ 		.features      = DEFAULT_FEATURES,
+ 		.hwhandler     = DEFAULT_HWHANDLER,
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = FAILOVER,
+ 		.pgfailback    = -FAILBACK_IMMEDIATE,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -820,7 +776,6 @@ static struct hwentry default_hw[] = {
+ 		.product       = "NVDISK",
+ 		.features      = DEFAULT_FEATURES,
+ 		.hwhandler     = "1 alua",
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = GROUP_BY_PRIO,
+ 		.pgfailback    = -FAILBACK_IMMEDIATE,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -838,7 +793,6 @@ static struct hwentry default_hw[] = {
+ 		.bl_product    = "Universal Xport",
+ 		.features      = "2 pg_init_retries 50",
+ 		.hwhandler     = "1 rdac",
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = GROUP_BY_PRIO,
+ 		.pgfailback    = -FAILBACK_IMMEDIATE,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -856,7 +810,6 @@ static struct hwentry default_hw[] = {
+ 		.bl_product    = "Universal Xport",
+ 		.features      = "2 pg_init_retries 50",
+ 		.hwhandler     = "1 rdac",
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = GROUP_BY_PRIO,
+ 		.pgfailback    = -FAILBACK_IMMEDIATE,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -874,7 +827,6 @@ static struct hwentry default_hw[] = {
+ 		.bl_product    = "Universal Xport",
+ 		.features      = "2 pg_init_retries 50",
+ 		.hwhandler     = "1 rdac",
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = GROUP_BY_PRIO,
+ 		.pgfailback    = -FAILBACK_IMMEDIATE,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -892,7 +844,6 @@ static struct hwentry default_hw[] = {
+ 		.bl_product    = "Universal Xport",
+ 		.features      = "2 pg_init_retries 50",
+ 		.hwhandler     = "1 rdac",
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = GROUP_BY_PRIO,
+ 		.pgfailback    = -FAILBACK_IMMEDIATE,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -914,7 +865,6 @@ static struct hwentry default_hw[] = {
+ 		.product       = "LUN.*",
+ 		.features      = "3 queue_if_no_path pg_init_retries 50",
+ 		.hwhandler     = DEFAULT_HWHANDLER,
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = GROUP_BY_PRIO,
+ 		.pgfailback    = -FAILBACK_IMMEDIATE,
+ 		.flush_on_last_del = FLUSH_ENABLED,
+@@ -936,7 +886,6 @@ static struct hwentry default_hw[] = {
+ 		.product       = "COMSTAR",
+ 		.features      = "1 queue_if_no_path",
+ 		.hwhandler     = DEFAULT_HWHANDLER,
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = GROUP_BY_SERIAL,
+ 		.pgfailback    = -FAILBACK_IMMEDIATE,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -957,7 +906,6 @@ static struct hwentry default_hw[] = {
+ 		.product       = "Nseries.*",
+ 		.features      = "1 queue_if_no_path",
+ 		.hwhandler     = DEFAULT_HWHANDLER,
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = GROUP_BY_PRIO,
+ 		.pgfailback    = -FAILBACK_IMMEDIATE,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -978,7 +926,6 @@ static struct hwentry default_hw[] = {
+ 		.product       = "Axiom.*",
+ 		.features      = DEFAULT_FEATURES,
+ 		.hwhandler     = DEFAULT_HWHANDLER,
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = GROUP_BY_PRIO,
+ 		.pgfailback    = FAILBACK_UNDEF,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -1001,7 +948,6 @@ static struct hwentry default_hw[] = {
+ 		.product       = "TP9[13]00",
+ 		.features      = DEFAULT_FEATURES,
+ 		.hwhandler     = DEFAULT_HWHANDLER,
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = MULTIBUS,
+ 		.pgfailback    = FAILBACK_UNDEF,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -1018,7 +964,6 @@ static struct hwentry default_hw[] = {
+ 		.bl_product    = "Universal Xport",
+ 		.features      = DEFAULT_FEATURES,
+ 		.hwhandler     = "1 rdac",
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = GROUP_BY_PRIO,
+ 		.pgfailback    = -FAILBACK_IMMEDIATE,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -1035,7 +980,6 @@ static struct hwentry default_hw[] = {
+ 		.bl_product    = "Universal Xport",
+ 		.features      = "2 pg_init_retries 50",
+ 		.hwhandler     = "1 rdac",
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = GROUP_BY_PRIO,
+ 		.pgfailback    = -FAILBACK_IMMEDIATE,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -1052,7 +996,6 @@ static struct hwentry default_hw[] = {
+ 		.product       = "DISK ARRAY",
+ 		.features      = DEFAULT_FEATURES,
+ 		.hwhandler     = "1 alua",
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = GROUP_BY_PRIO,
+ 		.pgfailback    = -FAILBACK_IMMEDIATE,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -1075,7 +1018,6 @@ static struct hwentry default_hw[] = {
+ 		.bl_product    = "Universal Xport",
+ 		.features      = DEFAULT_FEATURES,
+ 		.hwhandler     = "1 rdac",
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = GROUP_BY_PRIO,
+ 		.pgfailback    = -FAILBACK_IMMEDIATE,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -1097,7 +1039,6 @@ static struct hwentry default_hw[] = {
+ 		.product       = "(StorEdge 3510|T4)",
+ 		.features      = DEFAULT_FEATURES,
+ 		.hwhandler     = DEFAULT_HWHANDLER,
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = MULTIBUS,
+ 		.pgfailback    = FAILBACK_UNDEF,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -1113,7 +1054,6 @@ static struct hwentry default_hw[] = {
+ 		.product       = "FC2502",
+ 		.features      = DEFAULT_FEATURES,
+ 		.hwhandler     = DEFAULT_HWHANDLER,
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = GROUP_BY_PRIO,
+ 		.pgfailback    = FAILBACK_UNDEF,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -1135,7 +1075,6 @@ static struct hwentry default_hw[] = {
+ 		.product       = "RAIGE VOLUME",
+ 		.features      = "1 queue_if_no_path",
+ 		.hwhandler     = DEFAULT_HWHANDLER,
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = MULTIBUS,
+ 		.pgfailback    = FAILBACK_UNDEF,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -1151,7 +1090,6 @@ static struct hwentry default_hw[] = {
+ 		.bl_product    = "Universal Xport",
+ 		.features      = DEFAULT_FEATURES,
+ 		.hwhandler     = "1 rdac",
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = GROUP_BY_PRIO,
+ 		.pgfailback    = -FAILBACK_IMMEDIATE,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -1169,7 +1107,6 @@ static struct hwentry default_hw[] = {
+ 		.bl_product    = "Universal Xport",
+ 		.features      = DEFAULT_FEATURES,
+ 		.hwhandler     = "1 rdac",
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = GROUP_BY_PRIO,
+ 		.pgfailback    = -FAILBACK_IMMEDIATE,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -1187,7 +1124,6 @@ static struct hwentry default_hw[] = {
+ 		.bl_product    = "Universal Xport",
+ 		.features      = "2 pg_init_retries 50",
+ 		.hwhandler     = "1 rdac",
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = GROUP_BY_PRIO,
+ 		.pgfailback    = -FAILBACK_IMMEDIATE,
+ 		.rr_weight     = RR_WEIGHT_NONE,
+@@ -1204,7 +1140,6 @@ static struct hwentry default_hw[] = {
+ 		.bl_product    = "Universal Xport",
+ 		.features      = DEFAULT_FEATURES,
+ 		.hwhandler     = "1 rdac",
+-		.selector      = DEFAULT_SELECTOR,
+ 		.pgpolicy      = GROUP_BY_PRIO,
+ 		.pgfailback    = -FAILBACK_IMMEDIATE,
+ 		.rr_weight     = RR_WEIGHT_NONE,
diff --git a/device-mapper-multipath.spec b/device-mapper-multipath.spec
index c1a7c3b..9dee44f 100644
--- a/device-mapper-multipath.spec
+++ b/device-mapper-multipath.spec
@@ -1,44 +1,35 @@
 Summary: Tools to manage multipath devices using device-mapper
 Name: device-mapper-multipath
 Version: 0.4.9
-Release: 26%{?dist}
+Release: 27%{?dist}
 License: GPL+
 Group: System Environment/Base
 URL: http://christophe.varoqui.free.fr/
 
-Source0: multipath-tools-120123.tgz
+Source0: multipath-tools-120613.tgz
 Source1: multipath.conf
-Patch0001: 0001-RH-fix-async-tur.patch
-Patch0002: 0002-RH-dont_start_with_no_config.patch
-Patch0003: 0003-RH-multipath.rules.patch
-Patch0004: 0004-RH-update-init-script.patch
-Patch0005: 0005-RH-cciss_id.patch
-Patch0006: 0006-RH-Make-build-system-RH-Fedora-friendly.patch
-Patch0007: 0007-RH-multipathd-blacklist-all-by-default.patch
-Patch0008: 0008-RH-add-mpathconf.patch
-Patch0009: 0009-RH-add-find-multipaths.patch
-Patch0010: 0010-RH-check-if-multipath-owns-path.patch
+Patch0001: 0001-RH-remove_callout.patch
+Patch0002: 0002-RH-add-wwids-file.patch
+Patch0003: 0003-RH-add-followover.patch
+Patch0004: 0004-RH-fix-cciss-names.patch
+Patch0005: 0005-RH-dont_start_with_no_config.patch
+Patch0006: 0006-RH-multipath.rules.patch
+Patch0007: 0007-RH-Make-build-system-RH-Fedora-friendly.patch
+Patch0008: 0008-RH-multipathd-blacklist-all-by-default.patch
+Patch0009: 0009-RH-add-mpathconf.patch
+Patch0010: 0010-RH-add-find-multipaths.patch
 Patch0011: 0011-RH-add-hp_tur-checker.patch
-Patch0012: 0012-RH-update-on-show-topology.patch
-Patch0013: 0013-RH-manpage-update.patch
-Patch0014: 0014-RH-RHEL5-style-partitions.patch
-Patch0015: 0015-RH-add-followover.patch
-Patch0016: 0016-RH-dont-remove-map-on-enomem.patch
-Patch0017: 0017-RH-fix-shutdown-crash.patch
-Patch0018: 0018-RH-warn-on-bad-dev-loss-tmo.patch
-Patch0019: 0019-RH-deprecate-uid-gid-mode.patch
-Patch0020: 0020-RH-dont-remove-map-twice.patch
-Patch0021: 0021-RH-validate-guid-partitions.patch
-Patch0022: 0022-RH-adjust-messages.patch
-Patch0023: 0023-RH-manpage-update.patch
-Patch0024: 0024-RH-libudev-monitor.patch
-Patch0025: 0025-RHBZ-822714-update-nodes.patch
+Patch0012: 0012-RH-RHEL5-style-partitions.patch
+Patch0013: 0013-RH-dont-remove-map-on-enomem.patch
+Patch0014: 0014-RH-deprecate-uid-gid-mode.patch
+Patch0015: 0015-RH-use-sync-support.patch
+Patch0016: 0016-RH-change-configs.patch
 
 # runtime
 Requires: %{name}-libs = %{version}-%{release}
 Requires: kpartx = %{version}-%{release}
 Requires: device-mapper >= 1.02.39-1
-Requires: udev initscripts libudev
+Requires: initscripts
 Requires(post): systemd-units systemd-sysv chkconfig
 Requires(preun): systemd-units
 Requires(postun): systemd-units
@@ -47,7 +38,7 @@ Requires(postun): systemd-units
 BuildRequires: libaio-devel, device-mapper-devel >= 1.02.39-1
 BuildRequires: libselinux-devel, libsepol-devel
 BuildRequires: readline-devel, ncurses-devel
-BuildRequires: systemd-units, libudev-devel
+BuildRequires: systemd-units, systemd-devel
 
 BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
 
@@ -84,7 +75,7 @@ Group: System Environment/Base
 kpartx manages partition creation and removal for device-mapper devices.
 
 %prep
-%setup -q -n multipath-tools-120123
+%setup -q -n multipath-tools-120613
 %patch0001 -p1
 %patch0002 -p1
 %patch0003 -p1
@@ -101,15 +92,6 @@ kpartx manages partition creation and removal for device-mapper devices.
 %patch0014 -p1
 %patch0015 -p1
 %patch0016 -p1
-%patch0017 -p1
-%patch0018 -p1
-%patch0019 -p1
-%patch0020 -p1
-%patch0021 -p1
-%patch0022 -p1
-%patch0023 -p1
-%patch0024 -p1
-%patch0025 -p1
 cp %{SOURCE1} .
 
 %build
@@ -166,17 +148,19 @@ bin/systemctl --no-reload enable multipathd.service >/dev/null 2>&1 ||:
 %defattr(-,root,root,-)
 %{_sbindir}/multipath
 %{_sbindir}/multipathd
-%{_sbindir}/cciss_id
 %{_sbindir}/mpathconf
+%{_sbindir}/mpathpersist
 %{_unitdir}/multipathd.service
+%{_mandir}/man3/mpath_persistent_reserve_in.3.gz
+%{_mandir}/man3/mpath_persistent_reserve_out.3.gz
 %{_mandir}/man5/multipath.conf.5.gz
 %{_mandir}/man8/multipath.8.gz
 %{_mandir}/man8/multipathd.8.gz
 %{_mandir}/man8/mpathconf.8.gz
-%config /lib/udev/rules.d/40-multipath.rules
+%{_mandir}/man8/mpathpersist.8.gz
+%config /lib/udev/rules.d/62-multipath.rules
 %doc AUTHOR COPYING FAQ
-%doc multipath.conf multipath.conf.annotated
-%doc multipath.conf.defaults multipath.conf.synthetic
+%doc multipath.conf
 %dir /etc/multipath
 
 %files libs
@@ -184,6 +168,8 @@ bin/systemctl --no-reload enable multipathd.service >/dev/null 2>&1 ||:
 %doc AUTHOR COPYING
 %{_libdir}/libmultipath.so
 %{_libdir}/libmultipath.so.*
+%{_libdir}/libmpathpersist.so
+%{_libdir}/libmpathpersist.so.*
 %dir %{_libmpathdir}
 %{_libmpathdir}/*
 
@@ -200,6 +186,22 @@ bin/systemctl --no-reload enable multipathd.service >/dev/null 2>&1 ||:
 %{_mandir}/man8/kpartx.8.gz
 
 %changelog
+* Thu Jun 28 2012 Benjamin Marzinski <bmarzins at redhat.com> 0.4.9-27
+- Updated to latest upstream 0.4.9 code : multipath-tools-120613.tgz
+  (git commit id: cb0f7127ba90ab5e8e71fc534a0a16cdbe96a88f)
+- Add 0001-RH-remove_callout.patch
+  * multipath no longer uses the getuid callout.  It now gets the
+    wwid from the udev database or the environment variables
+- Add 0004-RH-fix-cciss-names.patch
+  * convert cciss device names from cciss/cXdY to sysfs style cciss!cXdY
+- Split 0009-RH-add-find-multipaths.patch into 0002-RH-add-wwids-file.patch
+        and 0010-RH-add-find-multipaths.patch
+- Add 0016-RH-change-configs.patch
+  * default fast_io_fail to 5 and don't set the path selector in the
+    builtin configs.
+Resolves: bz #831978
+
+
 * Mon May 18 2012 Benjamin Marzinski <bmarzins at redhat.com> 0.4.9-26
 - Add 0025-RHBZ-822714-update-nodes.patch
 - Resolves: bz #822714
diff --git a/sources b/sources
index 2329d3d..38f8bfd 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-7cea74ff9f3b494d1cba6884617d08fd  multipath-tools-120123.tgz
+84632b08dbca9fa04179edd8c469c92a  multipath-tools-120613.tgz


More information about the scm-commits mailing list