generic: fallocate two bytes at block boundary

Allocating two bytes at a block boundary with fallocate should allocate
both blocks involved.  Test this by writing data to both bytes
afterwards and see whether the on-disk size increases (it should not).

This is a regression test for the kernel patch "xfs: Fix tail rounding
in xfs_alloc_file_space()".

Signed-off-by: Max Reitz <mreitz@redhat.com>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Eryu Guan <guaneryu@gmail.com>
This commit is contained in:
Max Reitz
2019-09-27 12:38:46 +02:00
committed by Eryu Guan
parent fa85aa6497
commit c599af2ca6
3 changed files with 65 additions and 0 deletions
+60
View File
@@ -0,0 +1,60 @@
#! /bin/bash
# SPDX-License-Identifier: GPL-2.0
# Copyright (c) 2019 Red Hat, Inc. All Rights Reserved.
#
# FS QA Test No. generic/568
#
# Test that fallocating an unaligned range allocates all blocks
# touched by that range
#
seq=$(basename $0)
seqres="$RESULT_DIR/$seq"
echo "QA output created by $seq"
here=$PWD
tmp=/tmp/$$
status=1 # failure is the default!
trap "_cleanup; exit \$status" 0 1 2 3 15
_cleanup()
{
cd /
rm -f "$tmp".*
rm -f "$TEST_DIR/falloctest-$seq"
}
# get standard environment, filters and checks
. ./common/rc
. ./common/filter
# real QA test starts here
_supported_fs generic
_supported_os Linux
_require_xfs_io_command "falloc"
testfile="$TEST_DIR/falloctest-$seq"
# Fallocate 2 bytes across a block boundary
block_size=$(_get_file_block_size "$TEST_DIR")
$XFS_IO_PROG -f -c "falloc $((block_size - 1)) 2" "$testfile"
# Both the first blocks should be allocated now. Check that by
# inquiring whether the file grows when we write to the two bytes we
# have just fallocated.
allocated_size_before=$(($(stat -c '%b * %B' "$testfile")))
$XFS_IO_PROG -c "pwrite $((block_size - 1)) 2" "$testfile" \
| _filter_xfs_io | sed -e "s/$((block_size - 1))/block_size - 1/"
allocated_size_after=$(($(stat -c '%b * %B' "$testfile")))
if [ $allocated_size_after -gt $allocated_size_before ]; then
echo "ERROR: File grew from ${allocated_size_before} B to" \
"${allocated_size_after} B when writing to the fallocated range."
else
echo "OK: File did not grow."
fi
status=0
exit
+4
View File
@@ -0,0 +1,4 @@
QA output created by 568
wrote 2/2 bytes at offset block_size - 1
XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
OK: File did not grow.
+1
View File
@@ -570,3 +570,4 @@
565 auto quick copy_range
566 auto quick quota metadata
567 auto quick rw punch
568 auto quick rw prealloc