xref: /freebsd/tools/test/stress2/misc/tmpfs25.sh (revision 4d846d260e2b9a3d4d0a701462568268cbfe7a5b)
1d941ffdcSPeter Holm#!/bin/sh
2d941ffdcSPeter Holm
3d941ffdcSPeter Holm#
4*4d846d26SWarner Losh# SPDX-License-Identifier: BSD-2-Clause
5d941ffdcSPeter Holm#
6d941ffdcSPeter Holm# Copyright (c) 2022 Peter Holm <pho@FreeBSD.org>
7d941ffdcSPeter Holm#
8d941ffdcSPeter Holm# Redistribution and use in source and binary forms, with or without
9d941ffdcSPeter Holm# modification, are permitted provided that the following conditions
10d941ffdcSPeter Holm# are met:
11d941ffdcSPeter Holm# 1. Redistributions of source code must retain the above copyright
12d941ffdcSPeter Holm#    notice, this list of conditions and the following disclaimer.
13d941ffdcSPeter Holm# 2. Redistributions in binary form must reproduce the above copyright
14d941ffdcSPeter Holm#    notice, this list of conditions and the following disclaimer in the
15d941ffdcSPeter Holm#    documentation and/or other materials provided with the distribution.
16d941ffdcSPeter Holm#
17d941ffdcSPeter Holm# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18d941ffdcSPeter Holm# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19d941ffdcSPeter Holm# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20d941ffdcSPeter Holm# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
21d941ffdcSPeter Holm# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22d941ffdcSPeter Holm# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23d941ffdcSPeter Holm# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24d941ffdcSPeter Holm# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25d941ffdcSPeter Holm# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26d941ffdcSPeter Holm# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27d941ffdcSPeter Holm# SUCH DAMAGE.
28d941ffdcSPeter Holm#
29d941ffdcSPeter Holm
30d941ffdcSPeter Holm# Regression test for:
31d941ffdcSPeter Holm# Bug 223015 - [tmpfs] [patch] tmpfs does not support sparse files
32d941ffdcSPeter Holm
33d941ffdcSPeter Holm[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
34d941ffdcSPeter Holm. ../default.cfg
35d941ffdcSPeter Holm
36d941ffdcSPeter Holmset -eu
37d941ffdcSPeter Holmprog=$(basename "$0" .sh)
38d941ffdcSPeter Holmcont=/tmp/$prog.cont
39d941ffdcSPeter Holmsync=/tmp/$prog.sync
40d941ffdcSPeter Holmmount | grep -q "on $mntpoint " && umount $mntpoint
41d941ffdcSPeter Holmmount -t tmpfs -o size=100m dummy $mntpoint
42d941ffdcSPeter Holmiused=`df $mntpoint | tail -1 | awk '{print $3}'`
43d941ffdcSPeter Holm
44d941ffdcSPeter Holmlist="1m 10m 40m 45m 49m 50m 60m 100m 1g 4g"
45d941ffdcSPeter Holmr=0
46d941ffdcSPeter Holmfor s in $list; do
47d941ffdcSPeter Holm	truncate -s $s $mntpoint/sparse || {
48d941ffdcSPeter Holm		echo "truncate -s $s failed"
49d941ffdcSPeter Holm		r=1; break 2
50d941ffdcSPeter Holm	}
51d941ffdcSPeter Holm	rm $mntpoint/sparse || break
52d941ffdcSPeter Holm	used=`df $mntpoint | tail -1 | awk '{print $3}'`
53d941ffdcSPeter Holm	[ $used -ne $iused ] && {
54d941ffdcSPeter Holm		echo "truncate -s $s test: $iused / $used"; r=1; break; }
55d941ffdcSPeter Holmdone
56d941ffdcSPeter Holm
57d941ffdcSPeter Holmtouch $cont
58d941ffdcSPeter Holmfor i in `jot 1000`; do
59d941ffdcSPeter Holm	[ $r -ne 0 ] && break
60d941ffdcSPeter Holm	file=$mntpoint/sparse.$i
61d941ffdcSPeter Holm	for s in $list; do
62d941ffdcSPeter Holm		[ ! -f $cont ] && break
63d941ffdcSPeter Holm		for n in `jot 300`; do [ -f $sync ] && break; sleep .2; done
64d941ffdcSPeter Holm		truncate -s $s $file || {
65d941ffdcSPeter Holm			echo "truncate -s $s failed"
66d941ffdcSPeter Holm			rm -f $cont
67d941ffdcSPeter Holm			break
68d941ffdcSPeter Holm		}
69d941ffdcSPeter Holm		[ -f $file ] || { echo "No file $file"; break; }
70d941ffdcSPeter Holm		rm $file || break
71d941ffdcSPeter Holm	done &
72d941ffdcSPeter Holmdone
73d941ffdcSPeter Holmtouch $sync
74d941ffdcSPeter Holmwait
75d941ffdcSPeter Holm
76d941ffdcSPeter Holmused=`df $mntpoint | tail -1 | awk '{print $3}'`
77d941ffdcSPeter Holmif [ $used -ne $iused ]; then
78d941ffdcSPeter Holm	[ `ls -al $mntpoint | wc -l` -gt 3 ] &&
79d941ffdcSPeter Holm	    ls -al $mntpoint | head -10
80d941ffdcSPeter Holm	df -i $mntpoint
81d941ffdcSPeter Holm	fstat -f $mntpoint
82d941ffdcSPeter Holmfi
83d941ffdcSPeter Holmumount $mntpoint
84d941ffdcSPeter Holmrm -f $cont $sync
85d941ffdcSPeter Holm
86d941ffdcSPeter Holmexit $r
87