From: Frans Kaashoek Date: Tue, 27 Sep 2011 16:59:47 +0000 (-0400) Subject: Update stressfs to trigger race now the logging code serializes writes X-Git-Url: https://git.devinivas.org/?a=commitdiff_plain;h=9b972c06b172531e5792fc0e05d83319d325e0ee;p=cs3210-lab0.git Update stressfs to trigger race now the logging code serializes writes --- diff --git a/stressfs.c b/stressfs.c index 5d4fee2..6369400 100644 --- a/stressfs.c +++ b/stressfs.c @@ -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();