aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTony Hutter <hutter2@llnl.gov>2022-03-18 21:06:40 +0000
committerGitHub <noreply@github.com>2022-03-18 21:06:40 +0000
commit515710a1e1a11c7d1aec28adac0c486eae4519f1 (patch)
treebd7ed1ded4c7e03e186404d7aa41004e09219175
parentd42979c6ef1ec10b041c3394d969643f8862f7c3 (diff)
downloadsrc-515710a1e1a11c7d1aec28adac0c486eae4519f1.tar.gz
src-515710a1e1a11c7d1aec28adac0c486eae4519f1.zip
zed: Fix mpath autoreplace on Centos 7
A prior commit included a udev check for MPATH_DEVICE_READY to determine if a path was multipath when doing an autoreplace: f2f6c18 zed: Misc multipath autoreplace fixes However, MPATH_DEVICE_READY is not provided by the older version of udev that's on Centos 7 (it is on Centos 8). This patch instead looks for 'mpath-' in the UUID, which works on both Centos 7 and 8. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Tony Hutter <hutter2@llnl.gov> Closes #13222
-rw-r--r--lib/libzutil/os/linux/zutil_device_path_os.c11
1 files changed, 4 insertions, 7 deletions
diff --git a/lib/libzutil/os/linux/zutil_device_path_os.c b/lib/libzutil/os/linux/zutil_device_path_os.c
index c4a36549dfff..f24696259f23 100644
--- a/lib/libzutil/os/linux/zutil_device_path_os.c
+++ b/lib/libzutil/os/linux/zutil_device_path_os.c
@@ -613,27 +613,24 @@ zfs_get_underlying_path(const char *dev_name)
/*
* A disk is considered a multipath whole disk when:
* DEVNAME key value has "dm-"
- * MPATH_DEVICE_READY is present
- * DM_UUID key exists
+ * DM_UUID key exists and starts with 'mpath-'
* ID_PART_TABLE_TYPE key does not exist or is not gpt
* ID_FS_LABEL key does not exist (disk isn't labeled)
*/
static boolean_t
is_mpath_udev_sane(struct udev_device *dev)
{
- const char *devname, *type, *uuid, *label, *mpath_ready;
+ const char *devname, *type, *uuid, *label;
devname = udev_device_get_property_value(dev, "DEVNAME");
type = udev_device_get_property_value(dev, "ID_PART_TABLE_TYPE");
uuid = udev_device_get_property_value(dev, "DM_UUID");
label = udev_device_get_property_value(dev, "ID_FS_LABEL");
- mpath_ready = udev_device_get_property_value(dev, "MPATH_DEVICE_READY");
if ((devname != NULL && strncmp(devname, "/dev/dm-", 8) == 0) &&
((type == NULL) || (strcmp(type, "gpt") != 0)) &&
- (uuid != NULL) &&
- (label == NULL) &&
- (mpath_ready != NULL && strncmp(mpath_ready, "1", 1) == 0)) {
+ ((uuid != NULL) && (strncmp(uuid, "mpath-", 6) == 0)) &&
+ (label == NULL)) {
return (B_TRUE);
}