xref: /freebsd/tools/test/stress2/misc/gunion2.sh (revision 4d846d260e2b9a3d4d0a701462568268cbfe7a5b)
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