device-mapper-multipath-0.4.9-31
Add 0014-RH-dm_reassign.patch * Fix reassign_maps option Add 0015-RH-selector_change.patch * devices default to using service-time selector Add 0016-RH-retain_hwhandler.patch * add retain_attached_hw_handler option, to let multipath keep an already attached scsi device handler Add 0017-RH-netapp_config.patch Add 0018-RH-remove-config-dups.patch * Clean up duplicates in the devices and blacklist sections
This commit is contained in:
parent
a3c4618518
commit
bb04a893de
80
0014-RH-dm_reassign.patch
Normal file
80
0014-RH-dm_reassign.patch
Normal file
@ -0,0 +1,80 @@
|
||||
---
|
||||
libmultipath/devmapper.c | 4 +++-
|
||||
libmultipath/sysfs.c | 10 ++++++----
|
||||
libmultipath/util.c | 3 ++-
|
||||
3 files changed, 11 insertions(+), 6 deletions(-)
|
||||
|
||||
Index: multipath-tools-120821/libmultipath/devmapper.c
|
||||
===================================================================
|
||||
--- multipath-tools-120821.orig/libmultipath/devmapper.c
|
||||
+++ multipath-tools-120821/libmultipath/devmapper.c
|
||||
@@ -1372,8 +1372,10 @@ int dm_reassign(const char *mapname)
|
||||
return 1;
|
||||
}
|
||||
|
||||
- if (!(dmt = dm_task_create(DM_DEVICE_DEPS)))
|
||||
+ if (!(dmt = dm_task_create(DM_DEVICE_DEPS))) {
|
||||
+ condlog(3, "%s: couldn't make dm task", mapname);
|
||||
return 0;
|
||||
+ }
|
||||
|
||||
if (!dm_task_set_name(dmt, mapname))
|
||||
goto out;
|
||||
Index: multipath-tools-120821/libmultipath/sysfs.c
|
||||
===================================================================
|
||||
--- multipath-tools-120821.orig/libmultipath/sysfs.c
|
||||
+++ multipath-tools-120821/libmultipath/sysfs.c
|
||||
@@ -125,8 +125,10 @@ int sysfs_check_holders(char * check_dev
|
||||
return 0;
|
||||
}
|
||||
|
||||
- if (devt2devname(check_dev, PATH_SIZE, check_devt))
|
||||
+ if (devt2devname(check_dev, PATH_SIZE, check_devt)) {
|
||||
+ condlog(1, "can't get devname for %s", check_devt);
|
||||
return 0;
|
||||
+ }
|
||||
|
||||
condlog(3, "%s: checking holder", check_dev);
|
||||
|
||||
@@ -143,17 +145,17 @@ int sysfs_check_holders(char * check_dev
|
||||
continue;
|
||||
|
||||
if (sscanf(holder->d_name, "dm-%d", &table_minor) != 1) {
|
||||
- condlog(3, "%s: %s is not a dm-device",
|
||||
+ condlog(0, "%s: %s is not a dm-device",
|
||||
check_dev, holder->d_name);
|
||||
continue;
|
||||
}
|
||||
if (table_minor == new_minor) {
|
||||
- condlog(3, "%s: holder already correct", check_dev);
|
||||
+ condlog(0, "%s: holder already correct", check_dev);
|
||||
continue;
|
||||
}
|
||||
table_name = dm_mapname(major, table_minor);
|
||||
|
||||
- condlog(3, "%s: reassign table %s old %s new %s", check_dev,
|
||||
+ condlog(0, "%s: reassign table %s old %s new %s", check_dev,
|
||||
table_name, check_devt, new_devt);
|
||||
|
||||
dm_reassign_table(table_name, check_devt, new_devt);
|
||||
Index: multipath-tools-120821/libmultipath/util.c
|
||||
===================================================================
|
||||
--- multipath-tools-120821.orig/libmultipath/util.c
|
||||
+++ multipath-tools-120821/libmultipath/util.c
|
||||
@@ -161,6 +161,7 @@ devt2devname (char *devname, int devname
|
||||
struct stat statbuf;
|
||||
|
||||
memset(block_path, 0, sizeof(block_path));
|
||||
+ memset(dev, 0, sizeof(dev));
|
||||
if (sscanf(devt, "%u:%u", &major, &minor) != 2) {
|
||||
condlog(0, "Invalid device number %s", devt);
|
||||
return 1;
|
||||
@@ -172,7 +173,7 @@ devt2devname (char *devname, int devname
|
||||
if (stat("/sys/dev/block", &statbuf) == 0) {
|
||||
/* Newer kernels have /sys/dev/block */
|
||||
sprintf(block_path,"/sys/dev/block/%u:%u", major, minor);
|
||||
- if (stat(block_path, &statbuf) == 0) {
|
||||
+ if (lstat(block_path, &statbuf) == 0) {
|
||||
if (S_ISLNK(statbuf.st_mode) &&
|
||||
readlink(block_path, dev, FILE_NAME_SIZE) > 0) {
|
||||
char *p = strrchr(dev, '/');
|
17
0015-RH-selector_change.patch
Normal file
17
0015-RH-selector_change.patch
Normal file
@ -0,0 +1,17 @@
|
||||
---
|
||||
libmultipath/defaults.h | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
Index: multipath-tools-120821/libmultipath/defaults.h
|
||||
===================================================================
|
||||
--- multipath-tools-120821.orig/libmultipath/defaults.h
|
||||
+++ multipath-tools-120821/libmultipath/defaults.h
|
||||
@@ -1,7 +1,7 @@
|
||||
#define DEFAULT_UID_ATTRIBUTE "ID_SERIAL"
|
||||
#define DEFAULT_UDEVDIR "/dev"
|
||||
#define DEFAULT_MULTIPATHDIR "/" LIB_STRING "/multipath"
|
||||
-#define DEFAULT_SELECTOR "round-robin 0"
|
||||
+#define DEFAULT_SELECTOR "service-time 0"
|
||||
#define DEFAULT_ALIAS_PREFIX "mpath"
|
||||
#define DEFAULT_FEATURES "0"
|
||||
#define DEFAULT_HWHANDLER "0"
|
297
0016-RH-retain_hwhandler.patch
Normal file
297
0016-RH-retain_hwhandler.patch
Normal file
@ -0,0 +1,297 @@
|
||||
---
|
||||
libmultipath/config.c | 3 +
|
||||
libmultipath/config.h | 2 +
|
||||
libmultipath/configure.c | 7 +++-
|
||||
libmultipath/defaults.h | 1
|
||||
libmultipath/dict.c | 74 +++++++++++++++++++++++++++++++++++++++++++++++
|
||||
libmultipath/dmparser.c | 3 +
|
||||
libmultipath/propsel.c | 17 ++++++++++
|
||||
libmultipath/propsel.h | 1
|
||||
libmultipath/structs.h | 7 ++++
|
||||
9 files changed, 113 insertions(+), 2 deletions(-)
|
||||
|
||||
Index: multipath-tools-120821/libmultipath/config.c
|
||||
===================================================================
|
||||
--- multipath-tools-120821.orig/libmultipath/config.c
|
||||
+++ multipath-tools-120821/libmultipath/config.c
|
||||
@@ -327,6 +327,7 @@ merge_hwe (struct hwentry * dst, struct
|
||||
merge_num(fast_io_fail);
|
||||
merge_num(dev_loss);
|
||||
merge_num(user_friendly_names);
|
||||
+ merge_num(retain_hwhandler);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -386,6 +387,7 @@ store_hwe (vector hwtable, struct hwentr
|
||||
hwe->fast_io_fail = dhwe->fast_io_fail;
|
||||
hwe->dev_loss = dhwe->dev_loss;
|
||||
hwe->user_friendly_names = dhwe->user_friendly_names;
|
||||
+ hwe->retain_hwhandler = dhwe->retain_hwhandler;
|
||||
|
||||
if (dhwe->bl_product && !(hwe->bl_product = set_param_str(dhwe->bl_product)))
|
||||
goto out;
|
||||
@@ -519,6 +521,7 @@ load_config (char * file)
|
||||
conf->max_checkint = MAX_CHECKINT(conf->checkint);
|
||||
conf->find_multipaths = DEFAULT_FIND_MULTIPATHS;
|
||||
conf->fast_io_fail = 5;
|
||||
+ conf->retain_hwhandler = DEFAULT_RETAIN_HWHANDLER;
|
||||
|
||||
/*
|
||||
* preload default hwtable
|
||||
Index: multipath-tools-120821/libmultipath/config.h
|
||||
===================================================================
|
||||
--- multipath-tools-120821.orig/libmultipath/config.h
|
||||
+++ multipath-tools-120821/libmultipath/config.h
|
||||
@@ -46,6 +46,7 @@ struct hwentry {
|
||||
int fast_io_fail;
|
||||
unsigned int dev_loss;
|
||||
int user_friendly_names;
|
||||
+ int retain_hwhandler;
|
||||
char * bl_product;
|
||||
};
|
||||
|
||||
@@ -110,6 +111,7 @@ struct config {
|
||||
mode_t mode;
|
||||
uint32_t cookie;
|
||||
int reassign_maps;
|
||||
+ int retain_hwhandler;
|
||||
|
||||
char * dev;
|
||||
struct udev * udev;
|
||||
Index: multipath-tools-120821/libmultipath/defaults.h
|
||||
===================================================================
|
||||
--- multipath-tools-120821.orig/libmultipath/defaults.h
|
||||
+++ multipath-tools-120821/libmultipath/defaults.h
|
||||
@@ -16,6 +16,7 @@
|
||||
#define DEFAULT_VERBOSITY 2
|
||||
#define DEFAULT_REASSIGN_MAPS 1
|
||||
#define DEFAULT_FIND_MULTIPATHS 0
|
||||
+#define DEFAULT_RETAIN_HWHANDLER RETAIN_HWHANDLER_OFF
|
||||
|
||||
#define DEFAULT_CHECKINT 5
|
||||
#define MAX_CHECKINT(a) (a << 2)
|
||||
Index: multipath-tools-120821/libmultipath/dict.c
|
||||
===================================================================
|
||||
--- multipath-tools-120821.orig/libmultipath/dict.c
|
||||
+++ multipath-tools-120821/libmultipath/dict.c
|
||||
@@ -650,6 +650,29 @@ wwids_file_handler(vector strvec)
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static int
|
||||
+def_retain_hwhandler_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->retain_hwhandler = RETAIN_HWHANDLER_OFF;
|
||||
+ else if ((strlen(buff) == 3 && !strcmp(buff, "yes")) ||
|
||||
+ (strlen(buff) == 1 && !strcmp(buff, "1")))
|
||||
+ conf->retain_hwhandler = RETAIN_HWHANDLER_ON;
|
||||
+ else
|
||||
+ conf->retain_hwhandler = RETAIN_HWHANDLER_UNDEF;
|
||||
+
|
||||
+ FREE(buff);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
/*
|
||||
* blacklist block handlers
|
||||
*/
|
||||
@@ -1271,6 +1294,33 @@ hw_names_handler(vector strvec)
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static int
|
||||
+hw_retain_hwhandler_handler(vector strvec)
|
||||
+{
|
||||
+ struct hwentry *hwe = VECTOR_LAST_SLOT(conf->hwtable);
|
||||
+ char * buff;
|
||||
+
|
||||
+ if (!hwe)
|
||||
+ return 1;
|
||||
+
|
||||
+ buff = set_value(strvec);
|
||||
+
|
||||
+ if (!buff)
|
||||
+ return 1;
|
||||
+
|
||||
+ if ((strlen(buff) == 2 && !strcmp(buff, "no")) ||
|
||||
+ (strlen(buff) == 1 && !strcmp(buff, "0")))
|
||||
+ hwe->retain_hwhandler = RETAIN_HWHANDLER_OFF;
|
||||
+ else if ((strlen(buff) == 3 && !strcmp(buff, "yes")) ||
|
||||
+ (strlen(buff) == 1 && !strcmp(buff, "1")))
|
||||
+ hwe->retain_hwhandler = RETAIN_HWHANDLER_ON;
|
||||
+ else
|
||||
+ hwe->user_friendly_names = RETAIN_HWHANDLER_UNDEF;
|
||||
+
|
||||
+ FREE(buff);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
/*
|
||||
* multipaths block handlers
|
||||
*/
|
||||
@@ -2295,6 +2345,19 @@ snprint_hw_user_friendly_names (char * b
|
||||
}
|
||||
|
||||
static int
|
||||
+snprint_hw_retain_hwhandler_handler(char * buff, int len, void * data)
|
||||
+{
|
||||
+ struct hwentry * hwe = (struct hwentry *)data;
|
||||
+
|
||||
+ if (hwe->retain_hwhandler == RETAIN_HWHANDLER_ON)
|
||||
+ return snprintf(buff, len, "yes");
|
||||
+ else if (hwe->retain_hwhandler == RETAIN_HWHANDLER_OFF)
|
||||
+ return snprintf(buff, len, "no");
|
||||
+ else
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int
|
||||
snprint_def_polling_interval (char * buff, int len, void * data)
|
||||
{
|
||||
return snprintf(buff, len, "%i", conf->checkint);
|
||||
@@ -2632,6 +2695,15 @@ snprint_def_reservation_key(char * buff,
|
||||
}
|
||||
|
||||
static int
|
||||
+snprint_def_retain_hwhandler_handler(char * buff, int len, void * data)
|
||||
+{
|
||||
+ if (conf->retain_hwhandler == RETAIN_HWHANDLER_ON)
|
||||
+ return snprintf(buff, len, "yes");
|
||||
+ else
|
||||
+ return snprintf(buff, len, "no");
|
||||
+}
|
||||
+
|
||||
+static int
|
||||
snprint_ble_simple (char * buff, int len, void * data)
|
||||
{
|
||||
struct blentry * ble = (struct blentry *)data;
|
||||
@@ -2696,6 +2768,7 @@ init_keywords(void)
|
||||
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);
|
||||
+ install_keyword("retain_attached_hw_handler", &def_retain_hwhandler_handler, &snprint_def_retain_hwhandler_handler);
|
||||
__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);
|
||||
@@ -2757,6 +2830,7 @@ init_keywords(void)
|
||||
install_keyword("fast_io_fail_tmo", &hw_fast_io_fail_handler, &snprint_hw_fast_io_fail);
|
||||
install_keyword("dev_loss_tmo", &hw_dev_loss_handler, &snprint_hw_dev_loss);
|
||||
install_keyword("user_friendly_names", &hw_names_handler, &snprint_hw_user_friendly_names);
|
||||
+ install_keyword("retain_attached_hw_handler", &hw_retain_hwhandler_handler, &snprint_hw_retain_hwhandler_handler);
|
||||
install_sublevel_end();
|
||||
|
||||
install_keyword_root("multipaths", &multipaths_handler);
|
||||
Index: multipath-tools-120821/libmultipath/structs.h
|
||||
===================================================================
|
||||
--- multipath-tools-120821.orig/libmultipath/structs.h
|
||||
+++ multipath-tools-120821/libmultipath/structs.h
|
||||
@@ -99,6 +99,12 @@ enum user_friendly_names_states {
|
||||
USER_FRIENDLY_NAMES_ON,
|
||||
};
|
||||
|
||||
+enum retain_hwhandler_states {
|
||||
+ RETAIN_HWHANDLER_UNDEF,
|
||||
+ RETAIN_HWHANDLER_OFF,
|
||||
+ RETAIN_HWHANDLER_ON,
|
||||
+};
|
||||
+
|
||||
struct scsi_idlun {
|
||||
int dev_id;
|
||||
int host_unique_id;
|
||||
@@ -188,6 +194,7 @@ struct multipath {
|
||||
int flush_on_last_del;
|
||||
int attribute_flags;
|
||||
int fast_io_fail;
|
||||
+ int retain_hwhandler;
|
||||
unsigned int dev_loss;
|
||||
uid_t uid;
|
||||
gid_t gid;
|
||||
Index: multipath-tools-120821/libmultipath/configure.c
|
||||
===================================================================
|
||||
--- multipath-tools-120821.orig/libmultipath/configure.c
|
||||
+++ multipath-tools-120821/libmultipath/configure.c
|
||||
@@ -76,6 +76,7 @@ setup_map (struct multipath * mpp, char
|
||||
select_fast_io_fail(mpp);
|
||||
select_dev_loss(mpp);
|
||||
select_reservation_key(mpp);
|
||||
+ select_retain_hwhandler(mpp);
|
||||
|
||||
sysfs_set_scsi_tmo(mpp);
|
||||
/*
|
||||
@@ -217,8 +218,10 @@ select_action (struct multipath * mpp, v
|
||||
mpp->alias);
|
||||
return;
|
||||
}
|
||||
- if (!cmpp->selector || strncmp(cmpp->hwhandler, mpp->hwhandler,
|
||||
- strlen(mpp->hwhandler))) {
|
||||
+ if (mpp->retain_hwhandler != RETAIN_HWHANDLER_ON &&
|
||||
+ (strlen(cmpp->hwhandler) != strlen(mpp->hwhandler) ||
|
||||
+ strncmp(cmpp->hwhandler, mpp->hwhandler,
|
||||
+ strlen(mpp->hwhandler)))) {
|
||||
mpp->action = ACT_RELOAD;
|
||||
condlog(3, "%s: set ACT_RELOAD (hwhandler change)",
|
||||
mpp->alias);
|
||||
Index: multipath-tools-120821/libmultipath/dmparser.c
|
||||
===================================================================
|
||||
--- multipath-tools-120821.orig/libmultipath/dmparser.c
|
||||
+++ multipath-tools-120821/libmultipath/dmparser.c
|
||||
@@ -56,6 +56,7 @@ assemble_map (struct multipath * mp, cha
|
||||
int nr_priority_groups, initial_pg_nr;
|
||||
char * p, * f;
|
||||
char no_path_retry[] = "queue_if_no_path";
|
||||
+ char retain_hwhandler[] = "retain_attached_hw_handler";
|
||||
struct pathgroup * pgp;
|
||||
struct path * pp;
|
||||
|
||||
@@ -81,6 +82,8 @@ assemble_map (struct multipath * mp, cha
|
||||
} else {
|
||||
add_feature(&f, no_path_retry);
|
||||
}
|
||||
+ if (mp->retain_hwhandler == RETAIN_HWHANDLER_ON)
|
||||
+ add_feature(&f, retain_hwhandler);
|
||||
|
||||
shift = snprintf(p, freechar, "%s %s %i %i",
|
||||
f, mp->hwhandler,
|
||||
Index: multipath-tools-120821/libmultipath/propsel.c
|
||||
===================================================================
|
||||
--- multipath-tools-120821.orig/libmultipath/propsel.c
|
||||
+++ multipath-tools-120821/libmultipath/propsel.c
|
||||
@@ -674,3 +674,20 @@ select_reservation_key (struct multipath
|
||||
return 0;
|
||||
}
|
||||
|
||||
+extern int
|
||||
+select_retain_hwhandler (struct multipath * mp)
|
||||
+{
|
||||
+ if (mp->hwe && mp->hwe->retain_hwhandler) {
|
||||
+ mp->retain_hwhandler = mp->hwe->retain_hwhandler;
|
||||
+ condlog(3, "%s: retain_attached_hw_handler = %d (controller default)", mp->alias, mp->retain_hwhandler);
|
||||
+ return 0;
|
||||
+ }
|
||||
+ if (conf->retain_hwhandler) {
|
||||
+ mp->retain_hwhandler = conf->retain_hwhandler;
|
||||
+ condlog(3, "%s: retain_attached_hw_handler = %d (config file default)", mp->alias, mp->retain_hwhandler);
|
||||
+ return 0;
|
||||
+ }
|
||||
+ mp->retain_hwhandler = 0;
|
||||
+ condlog(3, "%s: retain_attached_hw_handler = %d (compiled in default)", mp->alias, mp->retain_hwhandler);
|
||||
+ return 0;
|
||||
+}
|
||||
Index: multipath-tools-120821/libmultipath/propsel.h
|
||||
===================================================================
|
||||
--- multipath-tools-120821.orig/libmultipath/propsel.h
|
||||
+++ multipath-tools-120821/libmultipath/propsel.h
|
||||
@@ -18,3 +18,4 @@ int select_gid(struct multipath *mp);
|
||||
int select_fast_io_fail(struct multipath *mp);
|
||||
int select_dev_loss(struct multipath *mp);
|
||||
int select_reservation_key(struct multipath *mp);
|
||||
+extern int select_retain_hwhandler (struct multipath * mp);
|
50
0017-RH-netapp_config.patch
Normal file
50
0017-RH-netapp_config.patch
Normal file
@ -0,0 +1,50 @@
|
||||
---
|
||||
libmultipath/hwtable.c | 21 +++++++++++++++++++--
|
||||
1 file changed, 19 insertions(+), 2 deletions(-)
|
||||
|
||||
Index: multipath-tools-120821/libmultipath/hwtable.c
|
||||
===================================================================
|
||||
--- multipath-tools-120821.orig/libmultipath/hwtable.c
|
||||
+++ multipath-tools-120821/libmultipath/hwtable.c
|
||||
@@ -864,15 +864,16 @@ static struct hwentry default_hw[] = {
|
||||
.vendor = "NETAPP",
|
||||
.product = "LUN.*",
|
||||
.features = "3 queue_if_no_path pg_init_retries 50",
|
||||
- .hwhandler = DEFAULT_HWHANDLER,
|
||||
+ .hwhandler = "1 alua",
|
||||
.pgpolicy = GROUP_BY_PRIO,
|
||||
.pgfailback = -FAILBACK_IMMEDIATE,
|
||||
.flush_on_last_del = FLUSH_ENABLED,
|
||||
.rr_weight = RR_WEIGHT_NONE,
|
||||
.no_path_retry = NO_PATH_RETRY_UNDEF,
|
||||
.minio = 128,
|
||||
+ .dev_loss = MAX_DEV_LOSS_TMO,
|
||||
.checker_name = TUR,
|
||||
- .prio_name = PRIO_ONTAP,
|
||||
+ .prio_name = PRIO_ALUA,
|
||||
.prio_args = NULL,
|
||||
},
|
||||
/*
|
||||
@@ -1135,6 +1136,22 @@ static struct hwentry default_hw[] = {
|
||||
.prio_args = NULL,
|
||||
},
|
||||
{
|
||||
+ .vendor = "NETAPP",
|
||||
+ .product = "INF-01-00",
|
||||
+ .bl_product = "Universal Xport",
|
||||
+ .features = "2 pg_init_retries 50",
|
||||
+ .hwhandler = "2 alua 1",
|
||||
+ .pgpolicy = GROUP_BY_PRIO,
|
||||
+ .pgfailback = -FAILBACK_IMMEDIATE,
|
||||
+ .rr_weight = RR_WEIGHT_NONE,
|
||||
+ .no_path_retry = 15,
|
||||
+ .minio = DEFAULT_MINIO,
|
||||
+ .minio_rq = DEFAULT_MINIO_RQ,
|
||||
+ .checker_name = TUR,
|
||||
+ .prio_name = PRIO_ALUA,
|
||||
+ .prio_args = NULL,
|
||||
+ },
|
||||
+ {
|
||||
.vendor = "STK",
|
||||
.product = "FLEXLINE 380",
|
||||
.bl_product = "Universal Xport",
|
130
0018-RH-remove-config-dups.patch
Normal file
130
0018-RH-remove-config-dups.patch
Normal file
@ -0,0 +1,130 @@
|
||||
---
|
||||
libmultipath/blacklist.c | 91 ++++++++++++++++++++++++-----------------------
|
||||
libmultipath/config.c | 5 ++
|
||||
2 files changed, 52 insertions(+), 44 deletions(-)
|
||||
|
||||
Index: multipath-tools-120821/libmultipath/blacklist.c
|
||||
===================================================================
|
||||
--- multipath-tools-120821.orig/libmultipath/blacklist.c
|
||||
+++ multipath-tools-120821/libmultipath/blacklist.c
|
||||
@@ -96,50 +96,6 @@ set_ble_device (vector blist, char * ven
|
||||
}
|
||||
|
||||
int
|
||||
-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(conf->blist_devnode, str, ORIGIN_DEFAULT))
|
||||
- return 1;
|
||||
-
|
||||
- str = STRDUP("^hd[a-z]");
|
||||
- if (!str)
|
||||
- return 1;
|
||||
- if (store_ble(conf->blist_devnode, str, ORIGIN_DEFAULT))
|
||||
- return 1;
|
||||
-
|
||||
- str = STRDUP("^dcssblk[0-9]*");
|
||||
- if (!str)
|
||||
- return 1;
|
||||
- if (store_ble(conf->blist_devnode, str, ORIGIN_DEFAULT))
|
||||
- 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),
|
||||
- ORIGIN_DEFAULT)) {
|
||||
- FREE(ble);
|
||||
- return 1;
|
||||
- }
|
||||
- }
|
||||
- }
|
||||
- return 0;
|
||||
-}
|
||||
-
|
||||
-int
|
||||
_blacklist_exceptions (vector elist, char * str)
|
||||
{
|
||||
int i;
|
||||
@@ -192,6 +148,53 @@ _blacklist_device (vector blist, char *
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
+
|
||||
+int
|
||||
+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(conf->blist_devnode, str, ORIGIN_DEFAULT))
|
||||
+ return 1;
|
||||
+
|
||||
+ str = STRDUP("^hd[a-z]");
|
||||
+ if (!str)
|
||||
+ return 1;
|
||||
+ if (store_ble(conf->blist_devnode, str, ORIGIN_DEFAULT))
|
||||
+ return 1;
|
||||
+
|
||||
+ str = STRDUP("^dcssblk[0-9]*");
|
||||
+ if (!str)
|
||||
+ return 1;
|
||||
+ if (store_ble(conf->blist_devnode, str, ORIGIN_DEFAULT))
|
||||
+ return 1;
|
||||
+
|
||||
+ vector_foreach_slot (conf->hwtable, hwe, i) {
|
||||
+ if (hwe->bl_product) {
|
||||
+ if (_blacklist_device(conf->blist_device, hwe->vendor,
|
||||
+ hwe->bl_product))
|
||||
+ continue;
|
||||
+ 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),
|
||||
+ ORIGIN_DEFAULT)) {
|
||||
+ FREE(ble);
|
||||
+ return 1;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ return 0;
|
||||
+}
|
||||
|
||||
#define LOG_BLIST(M) \
|
||||
if (vendor && product) \
|
||||
Index: multipath-tools-120821/libmultipath/config.c
|
||||
===================================================================
|
||||
--- multipath-tools-120821.orig/libmultipath/config.c
|
||||
+++ multipath-tools-120821/libmultipath/config.c
|
||||
@@ -417,6 +417,11 @@ factorize_hwtable (vector hw, int n)
|
||||
continue;
|
||||
/* dup */
|
||||
merge_hwe(hwe2, hwe1);
|
||||
+ vector_del_slot(hw, i);
|
||||
+ free_hwe(hwe1);
|
||||
+ n -= 1;
|
||||
+ i -= 1;
|
||||
+ j -= 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
@ -1,7 +1,7 @@
|
||||
Summary: Tools to manage multipath devices using device-mapper
|
||||
Name: device-mapper-multipath
|
||||
Version: 0.4.9
|
||||
Release: 30%{?dist}
|
||||
Release: 31%{?dist}
|
||||
License: GPL+
|
||||
Group: System Environment/Base
|
||||
URL: http://christophe.varoqui.free.fr/
|
||||
@ -21,6 +21,11 @@ Patch0010: 0010-RH-deprecate-uid-gid-mode.patch
|
||||
Patch0011: 0011-RH-use-sync-support.patch
|
||||
Patch0012: 0012-RH-change-configs.patch
|
||||
Patch0013: 0013-RH-kpartx-msg.patch
|
||||
Patch0014: 0014-RH-dm_reassign.patch
|
||||
Patch0015: 0015-RH-selector_change.patch
|
||||
Patch0016: 0016-RH-retain_hwhandler.patch
|
||||
Patch0017: 0017-RH-netapp_config.patch
|
||||
Patch0018: 0018-RH-remove-config-dups.patch
|
||||
|
||||
# runtime
|
||||
Requires: %{name}-libs = %{version}-%{release}
|
||||
@ -86,6 +91,11 @@ kpartx manages partition creation and removal for device-mapper devices.
|
||||
%patch0011 -p1
|
||||
%patch0012 -p1
|
||||
%patch0013 -p1
|
||||
%patch0014 -p1
|
||||
%patch0015 -p1
|
||||
%patch0016 -p1
|
||||
%patch0017 -p1
|
||||
%patch0018 -p1
|
||||
cp %{SOURCE1} .
|
||||
|
||||
%build
|
||||
@ -172,6 +182,18 @@ bin/systemctl --no-reload enable multipathd.service >/dev/null 2>&1 ||:
|
||||
%{_mandir}/man8/kpartx.8.gz
|
||||
|
||||
%changelog
|
||||
* Thu Sep 27 2012 Benjamin Marzinski <bmarzins@redhat.com> 0.4.9-31
|
||||
- Add 0014-RH-dm_reassign.patch
|
||||
* Fix reassign_maps option
|
||||
- Add 0015-RH-selector_change.patch
|
||||
* devices default to using service-time selector
|
||||
- Add 0016-RH-retain_hwhandler.patch
|
||||
* add retain_attached_hw_handler option, to let multipath keep an
|
||||
already attached scsi device handler
|
||||
- Add 0017-RH-netapp_config.patch
|
||||
- Add 0018-RH-remove-config-dups.patch
|
||||
* Clean up duplicates in the devices and blacklist sections
|
||||
|
||||
* Wed Sep 05 2012 Václav Pavlín <vpavlin@redhat.com> - 0.4.9-30
|
||||
- Scriptlets replaced with new systemd macros (#850088)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user