zfs/lib
Tony Hutter 90abfdf8ee 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
2022-03-18 06:54:48 -07:00
..
libavl cppcheck: integrete cppcheck 2021-01-26 16:12:26 -08:00
libefi cppcheck: integrete cppcheck 2021-01-26 16:12:26 -08:00
libicp cppcheck: integrete cppcheck 2021-01-26 16:12:26 -08:00
libnvpair Upgrade to libabigail 2.0.0 2021-11-05 07:59:40 -07:00
libshare freebsd/libshare: nfs: don't send SIGHUP to all processes 2022-02-03 15:28:01 -08:00
libspl FreeBSD: Fix leaked strings in libspl mnttab 2022-02-03 15:28:01 -08:00
libtpool cppcheck: integrete cppcheck 2021-01-26 16:12:26 -08:00
libunicode cppcheck: integrete cppcheck 2021-01-26 16:12:26 -08:00
libuutil Upgrade to libabigail 2.0.0 2021-11-05 07:59:40 -07:00
libzfs get_key_material_https: removed bogus free() call 2022-03-17 10:22:13 -07:00
libzfs_core Upgrade to libabigail 2.0.0 2021-11-05 07:59:40 -07:00
libzfsbootenv Upgrade to libabigail 2.0.0 2021-11-05 07:59:40 -07:00
libzpool file reference counts can get corrupted 2021-09-14 12:37:38 -07:00
libzstd cppcheck: integrete cppcheck 2021-01-26 16:12:26 -08:00
libzutil zed: Misc multipath autoreplace fixes 2022-03-18 06:54:48 -07:00
Makefile.am cppcheck: integrete cppcheck 2021-01-26 16:12:26 -08:00