From 9b972c06b172531e5792fc0e05d83319d325e0ee Mon Sep 17 00:00:00 2001 From: Frans Kaashoek Date: Tue, 27 Sep 2011 12:59:47 -0400 Subject: [PATCH] Update stressfs to trigger race now the logging code serializes writes --- stressfs.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) 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();