Skip to content

Commit

Permalink
fsx: seed more randomly with the -S0 option
Browse files Browse the repository at this point in the history
When using -S0, seed the PRNG with the current time in nanoseconds, not
seconds, so consecutive runs don't accidentally use the same seed.

Also, rename some variables for clarity.

Reviewed by:	ngie
MFC after:	2 weeks
Sponsored by:	The FreeBSD Foundation
Differential Revision:	https://reviews.freebsd.org/D20078
  • Loading branch information
asomers committed Apr 28, 2019
1 parent 46dc390 commit b4b01d2
Showing 1 changed file with 24 additions and 13 deletions.
37 changes: 24 additions & 13 deletions tools/regression/fsx/fsx.c
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
# include <time.h>
# include <strings.h>
#endif
#include <err.h>
#include <fcntl.h>
#include <sys/mman.h>
#ifndef MAP_FILE
Expand Down Expand Up @@ -274,16 +275,22 @@ logdump(void)
prt("\t***RRRR***");
break;
case OP_WRITE:
prt("WRITE\t0x%x thru 0x%x\t(0x%x bytes)",
lp->args[0], lp->args[0] + lp->args[1] - 1,
lp->args[1]);
if (lp->args[0] > lp->args[2])
prt(" HOLE");
else if (lp->args[0] + lp->args[1] > lp->args[2])
prt(" EXTEND");
if ((badoff >= lp->args[0] || badoff >=lp->args[2]) &&
badoff < lp->args[0] + lp->args[1])
prt("\t***WWWW");
{
int offset = lp->args[0];
int len = lp->args[1];
int oldlen = lp->args[2];

prt("WRITE\t0x%x thru 0x%x\t(0x%x bytes)",
offset, offset + len - 1,
len);
if (offset > oldlen)
prt(" HOLE");
else if (offset + len > oldlen)
prt(" EXTEND");
if ((badoff >= offset || badoff >=oldlen) &&
badoff < offset + len)
prt("\t***WWWW");
}
break;
case OP_TRUNCATE:
down = lp->args[0] < lp->args[1];
Expand Down Expand Up @@ -993,6 +1000,7 @@ main(int argc, char **argv)
char *endp;
char goodfile[1024];
char logfile[1024];
struct timespec now;

goodfile[0] = 0;
logfile[0] = 0;
Expand Down Expand Up @@ -1115,8 +1123,11 @@ main(int argc, char **argv)
break;
case 'S':
seed = getnum(optarg, &endp);
if (seed == 0)
seed = time(0) % 10000;
if (seed == 0) {
if (clock_gettime(CLOCK_REALTIME, &now) != 0)
err(1, "clock_gettime");
seed = now.tv_nsec % 10000;
}
if (!quiet)
fprintf(stdout, "Seed set to %d\n", seed);
if (seed < 0)
Expand Down Expand Up @@ -1206,7 +1217,7 @@ main(int argc, char **argv)
prterr(fname);
warn("main: error on write");
} else
warn("main: short write, 0x%x bytes instead of 0x%x\n",
warn("main: short write, 0x%x bytes instead of 0x%lx\n",
(unsigned)written, maxfilelen);
exit(98);
}
Expand Down

0 comments on commit b4b01d2

Please sign in to comment.