ztest: ENOSPC in ztest_objset_destroy_cb()

While unlikely it is possible for dsl_destroy_head() to return
ENOSPC in the ztest_objset_destroy_cb().  This can occur even
when ZFS_SPACE_CHECK_DESTROY is used with the dsl_sync_task().
Both the existence of a checkpoint and pending deferred frees
can cause this.

Reviewed-by: Serapheim Dimitropoulos <serapheim.dimitro@delphix.com>
Reviewed-by: Tom Caputi <tcaputi@datto.com>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #8206
This commit is contained in:
Brian Behlendorf 2018-12-14 10:03:05 -08:00 committed by GitHub
parent 98d07d5798
commit 0dd6b6bfcb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -3980,9 +3980,13 @@ ztest_objset_destroy_cb(const char *name, void *arg)
VERIFY0(dsl_destroy_snapshot(name, B_TRUE));
} else {
error = dsl_destroy_head(name);
/* There could be a hold on this dataset */
if (error != EBUSY)
if (error == ENOSPC) {
/* There could be checkpoint or insufficient slop */
ztest_record_enospc(FTAG);
} else if (error != EBUSY) {
/* There could be a hold on this dataset */
ASSERT0(error);
}
}
return (0);
}