xref: /freebsd/tools/test/stress2/misc/seekhole2.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# A SEEK_HOLE / SEEK_DATA test scenario, FFS version
10*ef777be9SPeter Holm
11*ef777be9SPeter Holm[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
12*ef777be9SPeter Holm
13*ef777be9SPeter Holm. ../default.cfg
14*ef777be9SPeter Holm
15*ef777be9SPeter Holmprog=$(basename "$0" .sh)
16*ef777be9SPeter Holmexp=/tmp/$prog.exp
17*ef777be9SPeter Holmhere=`pwd`
18*ef777be9SPeter Holmlog=/tmp/$prog.log
19*ef777be9SPeter Holm
20*ef777be9SPeter Holmcc -o /tmp/lsholes -Wall -Wextra -O2 $here/../tools/lsholes.c | exit 1
21*ef777be9SPeter Holmcat > $exp <<EXP
22*ef777be9SPeter HolmMin hole size is 32768, file size is 524288000.
23*ef777be9SPeter Holmdata #1 @ 0, size=32768)
24*ef777be9SPeter Holmhole #2 @ 32768, size=32768
25*ef777be9SPeter Holmdata #3 @ 65536, size=32768)
26*ef777be9SPeter Holmhole #4 @ 98304, size=32768
27*ef777be9SPeter Holmdata #5 @ 131072, size=32768)
28*ef777be9SPeter Holmhole #6 @ 163840, size=524091392
29*ef777be9SPeter Holmdata #7 @ 524255232, size=32768)
30*ef777be9SPeter Holmhole #8 @ 524288000, size=0
31*ef777be9SPeter HolmEXP
32*ef777be9SPeter Holm
33*ef777be9SPeter Holmset -eu
34*ef777be9SPeter Holmmount | grep "on $mntpoint " | grep -q /dev/md && umount -f $mntpoint
35*ef777be9SPeter Holm[ -c /dev/md$mdstart ] &&  mdconfig -d -u $mdstart
36*ef777be9SPeter Holmmdconfig -a -t swap -s 2g -u $mdstart
37*ef777be9SPeter Holmnewfs $newfs_flags md$mdstart > /dev/null
38*ef777be9SPeter Holmmount /dev/md$mdstart $mntpoint
39*ef777be9SPeter Holmset +e
40*ef777be9SPeter Holm
41*ef777be9SPeter Holmfile=$mntpoint/file
42*ef777be9SPeter Holmcopy=$mntpoint/copy
43*ef777be9SPeter Holmtruncate -s 500m $file
44*ef777be9SPeter Holmbs=`getconf MIN_HOLE_SIZE $file`
45*ef777be9SPeter Holmprintf "\001" | dd of=$file seek=$((0*bs)) bs=1 count=1 conv=notrunc status=none
46*ef777be9SPeter Holmprintf "\002" | dd of=$file seek=$((2*bs)) bs=1 count=1 conv=notrunc status=none
47*ef777be9SPeter Holmprintf "\003" | dd of=$file seek=$((4*bs)) bs=1 count=1 conv=notrunc status=none
48*ef777be9SPeter Holms1=0
49*ef777be9SPeter Holms2=0
50*ef777be9SPeter Holms3=0
51*ef777be9SPeter Holm/tmp/lsholes $file > $log 2>&1; s1=$?
52*ef777be9SPeter Holm
53*ef777be9SPeter Holmsdiff -s $exp $log || s2=1
54*ef777be9SPeter Holm
55*ef777be9SPeter Holm$here/../testcases/swap/swap -t 2m -i 20 -h > /dev/null &
56*ef777be9SPeter Holmsleep 10
57*ef777be9SPeter Holmcp $file $copy
58*ef777be9SPeter Holmwhile pkill swap; do :; done
59*ef777be9SPeter Holmwait
60*ef777be9SPeter Holmcmp $file $copy || { echo "copy error"; s3=1; }
61*ef777be9SPeter Holm
62*ef777be9SPeter Holmumount $mntpoint
63*ef777be9SPeter Holmmdconfig -d -u $mdstart
64*ef777be9SPeter Holmrm -f /tmp/lsholes $exp $log
65*ef777be9SPeter Holmexit $((s1 + s2 + s3))
66