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