Modify 0136-RHBZ-1304687-wait-for-map-add.patch * switch to missing_uev_wait_timeout to stop waiting for uev Refresh 0137-RHBZ-1280524-clear-chkr-msg.patch Refresh 0150-RHBZ-1253913-fix-startup-msg.patch Refresh 0154-UPBZ-1291406-disable-reinstate.patch Refresh 0156-UPBZ-1313324-dont-fail-discovery.patch Refresh 0161-RHBZ-1311659-no-kpartx.patch Refresh 0167-RHBZ-1335176-fix-show-cmds.patch Add 0173-RH-update-man-page.patch Add 0174-RHBZ-1362396-modprobe.patch * make starting the multipathd service modprobe dm-multipath in the sysvinit scripts Add 0175-RHBZ-1357382-ordering.patch * force multipathd.service to start after systemd-udev-trigger.service Add 0176-RHBZ-1363830-fix-rename.patch * initialized a variable to make dm_rename not fail randomly Add 0177-libmultipath-correctly-initialize-pp-sg_id.patch * This and all the following patches add the rbd patch checker Add 0178-libmultipath-add-rbd-discovery.patch Add 0179-multipath-tools-add-checker-callout-to-repair-path.patch Add 0180-multipath-tools-Add-rbd-checker.patch Add 0181-multipath-tools-Add-rbd-to-the-hwtable.patch Add 0182-multipath-tools-check-for-initialized-checker-before.patch Add 0183-multipathd-Don-t-call-repair-on-blacklisted-path.patch Add 0184-rbd-fix-sync-repair-support.patch Add 0185-rbd-check-for-nonshared-clients.patch Add 0186-rbd-check-for-exclusive-lock-enabled.patch Add 0187-rbd-fixup-log-messages.patch Add 0188-RHBZ-1368501-dont-exit.patch * make multipathd not exit if it encounters recoverable errors on startup Add 0189-RHBZ-1368211-remove-retries.patch * add "remove_retries" multipath.conf parameter to make multiple attempts to remove a multipath device if it is busy. Add 0190-RHBZ-1380602-rbd-lock-on-read.patch * pass lock_on_read when remapping image Add 0191-RHBZ-1169168-disable-changed-paths.patch * add "disabled_changed_wwids" multipath.conf parameter to disable paths whose wwid changes Add 0192-RHBZ-1362409-infinibox-config.patch Add 0194-RHBZ-1351964-kpartx-recurse.patch * fix recursion on corrupt dos partitions Add 0195-RHBZ-1359510-no-daemon-msg.patch * print a messages when multipathd isn't running Add 0196-RHBZ-1239173-dont-set-flag.patch * don't set reload flag on reloads when you gain your first valid path Add 0197-RHBZ-1394059-max-sectors-kb.patch * add "max_sectors_kb" multipath.conf parameter to set max_sectors_kb on a multipath device and all its path devices Add 0198-RHBZ-1372032-detect-path-checker.patch * add "detect_checker" multipath.conf parameter to detect ALUA arrays and set the path checker to TUR Add 0199-RHBZ-1279355-3pardata-config.patch Add 0200-RHBZ-1402092-orphan-status.patch * clear status on orphan paths Add 0201-RHBZ-1403552-silence-warning.patch Add 0202-RHBZ-1362120-skip-prio.patch * don't run prio on failed paths Add 0203-RHBZ-1363718-add-msgs.patch Add 0204-RHBZ-1406226-nimble-config.patch Add 0205-RHBZ-1416569-reset-stats.patch * add "reset maps stats" and "reset map <map> stats" multipathd interactive commands to reset the stats tracked by multipathd Add 0206-RHBZ-1239173-pt2-no-paths.patch * make multipath correctly disable scanning and rules running when it gets a uevent and there are not valid paths. Add 0207-UP-add-libmpathcmd.patch * New shared library, libmpathcmd, that sends and receives messages from multipathd. device-mapper-multipath now uses this library internally. Add 0208-UPBZ-1430097-multipathd-IPC-changes.patch * validation that modifying commands are coming from root. Add 0209-UPBZ-1430097-multipath-C-API.patch * New shared library. libdmmp, that presents the information from multipathd in a structured manner to make it easier for callers to use Add 0210-RH-fix-uninstall.patch * Minor compilation fixes Add 0211-RH-strlen-fix.patch * checks that variables are not NULL before passing them to strlen Add 0212-RHBZ-1431562-for-read-only.patch Make 3 new subpackages * device-mapper-multipath-devel, libdmmp, and libdmmp-devel. libmpathcmd and libmpathprio are in device-mapper-multipath-libs and device-mapper-multipath-devel. libdmmp is in its own subpackages Move libmpathprio devel files to device-mapper-multipath-devel Added BuildRequires on librados2-devel
211 lines
6.8 KiB
Diff
211 lines
6.8 KiB
Diff
---
|
|
libmultipath/config.c | 1 +
|
|
libmultipath/config.h | 1 +
|
|
libmultipath/dict.c | 33 +++++++++++++++++++++++++++++++++
|
|
libmultipath/discovery.c | 11 ++++++-----
|
|
libmultipath/discovery.h | 1 +
|
|
libmultipath/structs.h | 1 +
|
|
multipathd/main.c | 26 ++++++++++++++++++++++++++
|
|
7 files changed, 69 insertions(+), 5 deletions(-)
|
|
|
|
Index: multipath-tools-130222/libmultipath/discovery.c
|
|
===================================================================
|
|
--- multipath-tools-130222.orig/libmultipath/discovery.c
|
|
+++ multipath-tools-130222/libmultipath/discovery.c
|
|
@@ -1155,8 +1155,8 @@ free_dev:
|
|
return ret;
|
|
}
|
|
|
|
-static int
|
|
-get_uid (struct path * pp)
|
|
+int
|
|
+get_uid (struct path * pp, struct udev_device *udev)
|
|
{
|
|
char *c;
|
|
const char *value;
|
|
@@ -1165,7 +1165,7 @@ get_uid (struct path * pp)
|
|
if (!pp->uid_attribute)
|
|
select_getuid(pp);
|
|
|
|
- if (!pp->udev) {
|
|
+ if (!udev) {
|
|
condlog(1, "%s: no udev information", pp->dev);
|
|
return 1;
|
|
}
|
|
@@ -1180,7 +1180,7 @@ get_uid (struct path * pp)
|
|
pp->tick = conf->retrigger_delay;
|
|
}
|
|
} else {
|
|
- value = udev_device_get_property_value(pp->udev,
|
|
+ value = udev_device_get_property_value(udev,
|
|
pp->uid_attribute);
|
|
if ((!value || strlen(value) == 0) &&
|
|
conf->cmd == CMD_VALID_PATH)
|
|
@@ -1194,6 +1194,7 @@ get_uid (struct path * pp)
|
|
len = strlen(value);
|
|
}
|
|
strncpy(pp->wwid, value, len);
|
|
+ condlog(4, "%s: got wwid of '%s'", pp->dev, pp->wwid);
|
|
pp->missing_udev_info = INFO_OK;
|
|
pp->tick = 0;
|
|
} else {
|
|
@@ -1282,7 +1283,7 @@ pathinfo (struct path *pp, vector hwtabl
|
|
}
|
|
|
|
if ((mask & DI_WWID) && !strlen(pp->wwid))
|
|
- get_uid(pp);
|
|
+ get_uid(pp, pp->udev);
|
|
if (mask & DI_BLACKLIST && mask & DI_WWID) {
|
|
if (filter_wwid(conf->blist_wwid, conf->elist_wwid,
|
|
pp->wwid) > 0) {
|
|
Index: multipath-tools-130222/libmultipath/discovery.h
|
|
===================================================================
|
|
--- multipath-tools-130222.orig/libmultipath/discovery.h
|
|
+++ multipath-tools-130222/libmultipath/discovery.h
|
|
@@ -44,6 +44,7 @@ int sysfs_set_scsi_tmo (struct multipath
|
|
int sysfs_get_timeout(struct path *pp, unsigned int *timeout);
|
|
int sysfs_get_host_pci_name(struct path *pp, char *pci_name);
|
|
int sysfs_get_iscsi_ip_address(struct path *pp, char *ip_address);
|
|
+int get_uid (struct path * pp, struct udev_device *udev);
|
|
|
|
/*
|
|
* discovery bitmask
|
|
Index: multipath-tools-130222/libmultipath/structs.h
|
|
===================================================================
|
|
--- multipath-tools-130222.orig/libmultipath/structs.h
|
|
+++ multipath-tools-130222/libmultipath/structs.h
|
|
@@ -209,6 +209,7 @@ struct path {
|
|
int fd;
|
|
int missing_udev_info;
|
|
int retriggers;
|
|
+ int wwid_changed;
|
|
|
|
/* configlet pointers */
|
|
struct hwentry * hwe;
|
|
Index: multipath-tools-130222/multipathd/main.c
|
|
===================================================================
|
|
--- multipath-tools-130222.orig/multipathd/main.c
|
|
+++ multipath-tools-130222/multipathd/main.c
|
|
@@ -784,6 +784,26 @@ uev_update_path (struct uevent *uev, str
|
|
if (pp->missing_udev_info == INFO_REQUESTED)
|
|
return uev_add_path(uev, vecs);
|
|
|
|
+ if (conf->disable_changed_wwids &&
|
|
+ (strlen(pp->wwid) || pp->wwid_changed)) {
|
|
+ char wwid[WWID_SIZE];
|
|
+
|
|
+ strcpy(wwid, pp->wwid);
|
|
+ get_uid(pp, uev->udev);
|
|
+ if (strcmp(wwid, pp->wwid) != 0) {
|
|
+ condlog(0, "%s: path wwid changed from '%s' to '%s'. disallowing", uev->kernel, wwid, pp->wwid);
|
|
+ strcpy(pp->wwid, wwid);
|
|
+ if (!pp->wwid_changed) {
|
|
+ pp->wwid_changed = 1;
|
|
+ pp->tick = 1;
|
|
+ dm_fail_path(pp->mpp->alias, pp->dev_t);
|
|
+ }
|
|
+ }
|
|
+ else {
|
|
+ pp->wwid_changed = 0;
|
|
+ }
|
|
+ }
|
|
+
|
|
/* reinit the prio values on change event, in case something is
|
|
* different */
|
|
prio_init(&pp->prio);
|
|
@@ -1284,6 +1304,12 @@ check_path (struct vectors * vecs, struc
|
|
else
|
|
checker_clear_message(&pp->checker);
|
|
|
|
+ if (pp->wwid_changed) {
|
|
+ condlog(2, "%s: path wwid has changed. Refusing to use",
|
|
+ pp->dev);
|
|
+ newstate = PATH_DOWN;
|
|
+ }
|
|
+
|
|
if (newstate == PATH_WILD || newstate == PATH_UNCHECKED) {
|
|
condlog(2, "%s: unusable path", pp->dev);
|
|
pathinfo(pp, conf->hwtable, 0);
|
|
Index: multipath-tools-130222/libmultipath/config.c
|
|
===================================================================
|
|
--- multipath-tools-130222.orig/libmultipath/config.c
|
|
+++ multipath-tools-130222/libmultipath/config.c
|
|
@@ -681,6 +681,7 @@ load_config (char * file, struct udev *u
|
|
conf->uev_wait_timeout = DEFAULT_UEV_WAIT_TIMEOUT;
|
|
conf->skip_kpartx = DEFAULT_SKIP_KPARTX;
|
|
conf->remove_retries = 0;
|
|
+ conf->disable_changed_wwids = 0;
|
|
|
|
/*
|
|
* preload default hwtable
|
|
Index: multipath-tools-130222/libmultipath/config.h
|
|
===================================================================
|
|
--- multipath-tools-130222.orig/libmultipath/config.h
|
|
+++ multipath-tools-130222/libmultipath/config.h
|
|
@@ -147,6 +147,7 @@ struct config {
|
|
int uev_wait_timeout;
|
|
int skip_kpartx;
|
|
int remove_retries;
|
|
+ int disable_changed_wwids;
|
|
unsigned int version[3];
|
|
|
|
char * dev;
|
|
Index: multipath-tools-130222/libmultipath/dict.c
|
|
===================================================================
|
|
--- multipath-tools-130222.orig/libmultipath/dict.c
|
|
+++ multipath-tools-130222/libmultipath/dict.c
|
|
@@ -953,6 +953,29 @@ def_remove_retries_handler(vector strvec
|
|
return 0;
|
|
}
|
|
|
|
+static int
|
|
+def_disable_changed_wwids_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->disable_changed_wwids = 0;
|
|
+ else if ((strlen(buff) == 3 && !strcmp(buff, "yes")) ||
|
|
+ (strlen(buff) == 1 && !strcmp(buff, "1")))
|
|
+ conf->disable_changed_wwids = 1;
|
|
+ else
|
|
+ conf->disable_changed_wwids = 0;
|
|
+
|
|
+ FREE(buff);
|
|
+ return 0;
|
|
+}
|
|
+
|
|
/*
|
|
* blacklist block handlers
|
|
*/
|
|
@@ -3429,6 +3452,15 @@ snprint_def_remove_retries (char * buff,
|
|
}
|
|
|
|
static int
|
|
+snprint_def_disable_changed_wwids(char * buff, int len, void * data)
|
|
+{
|
|
+ if (conf->disable_changed_wwids == 1)
|
|
+ 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;
|
|
@@ -3508,6 +3540,7 @@ init_keywords(void)
|
|
install_keyword("missing_uev_wait_timeout", &def_uev_wait_timeout_handler, &snprint_def_uev_wait_timeout);
|
|
install_keyword("new_bindings_in_boot", &def_new_bindings_in_boot_handler, &snprint_def_new_bindings_in_boot);
|
|
install_keyword("remove_retries", &def_remove_retries_handler, &snprint_def_remove_retries);
|
|
+ install_keyword("disable_changed_wwids", &def_disable_changed_wwids_handler, &snprint_def_disable_changed_wwids);
|
|
__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);
|