xref: /freebsd/tools/test/stress2/misc/nlink2.sh (revision 25a1b1f30c85670b6d970df426b97c07d4e0e61d)
1*25a1b1f3SPeter Holm#!/bin/sh
2*25a1b1f3SPeter Holm
3*25a1b1f3SPeter Holm#
4*25a1b1f3SPeter Holm# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
5*25a1b1f3SPeter Holm#
6*25a1b1f3SPeter Holm# Copyright (c) 2022 Peter Holm <pho@FreeBSD.org>
7*25a1b1f3SPeter Holm#
8*25a1b1f3SPeter Holm# Redistribution and use in source and binary forms, with or without
9*25a1b1f3SPeter Holm# modification, are permitted provided that the following conditions
10*25a1b1f3SPeter Holm# are met:
11*25a1b1f3SPeter Holm# 1. Redistributions of source code must retain the above copyright
12*25a1b1f3SPeter Holm#    notice, this list of conditions and the following disclaimer.
13*25a1b1f3SPeter Holm# 2. Redistributions in binary form must reproduce the above copyright
14*25a1b1f3SPeter Holm#    notice, this list of conditions and the following disclaimer in the
15*25a1b1f3SPeter Holm#    documentation and/or other materials provided with the distribution.
16*25a1b1f3SPeter Holm#
17*25a1b1f3SPeter Holm# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18*25a1b1f3SPeter Holm# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19*25a1b1f3SPeter Holm# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20*25a1b1f3SPeter Holm# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
21*25a1b1f3SPeter Holm# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22*25a1b1f3SPeter Holm# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23*25a1b1f3SPeter Holm# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24*25a1b1f3SPeter Holm# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25*25a1b1f3SPeter Holm# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26*25a1b1f3SPeter Holm# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27*25a1b1f3SPeter Holm# SUCH DAMAGE.
28*25a1b1f3SPeter Holm#
29*25a1b1f3SPeter Holm
30*25a1b1f3SPeter Holm# Simple test to demonstrate EMLINK issue on a SU file system.
31*25a1b1f3SPeter Holm
32*25a1b1f3SPeter Holm# mkdir: /mnt10/a994: Too many links
33*25a1b1f3SPeter Holm
34*25a1b1f3SPeter Holm[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
35*25a1b1f3SPeter Holm. ../default.cfg
36*25a1b1f3SPeter Holm
37*25a1b1f3SPeter Holmecho "$newfs_flags" | grep -q U || exit 0
38*25a1b1f3SPeter Holmlog=/tmp/nlink2.sh.log
39*25a1b1f3SPeter Holmmd=$mdstart
40*25a1b1f3SPeter Holmmp=/mnt$md
41*25a1b1f3SPeter Holmmkdir -p $mp
42*25a1b1f3SPeter Holmset -e
43*25a1b1f3SPeter Holmmount | grep -q "on $mp " && umount -f $mp
44*25a1b1f3SPeter Holmmdconfig -l | grep -q md$md && mdconfig -d -u $md
45*25a1b1f3SPeter Holm
46*25a1b1f3SPeter Holmmdconfig -a -t swap -s 1g -u $md
47*25a1b1f3SPeter Holmnewfs $newfs_flags -n md$md > /dev/null
48*25a1b1f3SPeter Holmmount /dev/md$md $mp
49*25a1b1f3SPeter Holmset +e
50*25a1b1f3SPeter Holm
51*25a1b1f3SPeter Holmstart=`date +%s`
52*25a1b1f3SPeter Holmfor i in `jot 1000`; do
53*25a1b1f3SPeter Holm	jot 1000 | xargs -P0 -I% mkdir $mp/a% || { s=1; break; }
54*25a1b1f3SPeter Holm	jot 1000 | xargs -P0 -I% rmdir $mp/a%
55*25a1b1f3SPeter Holm	t=$((`date +%s` - start))
56*25a1b1f3SPeter Holm	if [ $t -ge 300 ]; then
57*25a1b1f3SPeter Holm		echo "Warn: Timed out in loop #$i after $t seconds"
58*25a1b1f3SPeter Holm		break
59*25a1b1f3SPeter Holm	fi
60*25a1b1f3SPeter Holmdone
61*25a1b1f3SPeter Holmif [ $s ]; then
62*25a1b1f3SPeter Holm	echo "Failed in loop #$i"
63*25a1b1f3SPeter Holm	df -i $mp
64*25a1b1f3SPeter Holmfi
65*25a1b1f3SPeter Holm
66*25a1b1f3SPeter Holmumount $mp
67*25a1b1f3SPeter Holmfsck_ffs -fy /dev/md$md > $log 2>&1
68*25a1b1f3SPeter Holmgrep -Eq "WAS MODIFIED" $log && { s=$((s + 2)); cat $log; }
69*25a1b1f3SPeter Holmmdconfig -d -u $md
70*25a1b1f3SPeter Holmrm -f $log
71*25a1b1f3SPeter Holmexit $s
72