]> Devi Nivas Git - cs3210-lab1.git/commitdiff
Add the test we used in lecture to creash the IDE system when the
authorAustin Clements <amdragon@mit.edu>
Mon, 23 Nov 2009 22:27:26 +0000 (17:27 -0500)
committerAustin Clements <amdragon@mit.edu>
Mon, 23 Nov 2009 22:27:26 +0000 (17:27 -0500)
locks were moved around.

Makefile
stressfs.c [new file with mode: 0644]

index 24ba05e67edcd79932686fcb980672e924d4c9e4..3cab47a344155bb4fbfe4a92337de0506b4783ef 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -107,6 +107,7 @@ UPROGS=\
        _mkdir\
        _rm\
        _sh\
+       _stressfs\
        _usertests\
        _wc\
        _zombie\
diff --git a/stressfs.c b/stressfs.c
new file mode 100644 (file)
index 0000000..21a5d16
--- /dev/null
@@ -0,0 +1,38 @@
+// Demonstrate that moving the "acquire" in iderw after the loop that
+// 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.
+
+#include "types.h"
+#include "stat.h"
+#include "user.h"
+#include "fs.h"
+#include "fcntl.h"
+
+int
+main(int argc, char *argv[])
+{
+  int i;
+  printf(1, "stressfs starting\n");
+
+  for (i = 0; i < 4; i++) {
+    if (fork() > 0) {
+      break;
+    }
+  }
+
+  printf(1, "%d\n", i);
+
+  char path[] = "stressfs0";
+  path[8] += i;
+  int fd = open(path, O_CREATE | O_RDWR);
+  for (i = 0; i < 100; i++)
+    printf(fd, "%d\n", i);
+  close(fd);
+
+  wait();
+  
+  exit();
+}