4 # Copyright (c) 2016 EMC Corp.
7 # Redistribution and use in source and binary forms, with or without
8 # modification, are permitted provided that the following conditions
10 # 1. Redistributions of source code must retain the above copyright
11 # notice, this list of conditions and the following disclaimer.
12 # 2. Redistributions in binary form must reproduce the above copyright
13 # notice, this list of conditions and the following disclaimer in the
14 # documentation and/or other materials provided with the distribution.
16 # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17 # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20 # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21 # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22 # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23 # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24 # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25 # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29 # Stress vm object collapse.
31 # "panic: backing_object 0xfffff800a018f420 was somehow re-referenced during
32 # collapse!" seen with uma_zalloc_arg fail point enabled.
39 sed '1,/^EOF/d' < $odir/$0 > $dir/pipe.c
40 mycc -o pipe -Wall -Wextra -O0 -g pipe.c || exit 1
44 daemon sh -c '(cd ../testcases/swap; ./swap -t 10m -i 20)' > /dev/null 2>&1
49 while [ $((`date '+%s'` - start)) -lt 300 ]; do
50 for i in `jot $(sysctl -n hw.ncpu)`; do
56 [ $? -ne 0 ] && e=$((e + 1))
61 while pgrep -q swap; do
64 rm -rf /tmp/pipe pipe.core
85 for (i = 0; i < PIPES; i++) {
86 if (pipe(fds[i]) == -1)
90 if (write(fds[0][1], &c, sizeof(c)) != sizeof(c))
92 for (i = 0; i < PIPES; i++) {
95 if (read(fds[i][0], &c, sizeof(c)) != sizeof(c))
98 fprintf(stderr, "pid %d: i = %d: read %d\n", getpid(),
103 if (write(fds[i + 1][1], &c, sizeof(c)) !=
105 err(1, "pipe write");
112 for (i = 0; i < PIPES; i++) {
114 e += status == 0 ? 0 : 1;
128 while (time(NULL) - start < RUNTIME && e == 0)