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