1#!/bin/sh 2 3# 4# Copyright (c) 2017 Dell EMC Isilon 5# All rights reserved. 6# 7# Redistribution and use in source and binary forms, with or without 8# modification, are permitted provided that the following conditions 9# are met: 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. 15# 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 26# SUCH DAMAGE. 27# 28 29# Non UFS SU gmirror stop -f test. 30 31# Page fault seen: 32# https://people.freebsd.org/~pho/stress/log/graid1_4.txt 33# Fixed in r316867 34 35[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1 36 37. ../default.cfg 38 39rm -f $diskimage* 40need=1024 # MB 41[ `df -k $(dirname $diskimage) | tail -1 | awk '{print int($4 / 1024)}'` -lt \ 42 $need ] && printf "Need %d MB on %s.\n" $need `dirname $diskimage` && exit 43 44gmirror load > /dev/null 2>&1 && unload=1 45[ -c /dev/mirror/test ] && { gmirror stop test; gmirror destroy test; } 46old=`sysctl -n kern.geom.mirror.debug` 47sysctl kern.geom.mirror.debug=-1 | grep -q -- -1 || 48 sysctl kern.geom.mirror.debug=$old > /dev/null 49 50md1=$mdstart 51md2=$((mdstart + 1)) 52 53s=0 54for u in $md1 $md2; do 55 disk="$diskimage.$u" 56 dd if=/dev/zero of=$disk bs=1m count=512 status=none 57 [ -c /dev/md$u ] && mdconfig -d -u $u 58 mdconfig -a -t vnode -f $disk -u $u 59done 60 61gmirror label -v -b split -s 2048 test /dev/md$md1 /dev/md$md2 \ 62 > /dev/null || exit 1 63[ "`sysctl -in kern.geom.mirror.launch_mirror_before_timeout`" = "0" ] && 64 sleep $((`sysctl -n kern.geom.mirror.timeout` + 1)) 65[ -c /dev/mirror/test ] || exit 1 66# Soft Updates issues with removal of backing media 67newfs /dev/mirror/test > /dev/null 68mount /dev/mirror/test $mntpoint 69chmod 777 $mntpoint 70 71export runRUNTIME=10m 72export RUNDIR=$mntpoint/stressX 73 74su $testuser -c 'cd ..; ./run.sh marcus.cfg' & 75 76while kill -0 $! > /dev/null 2>&1; do 77 sleep `jot -r 1 1 5` 78 gmirror remove test md$md2 79 sleep `jot -r 1 1 5` 80 gmirror insert test md$md2 81done 82wait 83 84gmirror stop -f test # Note the stop *before* umount 85 86while mount | grep $mntpoint | grep -q /mirror/; do 87 umount $mntpoint || sleep 1 88done 89gmirror stop test || s=1 90gmirror destroy test 2>/dev/null 91[ $unload ] && gmirror unload 92 93for u in $md2 $md1; do 94 mdconfig -d -u $u || s=3 95done 96rm -f $diskimage* 97exit $s 98