// 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 fd, i; char path[] = "stressfs0"; printf(1, "stressfs starting\n"); for(i = 0; i < 4; i++) if(fork() > 0) break; printf(1, "%d\n", i); path[8] += i; fd = open(path, O_CREATE | O_RDWR); for(i = 0; i < 100; i++) printf(fd, "%d\n", i); close(fd); wait(); exit(); }