forked from pool/multipath-tools
This commit is contained in:
parent
c1f5ec65c6
commit
2f690c3436
81
multipath-tools-add-IBM-storage-to-hwtable
Normal file
81
multipath-tools-add-IBM-storage-to-hwtable
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
From b0ce6c618b0953b708f4810e763ce307f1bad590 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Hannes Reinecke <hare@suse.de>
|
||||||
|
Date: Mon, 20 Oct 2008 08:49:04 +0200
|
||||||
|
Subject: [PATCH] Add support for couple of IBM storage devices
|
||||||
|
|
||||||
|
Few of the IBM rdac storage devices are not available in the multipath
|
||||||
|
tools. This patch adds support for those.
|
||||||
|
|
||||||
|
Signed-Off-by: Chandra Seetharaman <sekharan@us.ibm.com>
|
||||||
|
Signed-off-by: Hannes Reinecke <hare@suse.de>
|
||||||
|
---
|
||||||
|
libmultipath/hwtable.c | 38 +++++++++++++++++++++++++++++++++++---
|
||||||
|
1 files changed, 35 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/libmultipath/hwtable.c b/libmultipath/hwtable.c
|
||||||
|
index cd9a9d2..f87907d 100644
|
||||||
|
--- a/libmultipath/hwtable.c
|
||||||
|
+++ b/libmultipath/hwtable.c
|
||||||
|
@@ -358,9 +358,9 @@ static struct hwentry default_hw[] = {
|
||||||
|
.prio_name = PRIO_RDAC,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
- /* IBM DS3400 */
|
||||||
|
+ /* IBM DS4100 */
|
||||||
|
.vendor = "IBM",
|
||||||
|
- .product = "1726-4xx",
|
||||||
|
+ .product = "1724",
|
||||||
|
.getuid = DEFAULT_GETUID,
|
||||||
|
.features = "1 queue_if_no_path",
|
||||||
|
.hwhandler = "1 rdac",
|
||||||
|
@@ -374,7 +374,23 @@ static struct hwentry default_hw[] = {
|
||||||
|
.prio_name = PRIO_RDAC,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
- /* IBM DS4400 / FAStT700 */
|
||||||
|
+ /* IBM DS3200 / DS3300 / DS3400 */
|
||||||
|
+ .vendor = "IBM",
|
||||||
|
+ .product = "1726",
|
||||||
|
+ .getuid = DEFAULT_GETUID,
|
||||||
|
+ .features = "1 queue_if_no_path",
|
||||||
|
+ .hwhandler = "1 rdac",
|
||||||
|
+ .selector = DEFAULT_SELECTOR,
|
||||||
|
+ .pgpolicy = GROUP_BY_PRIO,
|
||||||
|
+ .pgfailback = -FAILBACK_IMMEDIATE,
|
||||||
|
+ .rr_weight = RR_WEIGHT_NONE,
|
||||||
|
+ .no_path_retry = 300,
|
||||||
|
+ .minio = DEFAULT_MINIO,
|
||||||
|
+ .checker_name = RDAC,
|
||||||
|
+ .prio_name = PRIO_RDAC,
|
||||||
|
+ },
|
||||||
|
+ {
|
||||||
|
+ /* IBM DS4400 / DS4500 / FAStT700 */
|
||||||
|
.vendor = "IBM",
|
||||||
|
.product = "1742",
|
||||||
|
.getuid = DEFAULT_GETUID,
|
||||||
|
@@ -422,6 +438,22 @@ static struct hwentry default_hw[] = {
|
||||||
|
.prio_name = PRIO_RDAC,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
+ /* IBM DS5000 */
|
||||||
|
+ .vendor = "IBM",
|
||||||
|
+ .product = "1818",
|
||||||
|
+ .getuid = DEFAULT_GETUID,
|
||||||
|
+ .features = DEFAULT_FEATURES,
|
||||||
|
+ .hwhandler = "1 rdac",
|
||||||
|
+ .selector = DEFAULT_SELECTOR,
|
||||||
|
+ .pgpolicy = GROUP_BY_PRIO,
|
||||||
|
+ .pgfailback = -FAILBACK_IMMEDIATE,
|
||||||
|
+ .rr_weight = RR_WEIGHT_NONE,
|
||||||
|
+ .no_path_retry = NO_PATH_RETRY_QUEUE,
|
||||||
|
+ .minio = DEFAULT_MINIO,
|
||||||
|
+ .checker_name = RDAC,
|
||||||
|
+ .prio_name = PRIO_RDAC,
|
||||||
|
+ },
|
||||||
|
+ {
|
||||||
|
/* IBM Netfinity Fibre Channel RAID Controller Unit */
|
||||||
|
.vendor = "IBM",
|
||||||
|
.product = "3526",
|
||||||
|
--
|
||||||
|
1.5.2.4
|
||||||
|
|
44
multipath-tools-add-compellent-hwtable-entry
Normal file
44
multipath-tools-add-compellent-hwtable-entry
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
From af9e485cddb49d75d89f438c1f0f5ac27802e1e5 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jim Lester <jim.lester@compellent.com>
|
||||||
|
Date: Sun, 21 Sep 2008 12:36:33 +0200
|
||||||
|
Subject: [PATCH] [lib] new hardware from compellent in defaults table
|
||||||
|
|
||||||
|
---
|
||||||
|
libmultipath/hwtable.c | 21 +++++++++++++++++++++
|
||||||
|
1 files changed, 21 insertions(+), 0 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/libmultipath/hwtable.c b/libmultipath/hwtable.c
|
||||||
|
index ada5c55..3e33352 100644
|
||||||
|
--- a/libmultipath/hwtable.c
|
||||||
|
+++ b/libmultipath/hwtable.c
|
||||||
|
@@ -18,6 +18,27 @@
|
||||||
|
*/
|
||||||
|
static struct hwentry default_hw[] = {
|
||||||
|
/*
|
||||||
|
+ * Compellent Technologies, Inc.
|
||||||
|
+ *
|
||||||
|
+ * Maintainer : Jim Lester, Compellent
|
||||||
|
+ * Mail : jim.lester@compellent.com
|
||||||
|
+ */
|
||||||
|
+ {
|
||||||
|
+ .vendor = "COMPELNT",
|
||||||
|
+ .product = "Compellent Vol",
|
||||||
|
+ .getuid = DEFAULT_GETUID,
|
||||||
|
+ .features = DEFAULT_FEATURES,
|
||||||
|
+ .hwhandler = DEFAULT_HWHANDLER,
|
||||||
|
+ .selector = DEFAULT_SELECTOR,
|
||||||
|
+ .pgpolicy = MULTIBUS,
|
||||||
|
+ .pgfailback = -FAILBACK_IMMEDIATE,
|
||||||
|
+ .rr_weight = RR_WEIGHT_NONE,
|
||||||
|
+ .no_path_retry = NO_PATH_RETRY_QUEUE,
|
||||||
|
+ .minio = DEFAULT_MINIO,
|
||||||
|
+ .checker_name = TUR,
|
||||||
|
+ .prio_name = DEFAULT_PRIO,
|
||||||
|
+ },
|
||||||
|
+ /*
|
||||||
|
* Apple controller family
|
||||||
|
*
|
||||||
|
* Maintainer : Shyam Sundar
|
||||||
|
--
|
||||||
|
1.5.2.4
|
||||||
|
|
244
multipath-tools-add-show-status-cmd
Normal file
244
multipath-tools-add-show-status-cmd
Normal file
@ -0,0 +1,244 @@
|
|||||||
|
From 88eb616ae1a673127ef4fd995d703a8b46a63822 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Christophe Varoqui <christophe.varoqui@free.fr>
|
||||||
|
Date: Thu, 11 Sep 2008 00:17:37 +0200
|
||||||
|
Subject: [PATCH] [multipathd] add "show status" cli command
|
||||||
|
|
||||||
|
For now just print the number of paths in each path checker state,
|
||||||
|
if not zero. For example :
|
||||||
|
|
||||||
|
path checker states:
|
||||||
|
up 2
|
||||||
|
down 1
|
||||||
|
ghost 1
|
||||||
|
---
|
||||||
|
libmultipath/checkers.c | 15 +++++++++++++++
|
||||||
|
libmultipath/checkers.h | 18 +++++++++++-------
|
||||||
|
libmultipath/print.c | 24 ++++++++++++++++++++++++
|
||||||
|
libmultipath/print.h | 1 +
|
||||||
|
libmultipath/structs.c | 2 +-
|
||||||
|
multipathd/cli.c | 1 +
|
||||||
|
multipathd/cli_handlers.c | 30 ++++++++++++++++++++++++++++++
|
||||||
|
multipathd/cli_handlers.h | 1 +
|
||||||
|
multipathd/main.c | 4 +++-
|
||||||
|
9 files changed, 87 insertions(+), 9 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/libmultipath/checkers.c b/libmultipath/checkers.c
|
||||||
|
index 5889ad7..5132081 100644
|
||||||
|
--- a/libmultipath/checkers.c
|
||||||
|
+++ b/libmultipath/checkers.c
|
||||||
|
@@ -8,8 +8,23 @@
|
||||||
|
#include "vector.h"
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
+char *checker_state_names[] = {
|
||||||
|
+ "wild",
|
||||||
|
+ "unchecked",
|
||||||
|
+ "down",
|
||||||
|
+ "up",
|
||||||
|
+ "shaky",
|
||||||
|
+ "ghost",
|
||||||
|
+ "pending"
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
static LIST_HEAD(checkers);
|
||||||
|
|
||||||
|
+char * checker_state_name (int i)
|
||||||
|
+{
|
||||||
|
+ return checker_state_names[i];
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
int init_checkers (void)
|
||||||
|
{
|
||||||
|
INIT_LIST_HEAD(&checkers);
|
||||||
|
diff --git a/libmultipath/checkers.h b/libmultipath/checkers.h
|
||||||
|
index a65aaf9..e735250 100644
|
||||||
|
--- a/libmultipath/checkers.h
|
||||||
|
+++ b/libmultipath/checkers.h
|
||||||
|
@@ -47,13 +47,16 @@
|
||||||
|
* - Use: All async checkers
|
||||||
|
* - Description: Indicates a check IO is in flight.
|
||||||
|
*/
|
||||||
|
-#define PATH_WILD -1
|
||||||
|
-#define PATH_UNCHECKED 0
|
||||||
|
-#define PATH_DOWN 1
|
||||||
|
-#define PATH_UP 2
|
||||||
|
-#define PATH_SHAKY 3
|
||||||
|
-#define PATH_GHOST 4
|
||||||
|
-#define PATH_PENDING 5
|
||||||
|
+enum path_check_state {
|
||||||
|
+ PATH_WILD,
|
||||||
|
+ PATH_UNCHECKED,
|
||||||
|
+ PATH_DOWN,
|
||||||
|
+ PATH_UP,
|
||||||
|
+ PATH_SHAKY,
|
||||||
|
+ PATH_GHOST,
|
||||||
|
+ PATH_PENDING,
|
||||||
|
+ PATH_MAX_STATE
|
||||||
|
+};
|
||||||
|
|
||||||
|
#define DIRECTIO "directio"
|
||||||
|
#define TUR "tur"
|
||||||
|
@@ -106,6 +109,7 @@ struct checker {
|
||||||
|
|
||||||
|
#define MSG(c, fmt, args...) snprintf((c)->message, CHECKER_MSG_LEN, fmt, ##args);
|
||||||
|
|
||||||
|
+char * checker_state_name (int);
|
||||||
|
int init_checkers (void);
|
||||||
|
struct checker * add_checker (char *);
|
||||||
|
struct checker * checker_lookup (char *);
|
||||||
|
diff --git a/libmultipath/print.c b/libmultipath/print.c
|
||||||
|
index 08ebd51..459b973 100644
|
||||||
|
--- a/libmultipath/print.c
|
||||||
|
+++ b/libmultipath/print.c
|
||||||
|
@@ -1133,6 +1133,30 @@ snprint_blacklist_except (char * buff, int len)
|
||||||
|
}
|
||||||
|
|
||||||
|
extern int
|
||||||
|
+snprint_status (char * buff, int len, struct vectors *vecs)
|
||||||
|
+{
|
||||||
|
+ int fwd = 0;
|
||||||
|
+ int i;
|
||||||
|
+ unsigned int count[PATH_MAX_STATE] = {0};
|
||||||
|
+ struct path * pp;
|
||||||
|
+
|
||||||
|
+ vector_foreach_slot (vecs->pathvec, pp, i) {
|
||||||
|
+ count[pp->state]++;
|
||||||
|
+ }
|
||||||
|
+ fwd += snprintf(buff + fwd, len - fwd, "path checker states:\n");
|
||||||
|
+ for (i=0; i<PATH_MAX_STATE; i++) {
|
||||||
|
+ if (!count[i])
|
||||||
|
+ continue;
|
||||||
|
+ fwd += snprintf(buff + fwd, len - fwd, "%-20s%u\n",
|
||||||
|
+ checker_state_name(i), count[i]);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (fwd > len)
|
||||||
|
+ return len;
|
||||||
|
+ return fwd;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+extern int
|
||||||
|
snprint_devices (char * buff, int len, struct vectors *vecs)
|
||||||
|
{
|
||||||
|
DIR *blkdir;
|
||||||
|
diff --git a/libmultipath/print.h b/libmultipath/print.h
|
||||||
|
index 5c7023c..1718c94 100644
|
||||||
|
--- a/libmultipath/print.h
|
||||||
|
+++ b/libmultipath/print.h
|
||||||
|
@@ -44,6 +44,7 @@ int snprint_defaults (char *, int);
|
||||||
|
int snprint_blacklist (char *, int);
|
||||||
|
int snprint_blacklist_except (char *, int);
|
||||||
|
int snprint_blacklist_report (char *, int);
|
||||||
|
+int snprint_status (char *, int, struct vectors *);
|
||||||
|
int snprint_devices (char *, int, struct vectors *);
|
||||||
|
int snprint_hwtable (char *, int, vector);
|
||||||
|
int snprint_mptable (char *, int, vector);
|
||||||
|
diff --git a/libmultipath/structs.c b/libmultipath/structs.c
|
||||||
|
index 50f66f4..bb0d9f7 100644
|
||||||
|
--- a/libmultipath/structs.c
|
||||||
|
+++ b/libmultipath/structs.c
|
||||||
|
@@ -349,7 +349,7 @@ pathcountgr (struct pathgroup * pgp, int state)
|
||||||
|
int i;
|
||||||
|
|
||||||
|
vector_foreach_slot (pgp->paths, pp, i)
|
||||||
|
- if ((pp->state == state) || (state < 0))
|
||||||
|
+ if ((pp->state == state) || (state == PATH_WILD))
|
||||||
|
count++;
|
||||||
|
|
||||||
|
return count;
|
||||||
|
diff --git a/multipathd/cli.c b/multipathd/cli.c
|
||||||
|
index 7eaac73..051624a 100644
|
||||||
|
--- a/multipathd/cli.c
|
||||||
|
+++ b/multipathd/cli.c
|
||||||
|
@@ -406,6 +406,7 @@ cli_init (void) {
|
||||||
|
|
||||||
|
add_handler(LIST+PATHS, NULL);
|
||||||
|
add_handler(LIST+PATHS+FMT, NULL);
|
||||||
|
+ add_handler(LIST+STATUS, NULL);
|
||||||
|
add_handler(LIST+MAPS, NULL);
|
||||||
|
add_handler(LIST+MAPS+STATUS, NULL);
|
||||||
|
add_handler(LIST+MAPS+STATS, NULL);
|
||||||
|
diff --git a/multipathd/cli_handlers.c b/multipathd/cli_handlers.c
|
||||||
|
index c84805a..415f865 100644
|
||||||
|
--- a/multipathd/cli_handlers.c
|
||||||
|
+++ b/multipathd/cli_handlers.c
|
||||||
|
@@ -224,6 +224,26 @@ cli_list_maps_topology (void * v, char ** reply, int * len, void * data)
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
+show_status (char ** r, int *len, struct vectors * vecs)
|
||||||
|
+{
|
||||||
|
+ char * c;
|
||||||
|
+ char * reply;
|
||||||
|
+
|
||||||
|
+ unsigned int maxlen = INITIAL_REPLY_LEN;
|
||||||
|
+ reply = MALLOC(maxlen);
|
||||||
|
+
|
||||||
|
+ if (!reply)
|
||||||
|
+ return 1;
|
||||||
|
+
|
||||||
|
+ c = reply;
|
||||||
|
+ c += snprint_status(c, reply + maxlen - c, vecs);
|
||||||
|
+
|
||||||
|
+ *r = reply;
|
||||||
|
+ *len = (int)(c - reply + 1);
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+int
|
||||||
|
show_maps (char ** r, int *len, struct vectors * vecs, char * style)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
@@ -270,6 +290,16 @@ cli_list_maps (void * v, char ** reply, int * len, void * data)
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
+cli_list_status (void * v, char ** reply, int * len, void * data)
|
||||||
|
+{
|
||||||
|
+ struct vectors * vecs = (struct vectors *)data;
|
||||||
|
+
|
||||||
|
+ condlog(3, "list status (operator)");
|
||||||
|
+
|
||||||
|
+ return show_status(reply, len, vecs);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+int
|
||||||
|
cli_list_maps_status (void * v, char ** reply, int * len, void * data)
|
||||||
|
{
|
||||||
|
struct vectors * vecs = (struct vectors *)data;
|
||||||
|
diff --git a/multipathd/cli_handlers.h b/multipathd/cli_handlers.h
|
||||||
|
index a688481..cfc4b12 100644
|
||||||
|
--- a/multipathd/cli_handlers.h
|
||||||
|
+++ b/multipathd/cli_handlers.h
|
||||||
|
@@ -1,5 +1,6 @@
|
||||||
|
int cli_list_paths (void * v, char ** reply, int * len, void * data);
|
||||||
|
int cli_list_paths_fmt (void * v, char ** reply, int * len, void * data);
|
||||||
|
+int cli_list_status (void * v, char ** reply, int * len, void * data);
|
||||||
|
int cli_list_maps (void * v, char ** reply, int * len, void * data);
|
||||||
|
int cli_list_maps_status (void * v, char ** reply, int * len, void * data);
|
||||||
|
int cli_list_maps_stats (void * v, char ** reply, int * len, void * data);
|
||||||
|
diff --git a/multipathd/main.c b/multipathd/main.c
|
||||||
|
index 8d74cb9..e57a3e4 100644
|
||||||
|
--- a/multipathd/main.c
|
||||||
|
+++ b/multipathd/main.c
|
||||||
|
@@ -159,7 +159,8 @@ sync_map_state(struct multipath *mpp)
|
||||||
|
|
||||||
|
vector_foreach_slot (mpp->pg, pgp, i){
|
||||||
|
vector_foreach_slot (pgp->paths, pp, j){
|
||||||
|
- if (pp->state <= PATH_UNCHECKED)
|
||||||
|
+ if (pp->state == PATH_UNCHECKED ||
|
||||||
|
+ pp->state == PATH_WILD)
|
||||||
|
continue;
|
||||||
|
if ((pp->dmstate == PSTATE_FAILED ||
|
||||||
|
pp->dmstate == PSTATE_UNDEF) &&
|
||||||
|
@@ -693,6 +694,7 @@ uxlsnrloop (void * ap)
|
||||||
|
set_handler_callback(LIST+PATHS, cli_list_paths);
|
||||||
|
set_handler_callback(LIST+PATHS+FMT, cli_list_paths_fmt);
|
||||||
|
set_handler_callback(LIST+MAPS, cli_list_maps);
|
||||||
|
+ set_handler_callback(LIST+STATUS, cli_list_status);
|
||||||
|
set_handler_callback(LIST+MAPS+STATUS, cli_list_maps_status);
|
||||||
|
set_handler_callback(LIST+MAPS+STATS, cli_list_maps_stats);
|
||||||
|
set_handler_callback(LIST+MAPS+TOPOLOGY, cli_list_maps_topology);
|
||||||
|
--
|
||||||
|
1.5.2.4
|
||||||
|
|
204
multipath-tools-add-show-wildcards-cmd
Normal file
204
multipath-tools-add-show-wildcards-cmd
Normal file
@ -0,0 +1,204 @@
|
|||||||
|
From 27ec49eca021f1cc85e66d55509f1e051a820bd4 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Christophe Varoqui <christophe.varoqui@free.fr>
|
||||||
|
Date: Mon, 29 Sep 2008 01:37:02 +0200
|
||||||
|
Subject: [PATCH] [multipathd] add "show wildcards" cli command
|
||||||
|
|
||||||
|
The fact I had to look at the code to find the wildcards to use
|
||||||
|
in "show paths format ...", "show multipath format ..." and
|
||||||
|
"show pathgroup format ..." was a clear sign that more help was
|
||||||
|
necessary.
|
||||||
|
|
||||||
|
The "show wildcards" command outputs :
|
||||||
|
|
||||||
|
multipath format wildcards:
|
||||||
|
%n name
|
||||||
|
%w uuid
|
||||||
|
%d sysfs
|
||||||
|
%F failback
|
||||||
|
%Q queueing
|
||||||
|
%N paths
|
||||||
|
%r write_prot
|
||||||
|
%t dm-st
|
||||||
|
%S size
|
||||||
|
%f features
|
||||||
|
%h hwhandler
|
||||||
|
%A action
|
||||||
|
%0 path_faults
|
||||||
|
%1 switch_grp
|
||||||
|
%2 map_loads
|
||||||
|
%3 total_q_time
|
||||||
|
%4 q_timeouts
|
||||||
|
%s vend/prod/rev
|
||||||
|
|
||||||
|
path format wildcards:
|
||||||
|
%w uuid
|
||||||
|
%i hcil
|
||||||
|
%d dev
|
||||||
|
%D dev_t
|
||||||
|
%t dm_st
|
||||||
|
%T chk_st
|
||||||
|
%s vend/prod/rev
|
||||||
|
%C next_check
|
||||||
|
%p pri
|
||||||
|
%S size
|
||||||
|
|
||||||
|
pathgroup format wildcards:
|
||||||
|
%s selector
|
||||||
|
%p pri
|
||||||
|
%t dm_st
|
||||||
|
|
||||||
|
And for example, "show paths format foo:%d:%S:%i", outs
|
||||||
|
|
||||||
|
foo:dev:size:hcil
|
||||||
|
foo:sda:149G:2:0:0:0
|
||||||
|
---
|
||||||
|
libmultipath/print.c | 21 +++++++++++++++++++++
|
||||||
|
libmultipath/print.h | 1 +
|
||||||
|
multipathd/cli.c | 2 ++
|
||||||
|
multipathd/cli.h | 2 ++
|
||||||
|
multipathd/cli_handlers.c | 17 +++++++++++++++++
|
||||||
|
multipathd/cli_handlers.h | 1 +
|
||||||
|
multipathd/main.c | 1 +
|
||||||
|
7 files changed, 45 insertions(+), 0 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/libmultipath/print.c b/libmultipath/print.c
|
||||||
|
index 7411ccc..09b3579 100644
|
||||||
|
--- a/libmultipath/print.c
|
||||||
|
+++ b/libmultipath/print.c
|
||||||
|
@@ -436,8 +436,29 @@ struct pathgroup_data pgd[] = {
|
||||||
|
{'s', "selector", 0, snprint_pg_selector},
|
||||||
|
{'p', "pri", 0, snprint_pg_pri},
|
||||||
|
{'t', "dm_st", 0, snprint_pg_state},
|
||||||
|
+ {0, NULL, 0 , NULL}
|
||||||
|
};
|
||||||
|
|
||||||
|
+int
|
||||||
|
+snprint_wildcards (char * buff, int len)
|
||||||
|
+{
|
||||||
|
+ int i, fwd = 0;
|
||||||
|
+
|
||||||
|
+ fwd += snprintf(buff + fwd, len - fwd, "multipath format wildcards:\n");
|
||||||
|
+ for (i = 0; mpd[i].header; i++)
|
||||||
|
+ fwd += snprintf(buff + fwd, len - fwd, "%%%c %s\n",
|
||||||
|
+ mpd[i].wildcard, mpd[i].header);
|
||||||
|
+ fwd += snprintf(buff + fwd, len - fwd, "\npath format wildcards:\n");
|
||||||
|
+ for (i = 0; pd[i].header; i++)
|
||||||
|
+ fwd += snprintf(buff + fwd, len - fwd, "%%%c %s\n",
|
||||||
|
+ pd[i].wildcard, pd[i].header);
|
||||||
|
+ fwd += snprintf(buff + fwd, len - fwd, "\npathgroup format wildcards:\n");
|
||||||
|
+ for (i = 0; pgd[i].header; i++)
|
||||||
|
+ fwd += snprintf(buff + fwd, len - fwd, "%%%c %s\n",
|
||||||
|
+ pgd[i].wildcard, pgd[i].header);
|
||||||
|
+ return fwd;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
void
|
||||||
|
get_path_layout (vector pathvec, int header)
|
||||||
|
{
|
||||||
|
diff --git a/libmultipath/print.h b/libmultipath/print.h
|
||||||
|
index 1718c94..a8be408 100644
|
||||||
|
--- a/libmultipath/print.h
|
||||||
|
+++ b/libmultipath/print.h
|
||||||
|
@@ -44,6 +44,7 @@ int snprint_defaults (char *, int);
|
||||||
|
int snprint_blacklist (char *, int);
|
||||||
|
int snprint_blacklist_except (char *, int);
|
||||||
|
int snprint_blacklist_report (char *, int);
|
||||||
|
+int snprint_wildcards (char *, int);
|
||||||
|
int snprint_status (char *, int, struct vectors *);
|
||||||
|
int snprint_devices (char *, int, struct vectors *);
|
||||||
|
int snprint_hwtable (char *, int, vector);
|
||||||
|
diff --git a/multipathd/cli.c b/multipathd/cli.c
|
||||||
|
index 051624a..34ae07c 100644
|
||||||
|
--- a/multipathd/cli.c
|
||||||
|
+++ b/multipathd/cli.c
|
||||||
|
@@ -170,6 +170,7 @@ load_keys (void)
|
||||||
|
r += add_key(keys, "blacklist", BLACKLIST, 0);
|
||||||
|
r += add_key(keys, "devices", DEVICES, 0);
|
||||||
|
r += add_key(keys, "format", FMT, 1);
|
||||||
|
+ r += add_key(keys, "wildcards", WILDCARDS, 0);
|
||||||
|
|
||||||
|
if (r) {
|
||||||
|
free_keys(keys);
|
||||||
|
@@ -416,6 +417,7 @@ cli_init (void) {
|
||||||
|
add_handler(LIST+CONFIG, NULL);
|
||||||
|
add_handler(LIST+BLACKLIST, NULL);
|
||||||
|
add_handler(LIST+DEVICES, NULL);
|
||||||
|
+ add_handler(LIST+WILDCARDS, NULL);
|
||||||
|
add_handler(ADD+PATH, NULL);
|
||||||
|
add_handler(DEL+PATH, NULL);
|
||||||
|
add_handler(ADD+MAP, NULL);
|
||||||
|
diff --git a/multipathd/cli.h b/multipathd/cli.h
|
||||||
|
index 8c83eab..9932d96 100644
|
||||||
|
--- a/multipathd/cli.h
|
||||||
|
+++ b/multipathd/cli.h
|
||||||
|
@@ -20,6 +20,7 @@ enum {
|
||||||
|
__BLACKLIST,
|
||||||
|
__DEVICES,
|
||||||
|
__FMT,
|
||||||
|
+ __WILDCARDS,
|
||||||
|
};
|
||||||
|
|
||||||
|
#define LIST (1 << __LIST)
|
||||||
|
@@ -43,6 +44,7 @@ enum {
|
||||||
|
#define BLACKLIST (1 << __BLACKLIST)
|
||||||
|
#define DEVICES (1 << __DEVICES)
|
||||||
|
#define FMT (1 << __FMT)
|
||||||
|
+#define WILDCARDS (1 << __WILDCARDS)
|
||||||
|
|
||||||
|
#define INITIAL_REPLY_LEN 1000
|
||||||
|
|
||||||
|
diff --git a/multipathd/cli_handlers.c b/multipathd/cli_handlers.c
|
||||||
|
index 415f865..36a4968 100644
|
||||||
|
--- a/multipathd/cli_handlers.c
|
||||||
|
+++ b/multipathd/cli_handlers.c
|
||||||
|
@@ -224,6 +224,23 @@ cli_list_maps_topology (void * v, char ** reply, int * len, void * data)
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
+cli_list_wildcards (void * v, char ** reply, int * len, void * data)
|
||||||
|
+{
|
||||||
|
+ char * c;
|
||||||
|
+
|
||||||
|
+ *reply = MALLOC(INITIAL_REPLY_LEN);
|
||||||
|
+
|
||||||
|
+ if (!reply)
|
||||||
|
+ return 1;
|
||||||
|
+
|
||||||
|
+ c = *reply;
|
||||||
|
+ c += snprint_wildcards(c, INITIAL_REPLY_LEN);
|
||||||
|
+
|
||||||
|
+ *len = INITIAL_REPLY_LEN;
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+int
|
||||||
|
show_status (char ** r, int *len, struct vectors * vecs)
|
||||||
|
{
|
||||||
|
char * c;
|
||||||
|
diff --git a/multipathd/cli_handlers.h b/multipathd/cli_handlers.h
|
||||||
|
index cfc4b12..703a925 100644
|
||||||
|
--- a/multipathd/cli_handlers.h
|
||||||
|
+++ b/multipathd/cli_handlers.h
|
||||||
|
@@ -9,6 +9,7 @@ int cli_list_maps_topology (void * v, char ** reply, int * len, void * data);
|
||||||
|
int cli_list_config (void * v, char ** reply, int * len, void * data);
|
||||||
|
int cli_list_blacklist (void * v, char ** reply, int * len, void * data);
|
||||||
|
int cli_list_devices (void * v, char ** reply, int * len, void * data);
|
||||||
|
+int cli_list_wildcards (void * v, char ** reply, int * len, void * data);
|
||||||
|
int cli_add_path (void * v, char ** reply, int * len, void * data);
|
||||||
|
int cli_del_path (void * v, char ** reply, int * len, void * data);
|
||||||
|
int cli_add_map (void * v, char ** reply, int * len, void * data);
|
||||||
|
diff --git a/multipathd/main.c b/multipathd/main.c
|
||||||
|
index e57a3e4..84fb5c4 100644
|
||||||
|
--- a/multipathd/main.c
|
||||||
|
+++ b/multipathd/main.c
|
||||||
|
@@ -703,6 +703,7 @@ uxlsnrloop (void * ap)
|
||||||
|
set_handler_callback(LIST+CONFIG, cli_list_config);
|
||||||
|
set_handler_callback(LIST+BLACKLIST, cli_list_blacklist);
|
||||||
|
set_handler_callback(LIST+DEVICES, cli_list_devices);
|
||||||
|
+ set_handler_callback(LIST+WILDCARDS, cli_list_wildcards);
|
||||||
|
set_handler_callback(ADD+PATH, cli_add_path);
|
||||||
|
set_handler_callback(DEL+PATH, cli_del_path);
|
||||||
|
set_handler_callback(ADD+MAP, cli_add_map);
|
||||||
|
--
|
||||||
|
1.5.2.4
|
||||||
|
|
123
multipath-tools-fixes-for-show-paths-format
Normal file
123
multipath-tools-fixes-for-show-paths-format
Normal file
@ -0,0 +1,123 @@
|
|||||||
|
From 244454da2d4f3cb5d197a6b0e6fc2b4c8d72d08c Mon Sep 17 00:00:00 2001
|
||||||
|
From: Christophe Varoqui <christophe.varoqui@free.fr>
|
||||||
|
Date: Mon, 29 Sep 2008 00:44:46 +0200
|
||||||
|
Subject: [PATCH] [libmultipath] fixes for "show paths format"
|
||||||
|
|
||||||
|
o undue 1-char rollback when encountering unknown wildcard
|
||||||
|
o fix segfault when format starts with an unknown wildard
|
||||||
|
o continue parsing the format after an unknown wildcard
|
||||||
|
---
|
||||||
|
libmultipath/print.c | 33 +++++++++++++--------------------
|
||||||
|
1 files changed, 13 insertions(+), 20 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/libmultipath/print.c b/libmultipath/print.c
|
||||||
|
index 459b973..7411ccc 100644
|
||||||
|
--- a/libmultipath/print.c
|
||||||
|
+++ b/libmultipath/print.c
|
||||||
|
@@ -28,6 +28,9 @@
|
||||||
|
#define NOPAD s = c
|
||||||
|
#define PAD(x) while ((int)(c - s) < (x) && (c < (line + len - 1))) \
|
||||||
|
*c++ = ' '; s = c
|
||||||
|
+#define ENDLINE \
|
||||||
|
+ if (c > line) \
|
||||||
|
+ line[c - line - 1] = '\n'
|
||||||
|
#define PRINT(var, size, format, args...) \
|
||||||
|
fwd = snprintf(var, size, format, ##args); \
|
||||||
|
c += (fwd >= size) ? size : fwd;
|
||||||
|
@@ -532,15 +535,13 @@ snprint_multipath_header (char * line, int len, char * format)
|
||||||
|
f++;
|
||||||
|
|
||||||
|
if (!(data = mpd_lookup(*f)))
|
||||||
|
- break; /* unknown wildcard */
|
||||||
|
+ continue; /* unknown wildcard */
|
||||||
|
|
||||||
|
PRINT(c, TAIL, data->header);
|
||||||
|
PAD(data->width);
|
||||||
|
} while (*f++);
|
||||||
|
|
||||||
|
- line[c - line - 1] = '\n';
|
||||||
|
- line[c - line] = '\0';
|
||||||
|
-
|
||||||
|
+ ENDLINE;
|
||||||
|
return (c - line);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -567,7 +568,7 @@ snprint_multipath (char * line, int len, char * format,
|
||||||
|
f++;
|
||||||
|
|
||||||
|
if (!(data = mpd_lookup(*f)))
|
||||||
|
- break;
|
||||||
|
+ continue;
|
||||||
|
|
||||||
|
data->snprint(buff, MAX_FIELD_LEN, mpp);
|
||||||
|
PRINT(c, TAIL, buff);
|
||||||
|
@@ -575,9 +576,7 @@ snprint_multipath (char * line, int len, char * format,
|
||||||
|
buff[0] = '\0';
|
||||||
|
} while (*f++);
|
||||||
|
|
||||||
|
- line[c - line - 1] = '\n';
|
||||||
|
- line[c - line] = '\0';
|
||||||
|
-
|
||||||
|
+ ENDLINE;
|
||||||
|
return (c - line);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -602,15 +601,13 @@ snprint_path_header (char * line, int len, char * format)
|
||||||
|
f++;
|
||||||
|
|
||||||
|
if (!(data = pd_lookup(*f)))
|
||||||
|
- break; /* unknown wildcard */
|
||||||
|
+ continue; /* unknown wildcard */
|
||||||
|
|
||||||
|
PRINT(c, TAIL, data->header);
|
||||||
|
PAD(data->width);
|
||||||
|
} while (*f++);
|
||||||
|
|
||||||
|
- line[c - line - 1] = '\n';
|
||||||
|
- line[c - line] = '\0';
|
||||||
|
-
|
||||||
|
+ ENDLINE;
|
||||||
|
return (c - line);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -637,16 +634,14 @@ snprint_path (char * line, int len, char * format,
|
||||||
|
f++;
|
||||||
|
|
||||||
|
if (!(data = pd_lookup(*f)))
|
||||||
|
- break;
|
||||||
|
+ continue;
|
||||||
|
|
||||||
|
data->snprint(buff, MAX_FIELD_LEN, pp);
|
||||||
|
PRINT(c, TAIL, buff);
|
||||||
|
PAD(data->width);
|
||||||
|
} while (*f++);
|
||||||
|
|
||||||
|
- line[c - line - 1] = '\n';
|
||||||
|
- line[c - line] = '\0';
|
||||||
|
-
|
||||||
|
+ ENDLINE;
|
||||||
|
return (c - line);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -673,16 +668,14 @@ snprint_pathgroup (char * line, int len, char * format,
|
||||||
|
f++;
|
||||||
|
|
||||||
|
if (!(data = pgd_lookup(*f)))
|
||||||
|
- break;
|
||||||
|
+ continue;
|
||||||
|
|
||||||
|
data->snprint(buff, MAX_FIELD_LEN, pgp);
|
||||||
|
PRINT(c, TAIL, buff);
|
||||||
|
PAD(data->width);
|
||||||
|
} while (*f++);
|
||||||
|
|
||||||
|
- line[c - line - 1] = '\n';
|
||||||
|
- line[c - line] = '\0';
|
||||||
|
-
|
||||||
|
+ ENDLINE;
|
||||||
|
return (c - line);
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
1.5.2.4
|
||||||
|
|
28
multipath-tools-fopen-returns-NULL
Normal file
28
multipath-tools-fopen-returns-NULL
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
From 3cf5b5aaa64e673364e8758640e5d5434425235b Mon Sep 17 00:00:00 2001
|
||||||
|
From: Hannes Reinecke <hare@suse.de>
|
||||||
|
Date: Thu, 9 Oct 2008 12:53:38 +0200
|
||||||
|
Subject: [PATCH] fopen returns NULL on failure, not -1
|
||||||
|
|
||||||
|
References: 432598
|
||||||
|
|
||||||
|
Signed-off-by: Hannes Reinecke <hare@suse.de>
|
||||||
|
---
|
||||||
|
libmultipath/discovery.c | 2 +-
|
||||||
|
1 files changed, 1 insertions(+), 1 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/libmultipath/discovery.c b/libmultipath/discovery.c
|
||||||
|
index e1a67ac..a5ae8aa 100644
|
||||||
|
--- a/libmultipath/discovery.c
|
||||||
|
+++ b/libmultipath/discovery.c
|
||||||
|
@@ -237,7 +237,7 @@ devt2devname (char *devname, char *devt)
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
- if ((fd = fopen("/proc/partitions", "r")) < 0) {
|
||||||
|
+ if (!(fd = fopen("/proc/partitions", "r"))) {
|
||||||
|
condlog(0, "Cannot open /proc/partitions");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
--
|
||||||
|
1.5.2.4
|
||||||
|
|
26
multipath-tools-include-device-handler-modules
Normal file
26
multipath-tools-include-device-handler-modules
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
Subject: Add device-handler modules to mkinitrd script
|
||||||
|
From: Hannes Reinecke <hare@suse.de>
|
||||||
|
Date: Mon Oct 27 14:39:59 2008 +0100:
|
||||||
|
Git: 9ac06d484adb369c1848f5793cf36ab681899ef7
|
||||||
|
|
||||||
|
The mkinitrd boot script still tries to include the obsolete
|
||||||
|
device-mapper hardware handler modules. Update it to include
|
||||||
|
the SCSI device-handler modules.
|
||||||
|
|
||||||
|
References: 431877
|
||||||
|
|
||||||
|
Signed-off-by: Hannes Reinecke <hare@suse.de>
|
||||||
|
|
||||||
|
diff --git a/multipath/boot-multipath.sh b/multipath/boot-multipath.sh
|
||||||
|
index a946785..ae11a26 100755
|
||||||
|
--- a/multipath/boot-multipath.sh
|
||||||
|
+++ b/multipath/boot-multipath.sh
|
||||||
|
@@ -4,7 +4,7 @@
|
||||||
|
#%provides: dmroot
|
||||||
|
#%programs: /sbin/multipath /lib/multipath/*
|
||||||
|
#%if: "$root_mpath"
|
||||||
|
-#%modules: dm-multipath dm-round-robin dm-emc dm-hp_sw dm-rdac
|
||||||
|
+#%modules: dm-multipath dm-round-robin scsi-dh-emc scsi-dh-hp_sw scsi-dh-rdac scsi-dh-alua
|
||||||
|
#
|
||||||
|
##### Multipath
|
||||||
|
##
|
27
multipath-tools-increase-bindings-file-lock-timeout
Normal file
27
multipath-tools-increase-bindings-file-lock-timeout
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
From 669b5c11d8c82252f9697e35d183a0c840386261 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Dave Wysochanski <dwysocha@redhat.com>
|
||||||
|
Date: Sun, 28 Sep 2008 22:32:29 +0200
|
||||||
|
Subject: [PATCH] [lib] Increase bindings file lock timeout to avoid failure of user_friendly_names
|
||||||
|
|
||||||
|
On setups with a large number of paths / multipath maps, contention for
|
||||||
|
the advisory lock on the bindings file may take longer than 3 seconds,
|
||||||
|
and some multipath processes may create maps based on WWID despite having
|
||||||
|
user_friendly_names set. Increasing the timeout is a simple fix that
|
||||||
|
gets us a bit further.
|
||||||
|
---
|
||||||
|
libmultipath/alias.h | 2 +-
|
||||||
|
1 files changed, 1 insertions(+), 1 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/libmultipath/alias.h b/libmultipath/alias.h
|
||||||
|
index 3d64b9b..fe1191b 100644
|
||||||
|
--- a/libmultipath/alias.h
|
||||||
|
+++ b/libmultipath/alias.h
|
||||||
|
@@ -1,4 +1,4 @@
|
||||||
|
-#define BINDINGS_FILE_TIMEOUT 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" \
|
||||||
|
--
|
||||||
|
1.5.2.4
|
||||||
|
|
31
multipath-tools-increase-loop-buffer-size
Normal file
31
multipath-tools-increase-loop-buffer-size
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
From 18903014d3e6402909e709fedaf669d2a55c1490 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Hannes Reinecke <hare@suse.de>
|
||||||
|
Date: Tue, 21 Oct 2008 10:22:16 +0200
|
||||||
|
Subject: [PATCH] Increase buffer size in find_loop_by_file()
|
||||||
|
|
||||||
|
find_loop_by_file() uses an internal buffer of 20 chars, which is compared
|
||||||
|
to a buffer of the size of 64 chars. Not good.
|
||||||
|
|
||||||
|
References: 436428
|
||||||
|
|
||||||
|
Signed-off-by: Hannes Reinecke <hare@suse.de>
|
||||||
|
---
|
||||||
|
kpartx/lopart.c | 2 +-
|
||||||
|
1 files changed, 1 insertions(+), 1 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/kpartx/lopart.c b/kpartx/lopart.c
|
||||||
|
index b18d6fa..be483da 100644
|
||||||
|
--- a/kpartx/lopart.c
|
||||||
|
+++ b/kpartx/lopart.c
|
||||||
|
@@ -105,7 +105,7 @@ is_loop_device (const char *device)
|
||||||
|
extern char *
|
||||||
|
find_loop_by_file (const char * filename)
|
||||||
|
{
|
||||||
|
- char dev[20];
|
||||||
|
+ char dev[64];
|
||||||
|
char *loop_formats[] = { "/dev/loop%d", "/dev/loop/%d" };
|
||||||
|
int i, j, fd;
|
||||||
|
struct stat statbuf;
|
||||||
|
--
|
||||||
|
1.5.2.4
|
||||||
|
|
56
multipath-tools-kpartx-doesnt-remove-loop-device
Normal file
56
multipath-tools-kpartx-doesnt-remove-loop-device
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
From 67f0f96ae532f8fda862576fba6f718809ade128 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Hannes Reinecke <hare@suse.de>
|
||||||
|
Date: Tue, 14 Oct 2008 08:38:29 +0200
|
||||||
|
Subject: [PATCH] kpartx -l does not remove it's loop device
|
||||||
|
|
||||||
|
When doing a kpartx -l it does not remove it's loop device when done.
|
||||||
|
|
||||||
|
The appended patch to multipath-tools could fix this.
|
||||||
|
|
||||||
|
References: 417266
|
||||||
|
|
||||||
|
Signed-off-by: Philipp Zimmer <pzimmer@novell.com>
|
||||||
|
Signed-off-by: Hannes Reinecke <hare@suse.de>
|
||||||
|
---
|
||||||
|
kpartx/kpartx.c | 11 +++++++++++
|
||||||
|
1 files changed, 11 insertions(+), 0 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/kpartx/kpartx.c b/kpartx/kpartx.c
|
||||||
|
index d1ba87c..43dcd13 100644
|
||||||
|
--- a/kpartx/kpartx.c
|
||||||
|
+++ b/kpartx/kpartx.c
|
||||||
|
@@ -198,6 +198,7 @@ main(int argc, char **argv){
|
||||||
|
char *mapname = NULL;
|
||||||
|
int loopro = 0;
|
||||||
|
int hotplug = 0;
|
||||||
|
+ int loopcreated = 0;
|
||||||
|
struct stat buf;
|
||||||
|
|
||||||
|
initpts();
|
||||||
|
@@ -292,6 +293,7 @@ main(int argc, char **argv){
|
||||||
|
fprintf(stderr, "can't set up loop\n");
|
||||||
|
exit (1);
|
||||||
|
}
|
||||||
|
+ loopcreated = 1;
|
||||||
|
}
|
||||||
|
device = loopdev;
|
||||||
|
}
|
||||||
|
@@ -394,6 +396,15 @@ main(int argc, char **argv){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ if (loopcreated && S_ISREG (buf.st_mode)) {
|
||||||
|
+ if (del_loop(device)) {
|
||||||
|
+ if (verbose)
|
||||||
|
+ printf("can't del loop : %s\n",
|
||||||
|
+ device);
|
||||||
|
+ exit(1);
|
||||||
|
+ }
|
||||||
|
+ printf("loop deleted : %s\n", device);
|
||||||
|
+ }
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DELETE:
|
||||||
|
--
|
||||||
|
1.5.2.4
|
||||||
|
|
51
multipath-tools-missing-fixes-for-ontap
Normal file
51
multipath-tools-missing-fixes-for-ontap
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
From 375c38b4f4aa88fddd6106e4f2722e120fc1dac4 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Hannes Reinecke <hare@suse.de>
|
||||||
|
Date: Wed, 15 Oct 2008 13:44:00 +0200
|
||||||
|
Subject: [PATCH] Missing fixes for libprio ontap.c
|
||||||
|
|
||||||
|
The ontap.c libprio source file available on SLES10 SP2 has a few
|
||||||
|
deviations from the corresponding pp_ontap.c source file in the
|
||||||
|
path_priority directory.
|
||||||
|
|
||||||
|
References: 426975
|
||||||
|
|
||||||
|
Signed-off-by: Martin George <marting@netapp.com>
|
||||||
|
Signed-off-by: Hannes Reinecke <hare@suse.de>
|
||||||
|
---
|
||||||
|
libmultipath/prioritizers/ontap.c | 6 ++++--
|
||||||
|
1 files changed, 4 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/libmultipath/prioritizers/ontap.c b/libmultipath/prioritizers/ontap.c
|
||||||
|
index 0a629bc..1200114 100644
|
||||||
|
--- a/libmultipath/prioritizers/ontap.c
|
||||||
|
+++ b/libmultipath/prioritizers/ontap.c
|
||||||
|
@@ -27,7 +27,7 @@
|
||||||
|
#define INQUIRY_CMDLEN 6
|
||||||
|
#define DEFAULT_PRIOVAL 10
|
||||||
|
#define RESULTS_MAX 256
|
||||||
|
-#define SG_TIMEOUT 30000
|
||||||
|
+#define SG_TIMEOUT 60000
|
||||||
|
|
||||||
|
#define pp_ontap_log(prio, fmt, args...) \
|
||||||
|
condlog(prio, "%s: ontap prio: " fmt, dev, ##args)
|
||||||
|
@@ -194,7 +194,7 @@ static int ontap_prio(const char *dev, int fd)
|
||||||
|
|
||||||
|
memset(&results, 0, sizeof (results));
|
||||||
|
rc = send_gva(dev, fd, 0x41, results, &results_size);
|
||||||
|
- if (rc == 0) {
|
||||||
|
+ if (rc >= 0) {
|
||||||
|
tot_len = results[0] << 24 | results[1] << 16 |
|
||||||
|
results[2] << 8 | results[3];
|
||||||
|
if (tot_len <= 8) {
|
||||||
|
@@ -214,6 +214,8 @@ static int ontap_prio(const char *dev, int fd)
|
||||||
|
is_iscsi_hardware = 1;
|
||||||
|
goto prio_select;
|
||||||
|
}
|
||||||
|
+ } else {
|
||||||
|
+ return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
try_fcp_proxy:
|
||||||
|
--
|
||||||
|
1.5.2.4
|
||||||
|
|
110
multipath-tools-read-verbosity-level-from-conf
Normal file
110
multipath-tools-read-verbosity-level-from-conf
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
From 965522c700ea307029789a1485242835132cea77 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Hannes Reinecke <hare@suse.de>
|
||||||
|
Date: Tue, 14 Oct 2008 08:21:02 +0200
|
||||||
|
Subject: [PATCH] Read the verbosity level from multipath.conf configuration file
|
||||||
|
|
||||||
|
With this patch, multipathd can read the verbosity level from
|
||||||
|
the multipath.conf configuration file.
|
||||||
|
For example:
|
||||||
|
verbosity 5
|
||||||
|
|
||||||
|
References: 388284
|
||||||
|
|
||||||
|
Signed-off-by: Ritesh Raj Sarraf <rsarraf@netapp.com>
|
||||||
|
Signed-off-by: Hannes Reinecke <hare@suse.de>
|
||||||
|
---
|
||||||
|
libmultipath/config.c | 2 +-
|
||||||
|
libmultipath/defaults.h | 1 +
|
||||||
|
libmultipath/dict.c | 20 ++++++++++++++++++++
|
||||||
|
multipath/multipath.conf.5 | 5 +++++
|
||||||
|
4 files changed, 27 insertions(+), 1 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/libmultipath/config.c b/libmultipath/config.c
|
||||||
|
index 14bece1..d2585ed 100644
|
||||||
|
--- a/libmultipath/config.c
|
||||||
|
+++ b/libmultipath/config.c
|
||||||
|
@@ -423,7 +423,7 @@ load_config (char * file)
|
||||||
|
* internal defaults
|
||||||
|
*/
|
||||||
|
if (!conf->verbosity)
|
||||||
|
- conf->verbosity = 2;
|
||||||
|
+ conf->verbosity = DEFAULT_VERBOSITY;
|
||||||
|
|
||||||
|
conf->dev_type = DEV_NONE;
|
||||||
|
conf->minio = 1000;
|
||||||
|
diff --git a/libmultipath/defaults.h b/libmultipath/defaults.h
|
||||||
|
index 87b155e..a943673 100644
|
||||||
|
--- a/libmultipath/defaults.h
|
||||||
|
+++ b/libmultipath/defaults.h
|
||||||
|
@@ -11,6 +11,7 @@
|
||||||
|
#define DEFAULT_NO_PATH_RETRY NO_PATH_RETRY_UNDEF
|
||||||
|
#define DEFAULT_PGTIMEOUT -PGTIMEOUT_NONE
|
||||||
|
#define DEFAULT_USER_FRIENDLY_NAMES 0
|
||||||
|
+#define DEFAULT_VERBOSITY 2
|
||||||
|
|
||||||
|
#define DEFAULT_CHECKINT 5
|
||||||
|
#define MAX_CHECKINT(a) (a << 2)
|
||||||
|
diff --git a/libmultipath/dict.c b/libmultipath/dict.c
|
||||||
|
index a5a294e..5794b11 100644
|
||||||
|
--- a/libmultipath/dict.c
|
||||||
|
+++ b/libmultipath/dict.c
|
||||||
|
@@ -33,6 +33,17 @@ polling_interval_handler(vector strvec)
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
+verbosity_handler(vector strvec)
|
||||||
|
+{
|
||||||
|
+ char * buff;
|
||||||
|
+
|
||||||
|
+ buff = VECTOR_SLOT(strvec, 1);
|
||||||
|
+ conf->verbosity = atoi(buff);
|
||||||
|
+
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static int
|
||||||
|
udev_dir_handler(vector strvec)
|
||||||
|
{
|
||||||
|
conf->udev_dir = set_value(strvec);
|
||||||
|
@@ -1327,6 +1338,14 @@ snprint_def_polling_interval (char * buff, int len, void * data)
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
+snprint_def_verbosity (char * buff, int len, void * data)
|
||||||
|
+{
|
||||||
|
+ if (conf->checkint == DEFAULT_VERBOSITY)
|
||||||
|
+ return 0;
|
||||||
|
+ return snprintf(buff, len, "%i", conf->verbosity);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static int
|
||||||
|
snprint_def_udev_dir (char * buff, int len, void * data)
|
||||||
|
{
|
||||||
|
if (!conf->udev_dir)
|
||||||
|
@@ -1572,6 +1591,7 @@ void
|
||||||
|
init_keywords(void)
|
||||||
|
{
|
||||||
|
install_keyword_root("defaults", NULL);
|
||||||
|
+ install_keyword("verbosity", &verbosity_handler, &snprint_def_verbosity);
|
||||||
|
install_keyword("polling_interval", &polling_interval_handler, &snprint_def_polling_interval);
|
||||||
|
install_keyword("udev_dir", &udev_dir_handler, &snprint_def_udev_dir);
|
||||||
|
install_keyword("multipath_dir", &multipath_dir_handler, &snprint_def_multipath_dir);
|
||||||
|
diff --git a/multipath/multipath.conf.5 b/multipath/multipath.conf.5
|
||||||
|
index 90ef588..d3c37c8 100644
|
||||||
|
--- a/multipath/multipath.conf.5
|
||||||
|
+++ b/multipath/multipath.conf.5
|
||||||
|
@@ -74,6 +74,11 @@ interval between two path checks in seconds; default is
|
||||||
|
directory where udev creates its device nodes; default is
|
||||||
|
.I /dev
|
||||||
|
.TP
|
||||||
|
+.B verbosity
|
||||||
|
+default verbosity. Higher values increase the verbosity level. Valid
|
||||||
|
+levels are between 0 and 6; default is 2.
|
||||||
|
+.I /dev
|
||||||
|
+.TP
|
||||||
|
.B selector
|
||||||
|
The default path selector algorithm to use; they are offered by the
|
||||||
|
kernel multipath target. The only currently implemented is
|
||||||
|
--
|
||||||
|
1.5.2.4
|
||||||
|
|
@ -1,3 +1,18 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Oct 27 10:30:18 CET 2008 - hare@suse.de
|
||||||
|
|
||||||
|
- Patches from mainline:
|
||||||
|
* Increase bindings file lock timeout
|
||||||
|
* Fixes for 'show paths format'
|
||||||
|
* Add 'show wildcards' cli cmd
|
||||||
|
* Add support for IBM storage devices
|
||||||
|
- fopen() returns NULL on failure (bnc#432598)
|
||||||
|
- Read verbosity level from configuration file (bnc#388284)
|
||||||
|
- kpartx -l does not remove it's loop device (bnc#417266)
|
||||||
|
- Missing fixes for libprio ontap.c (bnc#426975)
|
||||||
|
- Increase buffer size in find_loop_by_file (bnc#436428)
|
||||||
|
- Include SCSI device handler modules for initrd (bnc#431877)
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Fri Sep 26 16:26:55 CEST 2008 - hare@suse.de
|
Fri Sep 26 16:26:55 CEST 2008 - hare@suse.de
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@ Requires: device-mapper kpartx
|
|||||||
PreReq: %insserv_prereq %fillup_prereq coreutils grep diffutils
|
PreReq: %insserv_prereq %fillup_prereq coreutils grep diffutils
|
||||||
AutoReqProv: on
|
AutoReqProv: on
|
||||||
Version: 0.4.8
|
Version: 0.4.8
|
||||||
Release: 21
|
Release: 22
|
||||||
Summary: Tools to Manage Multipathed Devices with the device-mapper
|
Summary: Tools to Manage Multipathed Devices with the device-mapper
|
||||||
Source: multipath-tools-%{version}.tar.bz2
|
Source: multipath-tools-%{version}.tar.bz2
|
||||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||||
@ -36,6 +36,18 @@ Patch1: %{name}-sles11-alpha1-update
|
|||||||
Patch2: %{name}-sles11-alpha3-update
|
Patch2: %{name}-sles11-alpha3-update
|
||||||
Patch3: %{name}-check-get_inq-return-values
|
Patch3: %{name}-check-get_inq-return-values
|
||||||
Patch4: %{name}-implement-map-resize
|
Patch4: %{name}-implement-map-resize
|
||||||
|
Patch5: %{name}-add-show-status-cmd
|
||||||
|
Patch6: %{name}-add-compellent-hwtable-entry
|
||||||
|
Patch7: %{name}-increase-bindings-file-lock-timeout
|
||||||
|
Patch8: %{name}-fixes-for-show-paths-format
|
||||||
|
Patch9: %{name}-add-show-wildcards-cmd
|
||||||
|
Patch10: %{name}-fopen-returns-NULL
|
||||||
|
Patch11: %{name}-read-verbosity-level-from-conf
|
||||||
|
Patch12: %{name}-kpartx-doesnt-remove-loop-device
|
||||||
|
Patch13: %{name}-missing-fixes-for-ontap
|
||||||
|
Patch14: %{name}-add-IBM-storage-to-hwtable
|
||||||
|
Patch15: %{name}-increase-loop-buffer-size
|
||||||
|
Patch16: %{name}-include-device-handler-modules
|
||||||
|
|
||||||
%description
|
%description
|
||||||
This package provides the tools to manage multipathed devices by
|
This package provides the tools to manage multipathed devices by
|
||||||
@ -81,6 +93,18 @@ Authors:
|
|||||||
%patch2 -p1
|
%patch2 -p1
|
||||||
%patch3 -p1
|
%patch3 -p1
|
||||||
%patch4 -p1
|
%patch4 -p1
|
||||||
|
%patch5 -p1
|
||||||
|
%patch6 -p1
|
||||||
|
%patch7 -p1
|
||||||
|
%patch8 -p1
|
||||||
|
%patch9 -p1
|
||||||
|
%patch10 -p1
|
||||||
|
%patch11 -p1
|
||||||
|
%patch12 -p1
|
||||||
|
%patch13 -p1
|
||||||
|
%patch14 -p1
|
||||||
|
%patch15 -p1
|
||||||
|
%patch16 -p1
|
||||||
|
|
||||||
%build
|
%build
|
||||||
make OPTFLAGS="$RPM_OPT_FLAGS"
|
make OPTFLAGS="$RPM_OPT_FLAGS"
|
||||||
@ -142,10 +166,22 @@ exit 0
|
|||||||
%{_mandir}/man8/kpartx.8*
|
%{_mandir}/man8/kpartx.8*
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Mon Oct 27 2008 hare@suse.de
|
||||||
|
- Patches from mainline:
|
||||||
|
* Increase bindings file lock timeout
|
||||||
|
* Fixes for 'show paths format'
|
||||||
|
* Add 'show wildcards' cli cmd
|
||||||
|
* Add support for IBM storage devices
|
||||||
|
- fopen() returns NULL on failure (bnc#432598)
|
||||||
|
- Read verbosity level from configuration file (bnc#388284)
|
||||||
|
- kpartx -l does not remove it's loop device (bnc#417266)
|
||||||
|
- Missing fixes for libprio ontap.c (bnc#426975)
|
||||||
|
- Increase buffer size in find_loop_by_file (bnc#436428)
|
||||||
|
- Include SCSI device handler modules for initrd (bnc#431877)
|
||||||
* Fri Sep 26 2008 hare@suse.de
|
* Fri Sep 26 2008 hare@suse.de
|
||||||
- Implement map resize (FATE#302007)
|
- Implement map resize (FATE#302007)
|
||||||
- Handle cciss devices correctly (bnc#419123)
|
- Handle cciss devices correctly (bnc#419123)
|
||||||
* Thu Sep 25 2008 ro@suse.de
|
* Wed Sep 24 2008 ro@suse.de
|
||||||
- use udevadm info instead of udevinfo
|
- use udevadm info instead of udevinfo
|
||||||
* Wed Sep 03 2008 hare@suse.de
|
* Wed Sep 03 2008 hare@suse.de
|
||||||
- Merge in fixes from upstream:
|
- Merge in fixes from upstream:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user