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