12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- // 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. 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"
- #include "user.h"
- #include "fs.h"
- #include "fcntl.h"
- int
- 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, "write %d\n", i);
- path[8] += i;
- fd = open(path, O_CREATE | O_RDWR);
- 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();
-
- exit();
- }
|