diff options
author | Akash B <[email protected]> | 2023-05-25 00:58:09 +0530 |
---|---|---|
committer | GitHub <[email protected]> | 2023-05-24 12:28:09 -0700 |
commit | 9d618615d1ede4dd40a69386bc300580550fd4d0 (patch) | |
tree | 01e6db019695af07a53ee7558e78ffe2547cf425 /tests/runfiles | |
parent | f8447cf22ec39b2ec3498f0205d4fde3d7efcb27 (diff) |
Fix concurrent resilvers initiated at same time
For draid vdevs it was possible to initiate both the
sequential and healing resilver at same time.
This fixes the following two scenarios.
1) There's a window where a sequential rebuild can
be started via ZED even if a healing resilver has been
scheduled.
- This is fixed by adding additional check in
spa_vdev_attach() for any scheduled resilver and return
appropriate error code when a resilver is already in
progress.
2) It was possible for zpool clear to start a healing
resilver when it wasn't needed at all. This occurs because
during a vdev_open() the device is presumed to be healthy not
until the device is validated by vdev_validate() and it's set
unavailable. However, by this point an async resilver will
have already been requested if the DTL isn't empty.
- This is fixed by cancelling the SPA_ASYNC_RESILVER
request immediately at the end of vdev_reopen() when a resilver
is unneeded.
Finally, added a testcase in ZTS for verification.
Reviewed-by: Brian Behlendorf <[email protected]>
Reviewed-by: Dipak Ghosh <[email protected]>
Signed-off-by: Akash B <[email protected]>
Closes #14881
Closes #14892
Diffstat (limited to 'tests/runfiles')
-rw-r--r-- | tests/runfiles/common.run | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/tests/runfiles/common.run b/tests/runfiles/common.run index 9ed1a6d37..10525289a 100644 --- a/tests/runfiles/common.run +++ b/tests/runfiles/common.run @@ -472,7 +472,8 @@ tests = ['zpool_replace_001_neg', 'replace-o_ashift', 'replace_prop_ashift'] tags = ['functional', 'cli_root', 'zpool_replace'] [tests/functional/cli_root/zpool_resilver] -tests = ['zpool_resilver_bad_args', 'zpool_resilver_restart'] +tests = ['zpool_resilver_bad_args', 'zpool_resilver_restart', + 'zpool_resilver_concurrent'] tags = ['functional', 'cli_root', 'zpool_resilver'] [tests/functional/cli_root/zpool_scrub] |