diff options
author | Frans Kaashoek <[email protected]> | 2011-09-27 12:59:47 -0400 |
---|---|---|
committer | Frans Kaashoek <[email protected]> | 2011-09-27 12:59:47 -0400 |
commit | 9b972c06b172531e5792fc0e05d83319d325e0ee (patch) | |
tree | e12fd62f54465ed0572a7f365064b8295a221bc0 | |
parent | 5304c854a423be0e718f187d47277b30cb71cbc5 (diff) | |
download | xv6-labs-9b972c06b172531e5792fc0e05d83319d325e0ee.tar.gz xv6-labs-9b972c06b172531e5792fc0e05d83319d325e0ee.tar.bz2 xv6-labs-9b972c06b172531e5792fc0e05d83319d325e0ee.zip |
Update stressfs to trigger race now the logging code serializes writes
-rw-r--r-- | stressfs.c | 22 |
1 files changed, 17 insertions, 5 deletions
@@ -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(); |