Change patch format to remove Git version * Patches 0001-0122 only have the patch format modified Update to the head of the upstream staging branch plus redhat patches * Patches 0123-0134 & 1036-0142 are from the upstream staging branch * Patches 0143-1046 have been submitted upstream * Patch 0156 is a Red Hat only patch. Red Hat udev rules set ID_SERIAL from 60-persistent-storage.rules instead of 55-scsi-sg3_id.rules. Multipath's parse_vpd_pg83() function needs to match the ID_SERIAL value from udev. Rename files * Previous patches 0123-0132 are now patches 1035 & 0147-0155
86 lines
3.1 KiB
Diff
86 lines
3.1 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Martin Wilck <mwilck@suse.com>
|
|
Date: Tue, 2 Feb 2021 19:55:28 +0100
|
|
Subject: [PATCH] libmultipath: pathinfo: call filter_property only with
|
|
DI_BLACKLIST
|
|
|
|
With the previous change to call filter_property() after sysfs_pathinfo(),
|
|
it can't happen any more that filter_property() is called from pathinfo
|
|
with uid_attribute not set. This may cause pathinfo() to return failure
|
|
in some cases where it should actually proceed (e.g. when called from
|
|
"multipath -m" -> get_refwwid(). Therefore, don't call filter_property()
|
|
any more unless DI_BLACKLIST is set.
|
|
|
|
Reviewed-by: Benjamin Marzinski <bmarzins@redhat.com>
|
|
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
|
---
|
|
libmultipath/discovery.c | 16 ++++++----------
|
|
tests/test-lib.c | 17 +++++++++--------
|
|
2 files changed, 15 insertions(+), 18 deletions(-)
|
|
|
|
diff --git a/libmultipath/discovery.c b/libmultipath/discovery.c
|
|
index febcd0ae..9be94cd1 100644
|
|
--- a/libmultipath/discovery.c
|
|
+++ b/libmultipath/discovery.c
|
|
@@ -2255,8 +2255,8 @@ int pathinfo(struct path *pp, struct config *conf, int mask)
|
|
* uid_attribute is required for filter_property below,
|
|
* and needs access to pp->hwe.
|
|
*/
|
|
- if (!(mask & DI_SYSFS) && !pp->uid_attribute &&
|
|
- VECTOR_SIZE(pp->hwe) == 0)
|
|
+ if (!(mask & DI_SYSFS) && (mask & DI_BLACKLIST) &&
|
|
+ !pp->uid_attribute && VECTOR_SIZE(pp->hwe) == 0)
|
|
mask |= DI_SYSFS;
|
|
}
|
|
|
|
@@ -2295,17 +2295,13 @@ int pathinfo(struct path *pp, struct config *conf, int mask)
|
|
}
|
|
}
|
|
|
|
- if (pp->udev) {
|
|
+ if (mask & DI_BLACKLIST && mask & DI_SYSFS) {
|
|
/* uid_attribute is required for filter_property() */
|
|
- if (!pp->uid_attribute)
|
|
+ if (pp->udev && !pp->uid_attribute)
|
|
select_getuid(conf, pp);
|
|
|
|
- if (filter_property(conf, pp->udev, 4, pp->uid_attribute) > 0)
|
|
- return PATHINFO_SKIPPED;
|
|
- }
|
|
-
|
|
- if (mask & DI_BLACKLIST && mask & DI_SYSFS) {
|
|
- if (filter_device(conf->blist_device, conf->elist_device,
|
|
+ if (filter_property(conf, pp->udev, 4, pp->uid_attribute) > 0 ||
|
|
+ filter_device(conf->blist_device, conf->elist_device,
|
|
pp->vendor_id, pp->product_id, pp->dev) > 0 ||
|
|
filter_protocol(conf->blist_protocol, conf->elist_protocol,
|
|
pp) > 0)
|
|
diff --git a/tests/test-lib.c b/tests/test-lib.c
|
|
index 960a7665..f5542ed0 100644
|
|
--- a/tests/test-lib.c
|
|
+++ b/tests/test-lib.c
|
|
@@ -260,14 +260,15 @@ void mock_pathinfo(int mask, const struct mocked_path *mp)
|
|
if (mask & DI_SYSFS)
|
|
mock_sysfs_pathinfo(mp);
|
|
|
|
- /* filter_property */
|
|
- will_return(__wrap_udev_device_get_sysname, mp->devnode);
|
|
- if (mp->flags & BL_BY_PROPERTY) {
|
|
- will_return(__wrap_udev_list_entry_get_name, "BAZ");
|
|
- return;
|
|
- } else
|
|
- will_return(__wrap_udev_list_entry_get_name,
|
|
- "SCSI_IDENT_LUN_NAA_EXT");
|
|
+ if (mask & DI_BLACKLIST) {
|
|
+ will_return(__wrap_udev_device_get_sysname, mp->devnode);
|
|
+ if (mp->flags & BL_BY_PROPERTY) {
|
|
+ will_return(__wrap_udev_list_entry_get_name, "BAZ");
|
|
+ return;
|
|
+ } else
|
|
+ will_return(__wrap_udev_list_entry_get_name,
|
|
+ "SCSI_IDENT_LUN_NAA_EXT");
|
|
+ }
|
|
|
|
if (mp->flags & BL_BY_DEVICE &&
|
|
(mask & DI_BLACKLIST && mask & DI_SYSFS))
|