From eaa727f4dde0920cc593414dc02634a9c60d34c3 Mon Sep 17 00:00:00 2001 From: Tony Hutter Date: Tue, 5 Jul 2022 18:00:35 -0700 Subject: [PATCH] zed: Use ID_MODEL instead of ID_BUS for autoreplace We tried replacing an NVMe drive using autoreplace, only to see zed reject it with: zed[27955]: zed_udev_monitor: /dev/nvme5n1 no devid source This happened because ZED saw that ID_BUS was not set by udev for the NVMe drive, and thus didn't think it was "real drive". A better option is to look for ID_MODEL instead. In testing, I saw ID_MODEL get set for a SATA drive (RHEL 7), SAS drive (RHEL 8) and NVMe drive (RHEL 8), but not for a virtual drive on a VM. Fixes: #13512 Signed-off-by: Tony Hutter --- cmd/zed/zed_disk_event.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cmd/zed/zed_disk_event.c b/cmd/zed/zed_disk_event.c index c4ca5452354b..4bf447b2043f 100644 --- a/cmd/zed/zed_disk_event.c +++ b/cmd/zed/zed_disk_event.c @@ -169,7 +169,7 @@ zed_udev_monitor(void *arg) while (1) { struct udev_device *dev; const char *action, *type, *part, *sectors; - const char *bus, *uuid; + const char *model, *uuid; const char *class, *subclass; nvlist_t *nvl; boolean_t is_zfs = B_FALSE; @@ -249,9 +249,9 @@ zed_udev_monitor(void *arg) * for matching with vdevs. Preflight here for expected * udev information. */ - bus = udev_device_get_property_value(dev, "ID_BUS"); + model = udev_device_get_property_value(dev, "ID_MODEL"); uuid = udev_device_get_property_value(dev, "DM_UUID"); - if (!is_zfs && (bus == NULL && uuid == NULL)) { + if (!is_zfs && (model == NULL && uuid == NULL)) { zed_log_msg(LOG_INFO, "zed_udev_monitor: %s no devid " "source", udev_device_get_devnode(dev)); udev_device_unref(dev);