1*ef777be9SPeter Holm#!/bin/sh 2*ef777be9SPeter Holm 3*ef777be9SPeter Holm# 4*ef777be9SPeter Holm# Copyright (c) 2025 Peter Holm <pho@FreeBSD.org> 5*ef777be9SPeter Holm# 6*ef777be9SPeter Holm# SPDX-License-Identifier: BSD-2-Clause 7*ef777be9SPeter Holm# 8*ef777be9SPeter Holm 9*ef777be9SPeter Holm# Variation of nullfs25.sh, using cp(1) (copy_file_range()) 10*ef777be9SPeter Holm 11*ef777be9SPeter Holm# Page fault in vn_copy_file_range() seen: 12*ef777be9SPeter Holm# https://people.freebsd.org/~pho/stress/log/log0497.txt 13*ef777be9SPeter Holm# Fixed by: 23210f538a00 14*ef777be9SPeter Holm 15*ef777be9SPeter Holm[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1 16*ef777be9SPeter Holm. ../default.cfg 17*ef777be9SPeter Holm 18*ef777be9SPeter Holmset -u 19*ef777be9SPeter Holmmounts=4 # Number of parallel scripts 20*ef777be9SPeter Holm: ${nullfs_srcdir:=$mntpoint} 21*ef777be9SPeter Holm: ${nullfs_dstdir:=$mntpoint} 22*ef777be9SPeter Holmprog=$(basename "$0" .sh) 23*ef777be9SPeter HolmCONT=/tmp/$prog.continue 24*ef777be9SPeter Holm 25*ef777be9SPeter Holmmount | grep $mntpoint | grep -q /dev/md && umount -f $mntpoint 26*ef777be9SPeter Holmmdconfig -l | grep -q md$mdstart && mdconfig -d -u $mdstart 27*ef777be9SPeter Holmmdconfig -a -t swap -s 1g -u $mdstart 28*ef777be9SPeter Holmnewfs $newfs_flags md$mdstart > /dev/null 29*ef777be9SPeter Holmmount /dev/md$mdstart $mntpoint 30*ef777be9SPeter Holmchmod 777 $mntpoint 31*ef777be9SPeter Holm(cd $mntpoint; jot 500 | xargs touch) 32*ef777be9SPeter Holm(cd ../testcases/swap; ./swap -t 5m -i 20 > /dev/null) & 33*ef777be9SPeter Holm 34*ef777be9SPeter Holmfor i in `jot $mounts $mdstart`; do 35*ef777be9SPeter Holm [ ! -d ${nullfs_dstdir}$i ] && mkdir ${nullfs_dstdir}$i 36*ef777be9SPeter Holm mount | grep -q " ${nullfs_dstdir}$i " && 37*ef777be9SPeter Holm umount ${nullfs_dstdir}$i 38*ef777be9SPeter Holmdone 39*ef777be9SPeter Holm 40*ef777be9SPeter Holm# Start the parallel tests 41*ef777be9SPeter Holmtouch $CONT 42*ef777be9SPeter Holmfor i in `jot $mounts $mdstart`; do 43*ef777be9SPeter Holm while [ -f $CONT ]; do 44*ef777be9SPeter Holm cp /etc/group ${nullfs_dstdir}$i > \ 45*ef777be9SPeter Holm /dev/null 2>&1 46*ef777be9SPeter Holm done & 47*ef777be9SPeter Holm # The test: Parallel mount and unmount 48*ef777be9SPeter Holm start=`date +%s` 49*ef777be9SPeter Holm ( 50*ef777be9SPeter Holm while [ $((`date +%s` - start)) -lt 300 ]; do 51*ef777be9SPeter Holm mount_nullfs $nullfs_srcdir ${nullfs_dstdir}$i > \ 52*ef777be9SPeter Holm /dev/null 2>&1 53*ef777be9SPeter Holm opt=$([ `jot -r 1 0 1` -eq 0 ] && echo "-f") 54*ef777be9SPeter Holm while mount | grep -q ${nullfs_dstdir}$i; do 55*ef777be9SPeter Holm umount $opt ${nullfs_dstdir}$i > \ 56*ef777be9SPeter Holm /dev/null 2>&1 57*ef777be9SPeter Holm done 58*ef777be9SPeter Holm done 59*ef777be9SPeter Holm rm -f $CONT 60*ef777be9SPeter Holm ) & 61*ef777be9SPeter Holmdone 62*ef777be9SPeter Holmwhile [ -f $CONT ] ; do sleep 1; done 63*ef777be9SPeter Holmwhile pgrep -q swap; do pkill swap; done 64*ef777be9SPeter Holmwait 65*ef777be9SPeter Holm 66*ef777be9SPeter Holmfor i in `jot $mounts`; do 67*ef777be9SPeter Holm umount ${nullfs_dstdir}$i > /dev/null 2>&1 68*ef777be9SPeter Holmdone 69*ef777be9SPeter Holmn=0 70*ef777be9SPeter Holmwhile mount | grep $mntpoint | grep -q /dev/md; do 71*ef777be9SPeter Holm umount $mntpoint || sleep 1 72*ef777be9SPeter Holm [ $((n += 1)) -gt 300 ] && { echo FAIL; exit 1; } 73*ef777be9SPeter Holmdone 74*ef777be9SPeter Holmmdconfig -d -u $mdstart 75*ef777be9SPeter Holmexit 0 76