4 # Copyright (c) 2014 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 # Process stuck in objtrm wait state
30 # http://people.freebsd.org/~pho/stress/log/stealer.txt
33 # "panic: freeing free block" seen:
34 # https://people.freebsd.org/~pho/stress/log/stealer-2.txt
36 [ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
42 sed '1,/^EOF/d' < $here/$0 > stealer.c
43 mycc -o stealer -Wall -Wextra stealer.c || exit 1
46 swapoff -a > /dev/null
48 dd if=/dev/zero of=$diskimage bs=1m count=1k status=none
49 mdconfig -l | grep -q md$mdstart && mdconfig -d -u $mdstart
50 mdconfig -a -t vnode -f $diskimage -u $mdstart
51 swapon /dev/md$mdstart
53 hw=`sysctl hw.pagesize | sed 's/.*: //'`
54 pages=`sysctl hw.usermem | sed 's/.*: //'`
56 echo "`date '+%T'` Test with $pages pages."
57 su $testuser -c "sh -c \"/tmp/stealer $pages\"" &
59 while swapinfo | grep -q /dev/md$mdstart; do
60 swapoff /dev/md$mdstart 2>&1 |
61 grep -v "Cannot allocate memory"
64 ps auxwwl | grep -v grep | grep objtrm && echo FAIL
69 mdconfig -d -u $mdstart
70 rm -rf /tmp/stealer $diskimage
83 handler(int i __unused)
96 if ((c = malloc(size)) == 0)
97 err(1, "malloc(%d pages)", pages);
99 signal(SIGALRM, handler);
111 main(int argc __unused, char **argv)
113 int i, j, n, pages, status;
115 pages = atoi(argv[1]);
119 for ( i = 0; i < N; i++, j++) {
130 if (wait(&status) == -1)