[dm-devel] multipath-tools libmultipath/config.c libmulti ...

bmarzins at sourceware.org bmarzins at sourceware.org
Fri Dec 1 23:45:20 UTC 2006


CVSROOT:	/cvs/dm
Module name:	multipath-tools
Branch: 	RHEL4_FC5
Changes by:	bmarzins at sourceware.org	2006-12-01 23:45:19

Modified files:
	libmultipath   : config.c config.h defaults.h dict.c hwtable.c 
	                 propsel.c propsel.h structs.h 
	multipath      : main.c 
	path_priority/pp_alua: main.c 
	path_priority/pp_hds_modular: pp_hds_modular.c 

Log message:
	Fixes for bugs 217014, 192645, 215509, 187534, and 215505
	
	Applied Dave Wysochanski's patches.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/multipath-tools/libmultipath/config.c.diff?cvsroot=dm&only_with_tag=RHEL4_FC5&r1=1.17&r2=1.17.2.1
http://sourceware.org/cgi-bin/cvsweb.cgi/multipath-tools/libmultipath/config.h.diff?cvsroot=dm&only_with_tag=RHEL4_FC5&r1=1.17&r2=1.17.2.1
http://sourceware.org/cgi-bin/cvsweb.cgi/multipath-tools/libmultipath/defaults.h.diff?cvsroot=dm&only_with_tag=RHEL4_FC5&r1=1.6&r2=1.6.2.1
http://sourceware.org/cgi-bin/cvsweb.cgi/multipath-tools/libmultipath/dict.c.diff?cvsroot=dm&only_with_tag=RHEL4_FC5&r1=1.16&r2=1.16.2.1
http://sourceware.org/cgi-bin/cvsweb.cgi/multipath-tools/libmultipath/hwtable.c.diff?cvsroot=dm&only_with_tag=RHEL4_FC5&r1=1.16.2.4&r2=1.16.2.5
http://sourceware.org/cgi-bin/cvsweb.cgi/multipath-tools/libmultipath/propsel.c.diff?cvsroot=dm&only_with_tag=RHEL4_FC5&r1=1.9&r2=1.9.2.1
http://sourceware.org/cgi-bin/cvsweb.cgi/multipath-tools/libmultipath/propsel.h.diff?cvsroot=dm&only_with_tag=RHEL4_FC5&r1=1.4&r2=1.4.2.1
http://sourceware.org/cgi-bin/cvsweb.cgi/multipath-tools/libmultipath/structs.h.diff?cvsroot=dm&only_with_tag=RHEL4_FC5&r1=1.17.2.2&r2=1.17.2.3
http://sourceware.org/cgi-bin/cvsweb.cgi/multipath-tools/multipath/main.c.diff?cvsroot=dm&only_with_tag=RHEL4_FC5&r1=1.41.2.3&r2=1.41.2.4
http://sourceware.org/cgi-bin/cvsweb.cgi/multipath-tools/path_priority/pp_alua/main.c.diff?cvsroot=dm&only_with_tag=RHEL4_FC5&r1=1.2&r2=1.2.2.1
http://sourceware.org/cgi-bin/cvsweb.cgi/multipath-tools/path_priority/pp_hds_modular/pp_hds_modular.c.diff?cvsroot=dm&only_with_tag=RHEL4_FC5&r1=1.1&r2=1.1.2.1

--- multipath-tools/libmultipath/config.c	2006/04/19 18:03:46	1.17
+++ multipath-tools/libmultipath/config.c	2006/12/01 23:45:18	1.17.2.1
@@ -263,7 +263,8 @@
 int
 store_hwe_ext (vector hwtable, char * vendor, char * product, int pgp,
 	   char * getuid, char * getprio, char * hwhandler,
-	   char * features, char * checker, int pgfailback, char * blacklist)
+	   char * features, char * checker, int pgfailback, char * blacklist,
+	   int no_path_retry, int rr_weight, int rr_min_io)
 {
 	struct hwentry * hwe;
 
@@ -329,6 +330,15 @@
 		store_regex(hwe->blist, blacklist);
 	}
 
+	if (no_path_retry)
+		hwe->no_path_retry = no_path_retry;
+
+	if (rr_weight)
+		hwe->rr_weight = rr_weight;
+
+	if (rr_min_io)
+		hwe->rr_min_io = rr_min_io;
+
 	if (!vector_alloc_slot(hwtable))
 		goto out;
 
@@ -395,7 +405,7 @@
 		conf->verbosity = 2;
 
 	conf->dev_type = DEV_NONE;
-	conf->minio = 1000;
+	conf->rr_min_io = DEFAULT_RR_MIN_IO;
 	conf->bindings_file = DEFAULT_BINDINGS_FILE;
 
 	/*
--- multipath-tools/libmultipath/config.h	2006/04/19 18:03:46	1.17
+++ multipath-tools/libmultipath/config.h	2006/12/01 23:45:18	1.17.2.1
@@ -17,6 +17,7 @@
 	int pgpolicy;
 	int checker_index;
 	int pgfailback;
+	int rr_min_io;
 	int rr_weight;
 	int no_path_retry;
 	int pg_timeout;
@@ -36,6 +37,7 @@
 	int selector_args;
 	int pgpolicy;
 	int pgfailback;
+	int rr_min_io;
 	int rr_weight;
 	int no_path_retry;
 	int pg_timeout;
@@ -56,7 +58,7 @@
 	int default_pgpolicy;
 	int default_checker_index;
 	int dev_type;
-	int minio;
+	int rr_min_io;
 	int checkint;
 	int max_checkint;
 	int pgfailback;
@@ -98,7 +100,8 @@
 int store_hwe_ext (vector hwtable, char * vendor, char * product, int pgp,
 		char * getuid, char * getprio, char * hwhandler,
 		char * features, char * checker, int pgfailback,
-		char * blacklist);
+		char * blacklist, int no_path_retry, int rr_weight,
+		int rr_min_io);
 
 int load_config (char * file);
 struct config * alloc_config (void);
--- multipath-tools/libmultipath/defaults.h	2005/10/27 02:16:12	1.6
+++ multipath-tools/libmultipath/defaults.h	2006/12/01 23:45:18	1.6.2.1
@@ -10,5 +10,6 @@
 #define DEFAULT_SOCKET		"/var/run/multipathd.sock"
 #define DEFAULT_CONFIGFILE	"/etc/multipath.conf"
 #define DEFAULT_BINDINGS_FILE	"/var/lib/multipath/bindings"
+#define DEFAULT_RR_MIN_IO       1000
 
 char * set_default (char * str);
--- multipath-tools/libmultipath/dict.c	2006/04/19 18:03:46	1.16
+++ multipath-tools/libmultipath/dict.c	2006/12/01 23:45:18	1.16.2.1
@@ -124,7 +124,7 @@
 }
 
 static int
-def_minio_handler(vector strvec)
+def_rr_min_io_handler(vector strvec)
 {
 	char * buff;
 
@@ -133,7 +133,7 @@
 	if (!buff)
 		return 1;
 
-	conf->minio = atoi(buff);
+	conf->rr_min_io = atoi(buff);
 	FREE(buff);
 
 	return 0;
@@ -794,7 +794,7 @@
 	install_keyword("features", &def_features_handler);
 	install_keyword("path_checker", &def_path_checker_handler);
 	install_keyword("failback", &default_failback_handler);
-	install_keyword("rr_min_io", &def_minio_handler);
+	install_keyword("rr_min_io", &def_rr_min_io_handler);
 	install_keyword("rr_weight", &def_weight_handler);
 	install_keyword("no_path_retry", &def_no_path_retry_handler);
 	install_keyword("pg_timeout", &default_pg_timeout_handler);
--- multipath-tools/libmultipath/hwtable.c	2006/09/19 21:06:40	1.16.2.4
+++ multipath-tools/libmultipath/hwtable.c	2006/12/01 23:45:18	1.16.2.5
@@ -12,6 +12,7 @@
 	int r = 0;
 
 	r += store_hwe(hw, "3PARdata", "VV", MULTIBUS, DEFAULT_GETUID);
+	r += store_hwe(hw, "APPLE*", "Xserve RAID ", MULTIBUS, DEFAULT_GETUID);
 	r += store_hwe(hw, "COMPAQ", "HSV110*", GROUP_BY_SERIAL, DEFAULT_GETUID);
 	r += store_hwe(hw, "COMPAQ", "MSA1000", GROUP_BY_SERIAL, DEFAULT_GETUID);
 	r += store_hwe(hw, "DDN", "SAN DataDirector", MULTIBUS, DEFAULT_GETUID);
@@ -20,7 +21,7 @@
 		       "/sbin/scsi_id -g -u -ppre-spc3-83 -s /block/%n");
 	r += store_hwe(hw, "FSC", "CentricStor", GROUP_BY_SERIAL, DEFAULT_GETUID);
 	r += store_hwe(hw, "HP", "HSV110", GROUP_BY_SERIAL, DEFAULT_GETUID);
-	r += store_hwe(hw, "HP", "{HSV2*,A6189A}", MULTIBUS, DEFAULT_GETUID);
+	r += store_hwe(hw, "HP", "A6189A", MULTIBUS, DEFAULT_GETUID);
 	r += store_hwe(hw, "IBM", "ProFibre 4000R", MULTIBUS, DEFAULT_GETUID);
 	r += store_hwe(hw, "SGI", "TP9100", MULTIBUS, DEFAULT_GETUID);
 	r += store_hwe(hw, "SGI", "TP9300", MULTIBUS, DEFAULT_GETUID);
@@ -30,40 +31,63 @@
 
 	r + store_hwe_ext(hw, "GNBD", "GNBD", MULTIBUS,
         		  "/sbin/gnbd_import -q -U /block/%n", NULL, "0", "0",
-			  "directio", FAILBACK_UNDEF, NULL);
+			  "directio", FAILBACK_UNDEF, NULL, 0, 0, 0);
         r += store_hwe_ext(hw, "HP", "MSA VOLUME", GROUP_BY_PRIO, DEFAULT_GETUID,
-		   "/sbin/mpath_prio_alua %d", "0", "0", "tur", FAILBACK_UNDEF, NULL);
-        r += store_hwe_ext(hw, "HP", "HSV101", GROUP_BY_PRIO, DEFAULT_GETUID,
-		    "/sbin/mpath_prio_alua %d", "0","1 queue_if_no_path", "tur",
-		    FAILBACK_UNDEF, NULL);
-        r += store_hwe_ext(hw, "COMPAQ", "HSV111*", GROUP_BY_PRIO, DEFAULT_GETUID,
-		    "/sbin/mpath_prio_alua %d", "0", "1 queue_if_no_path", "tur",
-		    FAILBACK_UNDEF, NULL);
-	r += store_hwe_ext(hw, "{HITACHI,HP}", "OPEN-*", MULTIBUS, DEFAULT_GETUID, NULL, "0", "0",
-		    "tur", FAILBACK_UNDEF, NULL);
+		   "/sbin/mpath_prio_alua %d", "0", "0", "tur", FAILBACK_UNDEF, NULL,
+		   0, 0, 0);
+	r += store_hwe_ext(hw, "HP", "HSV101", GROUP_BY_PRIO, DEFAULT_GETUID,
+		"/sbin/mpath_prio_alua %n", "0", "0", "tur",
+		-FAILBACK_IMMEDIATE, NULL, 60, 0, 100);
+	r += store_hwe_ext(hw, "HP", "HSV2[10]0", GROUP_BY_PRIO, DEFAULT_GETUID,
+		"/sbin/mpath_prio_alua %n", "0", "0", "tur",
+		-FAILBACK_IMMEDIATE, NULL, 60, 0, 100);
+	r += store_hwe_ext(hw, "COMPAQ", "HSV111", GROUP_BY_PRIO,
+		DEFAULT_GETUID, "/sbin/mpath_prio_alua %n", "0", "0", "tur",
+		-FAILBACK_IMMEDIATE, NULL, 60, 0, 100);
+	r += store_hwe_ext(hw, "{HITACHI,HP}", "OPEN-*", MULTIBUS,
+		DEFAULT_GETUID, NULL, "0", "0", "tur", -FAILBACK_IMMEDIATE,
+		NULL, 60, 0, 100);
         r += store_hwe_ext(hw, "HP", "*33[89]0*", MULTIBUS, DEFAULT_GETUID, NULL, "0", "0",
-		    "tur", FAILBACK_UNDEF, NULL);
+		    "tur", FAILBACK_UNDEF, NULL, 0, 0, 0);
 	r += store_hwe_ext(hw, "DGC", "*", GROUP_BY_PRIO,
                    DEFAULT_GETUID, "/sbin/mpath_prio_emc /dev/%n", "1 emc",
-		   "1 queue_if_no_path", "emc_clariion", -FAILBACK_IMMEDIATE, "LUN_Z");
+		   "1 queue_if_no_path", "emc_clariion", -FAILBACK_IMMEDIATE, "LUN_Z",
+		   0, 0, 0);
 	r += store_hwe_ext(hw, "IBM", "3542", GROUP_BY_SERIAL, DEFAULT_GETUID,
-		   NULL, "0", "0", "tur", FAILBACK_UNDEF, NULL);
+		   NULL, "0", "0", "tur", FAILBACK_UNDEF, NULL, 0, 0, 0);
+	r += store_hwe_ext(hw, "IBM", "2105*", GROUP_BY_SERIAL, DEFAULT_GETUID,
+		   NULL, "0", "1 queue_in_no_path", "tur", FAILBACK_UNDEF, NULL,
+		   0, 0, 0);
+	r += store_hwe_ext(hw, "IBM", "1750500", GROUP_BY_PRIO,
+		   DEFAULT_GETUID, "/sbin/mpath_prio_alua /dev/%n", "0",
+		   "1 queue_in_no_path", "tur", -FAILBACK_IMMEDIATE, NULL, 0, 0,
+		   0);
+	r += store_hwe_ext(hw, "IBM", "2107900", GROUP_BY_SERIAL,
+		   DEFAULT_GETUID, NULL, "0", "1 queue_in_no_path", "tur",
+		   FAILBACK_UNDEF, NULL, 0, 0, 0);
+	r += store_hwe_ext(hw, "IBM", "2145", GROUP_BY_PRIO, DEFAULT_GETUID,
+		   "/sbin/mpath_prio_alua /dev/%n", "0", "1 queue_in_no_path",
+		   "tur", -FAILBACK_IMMEDIATE, NULL, 0, 0, 0);
 	r += store_hwe_ext(hw, "IBM", "S/390 DASD ECKD", MULTIBUS,
 		   "/sbin/dasdview -j /dev/%n", NULL, "0", "0",
-		   "directio", FAILBACK_UNDEF);
+		   "directio", FAILBACK_UNDEF, NULL, 0, 0, 0);
 	r += store_hwe_ext(hw, "NETAPP", "LUN", GROUP_BY_PRIO, DEFAULT_GETUID,
 		  "/sbin/mpath_prio_netapp /dev/%n", NULL,
-		  "1 queue_if_no_path", "readsector0", FAILBACK_UNDEF, NULL);
+		  "1 queue_if_no_path", "readsector0", FAILBACK_UNDEF, NULL, 0, 0, 0);
+	r += store_hwe_ext(hw, "IBM", "Nseries", GROUP_BY_PRIO, DEFAULT_GETUID,
+		  "/sbin/mpath_prio_netapp /dev/%n", NULL,
+		  "1 queue_if_no_path", "readsector0", -FAILBACK_IMMEDIATE,
+		  NULL, 0, 0, 128);
 	r += store_hwe_ext(hw, "Pillar", "Axiom 500", GROUP_BY_PRIO,
 		   DEFAULT_GETUID, "/sbin/mpath_prio_alua %d", "0", "0",
-		   "tur", FAILBACK_UNDEF, NULL);
+		   "tur", FAILBACK_UNDEF, NULL, 0, 0, 0);
 	r += store_hwe_ext(hw, "SGI", "TP9400", MULTIBUS, DEFAULT_GETUID,
-		   NULL, "0", "0", "tur", FAILBACK_UNDEF, NULL);
+		   NULL, "0", "0", "tur", FAILBACK_UNDEF, NULL, 0, 0, 0);
 	r += store_hwe_ext(hw, "SGI", "TP9500", FAILOVER, DEFAULT_GETUID,
-		   NULL, "0", "0", "tur", FAILBACK_UNDEF, NULL);
+		   NULL, "0", "0", "tur", FAILBACK_UNDEF, NULL, 0, 0, 0);
 	r += store_hwe_ext(hw, "HITACHI", "DF*", GROUP_BY_PRIO,
 		   DEFAULT_GETUID, "/sbin/mpath/prio_hds_modular %d", "0", "0",
-		   "readsector0", -FAILBACK_IMMEDIATE, NULL);
+		   "readsector0", -FAILBACK_IMMEDIATE, NULL, 0, 0, 0);
 
 	return r;
 }
--- multipath-tools/libmultipath/propsel.c	2005/11/16 20:24:57	1.9
+++ multipath-tools/libmultipath/propsel.c	2006/12/01 23:45:18	1.9.2.1
@@ -11,6 +11,7 @@
 #include "debug.h"
 #include "pgpolicies.h"
 #include "alias.h"
+#include "defaults.h"
 
 #include "../libcheckers/checkers.h"
 
@@ -20,6 +21,33 @@
  * stop at first explicit setting found
  */
 extern int
+select_rr_min_io (struct multipath * mp)
+{
+	if (mp->mpe && mp->mpe->rr_min_io) {
+		mp->rr_min_io = mp->mpe->rr_min_io;
+		condlog(3, "rr_min_io = %i (LUN setting)",
+			mp->rr_min_io);
+		return 0;
+	}
+	if (mp->hwe && mp->hwe->rr_min_io) {
+		mp->rr_min_io = mp->hwe->rr_min_io;
+		condlog(3, "rr_min_io = %i (controler setting)",
+			mp->rr_min_io);
+		return 0;
+	}
+	if (conf->rr_min_io) {
+		mp->rr_min_io = conf->rr_min_io;
+		condlog(3, "rr_min_io = %i (config file default)",
+			mp->rr_min_io);
+		return 0;
+	}
+	mp->rr_min_io = DEFAULT_RR_MIN_IO;
+	condlog(3, "rr_min_io = %i (internal default)",
+		mp->rr_min_io);
+	return 0;
+}
+
+extern int
 select_rr_weight (struct multipath * mp)
 {
 	if (mp->mpe && mp->mpe->rr_weight) {
--- multipath-tools/libmultipath/propsel.h	2005/11/04 23:35:28	1.4
+++ multipath-tools/libmultipath/propsel.h	2006/12/01 23:45:18	1.4.2.1
@@ -10,3 +10,4 @@
 int select_getprio (struct path * pp);
 int select_no_path_retry(struct multipath *mp);
 int select_pg_timeout(struct multipath *mp);
+int select_rr_min_io(struct multipath *mp);
--- multipath-tools/libmultipath/structs.h	2006/09/19 21:06:40	1.17.2.2
+++ multipath-tools/libmultipath/structs.h	2006/12/01 23:45:18	1.17.2.3
@@ -124,6 +124,7 @@
 	int action;
 	int pgfailback;
 	int failback_tick;
+	int rr_min_io;
 	int rr_weight;
 	int nr_active;     /* current available(= not known as failed) paths */
 	int no_path_retry; /* number of retries after all paths are down */
--- multipath-tools/multipath/main.c	2006/09/14 23:25:08	1.41.2.3
+++ multipath-tools/multipath/main.c	2006/12/01 23:45:18	1.41.2.4
@@ -1,7 +1,7 @@
 /*
  * Soft:        multipath device mapper target autoconfig
  *
- * Version:     $Id: main.c,v 1.41.2.3 2006/09/14 23:25:08 bmarzins Exp $
+ * Version:     $Id: main.c,v 1.41.2.4 2006/12/01 23:45:18 bmarzins Exp $
  *
  * Author:      Christophe Varoqui
  *
@@ -299,7 +299,7 @@
 {
 	int i, j;
 	int shift, freechar;
-	int minio;
+	int rr_min_io;
 	char * p;
 	struct pathgroup * pgp;
 	struct path * pp;
@@ -330,13 +330,13 @@
 		freechar -= shift;
 
 		vector_foreach_slot (pgp->paths, pp, j) {
-			minio = conf->minio;
+			rr_min_io = mp->rr_min_io;
 			
 			if (mp->rr_weight == RR_WEIGHT_PRIO && pp->priority)
-				minio *= pp->priority;
+				rr_min_io *= pp->priority;
 
 			shift = snprintf(p, freechar, " %s %d",
-					 pp->dev_t, minio);
+					 pp->dev_t, rr_min_io);
 			if (shift >= freechar) {
 				fprintf(stderr, "mp->params too small\n");
 				return 1;
@@ -376,6 +376,7 @@
 	select_features(mpp);
 	select_hwhandler(mpp);
 	select_rr_weight(mpp);
+	select_rr_min_io(mpp);
 	select_no_path_retry(mpp);
 	select_pg_timeout(mpp);
 
--- multipath-tools/path_priority/pp_alua/main.c	2005/10/12 21:57:26	1.2
+++ multipath-tools/path_priority/pp_alua/main.c	2006/12/01 23:45:18	1.2.2.1
@@ -12,8 +12,6 @@
  * 
  * This file is released under the GPL.
  */
-#include <linux/kdev_t.h>
-
 #include <sys/types.h>
 #include <sys/stat.h>
 
@@ -241,7 +239,7 @@
 			mknod(
 				devicepath,
 				S_IFBLK|S_IRUSR|S_IWUSR,
-				MKDEV(major, minor)
+				makedev(major, minor)
 			);
 			
 		}
--- multipath-tools/path_priority/pp_hds_modular/pp_hds_modular.c	2006/04/24 23:51:28	1.1
+++ multipath-tools/path_priority/pp_hds_modular/pp_hds_modular.c	2006/12/01 23:45:18	1.1.2.1
@@ -187,7 +187,7 @@
 	exit(1);
 	}
 
-print_help() {
+void print_help(void) {
 	printf("\n");
 	printf("Usage:       pp_hds_modular [-v] <device_major:device_minor>\n");
 	printf("Option:      -v verbose mode\n");




More information about the dm-devel mailing list