ztest: update expectation for sparing a special device

Commit c23738c70e modified the expected
behavior of attach to prevent hot spares from being used as special
vdev replacements.  We update ztest's expectations accordingly to
prevent it from failing when testing the updated behavior.

Reviewed-by: Richard Yao <richard.yao@alumni.stonybrook.edu>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #14351
This commit is contained in:
Brian Behlendorf 2023-01-04 15:59:50 -08:00
parent 40d7e971ff
commit 4208a052c2

View File

@ -3597,6 +3597,7 @@ ztest_vdev_attach_detach(ztest_ds_t *zd, uint64_t id)
int newvd_is_spare = B_FALSE; int newvd_is_spare = B_FALSE;
int newvd_is_dspare = B_FALSE; int newvd_is_dspare = B_FALSE;
int oldvd_is_log; int oldvd_is_log;
int oldvd_is_special;
int error, expected_error; int error, expected_error;
if (ztest_opts.zo_mmp_test) if (ztest_opts.zo_mmp_test)
@ -3671,6 +3672,9 @@ ztest_vdev_attach_detach(ztest_ds_t *zd, uint64_t id)
oldguid = oldvd->vdev_guid; oldguid = oldvd->vdev_guid;
oldsize = vdev_get_min_asize(oldvd); oldsize = vdev_get_min_asize(oldvd);
oldvd_is_log = oldvd->vdev_top->vdev_islog; oldvd_is_log = oldvd->vdev_top->vdev_islog;
oldvd_is_special =
oldvd->vdev_top->vdev_alloc_bias == VDEV_BIAS_SPECIAL ||
oldvd->vdev_top->vdev_alloc_bias == VDEV_BIAS_DEDUP;
(void) strlcpy(oldpath, oldvd->vdev_path, MAXPATHLEN); (void) strlcpy(oldpath, oldvd->vdev_path, MAXPATHLEN);
pvd = oldvd->vdev_parent; pvd = oldvd->vdev_parent;
pguid = pvd->vdev_guid; pguid = pvd->vdev_guid;
@ -3749,7 +3753,8 @@ ztest_vdev_attach_detach(ztest_ds_t *zd, uint64_t id)
pvd->vdev_ops == &vdev_replacing_ops || pvd->vdev_ops == &vdev_replacing_ops ||
pvd->vdev_ops == &vdev_spare_ops)) pvd->vdev_ops == &vdev_spare_ops))
expected_error = ENOTSUP; expected_error = ENOTSUP;
else if (newvd_is_spare && (!replacing || oldvd_is_log)) else if (newvd_is_spare &&
(!replacing || oldvd_is_log || oldvd_is_special))
expected_error = ENOTSUP; expected_error = ENOTSUP;
else if (newvd == oldvd) else if (newvd == oldvd)
expected_error = replacing ? 0 : EBUSY; expected_error = replacing ? 0 : EBUSY;