Author: asomers
Date: Thu May 16 03:24:08 2019
New Revision: 347643
URL: https://svnweb.freebsd.org/changeset/base/347643

Log:
  MFC r346847:
  
  fsx: seed more randomly with the -S0 option
  
  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
  Sponsored by: The FreeBSD Foundation
  Differential Revision:        https://reviews.freebsd.org/D20078

Modified:
  stable/11/tools/regression/fsx/fsx.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/tools/regression/fsx/fsx.c
==============================================================================
--- stable/11/tools/regression/fsx/fsx.c        Thu May 16 02:41:25 2019        
(r347642)
+++ stable/11/tools/regression/fsx/fsx.c        Thu May 16 03:24:08 2019        
(r347643)
@@ -48,6 +48,7 @@
 # include <time.h>
 # include <strings.h>
 #endif
+#include <err.h>
 #include <fcntl.h>
 #include <sys/mman.h>
 #ifndef MAP_FILE
@@ -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];
@@ -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;
@@ -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)
@@ -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);
                }
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to