aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cmd/ztest.c15
-rw-r--r--module/zfs/zcp.c10
2 files changed, 16 insertions, 9 deletions
diff --git a/cmd/ztest.c b/cmd/ztest.c
index a4a59ae4e..9dce486ee 100644
--- a/cmd/ztest.c
+++ b/cmd/ztest.c
@@ -4299,7 +4299,7 @@ ztest_snapshot_create(char *osname, uint64_t id)
ztest_record_enospc(FTAG);
return (B_FALSE);
}
- if (error != 0 && error != EEXIST) {
+ if (error != 0 && error != EEXIST && error != ECHRNG) {
fatal(B_FALSE, "ztest_snapshot_create(%s@%s) = %d", osname,
snapname, error);
}
@@ -4316,7 +4316,7 @@ ztest_snapshot_destroy(char *osname, uint64_t id)
osname, id);
error = dsl_destroy_snapshot(snapname, B_FALSE);
- if (error != 0 && error != ENOENT)
+ if (error != 0 && error != ENOENT && error != ECHRNG)
fatal(B_FALSE, "ztest_snapshot_destroy(%s) = %d",
snapname, error);
return (B_TRUE);
@@ -4365,9 +4365,16 @@ ztest_dmu_objset_create_destroy(ztest_ds_t *zd, uint64_t id)
/*
* Verify that the destroyed dataset is no longer in the namespace.
+ * It may still be present if the destroy above fails with ENOSPC.
*/
- VERIFY3U(ENOENT, ==, ztest_dmu_objset_own(name, DMU_OST_OTHER, B_TRUE,
- B_TRUE, FTAG, &os));
+ error = ztest_dmu_objset_own(name, DMU_OST_OTHER, B_TRUE, B_TRUE,
+ FTAG, &os);
+ if (error == 0) {
+ dmu_objset_disown(os, B_TRUE, FTAG);
+ ztest_record_enospc(FTAG);
+ goto out;
+ }
+ VERIFY3U(ENOENT, ==, error);
/*
* Verify that we can create a new dataset.
diff --git a/module/zfs/zcp.c b/module/zfs/zcp.c
index 5ebf1bbbc..89ed4f91f 100644
--- a/module/zfs/zcp.c
+++ b/module/zfs/zcp.c
@@ -958,12 +958,12 @@ zcp_eval_impl(dmu_tx_t *tx, zcp_run_info_t *ri)
}
static void
-zcp_pool_error(zcp_run_info_t *ri, const char *poolname)
+zcp_pool_error(zcp_run_info_t *ri, const char *poolname, int error)
{
ri->zri_result = SET_ERROR(ECHRNG);
lua_settop(ri->zri_state, 0);
- (void) lua_pushfstring(ri->zri_state, "Could not open pool: %s",
- poolname);
+ (void) lua_pushfstring(ri->zri_state, "Could not open pool: %s "
+ "errno: %d", poolname, error);
zcp_convert_return_values(ri->zri_state, ri->zri_outnvl,
ZCP_RET_ERROR, &ri->zri_result);
@@ -1013,7 +1013,7 @@ zcp_eval_open(zcp_run_info_t *ri, const char *poolname)
error = dsl_pool_hold(poolname, FTAG, &dp);
if (error != 0) {
- zcp_pool_error(ri, poolname);
+ zcp_pool_error(ri, poolname, error);
return;
}
@@ -1159,7 +1159,7 @@ zcp_eval(const char *poolname, const char *program, boolean_t sync,
err = dsl_sync_task_sig(poolname, NULL, zcp_eval_sync,
zcp_eval_sig, &runinfo, 0, ZFS_SPACE_CHECK_ZCP_EVAL);
if (err != 0)
- zcp_pool_error(&runinfo, poolname);
+ zcp_pool_error(&runinfo, poolname, err);
} else {
zcp_eval_open(&runinfo, poolname);
}