X-Git-Url: https://git.camperquake.de/gitweb.cgi?a=blobdiff_plain;f=cmd%2Fztest%2Fztest.c;h=7e941b5cb29054a1fff8f8a8b33276989e1b182f;hb=26099167e6b39d719ade3be2b5e087e29f1121cd;hp=973e7b2f6a80c2454cd85bebabb7dbd3acc57dc0;hpb=9d81146b015e8f4f611357c4cef17fbfb2f4bd54;p=zfs.git diff --git a/cmd/ztest/ztest.c b/cmd/ztest/ztest.c index 973e7b2..7e941b5 100644 --- a/cmd/ztest/ztest.c +++ b/cmd/ztest/ztest.c @@ -729,14 +729,17 @@ process_options(int argc, char **argv) UINT64_MAX >> 2); if (strlen(altdir) > 0) { - char cmd[MAXNAMELEN]; - char realaltdir[MAXNAMELEN]; + char *cmd; + char *realaltdir; char *bin; char *ztest; char *isa; int isalen; - (void) realpath(getexecname(), cmd); + cmd = umem_alloc(MAXPATHLEN, UMEM_NOFAIL); + realaltdir = umem_alloc(MAXPATHLEN, UMEM_NOFAIL); + + VERIFY(NULL != realpath(getexecname(), cmd)); if (0 != access(altdir, F_OK)) { ztest_dump_core = B_FALSE; fatal(B_TRUE, "invalid alternate ztest path: %s", @@ -767,6 +770,9 @@ process_options(int argc, char **argv) fatal(B_TRUE, "invalid alternate lib directory %s", zo->zo_alt_libpath); } + + umem_free(cmd, MAXPATHLEN); + umem_free(realaltdir, MAXPATHLEN); } } @@ -5283,11 +5289,13 @@ ztest_resume_thread(void *arg) #define GRACE 300 +#if 0 static void ztest_deadman_alarm(int sig) { fatal(0, "failed to complete within %d seconds of deadline", GRACE); } +#endif static void ztest_execute(int test, ztest_info_t *zi, uint64_t id) @@ -5544,11 +5552,13 @@ ztest_run(ztest_shared_t *zs) (thread_func_t)ztest_resume_thread, spa, TS_RUN, NULL, 0, 0, PTHREAD_CREATE_JOINABLE)), !=, NULL); +#if 0 /* * Set a deadman alarm to abort() if we hang. */ signal(SIGALRM, ztest_deadman_alarm); alarm((zs->zs_thread_stop - zs->zs_thread_start) / NANOSEC + GRACE); +#endif /* * Verify that we can safely inquire about about any object, @@ -5819,11 +5829,11 @@ ztest_init(ztest_shared_t *zs) static void setup_data_fd(void) { - char *tmp = tempnam(NULL, NULL); - ztest_fd_data = open(tmp, O_RDWR | O_CREAT, 0700); + static char ztest_name_data[] = "/tmp/ztest.data.XXXXXX"; + + ztest_fd_data = mkstemp(ztest_name_data); ASSERT3S(ztest_fd_data, >=, 0); - (void) unlink(tmp); - free(tmp); + (void) unlink(ztest_name_data); } static int @@ -5900,12 +5910,13 @@ exec_child(char *cmd, char *libpath, boolean_t ignorekill, int *statusp) { pid_t pid; int status; - char cmdbuf[MAXPATHLEN]; + char *cmdbuf = NULL; pid = fork(); if (cmd == NULL) { - (void) strlcpy(cmdbuf, getexecname(), sizeof (cmdbuf)); + cmdbuf = umem_alloc(MAXPATHLEN, UMEM_NOFAIL); + (void) strlcpy(cmdbuf, getexecname(), MAXPATHLEN); cmd = cmdbuf; } @@ -5931,6 +5942,11 @@ exec_child(char *cmd, char *libpath, boolean_t ignorekill, int *statusp) fatal(B_TRUE, "exec failed: %s", cmd); } + if (cmdbuf != NULL) { + umem_free(cmdbuf, MAXPATHLEN); + cmd = NULL; + } + while (waitpid(pid, &status, 0) != pid) continue; if (statusp != NULL) @@ -5997,7 +6013,7 @@ main(int argc, char **argv) char timebuf[100]; char numbuf[6]; spa_t *spa; - char cmd[MAXNAMELEN]; + char *cmd; boolean_t hasalt; int f; char *fd_data_str = getenv("ZTEST_FD_DATA"); @@ -6024,8 +6040,8 @@ main(int argc, char **argv) ASSERT3U(ztest_opts.zo_datasets, ==, ztest_shared_hdr->zh_ds_count); /* Override location of zpool.cache */ - (void) asprintf((char **)&spa_config_path, "%s/zpool.cache", - ztest_opts.zo_dir); + VERIFY(asprintf((char **)&spa_config_path, "%s/zpool.cache", + ztest_opts.zo_dir) != -1); ztest_ds = umem_alloc(ztest_opts.zo_datasets * sizeof (ztest_ds_t), UMEM_NOFAIL); @@ -6054,7 +6070,8 @@ main(int argc, char **argv) (u_longlong_t)ztest_opts.zo_time); } - (void) strlcpy(cmd, getexecname(), sizeof (cmd)); + cmd = umem_alloc(MAXNAMELEN, UMEM_NOFAIL); + (void) strlcpy(cmd, getexecname(), MAXNAMELEN); zs->zs_do_init = B_TRUE; if (strlen(ztest_opts.zo_alt_ztest) != 0) { @@ -6195,5 +6212,7 @@ main(int argc, char **argv) kills, iters - kills, (100.0 * kills) / MAX(1, iters)); } + umem_free(cmd, MAXNAMELEN); + return (0); }