xv6

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

commit f4c12f116d328c0b56eabac327a9cc4882c57128
parent d6cd7d0804c774ddafed204f577e274ad6d81aa3
Author: Austin Clements <amdragon@mit.edu>
Date:   Mon, 23 Nov 2009 17:27:26 -0500

Add the test we used in lecture to creash the IDE system when the
locks were moved around.

Diffstat:
MMakefile | 1+
Astressfs.c | 38++++++++++++++++++++++++++++++++++++++
2 files changed, 39 insertions(+), 0 deletions(-)

diff --git a/Makefile b/Makefile @@ -107,6 +107,7 @@ UPROGS=\ _mkdir\ _rm\ _sh\ + _stressfs\ _usertests\ _wc\ _zombie\ diff --git a/stressfs.c b/stressfs.c @@ -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(); +}