1 // SPDX-License-Identifier: GPL-2.0-or-later
2 // Copyright (c) 2009 FUJITSU LIMITED
3 // Author: Li Zefan <[email protected]>
4
5 #include <stdio.h>
6 #include <stdlib.h>
7 #include <unistd.h>
8 #include <fcntl.h>
9 #include <sys/mman.h>
10 #include <sys/wait.h>
11
12 #define MAP_FLAGS (MAP_PRIVATE|MAP_ANONYMOUS|MAP_LOCKED)
13
14 #define LOOP 40
15
16 #define FORKED_PROC_COUNT 10
17
main(int argc,char * argv[])18 int main(int argc, char *argv[])
19 {
20 char buf[10];
21 int i;
22 int loop;
23 int pid;
24 int fd;
25 int size = getpagesize();
26
27 if (argc != 2) {
28 perror("Invalid num of args");
29 exit(1);
30 }
31
32 fd = open(argv[1], O_WRONLY);
33 if (fd < 0) {
34 perror("Could not open tasklist");
35 exit(1);
36 }
37
38 for (loop = 0; loop < LOOP; loop++) {
39 for (i = 0; i < FORKED_PROC_COUNT; i++) {
40 pid = fork();
41 if (pid == 0) {
42 char *p;
43
44 sprintf(buf, "%d", getpid());
45 write(fd, buf, 10);
46 fsync(fd);
47
48 p = mmap(NULL, size, PROT_READ | PROT_WRITE,
49 MAP_FLAGS, 0, 0);
50
51 if (p == MAP_FAILED) {
52 perror("mmap failed");
53 exit(1);
54 } else
55 exit(0);
56 }
57 }
58
59 for (i = 0; i < FORKED_PROC_COUNT; i++)
60 wait(NULL);
61 }
62
63 close(fd);
64
65 return 0;
66 }
67