mirror of
https://github.com/linux-apfs/apfstests.git
synced 2026-05-01 15:01:44 -07:00
54d6adf7c9
So df in btrfs is tricky at best, and relying on it for accurate information is not great, but it's the best way to verify this test. To get around btrfs being inconsistent sometimes just use _within_tolerance to check our new df value to make sure that our truncate did something. With this patch I no longer see transient failures of this test. Thanks, Signed-off-by: Josef Bacik <jbacik@fusionio.com> Reviewed-by: Jie Liu <jeff.liu@oracle.com> Signed-off-by: Ben Myers <bpm@sgi.com>
81 lines
2.5 KiB
Bash
81 lines
2.5 KiB
Bash
#! /bin/bash
|
|
# FS QA Test No. 315
|
|
#
|
|
# fallocate/truncate tests with FALLOC_FL_KEEP_SIZE option.
|
|
# Verify if the disk space is released after truncating a file back
|
|
# to the old smaller size. Before Linux 3.10, Btrfs/OCFS2 are test
|
|
# failed in this case.
|
|
#
|
|
#-----------------------------------------------------------------------
|
|
# Copyright (c) 2013 Oracle, Inc. All Rights Reserved.
|
|
#
|
|
# This program is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU General Public License as
|
|
# published by the Free Software Foundation.
|
|
#
|
|
# This program is distributed in the hope that it would be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program; if not, write the Free Software Foundation,
|
|
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
#-----------------------------------------------------------------------
|
|
#
|
|
|
|
seq=`basename $0`
|
|
seqres=$RESULT_DIR/$seq
|
|
echo "QA output created by $seq"
|
|
|
|
here=`pwd`
|
|
tmp=/tmp/$$
|
|
status=0 # success is the default!
|
|
trap "_cleanup; exit \$status" 0 1 2 3 15
|
|
|
|
_cleanup()
|
|
{
|
|
cd /
|
|
rm -f $tmp.*
|
|
}
|
|
|
|
# get standard environment, filters and checks
|
|
. ./common/rc
|
|
. ./common/filter
|
|
|
|
# real QA test starts here
|
|
|
|
# Modify as appropriate.
|
|
_supported_fs generic
|
|
_supported_os Linux
|
|
|
|
rm -f $seqres.full
|
|
|
|
echo "Slience is golden"
|
|
|
|
# Check the current avaliable disk space on $TEST_DIR.
|
|
# 1024KiB at least
|
|
avail_begin=`df -P $TEST_DIR | awk 'END {print $4}'`
|
|
[ "$avail_begin" -ge 1024 ] || _notrun "Test device is too small ($avail_begin KiB)"
|
|
|
|
# Preallocate half size of the available disk space to a file
|
|
# starts from offset 0 with FALLOC_FL_KEEP_SIZE option on the
|
|
# test file system.
|
|
fallocate -n -o 0 -l $(($avail_begin/2)) $TEST_DIR/testfile.$seq >>$seqres.full 2>&1
|
|
|
|
# Verify the file size, it should keep unchanged as 0 in this case
|
|
fsize=`ls -l $TEST_DIR/testfile.$seq | awk '{print $5}'`
|
|
[ "$fsize" -eq 0 ] || _fail "File size is changed to ($fsize Bytes)"
|
|
|
|
# Truncate the file size back to 0
|
|
truncate -s 0 $TEST_DIR/testfile.$seq
|
|
sync
|
|
|
|
# Preallocated disk space should be released
|
|
avail_done=`df -P $TEST_DIR | awk 'END {print $4}'`
|
|
_within_tolerance "df" $avail_done $avail_begin 1%
|
|
[ $? -eq 0 ] || _fail "Available disk space ($avail_done KiB) wanted ($avail_begin KiB)"
|
|
|
|
# success, all done
|
|
exit
|