device-mapper-multipath-0.8.6-5
Update to the head of the upstream staging branch plus redhat patches * Patches 0016-0018 are from the upstream staging branch * Patches 0019-0024 have been submitted upstream Rename files * Previous patches 0016-0025 are now patches 0024-0033
This commit is contained in:
parent
51c88e7181
commit
2d373b6820
128
0016-libmultipath-use-uint64_t-for-sg_id.lun.patch
Normal file
128
0016-libmultipath-use-uint64_t-for-sg_id.lun.patch
Normal file
@ -0,0 +1,128 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Martin Wilck <mwilck@suse.com>
|
||||
Date: Wed, 30 Jun 2021 21:51:53 +0200
|
||||
Subject: [PATCH] libmultipath: use uint64_t for sg_id.lun
|
||||
|
||||
SCSI LUNs are 64bit unsigned integers, and have been exposed as such by
|
||||
the kernel for years. Storage using the full 8 bytes is fortunately rare.
|
||||
Still, we should handle this properly.
|
||||
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
libmultipath/discovery.c | 10 +++++-----
|
||||
libmultipath/print.c | 2 +-
|
||||
libmultipath/prioritizers/weightedpath.c | 2 +-
|
||||
libmultipath/structs.c | 2 +-
|
||||
libmultipath/structs.h | 4 +++-
|
||||
5 files changed, 11 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/libmultipath/discovery.c b/libmultipath/discovery.c
|
||||
index bfe2f56c..e9f5703c 100644
|
||||
--- a/libmultipath/discovery.c
|
||||
+++ b/libmultipath/discovery.c
|
||||
@@ -1427,7 +1427,7 @@ scsi_sysfs_pathinfo (struct path *pp, const struct _vector *hwtable)
|
||||
attr_path = udev_device_get_sysname(parent);
|
||||
if (!attr_path)
|
||||
break;
|
||||
- if (sscanf(attr_path, "%i:%i:%i:%i",
|
||||
+ if (sscanf(attr_path, "%i:%i:%i:%" SCNu64,
|
||||
&pp->sg_id.host_no,
|
||||
&pp->sg_id.channel,
|
||||
&pp->sg_id.scsi_id,
|
||||
@@ -1462,7 +1462,7 @@ scsi_sysfs_pathinfo (struct path *pp, const struct _vector *hwtable)
|
||||
/*
|
||||
* host / bus / target / lun
|
||||
*/
|
||||
- condlog(3, "%s: h:b:t:l = %i:%i:%i:%i",
|
||||
+ condlog(3, "%s: h:b:t:l = %i:%i:%i:%" PRIu64,
|
||||
pp->dev,
|
||||
pp->sg_id.host_no,
|
||||
pp->sg_id.channel,
|
||||
@@ -1577,7 +1577,7 @@ ccw_sysfs_pathinfo (struct path *pp, const struct _vector *hwtable)
|
||||
&pp->sg_id.host_no,
|
||||
&pp->sg_id.channel,
|
||||
&pp->sg_id.scsi_id) == 3) {
|
||||
- condlog(3, "%s: h:b:t:l = %i:%i:%i:%i",
|
||||
+ condlog(3, "%s: h:b:t:l = %i:%i:%i:%" PRIu64,
|
||||
pp->dev,
|
||||
pp->sg_id.host_no,
|
||||
pp->sg_id.channel,
|
||||
@@ -1636,7 +1636,7 @@ cciss_sysfs_pathinfo (struct path *pp, const struct _vector *hwtable)
|
||||
*/
|
||||
pp->sg_id.lun = 0;
|
||||
pp->sg_id.channel = 0;
|
||||
- condlog(3, "%s: h:b:t:l = %i:%i:%i:%i",
|
||||
+ condlog(3, "%s: h:b:t:l = %i:%i:%i:%" PRIu64,
|
||||
pp->dev,
|
||||
pp->sg_id.host_no,
|
||||
pp->sg_id.channel,
|
||||
@@ -1815,7 +1815,7 @@ scsi_ioctl_pathinfo (struct path * pp, int mask)
|
||||
attr_path = udev_device_get_sysname(parent);
|
||||
if (!attr_path)
|
||||
break;
|
||||
- if (sscanf(attr_path, "%i:%i:%i:%i",
|
||||
+ if (sscanf(attr_path, "%i:%i:%i:%" SCNu64,
|
||||
&pp->sg_id.host_no,
|
||||
&pp->sg_id.channel,
|
||||
&pp->sg_id.scsi_id,
|
||||
diff --git a/libmultipath/print.c b/libmultipath/print.c
|
||||
index 3c69bf48..29ce499d 100644
|
||||
--- a/libmultipath/print.c
|
||||
+++ b/libmultipath/print.c
|
||||
@@ -392,7 +392,7 @@ snprint_hcil (char * buff, size_t len, const struct path * pp)
|
||||
if (!pp || pp->sg_id.host_no < 0)
|
||||
return snprintf(buff, len, "#:#:#:#");
|
||||
|
||||
- return snprintf(buff, len, "%i:%i:%i:%i",
|
||||
+ return snprintf(buff, len, "%i:%i:%i:%" PRIu64,
|
||||
pp->sg_id.host_no,
|
||||
pp->sg_id.channel,
|
||||
pp->sg_id.scsi_id,
|
||||
diff --git a/libmultipath/prioritizers/weightedpath.c b/libmultipath/prioritizers/weightedpath.c
|
||||
index 916970df..650088b4 100644
|
||||
--- a/libmultipath/prioritizers/weightedpath.c
|
||||
+++ b/libmultipath/prioritizers/weightedpath.c
|
||||
@@ -101,7 +101,7 @@ int prio_path_weight(struct path *pp, char *prio_args)
|
||||
}
|
||||
|
||||
if (!strcmp(regex, HBTL)) {
|
||||
- sprintf(path, "%d:%d:%d:%d", pp->sg_id.host_no,
|
||||
+ sprintf(path, "%d:%d:%d:%" PRIu64, pp->sg_id.host_no,
|
||||
pp->sg_id.channel, pp->sg_id.scsi_id, pp->sg_id.lun);
|
||||
} else if (!strcmp(regex, DEV_NAME)) {
|
||||
strcpy(path, pp->dev);
|
||||
diff --git a/libmultipath/structs.c b/libmultipath/structs.c
|
||||
index 8751fc2b..6e5a1038 100644
|
||||
--- a/libmultipath/structs.c
|
||||
+++ b/libmultipath/structs.c
|
||||
@@ -96,7 +96,7 @@ alloc_path (void)
|
||||
pp->sg_id.host_no = -1;
|
||||
pp->sg_id.channel = -1;
|
||||
pp->sg_id.scsi_id = -1;
|
||||
- pp->sg_id.lun = -1;
|
||||
+ pp->sg_id.lun = SCSI_INVALID_LUN;
|
||||
pp->sg_id.proto_id = SCSI_PROTOCOL_UNSPEC;
|
||||
pp->fd = -1;
|
||||
pp->tpgs = TPGS_UNDEF;
|
||||
diff --git a/libmultipath/structs.h b/libmultipath/structs.h
|
||||
index c8447e56..c52bcee1 100644
|
||||
--- a/libmultipath/structs.h
|
||||
+++ b/libmultipath/structs.h
|
||||
@@ -178,6 +178,8 @@ enum scsi_protocol {
|
||||
SCSI_PROTOCOL_UNSPEC = 0xf, /* No specific protocol */
|
||||
};
|
||||
|
||||
+#define SCSI_INVALID_LUN ~0ULL
|
||||
+
|
||||
enum no_undef_states {
|
||||
NU_NO = -1,
|
||||
NU_UNDEF = 0,
|
||||
@@ -258,7 +260,7 @@ struct sg_id {
|
||||
int host_no;
|
||||
int channel;
|
||||
int scsi_id;
|
||||
- int lun;
|
||||
+ uint64_t lun;
|
||||
short h_cmd_per_lun;
|
||||
short d_queue_depth;
|
||||
enum scsi_protocol proto_id;
|
115
0017-multipath-tools-Remove-trailing-leading-whitespaces.patch
Normal file
115
0017-multipath-tools-Remove-trailing-leading-whitespaces.patch
Normal file
@ -0,0 +1,115 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Xose Vazquez Perez <xose.vazquez@gmail.com>
|
||||
Date: Sat, 22 May 2021 21:17:36 +0200
|
||||
Subject: [PATCH] multipath-tools: Remove trailing/leading whitespaces
|
||||
|
||||
Cc: Martin Wilck <mwilck@suse.com>
|
||||
Cc: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Cc: Christophe Varoqui <christophe.varoqui@opensvc.com>
|
||||
Cc: DM-DEVEL ML <dm-devel@redhat.com>
|
||||
Signed-off-by: Xose Vazquez Perez <xose.vazquez@gmail.com>
|
||||
Reviewed-by: Martin Wilck <mwilck@suse.com>"
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
Makefile.inc | 2 +-
|
||||
libmultipath/configure.c | 2 +-
|
||||
libmultipath/devmapper.c | 4 ++--
|
||||
libmultipath/sysfs.c | 2 +-
|
||||
multipath/multipath.8 | 2 +-
|
||||
multipathd/cli_handlers.c | 2 +-
|
||||
multipathd/main.c | 2 +-
|
||||
7 files changed, 8 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/Makefile.inc b/Makefile.inc
|
||||
index 91100a20..d0ec9b44 100644
|
||||
--- a/Makefile.inc
|
||||
+++ b/Makefile.inc
|
||||
@@ -101,7 +101,7 @@ OPTFLAGS := -O2 -g $(STACKPROT) --param=ssp-buffer-size=4
|
||||
WARNFLAGS := -Werror -Wall -Wextra -Wformat=2 $(WFORMATOVERFLOW) -Werror=implicit-int \
|
||||
-Werror=implicit-function-declaration -Werror=format-security \
|
||||
$(WNOCLOBBERED) -Werror=cast-qual $(ERROR_DISCARDED_QUALIFIERS)
|
||||
-CPPFLAGS := -Wp,-D_FORTIFY_SOURCE=2
|
||||
+CPPFLAGS := -Wp,-D_FORTIFY_SOURCE=2
|
||||
CFLAGS := --std=gnu99 $(CFLAGS) $(OPTFLAGS) $(WARNFLAGS) -pipe \
|
||||
-DBIN_DIR=\"$(bindir)\" -DLIB_STRING=\"${LIB}\" -DRUN_DIR=\"${RUN}\" \
|
||||
-MMD -MP
|
||||
diff --git a/libmultipath/configure.c b/libmultipath/configure.c
|
||||
index 6ca1f4bb..a6ae3359 100644
|
||||
--- a/libmultipath/configure.c
|
||||
+++ b/libmultipath/configure.c
|
||||
@@ -397,7 +397,7 @@ int setup_map(struct multipath *mpp, char *params, int params_size,
|
||||
start_io_err_stat_thread(vecs);
|
||||
|
||||
n_paths = VECTOR_SIZE(mpp->paths);
|
||||
- /*
|
||||
+ /*
|
||||
* assign paths to path groups -- start with no groups and all paths
|
||||
* in mpp->paths
|
||||
*/
|
||||
diff --git a/libmultipath/devmapper.c b/libmultipath/devmapper.c
|
||||
index 47a6d60e..945e625b 100644
|
||||
--- a/libmultipath/devmapper.c
|
||||
+++ b/libmultipath/devmapper.c
|
||||
@@ -602,8 +602,8 @@ int dm_addmap_reload(struct multipath *mpp, char *params, int flush)
|
||||
return r;
|
||||
|
||||
/* If the resume failed, dm will leave the device suspended, and
|
||||
- * drop the new table, so doing a second resume will try using
|
||||
- * the original table */
|
||||
+ * drop the new table, so doing a second resume will try using
|
||||
+ * the original table */
|
||||
if (dm_is_suspended(mpp->alias))
|
||||
dm_simplecmd(DM_DEVICE_RESUME, mpp->alias, !flush, 1,
|
||||
udev_flags, 0);
|
||||
diff --git a/libmultipath/sysfs.c b/libmultipath/sysfs.c
|
||||
index 7a2af1ea..9ff145f2 100644
|
||||
--- a/libmultipath/sysfs.c
|
||||
+++ b/libmultipath/sysfs.c
|
||||
@@ -358,7 +358,7 @@ bool sysfs_is_multipathed(struct path *pp, bool set_wwid)
|
||||
strchop(pp->wwid);
|
||||
}
|
||||
}
|
||||
- } else if (nr < 0)
|
||||
+ } else if (nr < 0)
|
||||
condlog(1, "%s: error reading from %s: %m",
|
||||
__func__, pathbuf);
|
||||
|
||||
diff --git a/multipath/multipath.8 b/multipath/multipath.8
|
||||
index 5b29a5d9..17df59f5 100644
|
||||
--- a/multipath/multipath.8
|
||||
+++ b/multipath/multipath.8
|
||||
@@ -225,7 +225,7 @@ Dry run, do not create or update devmaps.
|
||||
.TP
|
||||
.B \-e
|
||||
Enable all foreign libraries. This overrides the
|
||||
-.I enable_foreign
|
||||
+.I enable_foreign
|
||||
option from \fBmultipath.conf(5)\fR.
|
||||
.
|
||||
.TP
|
||||
diff --git a/multipathd/cli_handlers.c b/multipathd/cli_handlers.c
|
||||
index 59d44b45..d70e1dbc 100644
|
||||
--- a/multipathd/cli_handlers.c
|
||||
+++ b/multipathd/cli_handlers.c
|
||||
@@ -1215,7 +1215,7 @@ cli_reconfigure(void * v, char ** reply, int * len, void * data)
|
||||
|
||||
condlog(2, "reconfigure (operator)");
|
||||
|
||||
- rc = set_config_state(DAEMON_CONFIGURE);
|
||||
+ rc = set_config_state(DAEMON_CONFIGURE);
|
||||
if (rc == ETIMEDOUT) {
|
||||
condlog(2, "timeout starting reconfiguration");
|
||||
return 1;
|
||||
diff --git a/multipathd/main.c b/multipathd/main.c
|
||||
index 2251e02c..bdd629e7 100644
|
||||
--- a/multipathd/main.c
|
||||
+++ b/multipathd/main.c
|
||||
@@ -2014,7 +2014,7 @@ static int check_path_reinstate_state(struct path * pp) {
|
||||
|
||||
/* If path became failed again or continue failed, should reset
|
||||
* path san_path_err_forget_rate and path dis_reinstate_time to
|
||||
- * start a new stable check.
|
||||
+ * start a new stable check.
|
||||
*/
|
||||
if ((pp->state != PATH_UP) && (pp->state != PATH_GHOST) &&
|
||||
(pp->state != PATH_DELAYED)) {
|
@ -0,0 +1,63 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Xose Vazquez Perez <xose.vazquez@gmail.com>
|
||||
Date: Mon, 5 Apr 2021 00:12:58 +0200
|
||||
Subject: [PATCH] multipath-tools: make HUAWEI/XSG1 config work with alua and
|
||||
multibus
|
||||
|
||||
And add recommended no_path_retry and pgfailback values.
|
||||
|
||||
Info from:
|
||||
- RHEL https://download.huawei.com/edownload/e/download.do?actionFlag=download&nid=EDOC1100113070&partNo=6001&mid=SUPE_DOC&_t=1612885511000
|
||||
- SLES https://download.huawei.com/edownload/e/download.do?actionFlag=download&nid=EDOC1100117892&partNo=6001&mid=SUPE_DOC&_t=1612885538000
|
||||
|
||||
- without HyperMetro:
|
||||
vendor "HUAWEI"
|
||||
product "XSG1"
|
||||
path_grouping_policy multibus
|
||||
no_path_retry 15
|
||||
|
||||
- with HyperMetro:
|
||||
vendor "HUAWEI"
|
||||
product "XSG1"
|
||||
path_grouping_policy group_by_prio
|
||||
prio alua
|
||||
failback immediate
|
||||
no_path_retry 15
|
||||
|
||||
ALUA is only used with HyperMetro(cluster of two arrays).
|
||||
|
||||
Suggested-by: Martin Wilck <mwilck@suse.com>
|
||||
Cc: Zhouweigang (Jack) <zhouweigang09@huawei.com>
|
||||
Cc: Zou Ming <zouming.zouming@huawei.com>
|
||||
Cc: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Cc: Martin Wilck <mwilck@suse.com>
|
||||
Cc: Christophe Varoqui <christophe.varoqui@opensvc.com>
|
||||
Cc: DM-DEVEL ML <dm-devel@redhat.com>
|
||||
Signed-off-by: Xose Vazquez Perez <xose.vazquez@gmail.com>
|
||||
Reviewed-by: Martin Wilck <mwilck@suse.com>"
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
libmultipath/hwtable.c | 7 +++++--
|
||||
1 file changed, 5 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/libmultipath/hwtable.c b/libmultipath/hwtable.c
|
||||
index e884d8c7..2a896440 100644
|
||||
--- a/libmultipath/hwtable.c
|
||||
+++ b/libmultipath/hwtable.c
|
||||
@@ -1078,11 +1078,14 @@ static struct hwentry default_hw[] = {
|
||||
* Huawei
|
||||
*/
|
||||
{
|
||||
- /* OceanStor V3 */
|
||||
+ /* OceanStor V3-V6 */
|
||||
+ // This config works with multibus and ALUA
|
||||
+ // ALUA is required by HyperMetro
|
||||
.vendor = "HUAWEI",
|
||||
.product = "XSG1",
|
||||
.pgpolicy = GROUP_BY_PRIO,
|
||||
- .prio_name = PRIO_ALUA,
|
||||
+ .pgfailback = -FAILBACK_IMMEDIATE,
|
||||
+ .no_path_retry = 15,
|
||||
},
|
||||
/*
|
||||
* Kove
|
@ -0,0 +1,23 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Date: Thu, 15 Jul 2021 14:46:49 -0500
|
||||
Subject: [PATCH] multipath.conf: fix typo in ghost_delay description
|
||||
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
multipath/multipath.conf.5 | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/multipath/multipath.conf.5 b/multipath/multipath.conf.5
|
||||
index 064e4826..d6b8c7f6 100644
|
||||
--- a/multipath/multipath.conf.5
|
||||
+++ b/multipath/multipath.conf.5
|
||||
@@ -1251,7 +1251,7 @@ The default is: in \fB/sys/block/<dev>/queue/max_sectors_kb\fR
|
||||
Sets the number of seconds that multipath will wait after creating a device
|
||||
with only ghost paths before marking it ready for use in systemd. This gives
|
||||
the active paths time to appear before the multipath runs the hardware handler
|
||||
-to switch the ghost paths to active ones. Setting this to \fI0\fR or \fIon\fR
|
||||
+to switch the ghost paths to active ones. Setting this to \fI0\fR or \fIno\fR
|
||||
makes multipath immediately mark a device with only ghost paths as ready.
|
||||
.RS
|
||||
.TP
|
@ -0,0 +1,41 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Date: Thu, 15 Jul 2021 17:09:05 -0500
|
||||
Subject: [PATCH] mpathpersist: fail commands when no usable paths exist
|
||||
|
||||
"mpathpersist -oCK <reservation_key> <device>" will return success if it
|
||||
is run on devices with no usable paths, but nothing is actually done.
|
||||
The -L command will fail, but it should give up sooner, and with a more
|
||||
helpful error message.
|
||||
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
libmpathpersist/mpath_persist.c | 8 +++++++-
|
||||
1 file changed, 7 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/libmpathpersist/mpath_persist.c b/libmpathpersist/mpath_persist.c
|
||||
index 190e9707..26710e79 100644
|
||||
--- a/libmpathpersist/mpath_persist.c
|
||||
+++ b/libmpathpersist/mpath_persist.c
|
||||
@@ -604,7 +604,8 @@ int mpath_prout_common(struct multipath *mpp,int rq_servact, int rq_scope,
|
||||
return ret ;
|
||||
}
|
||||
}
|
||||
- return MPATH_PR_SUCCESS;
|
||||
+ condlog (0, "%s: no path available", mpp->wwid);
|
||||
+ return MPATH_PR_DMMP_ERROR;
|
||||
}
|
||||
|
||||
int send_prout_activepath(char * dev, int rq_servact, int rq_scope,
|
||||
@@ -663,6 +664,11 @@ int mpath_prout_rel(struct multipath *mpp,int rq_servact, int rq_scope,
|
||||
|
||||
active_pathcount = count_active_paths(mpp);
|
||||
|
||||
+ if (active_pathcount == 0) {
|
||||
+ condlog (0, "%s: no path available", mpp->wwid);
|
||||
+ return MPATH_PR_DMMP_ERROR;
|
||||
+ }
|
||||
+
|
||||
struct threadinfo thread[active_pathcount];
|
||||
memset(thread, 0, sizeof(thread));
|
||||
for (i = 0; i < active_pathcount; i++){
|
119
0021-multipath-print-warning-if-multipathd-is-not-running.patch
Normal file
119
0021-multipath-print-warning-if-multipathd-is-not-running.patch
Normal file
@ -0,0 +1,119 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Date: Fri, 16 Jul 2021 12:39:17 -0500
|
||||
Subject: [PATCH] multipath: print warning if multipathd is not running.
|
||||
|
||||
If multipath notices that multipath devices exist or were created, and
|
||||
multipathd is not running, it now prints a warning message, so users are
|
||||
notified of the issue.
|
||||
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
libmultipath/configure.c | 13 +++++++++++--
|
||||
libmultipath/configure.h | 1 +
|
||||
libmultipath/libmultipath.version | 5 +++++
|
||||
multipath/main.c | 5 +++++
|
||||
4 files changed, 22 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/libmultipath/configure.c b/libmultipath/configure.c
|
||||
index a6ae3359..eb76fbc4 100644
|
||||
--- a/libmultipath/configure.c
|
||||
+++ b/libmultipath/configure.c
|
||||
@@ -1083,7 +1083,8 @@ deadmap (struct multipath * mpp)
|
||||
return 1; /* dead */
|
||||
}
|
||||
|
||||
-int check_daemon(void)
|
||||
+extern int
|
||||
+check_daemon(void)
|
||||
{
|
||||
int fd;
|
||||
char *reply;
|
||||
@@ -1138,6 +1139,8 @@ int coalesce_paths (struct vectors *vecs, vector mpvec, char *refwwid,
|
||||
struct config *conf;
|
||||
int allow_queueing;
|
||||
struct bitfield *size_mismatch_seen;
|
||||
+ bool map_processed = false;
|
||||
+ bool no_daemon = false;
|
||||
|
||||
/* ignore refwwid if it's empty */
|
||||
if (refwwid && !strlen(refwwid))
|
||||
@@ -1288,7 +1291,9 @@ int coalesce_paths (struct vectors *vecs, vector mpvec, char *refwwid,
|
||||
conf = get_multipath_config();
|
||||
allow_queueing = conf->allow_queueing;
|
||||
put_multipath_config(conf);
|
||||
- if (!is_daemon && !allow_queueing && !check_daemon()) {
|
||||
+ if (!is_daemon && !allow_queueing &&
|
||||
+ (no_daemon || !check_daemon())) {
|
||||
+ no_daemon = true;
|
||||
if (mpp->no_path_retry != NO_PATH_RETRY_UNDEF &&
|
||||
mpp->no_path_retry != NO_PATH_RETRY_FAIL)
|
||||
condlog(3, "%s: multipathd not running, unset "
|
||||
@@ -1311,6 +1316,7 @@ int coalesce_paths (struct vectors *vecs, vector mpvec, char *refwwid,
|
||||
else
|
||||
remove_map(mpp, vecs->pathvec, vecs->mpvec,
|
||||
KEEP_VEC);
|
||||
+ map_processed = true;
|
||||
}
|
||||
/*
|
||||
* Flush maps with only dead paths (ie not in sysfs)
|
||||
@@ -1336,6 +1342,9 @@ int coalesce_paths (struct vectors *vecs, vector mpvec, char *refwwid,
|
||||
condlog(2, "%s: remove (dead)", alias);
|
||||
}
|
||||
}
|
||||
+ if (map_processed && !is_daemon && (no_daemon || !check_daemon()))
|
||||
+ condlog(2, "multipath devices exist, but multipathd service is not running");
|
||||
+
|
||||
ret = CP_OK;
|
||||
out:
|
||||
free(size_mismatch_seen);
|
||||
diff --git a/libmultipath/configure.h b/libmultipath/configure.h
|
||||
index 70cf77a3..741066b3 100644
|
||||
--- a/libmultipath/configure.h
|
||||
+++ b/libmultipath/configure.h
|
||||
@@ -60,3 +60,4 @@ struct udev_device *get_udev_device(const char *dev, enum devtypes dev_type);
|
||||
void trigger_paths_udev_change(struct multipath *mpp, bool is_mpath);
|
||||
void trigger_partitions_udev_change(struct udev_device *dev, const char *action,
|
||||
int len);
|
||||
+int check_daemon(void);
|
||||
diff --git a/libmultipath/libmultipath.version b/libmultipath/libmultipath.version
|
||||
index 0cff3111..d8be5fd2 100644
|
||||
--- a/libmultipath/libmultipath.version
|
||||
+++ b/libmultipath/libmultipath.version
|
||||
@@ -274,3 +274,8 @@ global:
|
||||
local:
|
||||
*;
|
||||
};
|
||||
+
|
||||
+LIBMULTIPATH_5.1.0 {
|
||||
+global:
|
||||
+ check_daemon;
|
||||
+} LIBMULTIPATH_5.0.0;
|
||||
diff --git a/multipath/main.c b/multipath/main.c
|
||||
index 8fc0e15f..33377147 100644
|
||||
--- a/multipath/main.c
|
||||
+++ b/multipath/main.c
|
||||
@@ -180,6 +180,7 @@ get_dm_mpvec (enum mpath_cmds cmd, vector curmp, vector pathvec, char * refwwid)
|
||||
int i;
|
||||
struct multipath * mpp;
|
||||
int flags = (cmd == CMD_LIST_SHORT ? DI_NOIO : DI_ALL);
|
||||
+ bool maps_present = false;
|
||||
|
||||
if (dm_get_maps(curmp))
|
||||
return 1;
|
||||
@@ -212,11 +213,15 @@ get_dm_mpvec (enum mpath_cmds cmd, vector curmp, vector pathvec, char * refwwid)
|
||||
|
||||
if (cmd == CMD_CREATE)
|
||||
reinstate_paths(mpp);
|
||||
+
|
||||
+ maps_present = true;
|
||||
}
|
||||
|
||||
if (cmd == CMD_LIST_SHORT || cmd == CMD_LIST_LONG)
|
||||
print_foreign_topology(libmp_verbosity);
|
||||
|
||||
+ if (maps_present && !check_daemon())
|
||||
+ condlog(2, "multipath devices exist, but multipathd service is not running");
|
||||
return 0;
|
||||
}
|
||||
|
@ -0,0 +1,81 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Date: Fri, 16 Jul 2021 17:58:14 -0500
|
||||
Subject: [PATCH] libmultipath: remove unneeded code in coalesce_paths
|
||||
|
||||
The code at the end of coalesce_paths() removes a multipath device that
|
||||
was just created/reloaded, if none of its path devices have pp->dev set.
|
||||
This code is very old, and no longer has any actual effect. Multipath
|
||||
devices no longer get placed in pathvec without having pp->dev set. Even
|
||||
if they could, there's no point in creating/reloading the device and
|
||||
then immediately removing it.
|
||||
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
libmultipath/configure.c | 46 ----------------------------------------
|
||||
1 file changed, 46 deletions(-)
|
||||
|
||||
diff --git a/libmultipath/configure.c b/libmultipath/configure.c
|
||||
index eb76fbc4..df6ba725 100644
|
||||
--- a/libmultipath/configure.c
|
||||
+++ b/libmultipath/configure.c
|
||||
@@ -1061,28 +1061,6 @@ int domap(struct multipath *mpp, char *params, int is_daemon)
|
||||
return DOMAP_FAIL;
|
||||
}
|
||||
|
||||
-static int
|
||||
-deadmap (struct multipath * mpp)
|
||||
-{
|
||||
- int i, j;
|
||||
- struct pathgroup * pgp;
|
||||
- struct path * pp;
|
||||
-
|
||||
- if (!mpp->pg)
|
||||
- return 1;
|
||||
-
|
||||
- vector_foreach_slot (mpp->pg, pgp, i) {
|
||||
- if (!pgp->paths)
|
||||
- continue;
|
||||
-
|
||||
- vector_foreach_slot (pgp->paths, pp, j)
|
||||
- if (strlen(pp->dev))
|
||||
- return 0; /* alive */
|
||||
- }
|
||||
-
|
||||
- return 1; /* dead */
|
||||
-}
|
||||
-
|
||||
extern int
|
||||
check_daemon(void)
|
||||
{
|
||||
@@ -1318,30 +1296,6 @@ int coalesce_paths (struct vectors *vecs, vector mpvec, char *refwwid,
|
||||
KEEP_VEC);
|
||||
map_processed = true;
|
||||
}
|
||||
- /*
|
||||
- * Flush maps with only dead paths (ie not in sysfs)
|
||||
- * Keep maps with only failed paths
|
||||
- */
|
||||
- if (mpvec) {
|
||||
- vector_foreach_slot (newmp, mpp, i) {
|
||||
- char alias[WWID_SIZE];
|
||||
-
|
||||
- if (!deadmap(mpp))
|
||||
- continue;
|
||||
-
|
||||
- strlcpy(alias, mpp->alias, WWID_SIZE);
|
||||
-
|
||||
- vector_del_slot(newmp, i);
|
||||
- i--;
|
||||
- remove_map(mpp, vecs->pathvec, vecs->mpvec, KEEP_VEC);
|
||||
-
|
||||
- if (dm_flush_map(alias))
|
||||
- condlog(2, "%s: remove failed (dead)",
|
||||
- alias);
|
||||
- else
|
||||
- condlog(2, "%s: remove (dead)", alias);
|
||||
- }
|
||||
- }
|
||||
if (map_processed && !is_daemon && (no_daemon || !check_daemon()))
|
||||
condlog(2, "multipath devices exist, but multipathd service is not running");
|
||||
|
31
0023-libmultipath-deal-with-dynamic-PTHREAD_STACK_MIN.patch
Normal file
31
0023-libmultipath-deal-with-dynamic-PTHREAD_STACK_MIN.patch
Normal file
@ -0,0 +1,31 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
Date: Thu, 29 Jul 2021 13:16:57 -0500
|
||||
Subject: [PATCH] libmultipath: deal with dynamic PTHREAD_STACK_MIN
|
||||
|
||||
Starting in glibc-2.34 (commit 5d98a7da), PTHREAD_STACK_MIN is defined
|
||||
as sysconf(_SC_THREAD_STACK_MIN) if _GNU_SOURCE is defined. sysconf()
|
||||
returns a long and can, at least in theory, return -1. This change
|
||||
causes compilation to fail in setup_thread_attr() due to a comparision
|
||||
with different signedness, since stacksize is a size_t.
|
||||
|
||||
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
libmultipath/util.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/libmultipath/util.c b/libmultipath/util.c
|
||||
index 0e37f3ff..17f8fcc6 100644
|
||||
--- a/libmultipath/util.c
|
||||
+++ b/libmultipath/util.c
|
||||
@@ -223,8 +223,8 @@ setup_thread_attr(pthread_attr_t *attr, size_t stacksize, int detached)
|
||||
|
||||
ret = pthread_attr_init(attr);
|
||||
assert(ret == 0);
|
||||
- if (stacksize < PTHREAD_STACK_MIN)
|
||||
- stacksize = PTHREAD_STACK_MIN;
|
||||
+ if (PTHREAD_STACK_MIN > 0 && stacksize < (size_t)PTHREAD_STACK_MIN)
|
||||
+ stacksize = (size_t)PTHREAD_STACK_MIN;
|
||||
ret = pthread_attr_setstacksize(attr, stacksize);
|
||||
assert(ret == 0);
|
||||
if (detached) {
|
@ -15,7 +15,7 @@ Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
3 files changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/Makefile.inc b/Makefile.inc
|
||||
index 91100a20..6c3714eb 100644
|
||||
index d0ec9b44..2a75dc9c 100644
|
||||
--- a/Makefile.inc
|
||||
+++ b/Makefile.inc
|
||||
@@ -55,7 +55,7 @@ endif
|
@ -43,7 +43,7 @@ index 6c6a5979..785f5ee9 100644
|
||||
udev_device_get_properties_list_entry(udev)) {
|
||||
|
||||
diff --git a/multipath/multipath.conf.5 b/multipath/multipath.conf.5
|
||||
index 064e4826..0d2bce09 100644
|
||||
index d6b8c7f6..689d09aa 100644
|
||||
--- a/multipath/multipath.conf.5
|
||||
+++ b/multipath/multipath.conf.5
|
||||
@@ -1347,9 +1347,14 @@ keywords. Both are regular expressions. For a full description of these keywords
|
@ -13,7 +13,7 @@ Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
1 file changed, 18 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/Makefile.inc b/Makefile.inc
|
||||
index 6c3714eb..db35feb6 100644
|
||||
index 2a75dc9c..db35feb6 100644
|
||||
--- a/Makefile.inc
|
||||
+++ b/Makefile.inc
|
||||
@@ -92,16 +92,28 @@ TEST_CC_OPTION = $(shell \
|
||||
@ -44,7 +44,7 @@ index 6c3714eb..db35feb6 100644
|
||||
+WARNFLAGS := -Werror -Wextra -Wformat=2 $(WFORMATOVERFLOW) -Werror=implicit-int \
|
||||
-Werror=implicit-function-declaration -Werror=format-security \
|
||||
- $(WNOCLOBBERED) -Werror=cast-qual $(ERROR_DISCARDED_QUALIFIERS)
|
||||
-CPPFLAGS := -Wp,-D_FORTIFY_SOURCE=2
|
||||
-CPPFLAGS := -Wp,-D_FORTIFY_SOURCE=2
|
||||
+ $(WNOCLOBBERED) -Werror=cast-qual $(ERROR_DISCARDED_QUALIFIERS) \
|
||||
+ -Wstrict-prototypes
|
||||
CFLAGS := --std=gnu99 $(CFLAGS) $(OPTFLAGS) $(WARNFLAGS) -pipe \
|
@ -14,9 +14,9 @@ Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
---
|
||||
libmultipath/config.c | 2 +
|
||||
multipath/Makefile | 5 +
|
||||
multipath/mpathconf | 555 ++++++++++++++++++++++++++++++++++++++++++
|
||||
multipath/mpathconf | 561 ++++++++++++++++++++++++++++++++++++++++++
|
||||
multipath/mpathconf.8 | 135 ++++++++++
|
||||
4 files changed, 697 insertions(+)
|
||||
4 files changed, 703 insertions(+)
|
||||
create mode 100644 multipath/mpathconf
|
||||
create mode 100644 multipath/mpathconf.8
|
||||
|
||||
@ -69,10 +69,10 @@ index b9bbb3cf..e720c7f6 100644
|
||||
$(RM) core *.o $(EXEC) *.gz
|
||||
diff --git a/multipath/mpathconf b/multipath/mpathconf
|
||||
new file mode 100644
|
||||
index 00000000..2f4f3eaf
|
||||
index 00000000..039b3e47
|
||||
--- /dev/null
|
||||
+++ b/multipath/mpathconf
|
||||
@@ -0,0 +1,555 @@
|
||||
@@ -0,0 +1,561 @@
|
||||
+#!/bin/bash
|
||||
+#
|
||||
+# Copyright (C) 2010 Red Hat, Inc. All rights reserved.
|
||||
@ -315,7 +315,7 @@ index 00000000..2f4f3eaf
|
||||
+ echo "--enable_foreign must be either 'y' or 'n'"
|
||||
+ exit 1
|
||||
+ fi
|
||||
+ if [ -z "$ENABLE" -a -z "$FIND" -a -z "$FRIENDLY" -a -z "$PROPERTY" ]; then
|
||||
+ if [ -z "$ENABLE" -a -z "$FIND" -a -z "$FRIENDLY" -a -z "$PROPERTY" -a -z "$FOREIGN" ]; then
|
||||
+ SHOW_STATUS=1
|
||||
+ fi
|
||||
+ if [ -n "$MODULE" ] && [ "$MODULE" != "y" -a "$MODULE" != "n" ]; then
|
||||
@ -390,46 +390,50 @@ index 00000000..2f4f3eaf
|
||||
+fi
|
||||
+
|
||||
+if [ "$HAVE_BLACKLIST" = "1" ]; then
|
||||
+ if sed -n '/^blacklist[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*devnode \"\.\?\*\"" ; then
|
||||
+ if sed -n '/^blacklist[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*devnode[[:space:]][[:space:]]*\"\.\?\*\"" ; then
|
||||
+ HAVE_DISABLE=1
|
||||
+ elif sed -n '/^blacklist[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*#[[:space:]]*devnode \"\.\?\*\"" ; then
|
||||
+ elif sed -n '/^blacklist[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*#[[:space:]]*devnode[[:space:]][[:space:]]*\"\.\?\*\"" ; then
|
||||
+ HAVE_DISABLE=0
|
||||
+ fi
|
||||
+fi
|
||||
+
|
||||
+if [ "$HAVE_BLACKLIST" = "1" ]; then
|
||||
+ if sed -n '/^blacklist[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*wwid \"\.\?\*\"" ; then
|
||||
+ if sed -n '/^blacklist[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*wwid[[:space:]][[:space:]]*\"\.\?\*\"" ; then
|
||||
+ HAVE_WWID_DISABLE=1
|
||||
+ elif sed -n '/^blacklist[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*#[[:space:]]*wwid \"\.\?\*\"" ; then
|
||||
+ elif sed -n '/^blacklist[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*#[[:space:]]*wwid[[:space:]][[:space:]]*\"\.\?\*\"" ; then
|
||||
+ HAVE_WWID_DISABLE=0
|
||||
+ fi
|
||||
+fi
|
||||
+
|
||||
+if [ "$HAVE_DEFAULTS" = "1" ]; then
|
||||
+ HAVE_FIND=`sed -n '/^defaults[[:space:]]*{/,/^}/ p' $TMPFILE | sed -n 's/^[[:blank:]]*find_multipaths[[:blank:]]*\([^[:blank:]]*\).*$/\1/p' | sed -n 1p`
|
||||
+ HAVE_FIND=`sed -n '/^defaults[[:space:]]*{/,/^}/ p' $TMPFILE | sed -n 's/^[[:blank:]]*find_multipaths[[:blank:]][[:blank:]]*\([^[:blank:]]*\).*$/\1/p' | sed -n 1p`
|
||||
+ if [ "$HAVE_FIND" = "1" ]; then
|
||||
+ HAVE_FIND="yes"
|
||||
+ elif [ "$HAVE_FIND" = "0" ]; then
|
||||
+ HAVE_FIND="no"
|
||||
+ fi
|
||||
+ if sed -n '/^defaults[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*user_friendly_names[[:space:]]*\(yes\|1\)" ; then
|
||||
+ if sed -n '/^defaults[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*user_friendly_names[[:space:]][[:space:]]*\(yes\|1\)" ; then
|
||||
+ HAVE_FRIENDLY=1
|
||||
+ elif sed -n '/^defaults[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*user_friendly_names[[:space:]]*\(no\|0\)" ; then
|
||||
+ elif sed -n '/^defaults[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*user_friendly_names[[:space:]][[:space:]]*\(no\|0\)" ; then
|
||||
+ HAVE_FRIENDLY=0
|
||||
+ fi
|
||||
+ if sed -n '/^defaults[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*#[[:space:]]*enable_foreign" ; then
|
||||
+ HAVE_FOREIGN=0
|
||||
+ elif sed -n '/^defaults[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*enable_foreign[[:space:]]*\"\^\$\"" ; then
|
||||
+ elif sed -n '/^defaults[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*enable_foreign[[:space:]][[:space:]]*\"\.\*\"" ; then
|
||||
+ HAVE_FOREIGN=1
|
||||
+ elif sed -n '/^defaults[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*enable_foreign" ; then
|
||||
+ elif sed -n '/^defaults[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*enable_foreign[[:space:]][[:space:]]*\"\^\$\"" ; then
|
||||
+ HAVE_FOREIGN=2
|
||||
+ elif sed -n '/^defaults[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*enable_foreign[[:space:]][[:space:]]*\"NONE\"" ; then
|
||||
+ HAVE_FOREIGN=2
|
||||
+ elif sed -n '/^defaults[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*enable_foreign" ; then
|
||||
+ HAVE_FOREIGN=3
|
||||
+ fi
|
||||
+fi
|
||||
+
|
||||
+if [ "$HAVE_EXCEPTIONS" = "1" ]; then
|
||||
+ if sed -n '/^blacklist_exceptions[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*property[[:space:]]*\"(SCSI_IDENT_|ID_WWN)\"" ; then
|
||||
+ if sed -n '/^blacklist_exceptions[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*property[[:space:]][[:space:]]*\"(SCSI_IDENT_|ID_WWN)\"" ; then
|
||||
+ HAVE_PROPERTY=1
|
||||
+ elif sed -n '/^blacklist_exceptions[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*#[[:space:]]*property[[:space:]]*\"(SCSI_IDENT_|ID_WWN)\"" ; then
|
||||
+ elif sed -n '/^blacklist_exceptions[[:space:]]*{/,/^}/ p' $TMPFILE | grep -q "^[[:space:]]*#[[:space:]]*property[[:space:]][[:space:]]*\"(SCSI_IDENT_|ID_WWN)\"" ; then
|
||||
+ HAVE_PROPERTY=0
|
||||
+ fi
|
||||
+fi
|
||||
@ -456,8 +460,10 @@ index 00000000..2f4f3eaf
|
||||
+ echo "default property blacklist is enabled"
|
||||
+ fi
|
||||
+ if [ -z "$HAVE_FOREIGN" -o "$HAVE_FOREIGN" = 0 ]; then
|
||||
+ echo "enable_foreign is not set (all foreign multipath devices will be shown)"
|
||||
+ echo "enable_foreign is not set (no foreign multipath devices will be shown)"
|
||||
+ elif [ "$HAVE_FOREIGN" = 1 ]; then
|
||||
+ echo "enable_foreign is set (all foreign multipath devices will be shown)"
|
||||
+ elif [ "$HAVE_FOREIGN" = 2 ]; then
|
||||
+ echo "enable_foreign is set (no foreign multipath devices will be shown)"
|
||||
+ else
|
||||
+ echo "enable_foreign is set (foreign multipath devices may not be shown)"
|
||||
@ -502,14 +508,14 @@ index 00000000..2f4f3eaf
|
||||
+
|
||||
+if [ "$ENABLE" = 2 ]; then
|
||||
+ if [ "$HAVE_DISABLE" = 1 ]; then
|
||||
+ sed -i '/^blacklist[[:space:]]*{/,/^}/ s/^[[:space:]]*devnode \"\.\?\*\"/# devnode ".*"/' $TMPFILE
|
||||
+ sed -i '/^blacklist[[:space:]]*{/,/^}/ s/^[[:space:]]*devnode[[:space:]][[:space:]]*\"\.\?\*\"/# devnode ".*"/' $TMPFILE
|
||||
+ fi
|
||||
+ if [ -z "$HAVE_WWID_DISABLE" ]; then
|
||||
+ sed -i '/^blacklist[[:space:]]*{/ a\
|
||||
+ wwid ".*"
|
||||
+' $TMPFILE
|
||||
+ elif [ "$HAVE_WWID_DISABLE" = 0 ]; then
|
||||
+ sed -i '/^blacklist[[:space:]]*{/,/^}/ s/^[[:space:]]*#[[:space:]]*wwid \"\.\?\*\"/ wwid ".*"/' $TMPFILE
|
||||
+ sed -i '/^blacklist[[:space:]]*{/,/^}/ s/^[[:space:]]*#[[:space:]]*wwid[[:space:]][[:space:]]*\"\.\?\*\"/ wwid ".*"/' $TMPFILE
|
||||
+ fi
|
||||
+ if [ "$HAVE_EXCEPTIONS" = 1 ]; then
|
||||
+ sed -i '/^blacklist_exceptions[[:space:]]*{/,/^}/ {/^[[:space:]]*wwid/ d}' $TMPFILE
|
||||
@ -523,7 +529,7 @@ index 00000000..2f4f3eaf
|
||||
+ add_blacklist_exceptions
|
||||
+elif [ "$ENABLE" = 1 ]; then
|
||||
+ if [ "$HAVE_DISABLE" = 1 ]; then
|
||||
+ sed -i '/^blacklist[[:space:]]*{/,/^}/ s/^[[:space:]]*devnode \"\.\?\*\"/# devnode ".*"/' $TMPFILE
|
||||
+ sed -i '/^blacklist[[:space:]]*{/,/^}/ s/^[[:space:]]*devnode[[:space:]][[:space:]]*\"\.\?\*\"/# devnode ".*"/' $TMPFILE
|
||||
+ fi
|
||||
+elif [ "$ENABLE" = 0 ]; then
|
||||
+ if [ -z "$HAVE_DISABLE" ]; then
|
||||
@ -531,7 +537,7 @@ index 00000000..2f4f3eaf
|
||||
+ devnode ".*"
|
||||
+' $TMPFILE
|
||||
+ elif [ "$HAVE_DISABLE" = 0 ]; then
|
||||
+ sed -i '/^blacklist[[:space:]]*{/,/^}/ s/^[[:space:]]*#[[:space:]]*devnode \"\.\?\*\"/ devnode ".*"/' $TMPFILE
|
||||
+ sed -i '/^blacklist[[:space:]]*{/,/^}/ s/^[[:space:]]*#[[:space:]]*devnode[[:space:]][[:space:]]*\"\.\?\*\"/ devnode ".*"/' $TMPFILE
|
||||
+ fi
|
||||
+fi
|
||||
+
|
||||
@ -542,14 +548,14 @@ index 00000000..2f4f3eaf
|
||||
+' $TMPFILE
|
||||
+ CHANGED_CONFIG=1
|
||||
+ elif [ "$FIND" != "$HAVE_FIND" ]; then
|
||||
+ sed -i '/^defaults[[:space:]]*{/,/^}/ s/^[[:blank:]]*find_multipaths[[:blank:]]*[^[:blank:]]*/ find_multipaths '"$FIND"'/' $TMPFILE
|
||||
+ sed -i '/^defaults[[:space:]]*{/,/^}/ s/^[[:blank:]]*find_multipaths[[:blank:]][[:blank:]]*[^[:blank:]]*/ find_multipaths '"$FIND"'/' $TMPFILE
|
||||
+ CHANGED_CONFIG=1
|
||||
+ fi
|
||||
+fi
|
||||
+
|
||||
+if [ "$FRIENDLY" = "n" ]; then
|
||||
+ if [ "$HAVE_FRIENDLY" = 1 ]; then
|
||||
+ sed -i '/^defaults[[:space:]]*{/,/^}/ s/^[[:space:]]*user_friendly_names[[:space:]]*\(yes\|1\)/ user_friendly_names no/' $TMPFILE
|
||||
+ sed -i '/^defaults[[:space:]]*{/,/^}/ s/^[[:space:]]*user_friendly_names[[:space:]][[:space:]]*\(yes\|1\)/ user_friendly_names no/' $TMPFILE
|
||||
+ CHANGED_CONFIG=1
|
||||
+ fi
|
||||
+elif [ "$FRIENDLY" = "y" ]; then
|
||||
@ -559,14 +565,14 @@ index 00000000..2f4f3eaf
|
||||
+' $TMPFILE
|
||||
+ CHANGED_CONFIG=1
|
||||
+ elif [ "$HAVE_FRIENDLY" = 0 ]; then
|
||||
+ sed -i '/^defaults[[:space:]]*{/,/^}/ s/^[[:space:]]*user_friendly_names[[:space:]]*\(no\|0\)/ user_friendly_names yes/' $TMPFILE
|
||||
+ sed -i '/^defaults[[:space:]]*{/,/^}/ s/^[[:space:]]*user_friendly_names[[:space:]][[:space:]]*\(no\|0\)/ user_friendly_names yes/' $TMPFILE
|
||||
+ CHANGED_CONFIG=1
|
||||
+ fi
|
||||
+fi
|
||||
+
|
||||
+if [ "$PROPERTY" = "n" ]; then
|
||||
+ if [ "$HAVE_PROPERTY" = 1 ]; then
|
||||
+ sed -i '/^blacklist_exceptions[[:space:]]*{/,/^}/ s/^[[:space:]]*property[[:space:]]*\"(SCSI_IDENT_|ID_WWN)\"/# property \"(SCSI_IDENT_|ID_WWN)\"/' $TMPFILE
|
||||
+ sed -i '/^blacklist_exceptions[[:space:]]*{/,/^}/ s/^[[:space:]]*property[[:space:]][[:space:]]*\"(SCSI_IDENT_|ID_WWN)\"/# property \"(SCSI_IDENT_|ID_WWN)\"/' $TMPFILE
|
||||
+ CHANGED_CONFIG=1
|
||||
+ fi
|
||||
+elif [ "$PROPERTY" = "y" ]; then
|
||||
@ -576,24 +582,24 @@ index 00000000..2f4f3eaf
|
||||
+' $TMPFILE
|
||||
+ CHANGED_CONFIG=1
|
||||
+ elif [ "$HAVE_PROPERTY" = 0 ]; then
|
||||
+ sed -i '/^blacklist_exceptions[[:space:]]*{/,/^}/ s/^[[:space:]]*#[[:space:]]*property[[:space:]]*\"(SCSI_IDENT_|ID_WWN)\"/ property \"(SCSI_IDENT_|ID_WWN)\"/' $TMPFILE
|
||||
+ sed -i '/^blacklist_exceptions[[:space:]]*{/,/^}/ s/^[[:space:]]*#[[:space:]]*property[[:space:]][[:space:]]*\"(SCSI_IDENT_|ID_WWN)\"/ property \"(SCSI_IDENT_|ID_WWN)\"/' $TMPFILE
|
||||
+ CHANGED_CONFIG=1
|
||||
+ fi
|
||||
+fi
|
||||
+
|
||||
+if [ "$FOREIGN" = "y" ]; then
|
||||
+ if [ "$HAVE_FOREIGN" = 1 -o "$HAVE_FOREIGN" = 2 ]; then
|
||||
+if [ "$FOREIGN" = "n" ]; then
|
||||
+ if [ "$HAVE_FOREIGN" = 1 -o "$HAVE_FOREIGN" = 3 ]; then
|
||||
+ sed -i '/^defaults[[:space:]]*{/,/^}/ s/^[[:space:]]*enable_foreign/# enable_foreign/' $TMPFILE
|
||||
+ CHANGED_CONFIG=1
|
||||
+ fi
|
||||
+elif [ "$FOREIGN" = "n" ]; then
|
||||
+elif [ "$FOREIGN" = "y" ]; then
|
||||
+ if [ -z "$HAVE_FOREIGN" ]; then
|
||||
+ sed -i '/^defaults[[:space:]]*{/ a\
|
||||
+ enable_foreign "^$"
|
||||
+ enable_foreign ".*"
|
||||
+' $TMPFILE
|
||||
+ CHANGED_CONFIG=1
|
||||
+ elif [ "$HAVE_FOREIGN" = 0 -o "$HAVE_FOREIGN" = 2 ]; then
|
||||
+ sed -i '/^defaults[[:space:]]*{/,/^}/ s/^[[:space:]]*#\?[[:space:]]*enable_foreign.*$/ enable_foreign "^$"/' $TMPFILE
|
||||
+ elif [ "$HAVE_FOREIGN" = 0 -o "$HAVE_FOREIGN" = 2 -o "$HAVE_FOREIGN" = 3 ]; then
|
||||
+ sed -i '/^defaults[[:space:]]*{/,/^}/ s/^[[:space:]]*#\?[[:space:]]*enable_foreign.*$/ enable_foreign ".*"/' $TMPFILE
|
||||
+ CHANGED_CONFIG=1
|
||||
+ fi
|
||||
+fi
|
||||
@ -630,7 +636,7 @@ index 00000000..2f4f3eaf
|
||||
+fi
|
||||
diff --git a/multipath/mpathconf.8 b/multipath/mpathconf.8
|
||||
new file mode 100644
|
||||
index 00000000..83515eb4
|
||||
index 00000000..a14d831e
|
||||
--- /dev/null
|
||||
+++ b/multipath/mpathconf.8
|
||||
@@ -0,0 +1,135 @@
|
||||
@ -730,11 +736,11 @@ index 00000000..83515eb4
|
||||
+present. This command can be used along with any other command.
|
||||
+.TP
|
||||
+.B --enable_foreign\fP { \fBy\fP | \fBn\fP }
|
||||
+If set to \fBn\fP, this adds the line
|
||||
+.B enable_foreign "^$"
|
||||
+If set to \fBy\fP, this adds the line
|
||||
+.B enable_foreign ".*"
|
||||
+to the
|
||||
+.B /etc/multipath.conf
|
||||
+defaults section. if set to \fBy\fP, this removes the line, if present. This
|
||||
+defaults section. if set to \fBn\fP, this removes the line, if present. This
|
||||
+command can be used along with any other command.
|
||||
+.TP
|
||||
+.B --outfile \fB<filename>\fP
|
@ -20,7 +20,7 @@ Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
3 files changed, 59 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/multipath/main.c b/multipath/main.c
|
||||
index 8fc0e15f..9fe53dcd 100644
|
||||
index 33377147..85e4481d 100644
|
||||
--- a/multipath/main.c
|
||||
+++ b/multipath/main.c
|
||||
@@ -122,7 +122,7 @@ usage (char * progname)
|
||||
@ -41,7 +41,7 @@ index 8fc0e15f..9fe53dcd 100644
|
||||
" -c check if a device should be a path in a multipath device\n"
|
||||
" -C check if a multipath device has usable paths\n"
|
||||
" -q allow queue_if_no_path when multipathd is not running\n"
|
||||
@@ -450,6 +452,50 @@ static void cleanup_vecs(void)
|
||||
@@ -455,6 +457,50 @@ static void cleanup_vecs(void)
|
||||
free_pathvec(vecs.pathvec, FREE_PATHS);
|
||||
}
|
||||
|
||||
@ -92,7 +92,7 @@ index 8fc0e15f..9fe53dcd 100644
|
||||
static int
|
||||
configure (struct config *conf, enum mpath_cmds cmd,
|
||||
enum devtypes dev_type, char *devpath)
|
||||
@@ -828,7 +874,7 @@ main (int argc, char *argv[])
|
||||
@@ -833,7 +879,7 @@ main (int argc, char *argv[])
|
||||
conf->retrigger_tries = 0;
|
||||
conf->force_sync = 1;
|
||||
atexit(cleanup_vecs);
|
||||
@ -101,7 +101,7 @@ index 8fc0e15f..9fe53dcd 100644
|
||||
switch(arg) {
|
||||
case 1: printf("optarg : %s\n",optarg);
|
||||
break;
|
||||
@@ -905,6 +951,10 @@ main (int argc, char *argv[])
|
||||
@@ -910,6 +956,10 @@ main (int argc, char *argv[])
|
||||
case 'T':
|
||||
cmd = CMD_DUMP_CONFIG;
|
||||
break;
|
||||
@ -113,7 +113,7 @@ index 8fc0e15f..9fe53dcd 100644
|
||||
usage(argv[0]);
|
||||
exit(RTVL_OK);
|
||||
diff --git a/multipath/multipath.8 b/multipath/multipath.8
|
||||
index 5b29a5d9..0478f4e7 100644
|
||||
index 17df59f5..5ca75359 100644
|
||||
--- a/multipath/multipath.8
|
||||
+++ b/multipath/multipath.8
|
||||
@@ -63,7 +63,7 @@ multipath \- Device mapper target autoconfig.
|
@ -13,7 +13,7 @@ Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||||
1 file changed, 2 insertions(+), 16 deletions(-)
|
||||
|
||||
diff --git a/libmultipath/discovery.c b/libmultipath/discovery.c
|
||||
index bfe2f56c..4bb7ba2f 100644
|
||||
index e9f5703c..7c1bcdf0 100644
|
||||
--- a/libmultipath/discovery.c
|
||||
+++ b/libmultipath/discovery.c
|
||||
@@ -1135,12 +1135,9 @@ parse_vpd_pg83(const unsigned char *in, size_t in_len,
|
@ -1,6 +1,6 @@
|
||||
Name: device-mapper-multipath
|
||||
Version: 0.8.6
|
||||
Release: 4%{?dist}
|
||||
Release: 5%{?dist}
|
||||
Summary: Tools to manage multipath devices using device-mapper
|
||||
License: GPLv2
|
||||
URL: http://christophe.varoqui.free.fr/
|
||||
@ -25,16 +25,24 @@ Patch0012: 0012-libdmmp-use-KBUILD_BUILD_TIMESTAMP-when-building-man.patch
|
||||
Patch0013: 0013-multipath-tools-add-info-about-HPE-Alletra-6000-and-.patch
|
||||
Patch0014: 0014-multipathd-don-t-start-in-containers.patch
|
||||
Patch0015: 0015-libmultipath-fix-build-without-LIBDM_API_DEFERRED.patch
|
||||
Patch0016: 0016-RH-fixup-udev-rules-for-redhat.patch
|
||||
Patch0017: 0017-RH-Remove-the-property-blacklist-exception-builtin.patch
|
||||
Patch0018: 0018-RH-don-t-start-without-a-config-file.patch
|
||||
Patch0019: 0019-RH-Fix-nvme-function-missing-argument.patch
|
||||
Patch0020: 0020-RH-use-rpm-optflags-if-present.patch
|
||||
Patch0021: 0021-RH-add-mpathconf.patch
|
||||
Patch0022: 0022-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch
|
||||
Patch0023: 0023-RH-reset-default-find_mutipaths-value-to-off.patch
|
||||
Patch0024: 0024-RH-attempt-to-get-ANA-info-via-sysfs-first.patch
|
||||
Patch0025: 0025-RH-make-parse_vpd_pg83-match-scsi_id-output.patch
|
||||
Patch0016: 0016-libmultipath-use-uint64_t-for-sg_id.lun.patch
|
||||
Patch0017: 0017-multipath-tools-Remove-trailing-leading-whitespaces.patch
|
||||
Patch0018: 0018-multipath-tools-make-HUAWEI-XSG1-config-work-with-al.patch
|
||||
Patch0019: 0019-multipath.conf-fix-typo-in-ghost_delay-description.patch
|
||||
Patch0020: 0020-mpathpersist-fail-commands-when-no-usable-paths-exis.patch
|
||||
Patch0021: 0021-multipath-print-warning-if-multipathd-is-not-running.patch
|
||||
Patch0022: 0022-libmultipath-remove-unneeded-code-in-coalesce_paths.patch
|
||||
Patch0023: 0023-libmultipath-deal-with-dynamic-PTHREAD_STACK_MIN.patch
|
||||
Patch0024: 0024-RH-fixup-udev-rules-for-redhat.patch
|
||||
Patch0025: 0025-RH-Remove-the-property-blacklist-exception-builtin.patch
|
||||
Patch0026: 0026-RH-don-t-start-without-a-config-file.patch
|
||||
Patch0027: 0027-RH-Fix-nvme-function-missing-argument.patch
|
||||
Patch0028: 0028-RH-use-rpm-optflags-if-present.patch
|
||||
Patch0029: 0029-RH-add-mpathconf.patch
|
||||
Patch0030: 0030-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch
|
||||
Patch0031: 0031-RH-reset-default-find_mutipaths-value-to-off.patch
|
||||
Patch0032: 0032-RH-attempt-to-get-ANA-info-via-sysfs-first.patch
|
||||
Patch0033: 0033-RH-make-parse_vpd_pg83-match-scsi_id-output.patch
|
||||
|
||||
# runtime
|
||||
Requires: %{name}-libs = %{version}-%{release}
|
||||
@ -232,6 +240,13 @@ fi
|
||||
%{_pkgconfdir}/libdmmp.pc
|
||||
|
||||
%changelog
|
||||
* Fri Jul 30 2021 Benjamin Marzinski <bmarzins@redhat.com> - 0.8.6-5
|
||||
- Update to the head of the upstream staging branch plus redhat patches
|
||||
* Patches 0016-0018 are from the upstream staging branch
|
||||
* Patches 0019-0024 have been submitted upstream
|
||||
- Rename files
|
||||
* Previous patches 0016-0025 are now patches 0024-0033
|
||||
|
||||
* Wed Jul 21 2021 Fedora Release Engineering <releng@fedoraproject.org> - 0.8.6-4
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user