17e3c4b09SPeter Holm#!/bin/sh 27e3c4b09SPeter Holm 37e3c4b09SPeter Holm# 4*4d846d26SWarner Losh# SPDX-License-Identifier: BSD-2-Clause 57e3c4b09SPeter Holm# 67e3c4b09SPeter Holm# Copyright (c) 2021 Peter Holm <pho@FreeBSD.org> 77e3c4b09SPeter Holm# 87e3c4b09SPeter Holm# Redistribution and use in source and binary forms, with or without 97e3c4b09SPeter Holm# modification, are permitted provided that the following conditions 107e3c4b09SPeter Holm# are met: 117e3c4b09SPeter Holm# 1. Redistributions of source code must retain the above copyright 127e3c4b09SPeter Holm# notice, this list of conditions and the following disclaimer. 137e3c4b09SPeter Holm# 2. Redistributions in binary form must reproduce the above copyright 147e3c4b09SPeter Holm# notice, this list of conditions and the following disclaimer in the 157e3c4b09SPeter Holm# documentation and/or other materials provided with the distribution. 167e3c4b09SPeter Holm# 177e3c4b09SPeter Holm# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 187e3c4b09SPeter Holm# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 197e3c4b09SPeter Holm# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 207e3c4b09SPeter Holm# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 217e3c4b09SPeter Holm# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 227e3c4b09SPeter Holm# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 237e3c4b09SPeter Holm# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 247e3c4b09SPeter Holm# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 257e3c4b09SPeter Holm# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 267e3c4b09SPeter Holm# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 277e3c4b09SPeter Holm# SUCH DAMAGE. 287e3c4b09SPeter Holm# 297e3c4b09SPeter Holm 307e3c4b09SPeter Holm# geom union test 317e3c4b09SPeter Holm 327e3c4b09SPeter Holm[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1 337e3c4b09SPeter Holm. ../default.cfg 347e3c4b09SPeter Holm 357e3c4b09SPeter Holmkldstat -v | grep -q geom_union.ko || 367e3c4b09SPeter Holm { kldload geom_union.ko 2>/dev/null || exit 0; loaded=1; } 377e3c4b09SPeter Holmlog=/tmp/gunion2.sh.log 387e3c4b09SPeter Holmmd1=$mdstart 397e3c4b09SPeter Holmmd2=$((mdstart + 1)) 407e3c4b09SPeter Holmmp1=$mntpoint$md1 417e3c4b09SPeter Holmmp2=$mntpoint$md2 427e3c4b09SPeter Holms=0 437e3c4b09SPeter Holm 447e3c4b09SPeter Holmset -e 457e3c4b09SPeter Holmmdconfig -a -t swap -s 5g -u $md1 4687000c89SPeter Holmnewfs -n /dev/md$md1 > /dev/null 477e3c4b09SPeter Holmmkdir -p $mp1 $mp2 487e3c4b09SPeter Holmmount /dev/md$md1 $mp1 497e3c4b09SPeter Holmcp -r ../../stress2 $mp1 507e3c4b09SPeter Holmumount $mp1 517e3c4b09SPeter Holm 527e3c4b09SPeter Holmmdconfig -a -t swap -s 5g -u $md2 53b4a66618SPeter Holmset +e 54b4a66618SPeter Holmgunion create -v /dev/md$md2 /dev/md$md1; s=$? 55b4a66618SPeter Holm[ $s -ne 0 ] && echo "gunion create returned $s" 56b4a66618SPeter Holmset -e 577e3c4b09SPeter Holmmount /dev/md$md2-md$md1.union $mntpoint 587e3c4b09SPeter Holm 597e3c4b09SPeter Holmexport CTRLDIR=$mntpoint/stressX.control 607e3c4b09SPeter Holmexport INCARNATIONS=10 617e3c4b09SPeter Holmexport LOAD=80 627e3c4b09SPeter Holmexport RUNDIR=$mntpoint/stressX 637e3c4b09SPeter Holmexport runRUNTIME=5m 647e3c4b09SPeter Holmexport rwLOAD=80 657e3c4b09SPeter Holmexport symlinkLOAD=80 667e3c4b09SPeter Holm 677e3c4b09SPeter Holmexport TESTPROGS=" 687e3c4b09SPeter Holmtestcases/lockf2/lockf2 697e3c4b09SPeter Holmtestcases/symlink/symlink 707e3c4b09SPeter Holmtestcases/openat/openat 717e3c4b09SPeter Holmtestcases/rw/rw 727e3c4b09SPeter Holmtestcases/fts/fts 737e3c4b09SPeter Holmtestcases/link/link 747e3c4b09SPeter Holmtestcases/lockf/lockf 757e3c4b09SPeter Holmtestcases/creat/creat 767e3c4b09SPeter Holmtestcases/mkdir/mkdir 777e3c4b09SPeter Holmtestcases/rename/rename 787e3c4b09SPeter Holmtestcases/mkfifo/mkfifo 797e3c4b09SPeter Holmtestcases/dirnprename/dirnprename 807e3c4b09SPeter Holmtestcases/dirrename/dirrename 817e3c4b09SPeter Holmtestcases/swap/swap 827e3c4b09SPeter Holm" 837e3c4b09SPeter Holmexport TESTPROGS=`echo $TESTPROGS | sed 's/\n/ /g'` 847e3c4b09SPeter Holm 85b4a66618SPeter Holmset -e 867e3c4b09SPeter Holmchmod 777 $mntpoint 877e3c4b09SPeter Holmsu $testuser -c \ 887e3c4b09SPeter Holm "(cd $mntpoint/stress2; ./testcases/run/run $TESTPROGS)" 897e3c4b09SPeter Holm 907e3c4b09SPeter Holmfor i in `jot 6`; do 917e3c4b09SPeter Holm mount | grep -q "on $mntpoint " || break 927e3c4b09SPeter Holm umount $mntpoint && break || sleep 10 937e3c4b09SPeter Holm [ $i -eq 6 ] && 947e3c4b09SPeter Holm { echo FATAL; fstat -mf $mntpoint; exit 1; } 957e3c4b09SPeter Holmdone 967e3c4b09SPeter Holmfsck_ffs -fyR /dev/md$md2-md$md1.union > $log 2>&1 977e3c4b09SPeter Holmgrep -Eq "IS CLEAN|MARKED CLEAN" $log || { s=2; cat $log; } 987e3c4b09SPeter Holmset +e 997e3c4b09SPeter Holmgunion commit /dev/md$md2-md$md1.union 10087000c89SPeter Holmgunion list | egrep Block\|Current | egrep -v 0 && s=3 1017e3c4b09SPeter Holmgunion destroy /dev/md$md2-md$md1.union 1027e3c4b09SPeter Holmfsck_ffs -fyR /dev/md$md1 > $log 2>&1 10387000c89SPeter Holmgrep -Eq "IS CLEAN|MARKED CLEAN" $log || { s=4; cat $log; } 1047e3c4b09SPeter Holmmdconfig -d -u $md2 1057e3c4b09SPeter Holmmdconfig -d -u $md1 1067e3c4b09SPeter Holmrm -f $log 1077e3c4b09SPeter Holm[ loaded ] && gunion unload 1087e3c4b09SPeter Holmexit $s 109