17c455ce2SPeter Holm#!/bin/sh 27c455ce2SPeter Holm 37c455ce2SPeter Holm# 4*4d846d26SWarner Losh# SPDX-License-Identifier: BSD-2-Clause 57c455ce2SPeter Holm# 67c455ce2SPeter Holm# Copyright (c) 2022 Peter Holm <pho@FreeBSD.org> 77c455ce2SPeter Holm# 87c455ce2SPeter Holm# Redistribution and use in source and binary forms, with or without 97c455ce2SPeter Holm# modification, are permitted provided that the following conditions 107c455ce2SPeter Holm# are met: 117c455ce2SPeter Holm# 1. Redistributions of source code must retain the above copyright 127c455ce2SPeter Holm# notice, this list of conditions and the following disclaimer. 137c455ce2SPeter Holm# 2. Redistributions in binary form must reproduce the above copyright 147c455ce2SPeter Holm# notice, this list of conditions and the following disclaimer in the 157c455ce2SPeter Holm# documentation and/or other materials provided with the distribution. 167c455ce2SPeter Holm# 177c455ce2SPeter Holm# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 187c455ce2SPeter Holm# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 197c455ce2SPeter Holm# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 207c455ce2SPeter Holm# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 217c455ce2SPeter Holm# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 227c455ce2SPeter Holm# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 237c455ce2SPeter Holm# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 247c455ce2SPeter Holm# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 257c455ce2SPeter Holm# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 267c455ce2SPeter Holm# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 277c455ce2SPeter Holm# SUCH DAMAGE. 287c455ce2SPeter Holm# 297c455ce2SPeter Holm 307c455ce2SPeter Holm[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1 317c455ce2SPeter Holm. ../default.cfg 327c455ce2SPeter Holm 337c455ce2SPeter Holmset -u 347c455ce2SPeter Holmbackup=`dirname $diskimage`/force11.sh.diskimage.`date +%Y%m%dT%H%M%S` 357c455ce2SPeter Holmlog=/tmp/force11.sh.log 367c455ce2SPeter Holmmount | grep $mntpoint | grep -q /dev/md && umount -f $mntpoint 377c455ce2SPeter Holmmdconfig -l | grep -q md$mdstart && mdconfig -d -u $mdstart 387c455ce2SPeter Holmtruncate -s 10g $diskimage 397c455ce2SPeter Holmmdconfig -a -t vnode -f $diskimage -u $mdstart 407c455ce2SPeter Holmflags=$newfs_flags 417c455ce2SPeter Holm[ `jot -r 1 0 1` -eq 1 ] && flags="-j" 427c455ce2SPeter Holmecho "newfs $flags md$mdstart" 437c455ce2SPeter Holmnewfs $flags md$mdstart > /dev/null 2>&1 447c455ce2SPeter Holm 457c455ce2SPeter Holmexport TESTPROGS=`cd ..; find testcases/ -perm -1 -type f | \ 467c455ce2SPeter Holm egrep -Ev "/run/|/badcode/|/pty/|/shm/|/socket/|sysctl|tcp|thr|udp|rename"` 477c455ce2SPeter Holmexport runRUNTIME=3m 487c455ce2SPeter Holmexport RUNDIR=$mntpoint/stressX 497c455ce2SPeter Holmexport CTRLDIR=$mntpoint/stressX.control 507c455ce2SPeter Holmstart=`date +%s` 517c455ce2SPeter Holmwhile [ $((`date +%s` - start)) -lt $((15 * 60)) ]; do 527c455ce2SPeter Holm mount /dev/md$mdstart $mntpoint 537c455ce2SPeter Holm rm -fr $mntpoint/lost+found 547c455ce2SPeter Holm chmod 777 $mntpoint 557c455ce2SPeter Holm 567c455ce2SPeter Holm su $testuser -c 'cd ..; ./testcases/run/run $TESTPROGS' > \ 577c455ce2SPeter Holm /dev/null 2>&1 & 587c455ce2SPeter Holm 597c455ce2SPeter Holm sleep `jot -r 1 30 60` 607c455ce2SPeter Holm while mdconfig -l | grep -q md$mdstart; do 617c455ce2SPeter Holm mdconfig -d -u $mdstart -o force || sleep 1 627c455ce2SPeter Holm done 637c455ce2SPeter Holm sleep 1 647c455ce2SPeter Holm ../tools/killall.sh 657c455ce2SPeter Holm wait 667c455ce2SPeter Holm dd if=$diskimage of=$backup bs=1m conv=sparse,sync status=none 677c455ce2SPeter Holm sync; sleep .5; sync; sleep .5; sync 687c455ce2SPeter Holm n=0 697c455ce2SPeter Holm while mount | grep $mntpoint | grep -q /dev/md; do 707c455ce2SPeter Holm umount $mntpoint || sleep 1 717c455ce2SPeter Holm [ $((n += 1)) -gt 300 ] && { echo FAIL; exit 1; } 727c455ce2SPeter Holm done 737c455ce2SPeter Holm mdconfig -a -t vnode -f $diskimage -u $mdstart 747c455ce2SPeter Holm c=0 757c455ce2SPeter Holm for i in `jot 5`; do 767c455ce2SPeter Holm fsck_ffs -fyR /dev/md$mdstart > $log 2>&1; s=$? 777c455ce2SPeter Holm grep -q CLEAN $log && grep -q "MODIFIED" $log && c=$((c+=1)) 787c455ce2SPeter Holm grep -Eq "FILE SYSTEM WAS MODIFIED" $log || break 797c455ce2SPeter Holm done 807c455ce2SPeter Holm [ $c -gt 1 ] && 817c455ce2SPeter Holm { echo "Note: FS marked clean+modified $c times out of $i fsck runs"; s=101; } 827c455ce2SPeter Holm [ $s -ne 0 ] && break 837c455ce2SPeter Holm grep -Eq "IS CLEAN|MARKED CLEAN" $log || { s=100; break; } 847c455ce2SPeter Holm break # For now, only once 857c455ce2SPeter Holmdone 867c455ce2SPeter Holmif [ $s -eq 0 ]; then 877c455ce2SPeter Holm mount /dev/md$mdstart $mntpoint 887c455ce2SPeter Holm cp -R /usr/include $mntpoint || s=1 897c455ce2SPeter Holm dd if=/dev/zero of=$mntpoint/big bs=1m count=10 status=none || s=2 907c455ce2SPeter Holm ls -lR $mntpoint > /dev/null || s=3 917c455ce2SPeter Holm find $mntpoint/* -delete || s=4 927c455ce2SPeter Holm umount $mntpoint 937c455ce2SPeter Holm [ $s -eq 0 ] && 947c455ce2SPeter Holm rm -f $diskimage $log $backup 957c455ce2SPeter Holmelse 967c455ce2SPeter Holm tail -10 $log 977c455ce2SPeter Holmfi 987c455ce2SPeter Holmmdconfig -d -u $mdstart 997c455ce2SPeter Holm[ -f $backup ] && xz -T0 $backup 1007c455ce2SPeter Holmexit $s 101