diff options
| -rw-r--r-- | Makefile | 1 | ||||
| -rw-r--r-- | stressfs.c | 38 | 
2 files changed, 39 insertions, 0 deletions
| @@ -107,6 +107,7 @@ UPROGS=\  	_mkdir\  	_rm\  	_sh\ +	_stressfs\  	_usertests\  	_wc\  	_zombie\ diff --git a/stressfs.c b/stressfs.c new file mode 100644 index 0000000..21a5d16 --- /dev/null +++ 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(); +} | 
