zfs/lib
Tony Hutter f2f6c18f17
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 
2022-02-24 11:43:39 -08:00
..
libavl lib{efi,avl,share,tpool,zfs_core,zfsbootenv,zutil}: -fvisibility=hidden 2021-06-09 17:04:32 -07:00
libefi libefi: remove efi_type() 2022-01-18 14:40:43 -08:00
libicp module: icp: rip out modhash. Replace the one user with AVL 2022-02-15 16:24:59 -08:00
libnvpair libnvpair: json: suppress wchar_t >=0 warnings 2022-02-18 09:34:43 -08:00
libshare userspace: mark arguments used 2022-02-18 09:34:08 -08:00
libspl userspace: mark arguments used 2022-02-18 09:34:08 -08:00
libtpool libtpool: -Wno-clobbered 2022-02-18 09:34:25 -08:00
libunicode cppcheck: integrete cppcheck 2021-01-26 16:12:26 -08:00
libuutil Add `--enable-asan` and `--enable-ubsan` switches 2022-02-03 14:35:38 -08:00
libzfs log xattr=sa create/remove/update to ZIL 2022-02-22 13:06:43 -08:00
libzfs_core Add `--enable-asan` and `--enable-ubsan` switches 2022-02-03 14:35:38 -08:00
libzfsbootenv Rename fallthrough to zfs_fallthrough 2022-02-15 08:58:59 -08:00
libzpool libzpool: kernel: silence unrelated-function-pointer cast warning 2022-02-18 09:34:47 -08:00
libzstd cppcheck: integrete cppcheck 2021-01-26 16:12:26 -08:00
libzutil zed: Misc multipath autoreplace fixes 2022-02-24 11:43:39 -08:00
Makefile.am Simplify and document OpenZFS library dependencies 2021-10-07 11:31:26 -06:00