1#!/bin/sh 2 3# 4# Copyright (c) 2016 EMC Corp. 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# vfs_write_suspend() test scenario. 30# The unusual combination of newfs(8) flags: J and j triggers: 31# fsync: giving up on dirty 32# GEOM_JOURNAL: Cannot suspend file system /mnt (error=35). (EAGAIN) 33 34[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1 35 36. ../default.cfg 37 38[ $((`sysctl -n hw.usermem` / 1024 / 1024 / 1024)) -le 10 ] && 39 exit 0 40 41md1=$mdstart 42md2=$((mdstart + 1)) 43 44size=5g 45jsize=3g 46 47for u in $md1 $md2; do 48 [ -c /dev/md$u ] && mdconfig -d -u $u 49 mdconfig -a -t swap -s $size -u $u 50done 51 52gmirror load > /dev/null 2>&1 && unload=1 53gmirror label -v -b split -s 2048 data /dev/md$md1 /dev/md$md2 \ 54 || exit 1 55[ "`sysctl -in kern.geom.mirror.launch_mirror_before_timeout`" = "0" ] && 56 sleep $((`sysctl -n kern.geom.mirror.timeout` + 1)) 57 58gjournal load > /dev/null 2>&1 59gjournal label -s $jsize /dev/mirror/data > /dev/null || 60 { gmirror stop data; exit 1; } 61sleep .5 62s=1 63if [ -c /dev/mirror/data.journal ]; then 64 newfs -J -j /dev/mirror/data.journal > /dev/null 65 mount -o async /dev/mirror/data.journal $mntpoint || exit 1 66 67 chmod 777 $mntpoint 68 69 export runRUNTIME=10m 70 export RUNDIR=$mntpoint/stressX 71 72 su $testuser -c 'cd ..; ./run.sh disk.cfg' 73 s=0 74 75 gjournal sync 76 umount $mntpoint 77 while mount | grep $mntpoint | grep -q /mirror/data; do 78 umount $mntpoint || sleep 1 79 done 80else 81 echo "FAIL /dev/mirror/data.journal not found" 82fi 83gjournal stop /dev/mirror/data 84gjournal unload 85gmirror stop data 86[ $unload ] && gmirror unload 87 88for u in $md2 $md1; do 89 mdconfig -d -u $u 90done 91exit $s 92