aboutsummaryrefslogtreecommitdiff
path: root/sys/contrib/openzfs/cmd/ztest.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/contrib/openzfs/cmd/ztest.c')
-rw-r--r--sys/contrib/openzfs/cmd/ztest.c57
1 files changed, 29 insertions, 28 deletions
diff --git a/sys/contrib/openzfs/cmd/ztest.c b/sys/contrib/openzfs/cmd/ztest.c
index 89752dcb0f0f..dc8ac85b6991 100644
--- a/sys/contrib/openzfs/cmd/ztest.c
+++ b/sys/contrib/openzfs/cmd/ztest.c
@@ -139,9 +139,10 @@
#include <sys/crypto/icp.h>
#include <sys/zfs_impl.h>
#include <sys/backtrace.h>
+#include <libzpool.h>
+#include <libspl.h>
static int ztest_fd_data = -1;
-static int ztest_fd_rand = -1;
typedef struct ztest_shared_hdr {
uint64_t zh_hdr_size;
@@ -902,13 +903,10 @@ ztest_random(uint64_t range)
{
uint64_t r;
- ASSERT3S(ztest_fd_rand, >=, 0);
-
if (range == 0)
return (0);
- if (read(ztest_fd_rand, &r, sizeof (r)) != sizeof (r))
- fatal(B_TRUE, "short read from /dev/urandom");
+ random_get_pseudo_bytes((uint8_t *)&r, sizeof (r));
return (r % range);
}
@@ -1228,10 +1226,10 @@ ztest_kill(ztest_shared_t *zs)
* See comment above spa_write_cachefile().
*/
if (raidz_expand_pause_point != RAIDZ_EXPAND_PAUSE_NONE) {
- if (mutex_tryenter(&spa_namespace_lock)) {
+ if (spa_namespace_tryenter(FTAG)) {
spa_write_cachefile(ztest_spa, B_FALSE, B_FALSE,
B_FALSE);
- mutex_exit(&spa_namespace_lock);
+ spa_namespace_exit(FTAG);
ztest_scratch_state->zs_raidz_scratch_verify_pause =
raidz_expand_pause_point;
@@ -1246,9 +1244,9 @@ ztest_kill(ztest_shared_t *zs)
return;
}
} else {
- mutex_enter(&spa_namespace_lock);
+ spa_namespace_enter(FTAG);
spa_write_cachefile(ztest_spa, B_FALSE, B_FALSE, B_FALSE);
- mutex_exit(&spa_namespace_lock);
+ spa_namespace_exit(FTAG);
}
(void) raise(SIGKILL);
@@ -2306,7 +2304,8 @@ ztest_replay_write(void *arg1, void *arg2, boolean_t byteswap)
}
if (abuf == NULL) {
- dmu_write(os, lr->lr_foid, offset, length, data, tx);
+ dmu_write(os, lr->lr_foid, offset, length, data, tx,
+ DMU_READ_PREFETCH);
} else {
memcpy(abuf->b_data, data, length);
VERIFY0(dmu_assign_arcbuf_by_dbuf(db, offset, abuf, tx, 0));
@@ -3688,10 +3687,10 @@ ztest_split_pool(ztest_ds_t *zd, uint64_t id)
if (error == 0) {
(void) printf("successful split - results:\n");
- mutex_enter(&spa_namespace_lock);
+ spa_namespace_enter(FTAG);
show_pool_stats(spa);
show_pool_stats(spa_lookup("splitp"));
- mutex_exit(&spa_namespace_lock);
+ spa_namespace_exit(FTAG);
++zs->zs_splits;
--zs->zs_mirrors;
}
@@ -3975,11 +3974,11 @@ raidz_scratch_verify(void)
kernel_init(SPA_MODE_READ);
- mutex_enter(&spa_namespace_lock);
+ spa_namespace_enter(FTAG);
spa = spa_lookup(ztest_opts.zo_pool);
ASSERT(spa);
spa->spa_import_flags |= ZFS_IMPORT_SKIP_MMP;
- mutex_exit(&spa_namespace_lock);
+ spa_namespace_exit(FTAG);
VERIFY0(spa_open(ztest_opts.zo_pool, &spa, FTAG));
@@ -5243,7 +5242,8 @@ ztest_dmu_read_write(ztest_ds_t *zd, uint64_t id)
* We've verified all the old bufwads, and made new ones.
* Now write them out.
*/
- dmu_write(os, packobj, packoff, packsize, packbuf, tx);
+ dmu_write(os, packobj, packoff, packsize, packbuf, tx,
+ DMU_READ_PREFETCH);
if (freeit) {
if (ztest_opts.zo_verbose >= 7) {
@@ -5258,7 +5258,8 @@ ztest_dmu_read_write(ztest_ds_t *zd, uint64_t id)
" txg %"PRIx64"\n",
bigoff, bigsize, txg);
}
- dmu_write(os, bigobj, bigoff, bigsize, bigbuf, tx);
+ dmu_write(os, bigobj, bigoff, bigsize, bigbuf, tx,
+ DMU_READ_PREFETCH);
}
dmu_tx_commit(tx);
@@ -5513,7 +5514,8 @@ ztest_dmu_read_write_zcopy(ztest_ds_t *zd, uint64_t id)
* We've verified all the old bufwads, and made new ones.
* Now write them out.
*/
- dmu_write(os, packobj, packoff, packsize, packbuf, tx);
+ dmu_write(os, packobj, packoff, packsize, packbuf, tx,
+ DMU_READ_PREFETCH);
if (ztest_opts.zo_verbose >= 7) {
(void) printf("writing offset %"PRIx64" size %"PRIx64""
" txg %"PRIx64"\n",
@@ -6119,7 +6121,8 @@ ztest_dmu_commit_callbacks(ztest_ds_t *zd, uint64_t id)
"future leak: got %"PRIu64", open txg is %"PRIu64"",
old_txg, txg);
- dmu_write(os, od->od_object, 0, sizeof (uint64_t), &txg, tx);
+ dmu_write(os, od->od_object, 0, sizeof (uint64_t), &txg, tx,
+ DMU_READ_PREFETCH);
(void) mutex_enter(&zcl.zcl_callbacks_lock);
@@ -7422,11 +7425,11 @@ ztest_walk_pool_directory(const char *header)
if (ztest_opts.zo_verbose >= 6)
(void) puts(header);
- mutex_enter(&spa_namespace_lock);
+ spa_namespace_enter(FTAG);
while ((spa = spa_next(spa)) != NULL)
if (ztest_opts.zo_verbose >= 6)
(void) printf("\t%s\n", spa_name(spa));
- mutex_exit(&spa_namespace_lock);
+ spa_namespace_exit(FTAG);
}
static void
@@ -8140,10 +8143,8 @@ ztest_raidz_expand_run(ztest_shared_t *zs, spa_t *spa)
/* Setup a 1 MiB buffer of random data */
uint64_t bufsize = 1024 * 1024;
void *buffer = umem_alloc(bufsize, UMEM_NOFAIL);
+ random_get_pseudo_bytes((uint8_t *)&buffer, bufsize);
- if (read(ztest_fd_rand, buffer, bufsize) != bufsize) {
- fatal(B_TRUE, "short read from /dev/urandom");
- }
/*
* Put some data in the pool and then attach a vdev to initiate
* reflow.
@@ -8541,11 +8542,11 @@ ztest_run(ztest_shared_t *zs)
/*
* Verify that we can loop over all pools.
*/
- mutex_enter(&spa_namespace_lock);
+ spa_namespace_enter(FTAG);
for (spa = spa_next(NULL); spa != NULL; spa = spa_next(spa))
if (ztest_opts.zo_verbose > 3)
(void) printf("spa_next: found %s\n", spa_name(spa));
- mutex_exit(&spa_namespace_lock);
+ spa_namespace_exit(FTAG);
/*
* Verify that we can export the pool and reimport it under a
@@ -8949,13 +8950,13 @@ main(int argc, char **argv)
exit(EXIT_FAILURE);
}
+ libspl_init();
+
/*
* Force random_get_bytes() to use /dev/urandom in order to prevent
* ztest from needlessly depleting the system entropy pool.
*/
- random_path = "/dev/urandom";
- ztest_fd_rand = open(random_path, O_RDONLY | O_CLOEXEC);
- ASSERT3S(ztest_fd_rand, >=, 0);
+ random_force_pseudo(B_TRUE);
if (!fd_data_str) {
process_options(argc, argv);