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