vdev: skip faulting disks pending removal

This patch fixes a race where vdev_remove_wanted may be set after probe
initiation, which could otherwise trigger redundant fault and removal.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Alexander Motin <mav@FreeBSD.org>
Reviewed-by: Tony Hutter <hutter2@llnl.gov>
Signed-off-by: Ameer Hamza <ahamza@ixsystems.com>
Closes #17400
This commit is contained in:
Ameer Hamza 2025-05-29 17:47:26 +05:00 committed by Brian Behlendorf
parent 1d482ca6e3
commit b3b3cd1e4f

View File

@ -1772,8 +1772,11 @@ vdev_probe_done(zio_t *zio)
* change the state in a spa_async_request. Probes that * change the state in a spa_async_request. Probes that
* were initiated from a vdev_open can change the state * were initiated from a vdev_open can change the state
* as part of the open call. * as part of the open call.
* Skip fault injection if this vdev is already removed
* or a removal is pending.
*/ */
if (vps->vps_zio_done_probe) { if (vps->vps_zio_done_probe &&
!vd->vdev_remove_wanted && !vd->vdev_removed) {
vd->vdev_fault_wanted = B_TRUE; vd->vdev_fault_wanted = B_TRUE;
spa_async_request(spa, SPA_ASYNC_FAULT_VDEV); spa_async_request(spa, SPA_ASYNC_FAULT_VDEV);
} }