[dm-devel] 2 minor updates to hwtable.c for EMC CLARiiON and default blackli sting enhancement
egoggin at emc.com
egoggin at emc.com
Tue Feb 28 22:44:06 UTC 2006
Christophe,
I've included a cg-diff patch for changing both the product and
no_path_retry defaults for the EMC CLARiiON. Also, I've included a patch
for being able to associate a default blacklist product string with each
hwentry. This is useful for the CLARiiON in order to blacklist LUNZ entries
by default.
Ed
diff --git a/libmultipath/blacklist.c b/libmultipath/blacklist.c
index 92ab876..7cf9280 100644
--- a/libmultipath/blacklist.c
+++ b/libmultipath/blacklist.c
@@ -95,28 +95,46 @@ set_ble_device (vector blist, char * ven
}
int
-setup_default_blist (vector blist)
+setup_default_blist (struct config * conf)
{
+ struct blentry * ble;
+ struct hwentry *hwe;
char * str;
+ int i;
str = STRDUP("^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*");
if (!str)
return 1;
- if (store_ble(blist, str))
+ if (store_ble(conf->blist_devnode, str))
return 1;
str = STRDUP("^hd[a-z]");
if (!str)
return 1;
- if (store_ble(blist, str))
+ if (store_ble(conf->blist_devnode, str))
return 1;
str = STRDUP("^cciss!c[0-9]d[0-9]*");
if (!str)
return 1;
- if (store_ble(blist, str))
+ if (store_ble(conf->blist_devnode, str))
return 1;
+ vector_foreach_slot (conf->hwtable, hwe, i) {
+ if (hwe->bl_product) {
+ if (alloc_ble_device(conf->blist_device))
+ return 1;
+ ble = VECTOR_SLOT(conf->blist_device,
+ VECTOR_SIZE(conf->blist_device) -
1);
+ if (set_ble_device(conf->blist_device,
+ STRDUP(hwe->vendor),
+ STRDUP(hwe->bl_product))) {
+ FREE(ble);
+ return 1;
+ }
+ }
+ }
+
return 0;
}
diff --git a/libmultipath/blacklist.h b/libmultipath/blacklist.h
index 16a1399..9e2b63c 100644
--- a/libmultipath/blacklist.h
+++ b/libmultipath/blacklist.h
@@ -15,7 +15,7 @@ struct blentry_device {
regex_t product_reg;
};
-int setup_default_blist (vector);
+int setup_default_blist (struct config *);
int alloc_ble_device (vector);
int blacklist (vector, char *);
int blacklist_device (vector, char *, char *);
diff --git a/libmultipath/config.c b/libmultipath/config.c
index e4a8131..1068755 100644
--- a/libmultipath/config.c
+++ b/libmultipath/config.c
@@ -106,6 +106,9 @@ free_hwe (struct hwentry * hwe)
if (hwe->hwhandler)
FREE(hwe->hwhandler);
+ if (hwe->bl_product)
+ FREE(hwe->bl_product);
+
FREE(hwe);
}
@@ -251,6 +254,8 @@ store_hwe (vector hwtable, struct hwentr
hwe->minio = dhwe->minio;
hwe->checker = dhwe->checker;
+ if (dhwe->bl_product && !(hwe->bl_product =
set_param_str(dhwe->bl_product)))
+ goto out;
if (!vector_alloc_slot(hwtable))
goto out;
@@ -351,9 +356,6 @@ load_config (char * file)
if (!conf->blist_devnode)
goto out;
-
- if (setup_default_blist(conf->blist_devnode))
- goto out;
}
if (conf->blist_wwid == NULL) {
conf->blist_wwid = vector_alloc();
@@ -367,6 +369,9 @@ load_config (char * file)
if (!conf->blist_device)
goto out;
}
+ if (setup_default_blist(conf))
+ goto out;
+
if (conf->mptable == NULL) {
conf->mptable = vector_alloc();
diff --git a/libmultipath/config.h b/libmultipath/config.h
index 94a0f61..6e5633a 100644
--- a/libmultipath/config.h
+++ b/libmultipath/config.h
@@ -24,6 +24,7 @@ struct hwentry {
int no_path_retry;
int minio;
struct checker * checker;
+ char * bl_product;
};
struct mpentry {
diff --git a/libmultipath/dict.c b/libmultipath/dict.c
index 6dbae2c..d2add7b 100644
--- a/libmultipath/dict.c
+++ b/libmultipath/dict.c
@@ -361,6 +361,21 @@ product_handler(vector strvec)
}
static int
+bl_product_handler(vector strvec)
+{
+ struct hwentry * hwe = VECTOR_LAST_SLOT(conf->hwtable);
+
+ if (!hwe)
+ return 1;
+
+ hwe->bl_product = set_value(strvec);
+ if (!hwe->bl_product)
+ return 1;
+
+ return 0;
+}
+
+static int
hw_pgpolicy_handler(vector strvec)
{
char * buff;
@@ -903,6 +918,17 @@ snprint_hw_product (char * buff, int len
}
static int
+snprint_hw_bl_product (char * buff, int len, void * data)
+{
+ struct hwentry * hwe = (struct hwentry *)data;
+
+ if (!hwe->bl_product)
+ return 0;
+
+ return snprintf(buff, len, "%s", hwe->bl_product);
+}
+
+static int
snprint_hw_getuid_callout (char * buff, int len, void * data)
{
struct hwentry * hwe = (struct hwentry *)data;
@@ -1325,6 +1351,7 @@ init_keywords(void)
install_sublevel();
install_keyword("vendor", &vendor_handler, &snprint_hw_vendor);
install_keyword("product", &product_handler, &snprint_hw_product);
+ install_keyword("bl_product", &bl_product_handler,
&snprint_hw_bl_product);
install_keyword("path_grouping_policy", &hw_pgpolicy_handler,
&snprint_hw_path_grouping_policy);
install_keyword("getuid_callout", &hw_getuid_callout_handler,
&snprint_hw_getuid_callout);
install_keyword("path_selector", &hw_selector_handler,
&snprint_hw_selector);
diff --git a/libmultipath/hwtable.c b/libmultipath/hwtable.c
index abafc3e..5c7d625 100644
--- a/libmultipath/hwtable.c
+++ b/libmultipath/hwtable.c
@@ -142,7 +142,8 @@ static struct hwentry default_hw[] = {
},
{
.vendor = "DGC",
- .product = "^[^LUN_Z]",
+ .product = "*",
+ .bl_product = "LUNZ",
.getuid = DEFAULT_GETUID,
.getprio = "/sbin/mpath_prio_emc /dev/%n",
.features = "1 queue_if_no_path",
@@ -151,7 +152,7 @@ static struct hwentry default_hw[] = {
.pgpolicy = GROUP_BY_PRIO,
.pgfailback = -FAILBACK_IMMEDIATE,
.rr_weight = RR_WEIGHT_NONE,
- .no_path_retry = NO_PATH_RETRY_UNDEF,
+ .no_path_retry = (300 / DEFAULT_CHECKINT),
.minio = DEFAULT_MINIO,
.checker_name = EMC_CLARIION,
},
More information about the dm-devel
mailing list