Browse Source

device-mapper-multipath package update

Signed-off-by: basebuilder_pel7x64builder0 <basebuilder@powerel.org>
master
basebuilder_pel7x64builder0 6 years ago
parent
commit
f6e5ed034d
  1. 38
      SOURCES/0237-RHBZ-1526876-show-sysfs-state.patch
  2. 45
      SOURCES/0238-RHBZ-1508483-mpathconf-info.patch
  3. 17
      SOURCES/0239-RHBZ-1544958-client-timeout.patch
  4. 82
      SOURCES/0240-UPBZ-1568902-id_size.patch
  5. 29
      SOURCES/0241-RHBZ-1554516-show-path-failures.patch
  6. 385
      SOURCES/0242-RHBZ-1541116-all-tg-pt.patch
  7. 504
      SOURCES/0243-RHBZ-1498724-save-persist-options.patch
  8. 1159
      SOURCES/0244-RHBZ-1562247-remove-rbd.patch
  9. 17
      SOURCES/0245-RHBZ-1584228-fix-readsector0_size.patch
  10. 519
      SOURCES/0246-RHBZ-1593459-add-transport-blacklist.patch
  11. 36
      SOURCES/0247-RHBZ-1585824-mpathconf-allow-doc.patch
  12. 32
      SOURCES/0248-RHBZ-1594360-fix-param-rk-doc.patch
  13. 228
      SOURCES/0249-RHBZ-1610263-mpathpersist-max-fds.patch
  14. 66
      SPECS/device-mapper-multipath.spec

38
SOURCES/0237-RHBZ-1526876-show-sysfs-state.patch

@ -0,0 +1,38 @@ @@ -0,0 +1,38 @@
---
multipath/main.c | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)

Index: multipath-tools-130222/multipath/main.c
===================================================================
--- multipath-tools-130222.orig/multipath/main.c
+++ multipath-tools-130222/multipath/main.c
@@ -135,7 +135,7 @@ usage (char * progname)
}
static int
-update_paths (struct multipath * mpp)
+update_paths (struct multipath * mpp, int quick)
{
int i, j;
struct pathgroup * pgp;
@@ -149,6 +149,10 @@ update_paths (struct multipath * mpp)
continue;
vector_foreach_slot (pgp->paths, pp, j) {
+ if (quick) {
+ pp->mpp = mpp;
+ continue;
+ }
if (!strlen(pp->dev)) {
if (devt2devname(pp->dev, FILE_NAME_SIZE,
pp->dev_t)) {
@@ -213,8 +217,7 @@ get_dm_mpvec (vector curmp, vector pathv
* If not in "fast list mode", we need to fetch information
* about them
*/
- if (conf->cmd != CMD_LIST_SHORT)
- update_paths(mpp);
+ update_paths(mpp, (conf->cmd == CMD_LIST_SHORT));
if (conf->cmd == CMD_LIST_LONG)
mpp->bestpg = select_path_group(mpp);

45
SOURCES/0238-RHBZ-1508483-mpathconf-info.patch

@ -0,0 +1,45 @@ @@ -0,0 +1,45 @@
---
libmultipath/config.c | 3 ++-
multipath/mpathconf.8 | 8 ++++++--
2 files changed, 8 insertions(+), 3 deletions(-)

Index: multipath-tools-130222/libmultipath/config.c
===================================================================
--- multipath-tools-130222.orig/libmultipath/config.c
+++ multipath-tools-130222/libmultipath/config.c
@@ -739,7 +739,8 @@ load_config (char * file, struct udev *u
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));
- condlog(0, "You can run /sbin/mpathconf to create or modify /etc/multipath.conf");
+ condlog(0, "You can run /sbin/mpathconf --enable to create");
+ condlog(0, "/etc/multipath.conf. See man mpathconf(8) for more details");
if (conf->blist_devnode == NULL) {
conf->blist_devnode = vector_alloc();
if (!conf->blist_devnode) {
Index: multipath-tools-130222/multipath/mpathconf.8
===================================================================
--- multipath-tools-130222.orig/multipath/mpathconf.8
+++ multipath-tools-130222/multipath/mpathconf.8
@@ -19,7 +19,9 @@ daemon, and configure the
.B multipathd
service to start automatically or not. If
.B mpathconf
-is called with no commands, it will display the current configuration.
+is called with no commands, it will display the current configuration, but
+will not create or modify
+.B /etc/multipath.conf
The default options for mpathconf are
.B --with_module
@@ -50,7 +52,9 @@ command.
.B --enable
Removes any line that blacklists all device nodes from the
.B /etc/multipath.conf
-blacklist section.
+blacklist section. Also, creates
+.B /etc/multipath.conf
+if it doesn't exist.
.TP
.B --disable
Adds a line that blacklists all device nodes to the

17
SOURCES/0239-RHBZ-1544958-client-timeout.patch

@ -0,0 +1,17 @@ @@ -0,0 +1,17 @@
---
libmpathcmd/mpath_cmd.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

Index: multipath-tools-130222/libmpathcmd/mpath_cmd.h
===================================================================
--- multipath-tools-130222.orig/libmpathcmd/mpath_cmd.h
+++ multipath-tools-130222/libmpathcmd/mpath_cmd.h
@@ -27,7 +27,7 @@ extern "C" {
#endif
#define DEFAULT_SOCKET "/org/kernel/linux/storage/multipathd"
-#define DEFAULT_REPLY_TIMEOUT 10000
+#define DEFAULT_REPLY_TIMEOUT 60000
/*

82
SOURCES/0240-UPBZ-1568902-id_size.patch

@ -0,0 +1,82 @@ @@ -0,0 +1,82 @@
---
libmultipath/discovery.c | 12 ++++++------
libmultipath/structs.h | 11 +++++++++--
2 files changed, 15 insertions(+), 8 deletions(-)

Index: multipath-tools-130222/libmultipath/discovery.c
===================================================================
--- multipath-tools-130222.orig/libmultipath/discovery.c
+++ multipath-tools-130222/libmultipath/discovery.c
@@ -845,12 +845,12 @@ scsi_sysfs_pathinfo (struct path * pp)
condlog(3, "%s: vendor = %s", pp->dev, pp->vendor_id);
- if (sysfs_get_model(parent, pp->product_id, SCSI_PRODUCT_SIZE))
+ if (sysfs_get_model(parent, pp->product_id, PATH_PRODUCT_SIZE))
return 1;
condlog(3, "%s: product = %s", pp->dev, pp->product_id);
- if (sysfs_get_rev(parent, pp->rev, SCSI_REV_SIZE))
+ if (sysfs_get_rev(parent, pp->rev, PATH_REV_SIZE))
return 1;
condlog(3, "%s: rev = %s", pp->dev, pp->rev);
@@ -904,11 +904,11 @@ nvme_sysfs_pathinfo (struct path * pp)
return 1;
snprintf(pp->vendor_id, SCSI_VENDOR_SIZE, "NVME");
- snprintf(pp->product_id, SCSI_PRODUCT_SIZE, "%s",
+ snprintf(pp->product_id, PATH_PRODUCT_SIZE, "%s",
udev_device_get_sysattr_value(parent, "model"));
snprintf(pp->serial, SERIAL_SIZE, "%s",
udev_device_get_sysattr_value(parent, "serial"));
- snprintf(pp->rev, SCSI_REV_SIZE, "%s",
+ snprintf(pp->rev, PATH_REV_SIZE, "%s",
udev_device_get_sysattr_value(parent, "firmware_rev"));
condlog(3, "%s: vendor = %s", pp->dev, pp->vendor_id);
@@ -1022,12 +1022,12 @@ cciss_sysfs_pathinfo (struct path * pp)
condlog(3, "%s: vendor = %s", pp->dev, pp->vendor_id);
- if (sysfs_get_model(parent, pp->product_id, SCSI_PRODUCT_SIZE))
+ if (sysfs_get_model(parent, pp->product_id, PATH_PRODUCT_SIZE))
return 1;
condlog(3, "%s: product = %s", pp->dev, pp->product_id);
- if (sysfs_get_rev(parent, pp->rev, SCSI_REV_SIZE))
+ if (sysfs_get_rev(parent, pp->rev, PATH_REV_SIZE))
return 1;
condlog(3, "%s: rev = %s", pp->dev, pp->rev);
Index: multipath-tools-130222/libmultipath/structs.h
===================================================================
--- multipath-tools-130222.orig/libmultipath/structs.h
+++ multipath-tools-130222/libmultipath/structs.h
@@ -24,6 +24,13 @@
#define SCSI_PRODUCT_SIZE 17
#define SCSI_REV_SIZE 5
#define SCSI_STATE_SIZE 19
+#define NVME_MODEL_SIZE 41
+#define NVME_REV_SIZE 9
+
+/* This must be the maximum of SCSI and NVME sizes */
+#define PATH_PRODUCT_SIZE NVME_MODEL_SIZE
+#define PATH_REV_SIZE NVME_REV_SIZE
+
#define NO_PATH_RETRY_UNDEF 0
#define NO_PATH_RETRY_FAIL -1
@@ -212,8 +219,8 @@ struct path {
struct hd_geometry geom;
char wwid[WWID_SIZE];
char vendor_id[SCSI_VENDOR_SIZE];
- char product_id[SCSI_PRODUCT_SIZE];
- char rev[SCSI_REV_SIZE];
+ char product_id[PATH_PRODUCT_SIZE];
+ char rev[PATH_REV_SIZE];
char serial[SERIAL_SIZE];
char tgt_node_name[NODE_NAME_SIZE];
unsigned long long size;

29
SOURCES/0241-RHBZ-1554516-show-path-failures.patch

@ -0,0 +1,29 @@ @@ -0,0 +1,29 @@
---
libmultipath/print.c | 7 +++++++
1 file changed, 7 insertions(+)

Index: multipath-tools-130222/libmultipath/print.c
===================================================================
--- multipath-tools-130222.orig/libmultipath/print.c
+++ multipath-tools-130222/libmultipath/print.c
@@ -601,6 +601,12 @@ snprint_path_checker (char * buff, size_
return snprint_str(buff, len, c->name);
}
+static int
+snprint_path_failures(char * buff, size_t len, struct path * pp)
+{
+ return snprint_int(buff, len, pp->failcount);
+}
+
struct multipath_data mpd[] = {
{'n', "name", 0, snprint_name},
{'w', "uuid", 0, snprint_multipath_uuid},
@@ -647,6 +653,7 @@ struct path_data pd[] = {
{'R', "host WWPN", 0, snprint_host_wwpn},
{'r', "target WWPN", 0, snprint_tgt_wwpn},
{'a', "host adapter", 0, snprint_host_adapter},
+ {'0', "failures", 0, snprint_path_failures},
{0, NULL, 0 , NULL}
};

385
SOURCES/0242-RHBZ-1541116-all-tg-pt.patch

@ -0,0 +1,385 @@ @@ -0,0 +1,385 @@
---
libmpathpersist/mpath_persist.c | 28 +++++++++++---
libmultipath/config.c | 3 +
libmultipath/config.h | 2 +
libmultipath/defaults.h | 1
libmultipath/dict.c | 77 ++++++++++++++++++++++++++++++++++++++++
libmultipath/propsel.c | 20 ++++++++++
libmultipath/propsel.h | 1
libmultipath/structs.h | 7 +++
multipath/multipath.conf.5 | 7 +++
9 files changed, 140 insertions(+), 6 deletions(-)

Index: multipath-tools-130222-patched/libmpathpersist/mpath_persist.c
===================================================================
--- multipath-tools-130222-patched.orig/libmpathpersist/mpath_persist.c
+++ multipath-tools-130222-patched/libmpathpersist/mpath_persist.c
@@ -287,6 +287,7 @@ int mpath_persistent_reserve_out ( int f
}
select_reservation_key(mpp);
+ select_all_tg_pt(mpp);
memcpy(&prkey, paramp->sa_key, 8);
if (mpp->prkey_source == PRKEY_SOURCE_FILE && prkey &&
@@ -419,7 +420,7 @@ int mpath_prout_reg(struct multipath *mp
unsigned int rq_type, struct prout_param_descriptor * paramp, int noisy)
{
- int i, j;
+ int i, j, k;
struct pathgroup *pgp = NULL;
struct path *pp = NULL;
int rollback = 0;
@@ -444,11 +445,13 @@ int mpath_prout_reg(struct multipath *mp
}
struct threadinfo thread[active_pathcount];
+ int hosts[active_pathcount];
memset(thread, 0, sizeof(thread));
/* init thread parameter */
for (i =0; i< active_pathcount; i++){
+ hosts[i] = -1;
thread[i].param.rq_servact = rq_servact;
thread[i].param.rq_scope = rq_scope;
thread[i].param.rq_type = rq_type;
@@ -476,6 +479,17 @@ int mpath_prout_reg(struct multipath *mp
condlog (1, "%s: %s path not up. Skip.", mpp->wwid, pp->dev);
continue;
}
+ if (mpp->all_tg_pt == ALL_TG_PT_ON &&
+ pp->sg_id.host_no != -1) {
+ for (k = 0; k < count; k++) {
+ if (pp->sg_id.host_no == hosts[k]) {
+ condlog(3, "%s: %s host %d matches skip.", pp->wwid, pp->dev, pp->sg_id.host_no);
+ break;
+ }
+ }
+ if (k < count)
+ continue;
+ }
strncpy(thread[count].param.dev, pp->dev, FILE_NAME_SIZE);
if (count && (thread[count].param.paramp->sa_flags & MPATH_F_SPEC_I_PT_MASK)){
@@ -492,10 +506,12 @@ int mpath_prout_reg(struct multipath *mp
condlog (0, "%s: failed to create thread %d", mpp->wwid, rc);
thread[count].param.status = MPATH_PR_THREAD_ERROR;
}
+ else
+ hosts[count] = pp->sg_id.host_no;
count = count +1;
}
}
- for( i=0; i < active_pathcount ; i++){
+ for( i=0; i < count ; i++){
if (thread[i].param.status != MPATH_PR_THREAD_ERROR) {
rc = pthread_join(thread[i].id, NULL);
if (rc){
@@ -518,7 +534,7 @@ int mpath_prout_reg(struct multipath *mp
}
if (rollback && ((rq_servact == MPATH_PROUT_REG_SA) && sa_key != 0 )){
condlog (3, "%s: ERROR: initiating pr out rollback", mpp->wwid);
- for( i=0 ; i < active_pathcount ; i++){
+ for( i=0 ; i < count ; i++){
if (thread[i].param.status == MPATH_PR_SUCCESS) {
memcpy(&thread[i].param.paramp->key, &thread[i].param.paramp->sa_key, 8);
memset(&thread[i].param.paramp->sa_key, 0, 8);
@@ -532,7 +548,7 @@ int mpath_prout_reg(struct multipath *mp
} else
thread[i].param.status = MPATH_PR_SKIP;
}
- for(i=0; i < active_pathcount ; i++){
+ for(i=0; i < count ; i++){
if (thread[i].param.status != MPATH_PR_SKIP &&
thread[i].param.status != MPATH_PR_THREAD_ERROR) {
rc = pthread_join(thread[i].id, NULL);
@@ -678,7 +694,7 @@ int mpath_prout_rel(struct multipath *mp
}
}
pthread_attr_destroy (&attr);
- for (i = 0; i < active_pathcount; i++){
+ for (i = 0; i < count; i++){
if (thread[i].param.status != MPATH_PR_THREAD_ERROR) {
rc = pthread_join (thread[i].id, NULL);
if (rc){
@@ -687,7 +703,7 @@ int mpath_prout_rel(struct multipath *mp
}
}
- for (i = 0; i < active_pathcount; i++){
+ for (i = 0; i < count; i++){
/* check thread status here and return the status */
if (thread[i].param.status == MPATH_PR_RESERV_CONFLICT)
Index: multipath-tools-130222-patched/libmultipath/config.c
===================================================================
--- multipath-tools-130222-patched.orig/libmultipath/config.c
+++ multipath-tools-130222-patched/libmultipath/config.c
@@ -349,6 +349,7 @@ merge_hwe (struct hwentry * dst, struct
merge_num(max_sectors_kb);
merge_num(unpriv_sgio);
merge_num(ghost_delay);
+ merge_num(all_tg_pt);
/*
* Make sure features is consistent with
@@ -414,6 +415,7 @@ overwrite_hwe (struct hwentry * dst, str
overwrite_num(max_sectors_kb);
overwrite_num(unpriv_sgio);
overwrite_num(ghost_delay);
+ overwrite_num(all_tg_pt);
/*
* Make sure features is consistent with
@@ -700,6 +702,7 @@ load_config (char * file, struct udev *u
conf->max_sectors_kb = DEFAULT_MAX_SECTORS_KB;
conf->unpriv_sgio = DEFAULT_UNPRIV_SGIO;
conf->ghost_delay = DEFAULT_GHOST_DELAY;
+ conf->all_tg_pt = DEFAULT_ALL_TG_PT;
/*
* preload default hwtable
Index: multipath-tools-130222-patched/libmultipath/config.h
===================================================================
--- multipath-tools-130222-patched.orig/libmultipath/config.h
+++ multipath-tools-130222-patched/libmultipath/config.h
@@ -71,6 +71,7 @@ struct hwentry {
int max_sectors_kb;
int unpriv_sgio;
int ghost_delay;
+ int all_tg_pt;
char * bl_product;
};
@@ -162,6 +163,7 @@ struct config {
int max_sectors_kb;
int unpriv_sgio;
int ghost_delay;
+ int all_tg_pt;
unsigned int version[3];
char * dev;
Index: multipath-tools-130222-patched/libmultipath/dict.c
===================================================================
--- multipath-tools-130222-patched.orig/libmultipath/dict.c
+++ multipath-tools-130222-patched/libmultipath/dict.c
@@ -1051,6 +1051,29 @@ def_ghost_delay_handler(vector strvec)
return 0;
}
+static int
+def_all_tg_pt_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->all_tg_pt = ALL_TG_PT_OFF;
+ else if ((strlen(buff) == 3 && !strcmp(buff, "yes")) ||
+ (strlen(buff) == 1 && !strcmp(buff, "1")))
+ conf->all_tg_pt = ALL_TG_PT_ON;
+ else
+ conf->all_tg_pt = DEFAULT_ALL_TG_PT;
+
+ FREE(buff);
+ return 0;
+}
+
+
/*
* blacklist block handlers
*/
@@ -1969,6 +1992,33 @@ hw_ghost_delay_handler(vector strvec)
return 0;
}
+static int
+hw_all_tg_pt_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->all_tg_pt = ALL_TG_PT_OFF;
+ else if ((strlen(buff) == 3 && !strcmp(buff, "yes")) ||
+ (strlen(buff) == 1 && !strcmp(buff, "1")))
+ hwe->all_tg_pt = ALL_TG_PT_ON;
+ else
+ hwe->all_tg_pt = ALL_TG_PT_UNDEF;
+
+ FREE(buff);
+ return 0;
+}
+
/*
* multipaths block handlers
*/
@@ -3325,6 +3375,19 @@ snprint_hw_ghost_delay (char * buff, int
}
static int
+snprint_hw_all_tg_pt(char * buff, int len, void * data)
+{
+ struct hwentry * hwe = (struct hwentry *)data;
+
+ if (hwe->all_tg_pt == ALL_TG_PT_ON)
+ return snprintf(buff, len, "yes");
+ else if (hwe->all_tg_pt == ALL_TG_PT_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);
@@ -3829,6 +3892,15 @@ snprint_def_ghost_delay (char * buff, in
}
static int
+snprint_def_all_tg_pt(char * buff, int len, void * data)
+{
+ if (conf->all_tg_pt == ALL_TG_PT_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;
@@ -3926,6 +3998,7 @@ init_keywords(void)
install_keyword("max_sectors_kb", &def_max_sectors_kb_handler, &snprint_def_max_sectors_kb);
install_keyword("unpriv_sgio", &def_unpriv_sgio_handler, &snprint_def_unpriv_sgio);
install_keyword("ghost_delay", &def_ghost_delay_handler, &snprint_def_ghost_delay);
+ install_keyword("all_tg_pt", &def_all_tg_pt_handler, &snprint_def_all_tg_pt);
__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);
@@ -4000,6 +4073,7 @@ init_keywords(void)
install_keyword("max_sectors_kb", &hw_max_sectors_kb_handler, &snprint_hw_max_sectors_kb);
install_keyword("unpriv_sgio", &hw_unpriv_sgio_handler, &snprint_hw_unpriv_sgio);
install_keyword("ghost_delay", &hw_ghost_delay_handler, &snprint_hw_ghost_delay);
+ install_keyword("all_tg_pt", &hw_all_tg_pt_handler, &snprint_hw_all_tg_pt);
install_sublevel_end();
install_keyword_root("overrides", &nop_handler);
@@ -4031,6 +4105,9 @@ init_keywords(void)
install_keyword("delay_wait_checks", &nop_handler, &snprint_nop);
install_keyword("skip_kpartx", &nop_handler, &snprint_nop);
install_keyword("max_sectors_kb", &nop_handler, &snprint_nop);
+ install_keyword("unpriv_sgio", &nop_handler, &snprint_nop);
+ install_keyword("ghost_delay", &nop_handler, &snprint_nop);
+ install_keyword("all_tg_pt", &nop_handler, &snprint_nop);
install_keyword_root("multipaths", &multipaths_handler);
install_keyword_multi("multipath", &multipath_handler, NULL);
Index: multipath-tools-130222-patched/libmultipath/propsel.c
===================================================================
--- multipath-tools-130222-patched.orig/libmultipath/propsel.c
+++ multipath-tools-130222-patched/libmultipath/propsel.c
@@ -992,3 +992,23 @@ select_ghost_delay (struct multipath * m
condlog(3, "ghost_delay = DISABLED (internal default)");
return 0;
}
+
+extern int
+select_all_tg_pt (struct multipath *mp)
+{
+ if (mp->hwe && mp->hwe->all_tg_pt != ALL_TG_PT_UNDEF) {
+ mp->all_tg_pt = mp->hwe->all_tg_pt;
+ condlog(3, "all_tg_pt = %i (controller setting)",
+ mp->all_tg_pt);
+ return 0;
+ }
+ if (conf->all_tg_pt != GHOST_DELAY_UNDEF) {
+ mp->all_tg_pt = conf->all_tg_pt;
+ condlog(3, "all_tg_pt = %i (config file default)",
+ mp->all_tg_pt);
+ return 0;
+ }
+ mp->all_tg_pt = DEFAULT_ALL_TG_PT;
+ condlog(3, "all_tg_pt = %i (internal default)", mp->all_tg_pt);
+ return 0;
+}
Index: multipath-tools-130222-patched/libmultipath/structs.h
===================================================================
--- multipath-tools-130222-patched.orig/libmultipath/structs.h
+++ multipath-tools-130222-patched/libmultipath/structs.h
@@ -154,6 +154,12 @@ enum unpriv_sgio_states {
UNPRIV_SGIO_ON,
};
+enum all_tg_pt_states {
+ ALL_TG_PT_UNDEF,
+ ALL_TG_PT_OFF,
+ ALL_TG_PT_ON,
+};
+
enum scsi_protocol {
SCSI_PROTOCOL_FCP = 0, /* Fibre Channel */
SCSI_PROTOCOL_SPI = 1, /* parallel SCSI */
@@ -324,6 +330,7 @@ struct multipath {
int prkey_source;
struct be64 reservation_key;
unsigned char prflag;
+ int all_tg_pt;
};
struct pathgroup {
Index: multipath-tools-130222-patched/libmultipath/propsel.h
===================================================================
--- multipath-tools-130222-patched.orig/libmultipath/propsel.h
+++ multipath-tools-130222-patched/libmultipath/propsel.h
@@ -28,3 +28,4 @@ int select_skip_kpartx (struct multipath
int select_max_sectors_kb (struct multipath * mp);
int select_unpriv_sgio (struct multipath * mp);
int select_ghost_delay (struct multipath * mp);
+int select_all_tg_pt (struct multipath *mp);
Index: multipath-tools-130222-patched/libmultipath/defaults.h
===================================================================
--- multipath-tools-130222-patched.orig/libmultipath/defaults.h
+++ multipath-tools-130222-patched/libmultipath/defaults.h
@@ -29,6 +29,7 @@
#define DEFAULT_MAX_SECTORS_KB MAX_SECTORS_KB_UNDEF
#define DEFAULT_UNPRIV_SGIO UNPRIV_SGIO_OFF
#define DEFAULT_GHOST_DELAY GHOST_DELAY_OFF
+#define DEFAULT_ALL_TG_PT ALL_TG_PT_OFF
#define DEFAULT_CHECKINT 5
#define MAX_CHECKINT(a) (a << 2)
Index: multipath-tools-130222-patched/multipath/multipath.conf.5
===================================================================
--- multipath-tools-130222-patched.orig/multipath/multipath.conf.5
+++ multipath-tools-130222-patched/multipath/multipath.conf.5
@@ -449,6 +449,13 @@ registration is removed, the RESERVATION
It is unset by default.
.RE
.TP
+.B all_tg_pt
+This must be set to \fIyes\fR to successfully use mpathpersist on arrays that
+automatically set and clear registration keys on all target ports from a
+host, instead of per target port per host.
+Default is
+.I no
+.TP
.B retain_attached_hw_handler
If set to
.I yes

504
SOURCES/0243-RHBZ-1498724-save-persist-options.patch

@ -0,0 +1,504 @@ @@ -0,0 +1,504 @@
---
libmpathpersist/mpath_persist.c | 3 ++-
libmpathpersist/mpath_updatepr.c | 10 ++++++++--
libmpathpersist/mpathpr.h | 3 ++-
libmultipath/Makefile | 2 +-
libmultipath/config.h | 2 ++
libmultipath/dict.c | 24 ++++++++++++++++++------
libmultipath/prkey.c | 25 ++++++++++++++++++++++---
libmultipath/prkey.h | 4 ++--
libmultipath/propsel.c | 13 ++++++++++---
libmultipath/structs.h | 1 +
libmultipath/util.c | 16 ++++++++++++++++
libmultipath/util.h | 1 +
multipath/multipath.conf.5 | 8 ++++++--
multipathd/cli_handlers.c | 15 ++++++++++-----
multipathd/main.c | 1 +
15 files changed, 102 insertions(+), 26 deletions(-)

Index: multipath-tools-130222/libmultipath/config.h
===================================================================
--- multipath-tools-130222.orig/libmultipath/config.h
+++ multipath-tools-130222/libmultipath/config.h
@@ -86,6 +86,7 @@ struct mpentry {
char * prio_args;
int prkey_source;
struct be64 reservation_key;
+ uint8_t sa_flags;
int pgpolicy;
int pgfailback;
int rr_weight;
@@ -183,6 +184,7 @@ struct config {
char * config_dir;
int prkey_source;
struct be64 reservation_key;
+ uint8_t sa_flags;
vector keywords;
vector mptable;
Index: multipath-tools-130222/libmultipath/structs.h
===================================================================
--- multipath-tools-130222.orig/libmultipath/structs.h
+++ multipath-tools-130222/libmultipath/structs.h
@@ -331,6 +331,7 @@ struct multipath {
struct be64 reservation_key;
unsigned char prflag;
int all_tg_pt;
+ uint8_t sa_flags;
};
struct pathgroup {
Index: multipath-tools-130222/libmultipath/util.c
===================================================================
--- multipath-tools-130222.orig/libmultipath/util.c
+++ multipath-tools-130222/libmultipath/util.c
@@ -6,6 +6,8 @@
#include <sys/vfs.h>
#include <linux/magic.h>
#include <errno.h>
+#include <libudev.h>
+#include <mpath_persist.h>
#include "debug.h"
#include "memory.h"
@@ -317,6 +319,20 @@ int parse_prkey(char *ptr, uint64_t *prk
return 0;
}
+int parse_prkey_flags(char *ptr, uint64_t *prkey, uint8_t *flags)
+{
+ char *flagstr;
+
+ flagstr = strchr(ptr, ':');
+ *flags = 0;
+ if (flagstr) {
+ *flagstr++ = '\0';
+ if (strlen(flagstr) == 5 && strcmp(flagstr, "aptpl") == 0)
+ *flags = MPATH_F_APTPL_MASK;
+ }
+ return parse_prkey(ptr, prkey);
+}
+
int safe_write(int fd, const void *buf, size_t count)
{
while (count > 0) {
Index: multipath-tools-130222/libmultipath/util.h
===================================================================
--- multipath-tools-130222.orig/libmultipath/util.h
+++ multipath-tools-130222/libmultipath/util.h
@@ -15,6 +15,7 @@ dev_t parse_devt(const char *dev_t);
char *convert_dev(char *dev, int is_path_device);
int in_initrd(void);
int parse_prkey(char *ptr, uint64_t *prkey);
+int parse_prkey_flags(char *ptr, uint64_t *prkey, uint8_t *flags);
int safe_write(int fd, const void *buf, size_t count);
#define safe_sprintf(var, format, args...) \
Index: multipath-tools-130222/libmultipath/Makefile
===================================================================
--- multipath-tools-130222.orig/libmultipath/Makefile
+++ multipath-tools-130222/libmultipath/Makefile
@@ -8,7 +8,7 @@ SONAME=0
DEVLIB = libmultipath.so
LIBS = $(DEVLIB).$(SONAME)
LIBDEPS = -lpthread -ldl -ldevmapper -ludev -L$(mpathcmddir) -lmpathcmd
-CFLAGS += -fPIC -I$(mpathcmddir)
+CFLAGS += -fPIC -I$(mpathcmddir) -I$(mpathpersistdir)
OBJS = memory.o parser.o vector.o devmapper.o \
hwtable.o blacklist.o util.o dmparser.o config.o \
Index: multipath-tools-130222/libmultipath/dict.c
===================================================================
--- multipath-tools-130222.orig/libmultipath/dict.c
+++ multipath-tools-130222/libmultipath/dict.c
@@ -23,6 +23,8 @@
#include "util.h"
#include "prkey.h"
#include <inttypes.h>
+#include <libudev.h>
+#include <mpath_persist.h>
/*
* default block handlers
@@ -557,6 +559,7 @@ def_reservation_key_handler(vector strve
{
char *buff;
uint64_t prkey = 0;
+ uint8_t flags;
buff = set_value(strvec);
if (!buff)
@@ -568,12 +571,13 @@ def_reservation_key_handler(vector strve
FREE(buff);
return 0;
}
- else if (parse_prkey(buff, &prkey) != 0) {
+ else if (parse_prkey_flags(buff, &prkey, &flags) != 0) {
FREE(buff);
return 1;
}
conf->prkey_source = PRKEY_SOURCE_CONF;
+ conf->sa_flags = flags;
put_be64(conf->reservation_key, prkey);
FREE(buff);
return 0;
@@ -2403,6 +2407,7 @@ mp_reservation_key_handler (vector strve
char *buff;
struct mpentry *mpe = VECTOR_LAST_SLOT(conf->mptable);
uint64_t prkey;
+ uint8_t flags;
if (!mpe)
return 1;
@@ -2417,12 +2422,13 @@ mp_reservation_key_handler (vector strve
FREE(buff);
return 0;
}
- else if (parse_prkey(buff, &prkey) != 0) {
+ else if (parse_prkey_flags(buff, &prkey, &flags) != 0) {
FREE(buff);
return 1;
}
mpe->prkey_source = PRKEY_SOURCE_CONF;
+ mpe->sa_flags = flags;
put_be64(mpe->reservation_key, prkey);
FREE(buff);
return 0;
@@ -2838,14 +2844,17 @@ snprint_mp_prio_args(char * buff, int le
static int
snprint_mp_reservation_key (char * buff, int len, void * data)
{
+ char *flagstr = "";
struct mpentry * mpe = (struct mpentry *)data;
if (mpe->prkey_source == PRKEY_SOURCE_NONE)
return 0;
if (mpe->prkey_source == PRKEY_SOURCE_FILE)
return snprintf(buff, len, "file");
- return snprintf(buff, len, "0x%" PRIx64,
- get_be64(mpe->reservation_key));
+ if (mpe->sa_flags == MPATH_F_APTPL_MASK)
+ flagstr = ":aptpl";
+ return snprintf(buff, len, "0x%" PRIx64 "%s",
+ get_be64(mpe->reservation_key), flagstr);
}
static int
@@ -3716,12 +3725,15 @@ snprint_def_prkeys_file (char * buff, in
static int
snprint_def_reservation_key(char * buff, int len, void * data)
{
+ char *flagstr = "";
if (conf->prkey_source == PRKEY_SOURCE_NONE)
return 0;
if (conf->prkey_source == PRKEY_SOURCE_FILE)
return snprintf(buff, len, "file");
- return snprintf(buff, len, "0x%" PRIx64,
- get_be64(conf->reservation_key));
+ if (conf->sa_flags == MPATH_F_APTPL_MASK)
+ flagstr = ":aptpl";
+ return snprintf(buff, len, "0x%" PRIx64 "%s",
+ get_be64(conf->reservation_key), flagstr);
}
static int
Index: multipath-tools-130222/libmpathpersist/mpath_persist.c
===================================================================
--- multipath-tools-130222.orig/libmpathpersist/mpath_persist.c
+++ multipath-tools-130222/libmpathpersist/mpath_persist.c
@@ -295,7 +295,8 @@ int mpath_persistent_reserve_out ( int f
rq_servact == MPATH_PROUT_REG_SA) ||
rq_servact == MPATH_PROUT_REG_IGN_SA)) {
memcpy(&mpp->reservation_key, paramp->sa_key, 8);
- if (update_prkey(alias, get_be64(mpp->reservation_key))) {
+ if (update_prkey_flags(alias, get_be64(mpp->reservation_key),
+ paramp->sa_flags)) {
condlog(0, "%s: failed to set prkey for multipathd.",
alias);
ret = MPATH_PR_DMMP_ERROR;
Index: multipath-tools-130222/libmpathpersist/mpath_updatepr.c
===================================================================
--- multipath-tools-130222.orig/libmpathpersist/mpath_updatepr.c
+++ multipath-tools-130222/libmpathpersist/mpath_updatepr.c
@@ -15,6 +15,8 @@
#include <mpath_cmd.h>
#include <uxsock.h>
#include "memory.h"
+#include <libudev.h>
+#include <mpath_persist.h>
unsigned long mem_allocated; /* Total memory used in Bytes */
@@ -54,11 +56,15 @@ int update_prflag(char *mapname, int set
return do_update_pr(mapname, (set)? "setprstatus" : "unsetprstatus");
}
-int update_prkey(char *mapname, uint64_t prkey) {
+int update_prkey_flags(char *mapname, uint64_t prkey, uint8_t sa_flags) {
char str[256];
+ char *flagstr = "";
+ if (sa_flags & MPATH_F_APTPL_MASK)
+ flagstr = ":aptpl";
if (prkey)
- snprintf(str, sizeof(str), "setprkey key %" PRIx64, prkey);
+ snprintf(str, sizeof(str), "setprkey key %" PRIx64 "%s", prkey,
+ flagstr);
else
snprintf(str, sizeof(str), "unsetprkey");
return do_update_pr(mapname, str);
Index: multipath-tools-130222/libmpathpersist/mpathpr.h
===================================================================
--- multipath-tools-130222.orig/libmpathpersist/mpathpr.h
+++ multipath-tools-130222/libmpathpersist/mpathpr.h
@@ -50,7 +50,8 @@ int send_prout_activepath(char * dev, in
unsigned int rq_type, struct prout_param_descriptor * paramp, int noisy);
int update_prflag(char *mapname, int set);
-int update_prkey(char *mapname, uint64_t prkey);
+int update_prkey_flags(char *mapname, uint64_t prkey, uint8_t sa_flags);
+#define update_prkey(mapname, prkey) update_prkey_flags(mapname, prkey, 0)
void * mpath_alloc_prin_response(int prin_sa);
int update_map_pr(struct multipath *mpp);
int devt2devname (char *devname, char *devt);
Index: multipath-tools-130222/libmultipath/prkey.c
===================================================================
--- multipath-tools-130222.orig/libmultipath/prkey.c
+++ multipath-tools-130222/libmultipath/prkey.c
@@ -11,6 +11,8 @@
#include <string.h>
#include <inttypes.h>
#include <errno.h>
+#include <libudev.h>
+#include <mpath_persist.h>
#define KEYSIZE 19
#define PRKEY_READ 0
@@ -109,7 +111,7 @@ static int do_prkey(int fd, char *wwid,
return 0;
}
-int get_prkey(struct multipath *mpp, uint64_t *prkey)
+int get_prkey(struct multipath *mpp, uint64_t *prkey, uint8_t *sa_flags)
{
int fd;
int unused;
@@ -125,6 +127,9 @@ int get_prkey(struct multipath *mpp, uin
ret = do_prkey(fd, mpp->wwid, keystr, PRKEY_READ);
if (ret)
goto out_file;
+ *sa_flags = 0;
+ if (strchr(keystr, 'X'))
+ *sa_flags = MPATH_F_APTPL_MASK;
ret = !!parse_prkey(keystr, prkey);
out_file:
close(fd);
@@ -132,7 +137,7 @@ out:
return ret;
}
-int set_prkey(struct multipath *mpp, uint64_t prkey)
+int set_prkey(struct multipath *mpp, uint64_t prkey, uint8_t sa_flags)
{
int fd;
int can_write = 1;
@@ -142,6 +147,12 @@ int set_prkey(struct multipath *mpp, uin
if (!strlen(mpp->wwid))
goto out;
+ if (sa_flags & ~MPATH_F_APTPL_MASK) {
+ condlog(0, "unsupported pr flags, 0x%x",
+ sa_flags & ~MPATH_F_APTPL_MASK);
+ sa_flags &= MPATH_F_APTPL_MASK;
+ }
+
fd = open_file(conf->prkeys_file, &can_write, PRKEYS_FILE_HEADER);
if (fd < 0)
goto out;
@@ -150,7 +161,15 @@ int set_prkey(struct multipath *mpp, uin
goto out_file;
}
if (prkey) {
- snprintf(keystr, KEYSIZE, "0x%016" PRIx64, prkey);
+ /* using the capitalization of the 'x' is a hack, but
+ * it's unlikely that mpath_persist will support more options
+ * since sg_persist doesn't, and this lets us keep the
+ * same file format as before instead of needing to change
+ * the format of the prkeys file */
+ if (sa_flags)
+ snprintf(keystr, KEYSIZE, "0X%016" PRIx64, prkey);
+ else
+ snprintf(keystr, KEYSIZE, "0x%016" PRIx64, prkey);
keystr[KEYSIZE - 1] = '\0';
ret = do_prkey(fd, mpp->wwid, keystr, PRKEY_WRITE);
}
Index: multipath-tools-130222/libmultipath/prkey.h
===================================================================
--- multipath-tools-130222.orig/libmultipath/prkey.h
+++ multipath-tools-130222/libmultipath/prkey.h
@@ -13,7 +13,7 @@
"# prkey wwid\n" \
"#\n"
-int set_prkey(struct multipath *mpp, uint64_t prkey);
-int get_prkey(struct multipath *mpp, uint64_t *prkey);
+int set_prkey(struct multipath *mpp, uint64_t prkey, uint8_t sa_flags);
+int get_prkey(struct multipath *mpp, uint64_t *prkey, uint8_t *sa_flags);
#endif /* _PRKEY_H */
Index: multipath-tools-130222/libmultipath/propsel.c
===================================================================
--- multipath-tools-130222.orig/libmultipath/propsel.c
+++ multipath-tools-130222/libmultipath/propsel.c
@@ -20,6 +20,8 @@
#include "prioritizers/alua_rtpg.h"
#include "prkey.h"
#include <inttypes.h>
+#include <libudev.h>
+#include <mpath_persist.h>
pgpolicyfn *pgpolicies[] = {
NULL,
@@ -715,10 +717,12 @@ select_reservation_key (struct multipath
uint64_t prkey;
char *origin = NULL;
char *from_file = "";
+ char *flagstr = "";
if (mp->mpe && mp->mpe->prkey_source != PRKEY_SOURCE_NONE) {
mp->prkey_source = mp->mpe->prkey_source;
mp->reservation_key = mp->mpe->reservation_key;
+ mp->sa_flags = mp->mpe->sa_flags;
origin = "multipath setting";
goto out;
}
@@ -726,6 +730,7 @@ select_reservation_key (struct multipath
if (conf->prkey_source != PRKEY_SOURCE_NONE) {
mp->prkey_source = conf->prkey_source;
mp->reservation_key = conf->reservation_key;
+ mp->sa_flags = conf->sa_flags;
origin = "config file default";
goto out;
}
@@ -736,14 +741,16 @@ select_reservation_key (struct multipath
out:
if (mp->prkey_source == PRKEY_SOURCE_FILE) {
from_file = " (from prkeys file)";
- if (get_prkey(mp, &prkey) != 0)
+ if (get_prkey(mp, &prkey, &mp->sa_flags) != 0)
put_be64(mp->reservation_key, 0);
else
put_be64(mp->reservation_key, prkey);
}
+ if (mp->sa_flags & MPATH_F_APTPL_MASK)
+ flagstr = ":aptpl";
if (get_be64(mp->reservation_key))
- condlog(0, "%s: reservation_key = 0x%" PRIx64 " (%s)%s",
- mp->alias, get_be64(mp->reservation_key), origin,
+ condlog(0, "%s: reservation_key = 0x%" PRIx64 "%s (%s)%s",
+ mp->alias, get_be64(mp->reservation_key), flagstr, origin,
from_file);
return 0;
}
Index: multipath-tools-130222/multipathd/cli_handlers.c
===================================================================
--- multipath-tools-130222.orig/multipathd/cli_handlers.c
+++ multipath-tools-130222/multipathd/cli_handlers.c
@@ -17,6 +17,7 @@
#include <sysfs.h>
#include <errno.h>
#include <libudev.h>
+#include <mpath_persist.h>
#include <util.h>
#include <prkey.h>
@@ -1242,6 +1243,7 @@ cli_getprkey(void * v, char ** reply, in
struct multipath * mpp;
struct vectors * vecs = (struct vectors *)data;
char *mapname = get_keyparam(v, MAP);
+ char *flagstr = "";
mapname = convert_dev(mapname, 0);
condlog(3, "%s: get persistent reservation key (operator)", mapname);
@@ -1257,8 +1259,10 @@ cli_getprkey(void * v, char ** reply, in
*len = strlen(*reply) + 1;
return 0;
}
- snprintf(*reply, 20, "0x%" PRIx64 "\n",
- get_be64(mpp->reservation_key));
+ if (mpp->sa_flags & MPATH_F_APTPL_MASK)
+ flagstr = ":aptpl";
+ snprintf(*reply, 20, "0x%" PRIx64 "%s\n",
+ get_be64(mpp->reservation_key), flagstr);
(*reply)[19] = '\0';
*len = strlen(*reply) + 1;
return 0;
@@ -1278,7 +1282,7 @@ cli_unsetprkey(void * v, char ** reply,
if (!mpp)
return 1;
- return set_prkey(mpp, 0);
+ return set_prkey(mpp, 0, 0);
}
int cli_setprkey(void * v, char ** reply, int * len, void * data)
@@ -1288,6 +1292,7 @@ int cli_setprkey(void * v, char ** reply
char *mapname = get_keyparam(v, MAP);
char *keyparam = get_keyparam(v, KEY);
uint64_t prkey;
+ uint8_t flags;
mapname = convert_dev(mapname, 0);
condlog(3, "%s: set persistent reservation key (operator)", mapname);
@@ -1296,10 +1301,10 @@ int cli_setprkey(void * v, char ** reply
if (!mpp)
return 1;
- if (parse_prkey(keyparam, &prkey) != 0) {
+ if (parse_prkey_flags(keyparam, &prkey, &flags) != 0) {
condlog(0, "%s: invalid prkey : '%s'", mapname, keyparam);
return 1;
}
- return set_prkey(mpp, prkey);
+ return set_prkey(mpp, prkey, flags);
}
Index: multipath-tools-130222/multipathd/main.c
===================================================================
--- multipath-tools-130222.orig/multipathd/main.c
+++ multipath-tools-130222/multipathd/main.c
@@ -2324,6 +2324,7 @@ void * mpath_pr_event_handler_fn (void
param= malloc(sizeof(struct prout_param_descriptor));
memset(param, 0 , sizeof(struct prout_param_descriptor));
+ param->sa_flags = mpp->sa_flags;
memcpy(param->sa_key, &mpp->reservation_key, 8);
param->num_transportid = 0;
Index: multipath-tools-130222/multipath/multipath.conf.5
===================================================================
--- multipath-tools-130222.orig/multipath/multipath.conf.5
+++ multipath-tools-130222/multipath/multipath.conf.5
@@ -438,14 +438,18 @@ This is the service action reservation k
set for all multipath devices using persistent reservations, and it must be
the same as the RESERVATION KEY field of the PERSISTENT RESERVE OUT parameter
list which contains an 8-byte value provided by the application client to the
-device server to identify the I_T nexus.
+device server to identify the I_T nexus. If the \fI--param-aptpl\fR option is
+used when registering the key with mpathpersist, \fB:aptpl\fR must be appended
+to the end of the reservation key.
+
.RS
.PP
Alternatively, this can be set to \fBfile\fR, which will store the RESERVATION
KEY registered by mpathpersist in the \fIprkeys_file\fR. multipathd will then
use this key to register additional paths as they appear. When the
registration is removed, the RESERVATION KEY is removed from the
-\fIprkeys_file\fR.
+\fIprkeys_file\fR. The prkeys file will automatically keep track of whether
+the key was registered with \fI--param-aptpl\fR.
It is unset by default.
.RE
.TP

1159
SOURCES/0244-RHBZ-1562247-remove-rbd.patch

File diff suppressed because it is too large Load Diff

17
SOURCES/0245-RHBZ-1584228-fix-readsector0_size.patch

@ -0,0 +1,17 @@ @@ -0,0 +1,17 @@
---
libmultipath/checkers/readsector0.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

Index: multipath-tools-130222/libmultipath/checkers/readsector0.c
===================================================================
--- multipath-tools-130222.orig/libmultipath/checkers/readsector0.c
+++ multipath-tools-130222/libmultipath/checkers/readsector0.c
@@ -29,7 +29,7 @@ int libcheck_check (struct checker * c)
unsigned char sbuf[SENSE_BUFF_LEN];
int ret;
- ret = sg_read(c->fd, &buf[0], 4069, &sbuf[0],
+ ret = sg_read(c->fd, &buf[0], 4096, &sbuf[0],
SENSE_BUFF_LEN, c->timeout);
switch (ret)

519
SOURCES/0246-RHBZ-1593459-add-transport-blacklist.patch

@ -0,0 +1,519 @@ @@ -0,0 +1,519 @@
---
libmultipath/blacklist.c | 50 ++++++++++++++++++++++++++----
libmultipath/blacklist.h | 3 +
libmultipath/config.c | 16 +++++++++
libmultipath/config.h | 2 +
libmultipath/dict.c | 38 +++++++++++++++++++++--
libmultipath/discovery.c | 5 +--
libmultipath/print.c | 74 +++++++++++++++++++++++++++++++++++++++++++++
libmultipath/print.h | 2 +
libmultipath/structs.h | 1
multipath/multipath.conf.5 | 15 +++++++++
10 files changed, 194 insertions(+), 12 deletions(-)

Index: multipath-tools-130222/libmultipath/blacklist.c
===================================================================
--- multipath-tools-130222.orig/libmultipath/blacklist.c
+++ multipath-tools-130222/libmultipath/blacklist.c
@@ -12,6 +12,8 @@
#include "structs.h"
#include "config.h"
#include "blacklist.h"
+#include "structs_vec.h"
+#include "print.h"
extern int
store_ble (vector blist, char * str, int origin)
@@ -211,12 +213,14 @@ setup_default_blist (struct config * con
condlog(3, "%s: (%s) %s", dev, wwid, (M)); \
else if (env) \
condlog(3, "%s: (%s) %s", dev, env, (M)); \
+ else if (protocol) \
+ condlog(3, "%s: (%s) %s", dev, protocol, (M)); \
else \
condlog(3, "%s: %s", dev, (M))
void
log_filter (const char *dev, char *vendor, char *product, char *wwid,
- const char *env, int r)
+ const char *env, char *protocol, int r)
{
/*
* Try to sort from most likely to least.
@@ -236,6 +240,9 @@ log_filter (const char *dev, char *vendo
case MATCH_PROPERTY_BLIST:
LOG_BLIST("udev property blacklisted");
break;
+ case MATCH_PROTOCOL_BLIST:
+ LOG_BLIST("protocol blacklisted");
+ break;
case MATCH_DEVICE_BLIST_EXCEPT:
LOG_BLIST("vendor/product whitelisted");
break;
@@ -251,6 +258,9 @@ log_filter (const char *dev, char *vendo
case MATCH_PROPERTY_BLIST_MISSING:
LOG_BLIST("blacklisted, udev property missing");
break;
+ case MATCH_PROTOCOL_BLIST_EXCEPT:
+ LOG_BLIST("protocol whitelisted");
+ break;
}
}
@@ -270,7 +280,7 @@ int
filter_device (vector blist, vector elist, char * vendor, char * product)
{
int r = _filter_device(blist, elist, vendor, product);
- log_filter(NULL, vendor, product, NULL, NULL, r);
+ log_filter(NULL, vendor, product, NULL, NULL, NULL, r);
return r;
}
@@ -290,7 +300,7 @@ int
filter_devnode (vector blist, vector elist, char * dev)
{
int r = _filter_devnode(blist, elist, dev);
- log_filter(dev, NULL, NULL, NULL, NULL, r);
+ log_filter(dev, NULL, NULL, NULL, NULL, NULL, r);
return r;
}
@@ -310,7 +320,7 @@ int
filter_wwid (vector blist, vector elist, char * wwid)
{
int r = _filter_wwid(blist, elist, wwid);
- log_filter(NULL, NULL, NULL, wwid, NULL, r);
+ log_filter(NULL, NULL, NULL, wwid, NULL, NULL, r);
return r;
}
@@ -346,7 +356,7 @@ filter_property(struct config * conf, st
r = _filter_property(conf, env);
if (r) {
- log_filter(devname, NULL, NULL, NULL, env, r);
+ log_filter(devname, NULL, NULL, NULL, env, NULL, r);
return r;
}
}
@@ -356,13 +366,35 @@ filter_property(struct config * conf, st
* the environment variable _has_ to match.
*/
if (VECTOR_SIZE(conf->elist_property)) {
- log_filter(devname, NULL, NULL, NULL, NULL,
+ log_filter(devname, NULL, NULL, NULL, NULL, NULL,
MATCH_PROPERTY_BLIST_MISSING);
return MATCH_PROPERTY_BLIST_MISSING;
}
return 0;
}
+static int
+_filter_protocol(vector blist, vector elist, char *protocol_str)
+{
+ if (_blacklist_exceptions(elist, protocol_str))
+ return MATCH_PROTOCOL_BLIST_EXCEPT;
+ if (_blacklist(blist, protocol_str))
+ return MATCH_PROTOCOL_BLIST;
+ return 0;
+}
+
+int
+filter_protocol(vector blist, vector elist, struct path * pp)
+{
+ char buf[PROTOCOL_BUF_SIZE];
+ int r;
+
+ snprint_path_protocol(buf, sizeof(buf), pp);
+ r = _filter_protocol(blist, elist, buf);
+ log_filter(pp->dev, NULL, NULL, NULL, NULL, buf, r);
+ return r;
+}
+
int
_filter_path (struct config * conf, struct path * pp)
{
@@ -371,6 +403,9 @@ _filter_path (struct config * conf, stru
r = filter_property(conf, pp->udev);
if (r > 0)
return r;
+ r = filter_protocol(conf->blist_protocol, conf->elist_protocol, pp);
+ if (r > 0)
+ return r;
r = _filter_devnode(conf->blist_devnode, conf->elist_devnode,pp->dev);
if (r > 0)
return r;
@@ -386,7 +421,8 @@ int
filter_path (struct config * conf, struct path * pp)
{
int r=_filter_path(conf, pp);
- log_filter(pp->dev, pp->vendor_id, pp->product_id, pp->wwid, NULL, r);
+ log_filter(pp->dev, pp->vendor_id, pp->product_id, pp->wwid, NULL,
+ NULL, r);
return r;
}
Index: multipath-tools-130222/libmultipath/blacklist.h
===================================================================
--- multipath-tools-130222.orig/libmultipath/blacklist.h
+++ multipath-tools-130222/libmultipath/blacklist.h
@@ -10,10 +10,12 @@
#define MATCH_DEVNODE_BLIST 3
#define MATCH_PROPERTY_BLIST 4
#define MATCH_PROPERTY_BLIST_MISSING 5
+#define MATCH_PROTOCOL_BLIST 6
#define MATCH_WWID_BLIST_EXCEPT -MATCH_WWID_BLIST
#define MATCH_DEVICE_BLIST_EXCEPT -MATCH_DEVICE_BLIST
#define MATCH_DEVNODE_BLIST_EXCEPT -MATCH_DEVNODE_BLIST
#define MATCH_PROPERTY_BLIST_EXCEPT -MATCH_PROPERTY_BLIST
+#define MATCH_PROTOCOL_BLIST_EXCEPT -MATCH_PROTOCOL_BLIST
struct blentry {
char * str;
@@ -36,6 +38,7 @@ int filter_wwid (vector, vector, char *)
int filter_device (vector, vector, char *, char *);
int filter_path (struct config *, struct path *);
int filter_property(struct config *, struct udev_device *);
+int filter_protocol(vector, vector, struct path *);
int store_ble (vector, char *, int);
int set_ble_device (vector, char *, char *, int);
void free_blacklist (vector);
Index: multipath-tools-130222/libmultipath/config.c
===================================================================
--- multipath-tools-130222.orig/libmultipath/config.c
+++ multipath-tools-130222/libmultipath/config.c
@@ -600,11 +600,13 @@ free_config (struct config * conf)
free_blacklist(conf->blist_devnode);
free_blacklist(conf->blist_wwid);
free_blacklist(conf->blist_property);
+ free_blacklist(conf->blist_protocol);
free_blacklist_device(conf->blist_device);
free_blacklist(conf->elist_devnode);
free_blacklist(conf->elist_wwid);
free_blacklist(conf->elist_property);
+ free_blacklist(conf->elist_protocol);
free_blacklist_device(conf->elist_device);
free_mptable(conf->mptable);
@@ -792,6 +794,13 @@ load_config (char * file, struct udev *u
goto out;
}
+ if (conf->blist_protocol == NULL) {
+ conf->blist_protocol = vector_alloc();
+
+ if (!conf->blist_protocol)
+ goto out;
+ }
+
if (conf->elist_devnode == NULL) {
conf->elist_devnode = vector_alloc();
@@ -819,6 +828,13 @@ load_config (char * file, struct udev *u
goto out;
}
+ if (conf->elist_protocol == NULL) {
+ conf->elist_protocol = vector_alloc();
+
+ if (!conf->elist_protocol)
+ goto out;
+ }
+
if (setup_default_blist(conf))
goto out;
Index: multipath-tools-130222/libmultipath/config.h
===================================================================
--- multipath-tools-130222.orig/libmultipath/config.h
+++ multipath-tools-130222/libmultipath/config.h
@@ -194,10 +194,12 @@ struct config {
vector blist_wwid;
vector blist_device;
vector blist_property;
+ vector blist_protocol;
vector elist_devnode;
vector elist_wwid;
vector elist_device;
vector elist_property;
+ vector elist_protocol;
};
struct config * conf;
Index: multipath-tools-130222/libmultipath/dict.c
===================================================================
--- multipath-tools-130222.orig/libmultipath/dict.c
+++ multipath-tools-130222/libmultipath/dict.c
@@ -1092,9 +1092,12 @@ blacklist_handler(vector strvec)
conf->blist_device = vector_alloc();
if (!conf->blist_property)
conf->blist_property = vector_alloc();
+ if (!conf->blist_protocol)
+ conf->blist_protocol = vector_alloc();
if (!conf->blist_devnode || !conf->blist_wwid ||
- !conf->blist_device || !conf->blist_property)
+ !conf->blist_device || !conf->blist_property ||
+ !conf->blist_protocol)
return 1;
return 0;
@@ -1111,9 +1114,12 @@ blacklist_exceptions_handler(vector strv
conf->elist_device = vector_alloc();
if (!conf->elist_property)
conf->elist_property = vector_alloc();
+ if (!conf->elist_protocol)
+ conf->elist_protocol = vector_alloc();
if (!conf->elist_devnode || !conf->elist_wwid ||
- !conf->elist_device || !conf->elist_property)
+ !conf->elist_device || !conf->elist_property ||
+ !conf->elist_protocol)
return 1;
return 0;
@@ -1198,6 +1204,32 @@ ble_except_property_handler(vector strve
}
static int
+ble_protocol_handler(vector strvec)
+{
+ char * buff;
+
+ buff = set_value(strvec);
+
+ if (!buff)
+ return 1;
+
+ return store_ble(conf->blist_protocol, buff, ORIGIN_CONFIG);
+}
+
+static int
+ble_except_protocol_handler(vector strvec)
+{
+ char * buff;
+
+ buff = set_value(strvec);
+
+ if (!buff)
+ return 1;
+
+ return store_ble(conf->elist_protocol, buff, ORIGIN_CONFIG);
+}
+
+static int
ble_device_handler(vector strvec)
{
return alloc_ble_device(conf->blist_device);
@@ -4021,6 +4053,7 @@ init_keywords(void)
install_keyword_multi("devnode", &ble_devnode_handler, &snprint_ble_simple);
install_keyword_multi("wwid", &ble_wwid_handler, &snprint_ble_simple);
install_keyword_multi("property", &ble_property_handler, &snprint_ble_simple);
+ install_keyword_multi("protocol", &ble_protocol_handler, &snprint_ble_simple);
install_keyword_multi("device", &ble_device_handler, NULL);
install_sublevel();
install_keyword("vendor", &ble_vendor_handler, &snprint_bled_vendor);
@@ -4030,6 +4063,7 @@ init_keywords(void)
install_keyword_multi("devnode", &ble_except_devnode_handler, &snprint_ble_simple);
install_keyword_multi("wwid", &ble_except_wwid_handler, &snprint_ble_simple);
install_keyword_multi("property", &ble_except_property_handler, &snprint_ble_simple);
+ install_keyword_multi("protocol", &ble_except_protocol_handler, &snprint_ble_simple);
install_keyword_multi("device", &ble_except_device_handler, NULL);
install_sublevel();
install_keyword("vendor", &ble_except_vendor_handler, &snprint_bled_vendor);
Index: multipath-tools-130222/libmultipath/print.c
===================================================================
--- multipath-tools-130222.orig/libmultipath/print.c
+++ multipath-tools-130222/libmultipath/print.c
@@ -607,6 +607,48 @@ snprint_path_failures(char * buff, size_
return snprint_int(buff, len, pp->failcount);
}
+/* if you add a protocol string bigger than "scsi:unspec" you must
+ * also change PROTOCOL_BUF_SIZE */
+int
+snprint_path_protocol(char * buff, size_t len, struct path * pp)
+{
+ switch (pp->bus) {
+ case SYSFS_BUS_SCSI:
+ switch (pp->sg_id.proto_id) {
+ case SCSI_PROTOCOL_FCP:
+ return snprintf(buff, len, "scsi:fcp");
+ case SCSI_PROTOCOL_SPI:
+ return snprintf(buff, len, "scsi:spi");
+ case SCSI_PROTOCOL_SSA:
+ return snprintf(buff, len, "scsi:ssa");
+ case SCSI_PROTOCOL_SBP:
+ return snprintf(buff, len, "scsi:sbp");
+ case SCSI_PROTOCOL_SRP:
+ return snprintf(buff, len, "scsi:srp");
+ case SCSI_PROTOCOL_ISCSI:
+ return snprintf(buff, len, "scsi:iscsi");
+ case SCSI_PROTOCOL_SAS:
+ return snprintf(buff, len, "scsi:sas");
+ case SCSI_PROTOCOL_ADT:
+ return snprintf(buff, len, "scsi:adt");
+ case SCSI_PROTOCOL_ATA:
+ return snprintf(buff, len, "scsi:ata");
+ case SCSI_PROTOCOL_UNSPEC:
+ default:
+ return snprintf(buff, len, "scsi:unspec");
+ }
+ case SYSFS_BUS_CCW:
+ return snprintf(buff, len, "ccw");
+ case SYSFS_BUS_CCISS:
+ return snprintf(buff, len, "cciss");
+ case SYSFS_BUS_NVME:
+ return snprintf(buff, len, "nvme");
+ case SYSFS_BUS_UNDEF:
+ default:
+ return snprintf(buff, len, "undef");
+ }
+}
+
struct multipath_data mpd[] = {
{'n', "name", 0, snprint_name},
{'w', "uuid", 0, snprint_multipath_uuid},
@@ -654,6 +696,7 @@ struct path_data pd[] = {
{'r', "target WWPN", 0, snprint_tgt_wwpn},
{'a', "host adapter", 0, snprint_host_adapter},
{'0', "failures", 0, snprint_path_failures},
+ {'P', "protocol", 0, snprint_path_protocol},
{0, NULL, 0 , NULL}
};
@@ -1435,6 +1478,19 @@ snprint_blacklist_report (char * buff, i
if ((len - fwd - threshold) <= 0)
return len;
+ fwd += snprintf(buff + fwd, len - fwd, "protocol rules:\n"
+ "- blacklist:\n");
+ if (!snprint_blacklist_group(buff, len, &fwd, &conf->blist_protocol))
+ return len;
+
+ if ((len - fwd - threshold) <= 0)
+ return len;
+ fwd += snprintf(buff + fwd, len - fwd, "- exceptions:\n");
+ if (snprint_blacklist_group(buff, len, &fwd, &conf->elist_protocol) == 0)
+ return len;
+
+ if ((len - fwd - threshold) <= 0)
+ return len;
fwd += snprintf(buff + fwd, len - fwd, "wwid rules:\n"
"- blacklist:\n");
if (snprint_blacklist_group(buff, len, &fwd, &conf->blist_wwid) == 0)
@@ -1509,6 +1565,15 @@ snprint_blacklist (char * buff, int len)
if (fwd > len)
return len;
}
+ vector_foreach_slot (conf->blist_protocol, ble, i) {
+ kw = find_keyword(rootkw->sub, "protocol");
+ if (!kw)
+ return 0;
+ fwd += snprint_keyword(buff + fwd, len - fwd, "\t%k %v\n",
+ kw, ble);
+ if (fwd > len)
+ return len;
+ }
rootkw = find_keyword(rootkw->sub, "device");
if (!rootkw)
return 0;
@@ -1582,6 +1647,15 @@ snprint_blacklist_except (char * buff, i
if (!kw)
return 0;
fwd += snprint_keyword(buff + fwd, len - fwd, "\t%k %v\n",
+ kw, ele);
+ if (fwd > len)
+ return len;
+ }
+ vector_foreach_slot (conf->elist_protocol, ele, i) {
+ kw = find_keyword(rootkw->sub, "protocol");
+ if (!kw)
+ return 0;
+ fwd += snprint_keyword(buff + fwd, len - fwd, "\t%k %v\n",
kw, ele);
if (fwd > len)
return len;
Index: multipath-tools-130222/libmultipath/print.h
===================================================================
--- multipath-tools-130222.orig/libmultipath/print.h
+++ multipath-tools-130222/libmultipath/print.h
@@ -115,6 +115,8 @@ int snprint_host_wwnn (char *, size_t, s
int snprint_host_wwpn (char *, size_t, struct path *);
int snprint_tgt_wwnn (char *, size_t, struct path *);
int snprint_tgt_wwpn (char *, size_t, struct path *);
+#define PROTOCOL_BUF_SIZE sizeof("scsi:unspec")
+int snprint_path_protocol(char *, size_t, struct path *);
void print_multipath_topology (struct multipath * mpp, int verbosity);
void print_path (struct path * pp, char * style);
Index: multipath-tools-130222/libmultipath/structs.h
===================================================================
--- multipath-tools-130222.orig/libmultipath/structs.h
+++ multipath-tools-130222/libmultipath/structs.h
@@ -57,7 +57,6 @@ enum failback_mode {
enum sysfs_buses {
SYSFS_BUS_UNDEF,
SYSFS_BUS_SCSI,
- SYSFS_BUS_IDE,
SYSFS_BUS_CCW,
SYSFS_BUS_CCISS,
SYSFS_BUS_NVME,
Index: multipath-tools-130222/libmultipath/discovery.c
===================================================================
--- multipath-tools-130222.orig/libmultipath/discovery.c
+++ multipath-tools-130222/libmultipath/discovery.c
@@ -1407,9 +1407,10 @@ pathinfo (struct path *pp, vector hwtabl
if (mask & DI_BLACKLIST && mask & DI_SYSFS) {
if (filter_device(conf->blist_device, conf->elist_device,
- pp->vendor_id, pp->product_id) > 0) {
+ pp->vendor_id, pp->product_id) > 0 ||
+ filter_protocol(conf->blist_protocol, conf->elist_protocol,
+ pp) > 0)
return PATHINFO_SKIPPED;
- }
}
path_state = path_offline(pp);
Index: multipath-tools-130222/multipath/multipath.conf.5
===================================================================
--- multipath-tools-130222.orig/multipath/multipath.conf.5
+++ multipath-tools-130222/multipath/multipath.conf.5
@@ -640,6 +640,10 @@ Regular expression of the device nodes t
.B property
Regular expresion of the udev property to be excluded.
.TP
+.B protocol
+Regular expression of the protocol to be excluded. See below for a
+list of recognized protocols
+.TP
.B device
Subsection for the device description. This subsection recognizes the
.I vendor
@@ -648,6 +652,13 @@ and
keywords. For a full description of these keywords please see the
.I devices
section description.
+.LP
+The protocol strings that multipath recognizes are \fIscsi:fcp\fR,
+\fIscsi:spi\fR, \fIscsi:ssa\fR, \fIscsi:sbp\fR, \fIscsi:srp\fR,
+\fIscsi:iscsi\fR, \fIscsi:sas\fR, \fIscsi:adt\fR, \fIscsi:ata\fR,
+\fIscsi:unspec\fR, \fIccw\fR, \fIcciss\fR, \fInvme\fR, and \fIundef\fR.
+The protocol that a path is using can be viewed by running
+\fBmultipathd show paths format "%d %P"\fR
.SH "blacklist_exceptions section"
The
.I blacklist_exceptions
@@ -667,6 +678,10 @@ The \fIWorld Wide Identification\fR of a
.B property
Regular expresion of the udev property to be whitelisted.
.TP
+.B protocol
+Regular expression of the protocol to be whitelisted. See the
+\fBblacklist section\fR for a list of recognized protocols
+.TP
.B devnode
Regular expression of the device nodes to be whitelisted.
.TP

36
SOURCES/0247-RHBZ-1585824-mpathconf-allow-doc.patch

@ -0,0 +1,36 @@ @@ -0,0 +1,36 @@
---
multipath/mpathconf.8 | 14 ++++++++++++++
1 file changed, 14 insertions(+)

Index: multipath-tools-130222/multipath/mpathconf.8
===================================================================
--- multipath-tools-130222.orig/multipath/mpathconf.8
+++ multipath-tools-130222/multipath/mpathconf.8
@@ -61,6 +61,16 @@ Adds a line that blacklists all device n
.B /etc/multipath.conf
blacklist section. If no blacklist section exists, it will create one.
.TP
+.B --allow \fB<device>\fP
+Modifies the \fB/etc/multipath/conf\fP blacklist to blacklist all
+wwids and the blacklist_exceptions to whitelist \fB<device>\fP. \fB<device>\fP
+can be in the form of MAJOR:MINOR, a wwid, or the name of a device-mapper
+device, either a multipath device, or any device on stacked on top of one or
+more multipath devices. This command can be used multiple times to allow
+multiple devices. \fBNOTE:\fP This action will create a configuration file that
+mpathconf will not be able to revert back to its previous state. Because
+of this, \fB--outfile\fP is required when using \fB--allow\fP.
+.TP
.B --user_friendly_name \fP { \fBy\fP | \fBn\fP }
If set to \fBy\fP, this adds the line
.B user_friendly_names yes
@@ -76,6 +86,10 @@ to the
.B /etc/multipath.conf
defaults section. If set to \fBn\fP, this removes the line, if present. This
command can be used aldong with any other command.
+.TP
+.B --outfile \fB<filename>\fP
+Write the resulting multipath configuration to \fB<filename>\fP instead of
+\fB/etc/multipath.conf\fP.
.SH OPTIONS
.TP
.B --with_module\fP { \fBy\fP | \fBn\fP }

32
SOURCES/0248-RHBZ-1594360-fix-param-rk-doc.patch

@ -0,0 +1,32 @@ @@ -0,0 +1,32 @@
---
mpathpersist/main.c | 2 ++
mpathpersist/mpathpersist.8 | 3 +++
2 files changed, 5 insertions(+)

Index: multipath-tools-130222/mpathpersist/main.c
===================================================================
--- multipath-tools-130222.orig/mpathpersist/main.c
+++ multipath-tools-130222/mpathpersist/main.c
@@ -677,6 +677,8 @@ static void usage()
" --out|-o request PR Out command\n"
" --param-aptpl|-Z PR Out parameter 'APTPL'\n"
" --read-keys|-k PR In: Read Keys\n"
+ " --param-rk=RK|-K RK PR Out parameter reservation "
+ "key\n"
" --param-sark=SARK|-S SARK PR Out parameter service "
"action\n"
" reservation key (SARK is in "
Index: multipath-tools-130222/mpathpersist/mpathpersist.8
===================================================================
--- multipath-tools-130222.orig/mpathpersist/mpathpersist.8
+++ multipath-tools-130222/mpathpersist/mpathpersist.8
@@ -48,6 +48,9 @@ PR Out parameter 'APTPL'
\fB\-\-read\-keys\fR|\-k
PR In: Read Keys
.TP
+\fB\-\-param\-rk\fR=\fIRK\fR|\-K RK
+PR Out parameter reservation key (RK is in hex)
+.TP
\fB\-\-param\-sark\fR=\fISARK\fR|\-S SARK
PR Out parameter service action
reservation key (SARK is in hex)

228
SOURCES/0249-RHBZ-1610263-mpathpersist-max-fds.patch

@ -0,0 +1,228 @@ @@ -0,0 +1,228 @@
---
libmpathpersist/mpath_persist.c | 4 +++-
libmpathpersist/mpath_pr_ioctl.c | 4 +++-
libmpathpersist/mpathpr.h | 1 -
libmultipath/configure.c | 29 +++++++++++++++++++++++++++++
libmultipath/configure.h | 1 +
mpathpersist/main.c | 8 +++++++-
multipath/main.c | 13 +------------
multipathd/main.c | 28 +---------------------------
8 files changed, 45 insertions(+), 43 deletions(-)

Index: multipath-tools-130222/libmpathpersist/mpath_persist.c
===================================================================
--- multipath-tools-130222.orig/libmpathpersist/mpath_persist.c
+++ multipath-tools-130222/libmpathpersist/mpath_persist.c
@@ -19,6 +19,7 @@
#include <dmparser.h>
#include <ctype.h>
#include <propsel.h>
+#include <util.h>
#include "mpath_persist.h"
#include "mpathpr.h"
@@ -71,7 +72,8 @@ updatepaths (struct multipath * mpp)
vector_foreach_slot (pgp->paths, pp, j){
if (!strlen(pp->dev)){
- if (devt2devname(pp->dev, pp->dev_t)){
+ if (devt2devname(pp->dev, sizeof(pp->dev),
+ pp->dev_t)){
/*
* path is not in sysfs anymore
*/
Index: multipath-tools-130222/libmpathpersist/mpath_pr_ioctl.c
===================================================================
--- multipath-tools-130222.orig/libmpathpersist/mpath_pr_ioctl.c
+++ multipath-tools-130222/libmpathpersist/mpath_pr_ioctl.c
@@ -1,5 +1,6 @@
#include <stdio.h>
#include <stdlib.h>
+#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
@@ -306,7 +307,8 @@ int prin_do_scsi_ioctl(char * dev, int r
snprintf(devname, FILE_NAME_SIZE, "/dev/%s",dev);
fd = open(devname, O_WRONLY);
if(fd < 0){
- condlog(0, "%s: Unable to open device ", dev);
+ condlog(0, "%s: Unable to open device: %s", devname,
+ strerror(errno));
return MPATH_PR_FILE_ERROR;
}
Index: multipath-tools-130222/libmpathpersist/mpathpr.h
===================================================================
--- multipath-tools-130222.orig/libmpathpersist/mpathpr.h
+++ multipath-tools-130222/libmpathpersist/mpathpr.h
@@ -54,6 +54,5 @@ int update_prkey_flags(char *mapname, ui
#define update_prkey(mapname, prkey) update_prkey_flags(mapname, prkey, 0)
void * mpath_alloc_prin_response(int prin_sa);
int update_map_pr(struct multipath *mpp);
-int devt2devname (char *devname, char *devt);
#endif
Index: multipath-tools-130222/mpathpersist/main.c
===================================================================
--- multipath-tools-130222.orig/mpathpersist/main.c
+++ multipath-tools-130222/mpathpersist/main.c
@@ -5,6 +5,10 @@
#include <fcntl.h>
#include <checkers.h>
#include <vector.h>
+#include <config.h>
+#include <structs.h>
+#include <structs_vec.h>
+#include <configure.h>
#include <util.h>
#include <structs.h>
#include <getopt.h>
@@ -264,7 +268,7 @@ int main (int argc, char * argv[])
/* set verbosity */
noisy = (loglevel >= 3) ? 1 : hex;
- verbose = (loglevel >= 3)? 3: loglevel;
+ verbose = (loglevel >= 4)? 4 : loglevel;
if ((prout_flag + prin_flag) == 0)
{
@@ -356,6 +360,8 @@ int main (int argc, char * argv[])
goto out;
}
+ set_max_fds(conf->max_fds);
+
/* open device */
if ((fd = open (device_name, O_WRONLY)) < 0)
{
Index: multipath-tools-130222/libmultipath/configure.c
===================================================================
--- multipath-tools-130222.orig/libmultipath/configure.c
+++ multipath-tools-130222/libmultipath/configure.c
@@ -15,6 +15,8 @@
#include <libdevmapper.h>
#include <libudev.h>
#include <mpath_cmd.h>
+#include <sys/time.h>
+#include <sys/resource.h>
#include "checkers.h"
#include "vector.h"
@@ -1143,3 +1145,30 @@ extern int reload_map(struct vectors *ve
return 0;
}
+
+void set_max_fds(int max_fds)
+{
+ struct rlimit fd_limit;
+
+ if (!max_fds)
+ return;
+
+ if (getrlimit(RLIMIT_NOFILE, &fd_limit) < 0) {
+ condlog(0, "can't get open fds limit: %s",
+ strerror(errno));
+ fd_limit.rlim_cur = 0;
+ fd_limit.rlim_max = 0;
+ }
+ if (fd_limit.rlim_cur < conf->max_fds) {
+ fd_limit.rlim_cur = conf->max_fds;
+ if (fd_limit.rlim_max < conf->max_fds)
+ fd_limit.rlim_max = conf->max_fds;
+ if (setrlimit(RLIMIT_NOFILE, &fd_limit) < 0)
+ condlog(0, "can't set open fds limit to %lu/%lu : %s",
+ fd_limit.rlim_cur, fd_limit.rlim_max,
+ strerror(errno));
+ else
+ condlog(3, "set open fds limit to %lu/%lu",
+ fd_limit.rlim_cur, fd_limit.rlim_max);
+ }
+}
Index: multipath-tools-130222/libmultipath/configure.h
===================================================================
--- multipath-tools-130222.orig/libmultipath/configure.h
+++ multipath-tools-130222/libmultipath/configure.h
@@ -33,3 +33,4 @@ int get_refwwid (char * dev, enum devtyp
int reload_map(struct vectors *vecs, struct multipath *mpp, int refresh);
int sysfs_get_host_adapter_name(struct path *pp, char *adapter_name);
void trigger_uevents (struct multipath *mpp);
+void set_max_fds(int max_fds);
Index: multipath-tools-130222/multipath/main.c
===================================================================
--- multipath-tools-130222.orig/multipath/main.c
+++ multipath-tools-130222/multipath/main.c
@@ -52,8 +52,6 @@
#include <pgpolicies.h>
#include <version.h>
#include <errno.h>
-#include <sys/time.h>
-#include <sys/resource.h>
#include <wwids.h>
#include <file.h>
#include "dev_t.h"
@@ -638,16 +636,7 @@ main (int argc, char *argv[])
}
}
conf->daemon = 0;
-
- if (conf->max_fds) {
- struct rlimit fd_limit;
-
- fd_limit.rlim_cur = conf->max_fds;
- fd_limit.rlim_max = conf->max_fds;
- if (setrlimit(RLIMIT_NOFILE, &fd_limit) < 0)
- condlog(0, "can't set open fds limit to %d : %s",
- conf->max_fds, strerror(errno));
- }
+ set_max_fds(conf->max_fds);
if (init_checkers()) {
condlog(0, "failed to initialize checkers");
Index: multipath-tools-130222/multipathd/main.c
===================================================================
--- multipath-tools-130222.orig/multipathd/main.c
+++ multipath-tools-130222/multipathd/main.c
@@ -12,8 +12,6 @@
#include <sys/types.h>
#include <fcntl.h>
#include <errno.h>
-#include <sys/time.h>
-#include <sys/resource.h>
#include <limits.h>
#include <linux/oom.h>
#include <libudev.h>
@@ -1946,31 +1944,7 @@ child (void * param)
setlogmask(LOG_UPTO(conf->verbosity + 3));
- if (conf->max_fds) {
- struct rlimit fd_limit;
-
- if (getrlimit(RLIMIT_NOFILE, &fd_limit) < 0) {
- condlog(0, "can't get open fds limit: %s",
- strerror(errno));
- fd_limit.rlim_cur = 0;
- fd_limit.rlim_max = 0;
- }
- if (fd_limit.rlim_cur < conf->max_fds) {
- fd_limit.rlim_cur = conf->max_fds;
- if (fd_limit.rlim_max < conf->max_fds)
- fd_limit.rlim_max = conf->max_fds;
- if (setrlimit(RLIMIT_NOFILE, &fd_limit) < 0) {
- condlog(0, "can't set open fds limit to "
- "%lu/%lu : %s",
- fd_limit.rlim_cur, fd_limit.rlim_max,
- strerror(errno));
- } else {
- condlog(3, "set open fds limit to %lu/%lu",
- fd_limit.rlim_cur, fd_limit.rlim_max);
- }
- }
-
- }
+ set_max_fds(conf->max_fds);
vecs = gvecs = init_vecs();
if (!vecs) {

66
SPECS/device-mapper-multipath.spec

@ -1,7 +1,7 @@ @@ -1,7 +1,7 @@
Summary: Tools to manage multipath devices using device-mapper
Name: device-mapper-multipath
Version: 0.4.9
Release: 119%{?dist}
Release: 123%{?dist}
License: GPL+
Group: System Environment/Base
URL: http://christophe.varoqui.free.fr/
@ -243,6 +243,19 @@ Patch0233: 0233-RHBZ-1451852-1482629-nimble-config.patch @@ -243,6 +243,19 @@ Patch0233: 0233-RHBZ-1451852-1482629-nimble-config.patch
Patch0234: 0234-RHBZ-1500109-doc-typo.patch
Patch0235: 0235-RHBZ-1480638-NVMe-support.patch
Patch0236: 0236-RHBZ-1525348-fix-msg.patch
Patch0237: 0237-RHBZ-1526876-show-sysfs-state.patch
Patch0238: 0238-RHBZ-1508483-mpathconf-info.patch
Patch0239: 0239-RHBZ-1544958-client-timeout.patch
Patch0240: 0240-UPBZ-1568902-id_size.patch
Patch0241: 0241-RHBZ-1554516-show-path-failures.patch
Patch0242: 0242-RHBZ-1541116-all-tg-pt.patch
Patch0243: 0243-RHBZ-1498724-save-persist-options.patch
Patch0244: 0244-RHBZ-1562247-remove-rbd.patch
Patch0245: 0245-RHBZ-1584228-fix-readsector0_size.patch
Patch0246: 0246-RHBZ-1593459-add-transport-blacklist.patch
Patch0247: 0247-RHBZ-1585824-mpathconf-allow-doc.patch
Patch0248: 0248-RHBZ-1594360-fix-param-rk-doc.patch
Patch0249: 0249-RHBZ-1610263-mpathpersist-max-fds.patch

# runtime
Requires: %{name}-libs = %{version}-%{release}
@ -566,6 +579,19 @@ device-mapper-multipath's libdmmp C API library @@ -566,6 +579,19 @@ device-mapper-multipath's libdmmp C API library
%patch0234 -p1
%patch0235 -p1
%patch0236 -p1
%patch0237 -p1
%patch0238 -p1
%patch0239 -p1
%patch0240 -p1
%patch0241 -p1
%patch0242 -p1
%patch0243 -p1
%patch0244 -p1
%patch0245 -p1
%patch0246 -p1
%patch0247 -p1
%patch0248 -p1
%patch0249 -p1
cp %{SOURCE1} .

%build
@ -683,6 +709,44 @@ fi @@ -683,6 +709,44 @@ fi
%{_pkgconfdir}/libdmmp.pc

%changelog
* Fri Aug 10 2018 Benjamin Marzinski <bmarzins@redhat.com> 0.4.9-123
- Add 0249-RHBZ-1610263-mpathpersist-max-fds.patch
* make mpathpersist honor max_fds multipath.conf parameter
- Resolves: bz #1610263

* Wed Aug 1 2018 Benjamin Marzinski <bmarzins@redhat.com> 0.4.9-122
- Add 0248-RHBZ-1594360-fix-param-rk-doc.patch
- Resolves: bz #1594360

* Thu Jun 21 2018 Benjamin Marzinski <bmarzins@redhat.com> 0.4.9-121
- Add 0245-RHBZ-1584228-fix-readsector0_size.patch
* correctly figure IO size
- Add 0246-RHBZ-1593459-add-transport-blacklist.patch
* and new blacklist option, "protocol"
- Add 0247-RHBZ-1585824-mpathconf-allow-doc.patch
- Resolves: bz #1584228, #1585824, #1593459

* Wed Jun 6 2018 Benjamin Marzinski <bmarzins@redhat.com> 0.4.9-120
- Add 0237-RHBZ-1526876-show-sysfs-state.patch
* Correctly get sysfs state for multipath -l output
- Add 0238-RHBZ-1508483-mpathconf-info.patch
- Add 0239-RHBZ-1544958-client-timeout.patch
* increase maximum multipathd client reply timeout to 60 seconds
- Add 0240-UPBZ-1568902-id_size.patch
* increase maximum size of product and revision strings to deal with nvme
- Add 0241-RHBZ-1554516-show-path-failures.patch
* add a path failures multipathd path format wildcard
- Add 0242-RHBZ-1541116-all-tg-pt.patch
* add all_tg_pt configuration option to make mpathpersist send only
one registration per host
- Add 0243-RHBZ-1498724-save-persist-options.patch
* allow ":aptpl" to be added to the reservation_key to fix multipathd
aptpl persistent reservation handling
- Add 0244-RHBZ-1562247-remove-rbd.patch
* remove multipath support for rbd
- Resolves: bz #1498724, #1508483, #1526876, #1541116, #1544958, #1554516
- Resolves: bz #1562247, #1568902

* Wed Jan 31 2018 Benjamin Marzinski <bmarzins@redhat.com> 0.4.9-119
- Add 0236-RHBZ-1525348-fix-msg.patch
* reduced message serverity level

Loading…
Cancel
Save