zed: Ignore false 'atari' partitions in autoreplace
libudev will sometimes falsely identify an 'atari' partition on a blank disk, preventing it from being used in an autoreplace. This seems to be a known issue. The workaround is to just ignore the fake partition and continue with the autoreplace. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Tony Hutter <hutter2@llnl.gov> Closes #13497 Closes #13632
This commit is contained in:
parent
f48d9b4269
commit
acd7464639
|
@ -208,6 +208,12 @@ zed_udev_monitor(void *arg)
|
||||||
* if this is a disk and it is partitioned, then the
|
* if this is a disk and it is partitioned, then the
|
||||||
* zfs label will reside in a DEVTYPE=partition and
|
* zfs label will reside in a DEVTYPE=partition and
|
||||||
* we can skip passing this event
|
* we can skip passing this event
|
||||||
|
*
|
||||||
|
* Special case: Blank disks are sometimes reported with
|
||||||
|
* an erroneous 'atari' partition, and should not be
|
||||||
|
* excluded from being used as an autoreplace disk:
|
||||||
|
*
|
||||||
|
* https://github.com/openzfs/zfs/issues/13497
|
||||||
*/
|
*/
|
||||||
type = udev_device_get_property_value(dev, "DEVTYPE");
|
type = udev_device_get_property_value(dev, "DEVTYPE");
|
||||||
part = udev_device_get_property_value(dev,
|
part = udev_device_get_property_value(dev,
|
||||||
|
@ -215,15 +221,24 @@ zed_udev_monitor(void *arg)
|
||||||
if (type != NULL && type[0] != '\0' &&
|
if (type != NULL && type[0] != '\0' &&
|
||||||
strcmp(type, "disk") == 0 &&
|
strcmp(type, "disk") == 0 &&
|
||||||
part != NULL && part[0] != '\0') {
|
part != NULL && part[0] != '\0') {
|
||||||
|
const char *devname =
|
||||||
|
udev_device_get_property_value(dev, "DEVNAME");
|
||||||
|
|
||||||
|
if (strcmp(part, "atari") == 0) {
|
||||||
zed_log_msg(LOG_INFO,
|
zed_log_msg(LOG_INFO,
|
||||||
"%s: skip %s since it has a %s partition already",
|
"%s: %s is reporting an atari partition, "
|
||||||
__func__,
|
"but we're going to assume it's a false "
|
||||||
udev_device_get_property_value(dev, "DEVNAME"),
|
"positive and still use it (issue #13497)",
|
||||||
part);
|
__func__, devname);
|
||||||
|
} else {
|
||||||
|
zed_log_msg(LOG_INFO,
|
||||||
|
"%s: skip %s since it has a %s partition "
|
||||||
|
"already", __func__, devname, part);
|
||||||
/* skip and wait for partition event */
|
/* skip and wait for partition event */
|
||||||
udev_device_unref(dev);
|
udev_device_unref(dev);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ignore small partitions
|
* ignore small partitions
|
||||||
|
|
Loading…
Reference in New Issue