xref: /freebsd/tools/test/stress2/misc/force9.sh (revision 4d846d26)
18d7fe653SPeter Holm#!/bin/sh
28d7fe653SPeter Holm
38d7fe653SPeter Holm#
44d846d26SWarner Losh# SPDX-License-Identifier: BSD-2-Clause
58d7fe653SPeter Holm#
68d7fe653SPeter Holm# Copyright (c) 2021 Peter Holm <pho@FreeBSD.org>
78d7fe653SPeter Holm#
88d7fe653SPeter Holm# Redistribution and use in source and binary forms, with or without
98d7fe653SPeter Holm# modification, are permitted provided that the following conditions
108d7fe653SPeter Holm# are met:
118d7fe653SPeter Holm# 1. Redistributions of source code must retain the above copyright
128d7fe653SPeter Holm#    notice, this list of conditions and the following disclaimer.
138d7fe653SPeter Holm# 2. Redistributions in binary form must reproduce the above copyright
148d7fe653SPeter Holm#    notice, this list of conditions and the following disclaimer in the
158d7fe653SPeter Holm#    documentation and/or other materials provided with the distribution.
168d7fe653SPeter Holm#
178d7fe653SPeter Holm# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
188d7fe653SPeter Holm# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
198d7fe653SPeter Holm# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
208d7fe653SPeter Holm# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
218d7fe653SPeter Holm# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
228d7fe653SPeter Holm# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
238d7fe653SPeter Holm# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
248d7fe653SPeter Holm# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
258d7fe653SPeter Holm# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
268d7fe653SPeter Holm# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
278d7fe653SPeter Holm# SUCH DAMAGE.
288d7fe653SPeter Holm#
298d7fe653SPeter Holm
308d7fe653SPeter Holm# "mdconfig -o force" test scenario.
318d7fe653SPeter Holm# "panic: ffs_checkblk: cylinder group read failed" seen:
328d7fe653SPeter Holm# https://people.freebsd.org/~pho/stress/log/log0170.txt
338d7fe653SPeter Holm
3450b8e3efSPeter Holm# "panic: softdep_update_inodeblock inconsistent ip ..." seen:
358d7fe653SPeter Holm# https://people.freebsd.org/~pho/stress/log/log0184.txt
368d7fe653SPeter Holm
37bab2efd4SPeter Holm# Watchdog fired: https://people.freebsd.org/~pho/stress/log/log0374.txt
38bab2efd4SPeter Holm
398d7fe653SPeter Holm[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
408d7fe653SPeter Holm. ../default.cfg
418d7fe653SPeter Holm
42bab2efd4SPeter Holmset -u
438d7fe653SPeter Holmlog=/tmp/force7.sh.log
448d7fe653SPeter Holmmount | grep $mntpoint | grep -q /dev/md && umount -f $mntpoint
458d7fe653SPeter Holmmdconfig -l | grep -q md$mdstart &&  mdconfig -d -u $mdstart
468d7fe653SPeter Holmtruncate -s 10g $diskimage
478d7fe653SPeter Holmmdconfig -a -t vnode -f $diskimage -u $mdstart
488d7fe653SPeter Holmflags=$newfs_flags
498d7fe653SPeter Holmecho "newfs $flags md$mdstart"
508d7fe653SPeter Holmnewfs $flags md$mdstart > /dev/null 2>&1
518d7fe653SPeter Holm
52bab2efd4SPeter Holm# Exclude rename  for now due to log0374.txt
538d7fe653SPeter Holmexport TESTPROGS=`cd ..; find testcases/ -perm -1 -type f | \
54bab2efd4SPeter Holm    egrep -Ev "/run/|/badcode/|/pty/|/shm/|/socket/|sysctl|tcp|thr|udp|rename"`
558d7fe653SPeter Holmexport runRUNTIME=3m
568d7fe653SPeter Holmexport RUNDIR=$mntpoint/stressX
57bab2efd4SPeter Holmexport CTRLDIR=$mntpoint/stressX.control
588d7fe653SPeter Holmstart=`date +%s`
598d7fe653SPeter Holmwhile [ $((`date +%s` - start)) -lt $((15 * 60)) ]; do
608d7fe653SPeter Holm	mount /dev/md$mdstart $mntpoint
618d7fe653SPeter Holm	rm -fr $mntpoint/lost+found
628d7fe653SPeter Holm	chmod 777 $mntpoint
638d7fe653SPeter Holm
648d7fe653SPeter Holm	su $testuser -c 'cd ..; ./testcases/run/run $TESTPROGS' > \
658d7fe653SPeter Holm	    /dev/null 2>&1 &
668d7fe653SPeter Holm
678d7fe653SPeter Holm	sleep `jot -r 1 60 180`
688d7fe653SPeter Holm	while mdconfig -l | grep -q md$mdstart; do
698d7fe653SPeter Holm		mdconfig -d -u $mdstart -o force || sleep 1
708d7fe653SPeter Holm	done
718d7fe653SPeter Holm	sleep 1
728d7fe653SPeter Holm	../tools/killall.sh
738d7fe653SPeter Holm	wait
748d7fe653SPeter Holm	n=0
758d7fe653SPeter Holm	while mount | grep $mntpoint | grep -q /dev/md; do
768d7fe653SPeter Holm		umount $mntpoint || sleep 1
778d7fe653SPeter Holm		[ $((n += 1)) -gt 300 ] && { echo FAIL; exit 1; }
788d7fe653SPeter Holm	done
798d7fe653SPeter Holm	mdconfig -a -t vnode -f $diskimage -u $mdstart
80bab2efd4SPeter Holm	c=0
81bab2efd4SPeter Holm	# Run fsck minimum two times
82bab2efd4SPeter Holm	for i in `jot 5`; do
83bab2efd4SPeter Holm		fsck_ffs -fy /dev/md$mdstart > $log 2>&1; s=$?
84bab2efd4SPeter Holm		grep -q CLEAN $log && grep -q "MODIFIED" $log && c=$((c+=1))
85bab2efd4SPeter Holm		grep -Eq "FILE SYSTEM WAS MODIFIED" $log || break
86bab2efd4SPeter Holm	done
87bab2efd4SPeter Holm	[ $c -gt 1 ] &&
88bab2efd4SPeter Holm	    { echo "Note: FS marked clean+modified $c times out of $i fsck runs"; s=101; }
898d7fe653SPeter Holm	[ $s -ne 0 ] && break
90bab2efd4SPeter Holm	grep -Eq "IS CLEAN|MARKED CLEAN" $log || { s=102; break; }
918d7fe653SPeter Holmdone
928d7fe653SPeter Holmif [ $s -eq 0 ]; then
938d7fe653SPeter Holm	mount /dev/md$mdstart $mntpoint
948d7fe653SPeter Holm	cp -R /usr/include $mntpoint
958d7fe653SPeter Holm	dd if=/dev/zero of=$mntpoint/big bs=1m count=10 status=none
968d7fe653SPeter Holm	find $mntpoint/* -delete
978d7fe653SPeter Holm	umount $mntpoint
988d7fe653SPeter Holm	mdconfig -d -u $mdstart
998d7fe653SPeter Holm	rm -f $diskimage $log
1008d7fe653SPeter Holmelse
101bab2efd4SPeter Holm	tail -10 $log
1028d7fe653SPeter Holmfi
1038d7fe653SPeter Holmexit $s
104