HomeFreeBSD

zed: Misc multipath autoreplace fixes

Description

zed: Misc multipath autoreplace fixes

We recently had a case where our operators replaced a bad
multipathed disk, only to see it fail to autoreplace. The
zed logs showed that the multipath replacement disk did not pass
the 'is_dm' test in zfs_process_add() even though it should have.
is_dm is set if there exists a sysfs entry for to the
underlying /dev/sd* paths for the multipath disk. It's
possible this path didn't exist due to a race condition where
the sysfs paths weren't created at the time the udev event came
in to zed, but this was never verified.

This patch updates the check to look for udev properties that
indicate if the new autoreplace disk is an empty multipath disk,
rather than looking for the underlying sysfs entries. It also
adds in additional logging, and fixes a bug where zed allowed
you to use an already zfs-formatted disk from another pool
as a multipath auto-replacement disk.

Furthermore, while testing this patch, I also ran across a case
where a force-faulted disk did not have a ZPOOL_CONFIG_PHYS_PATH
entry in its config. This prevented it from being autoreplaced.
I added additional logic to derive the PHYS_PATH from the PATH if
the PATH was a /dev/disk/by-vdev/ path. For example, if PATH
was /dev/disk/by-vdev/L28, then PHYS_PATH would be L28. This is
safe since by-vdev paths represent physical locations and do not
change between boots.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Tony Hutter <hutter2@llnl.gov>
Closes #13023

Details

Provenance
Tony Hutter <hutter2@llnl.gov>Authored on Feb 24 2022, 7:43 PM
GitHub <noreply@github.com>Committed on Feb 24 2022, 7:43 PM
Parents
rGe25bcf906a42: Fix directory detection in `dkms.mkconf`
Branches
Unknown
Tags
Unknown

Event Timeline

GitHub <noreply@github.com> committed rGf2f6c18f1742: zed: Misc multipath autoreplace fixes (authored by Tony Hutter <hutter2@llnl.gov>).Feb 24 2022, 7:43 PM