]> Devi Nivas Git - cs3210-lab0.git/commitdiff
Update stressfs to trigger race now the logging code serializes writes
authorFrans Kaashoek <kaashoek@26-4-190.dynamic.csail.mit.edu>
Tue, 27 Sep 2011 16:59:47 +0000 (12:59 -0400)
committerFrans Kaashoek <kaashoek@26-4-190.dynamic.csail.mit.edu>
Tue, 27 Sep 2011 16:59:47 +0000 (12:59 -0400)
stressfs.c

index 5d4fee2112e09886e09858b188b62e3efa9934fc..63694004b90282e071d3113f5f2212289ba27a2a 100644 (file)
@@ -2,8 +2,10 @@
 // appends to the idequeue results in a race.
 
 // For this to work, you should also add a spin within iderw's
-// idequeue traversal loop.  Spinning 40000 times demonstrated the bug
-// after about 5 runs of stressfs in QEMU on a 2.1GHz CPU.
+// idequeue traversal loop.  Adding the following demonstrated a panic
+// after about 5 runs of stressfs in QEMU on a 2.1GHz CPU:
+//    for (i = 0; i < 40000; i++)
+//      asm volatile("");
 
 #include "types.h"
 #include "stat.h"
@@ -16,19 +18,29 @@ main(int argc, char *argv[])
 {
   int fd, i;
   char path[] = "stressfs0";
+  char data[512];
 
   printf(1, "stressfs starting\n");
+  memset(data, 'a', sizeof(data));
 
   for(i = 0; i < 4; i++)
     if(fork() > 0)
       break;
 
-  printf(1, "%d\n", i);
+  printf(1, "write %d\n", i);
 
   path[8] += i;
   fd = open(path, O_CREATE | O_RDWR);
-  for(i = 0; i < 100; i++)
-    printf(fd, "%d\n", i);
+  for(i = 0; i < 20; i++)
+//    printf(fd, "%d\n", i);
+    write(fd, data, sizeof(data));
+  close(fd);
+
+  printf(1, "read\n");
+
+  fd = open(path, O_RDONLY);
+  for (i = 0; i < 20; i++)
+    read(fd, data, sizeof(data));
   close(fd);
 
   wait();