mirror of
https://github.com/linux-apfs/apfstests.git
synced 2026-05-01 15:01:44 -07:00
d34e87ea0f
For some filesystem, such as vfat, the max support file size is 4G. We limit the max size and let the test go on running. Fix it by moving the function get_max_file_size() of generci/485 to common/rc, and add the max filesize limit to generic/299. Signed-off-by: Yufen Yu <yuyufen@huawei.com> Reviewed-by: Eryu Guan <guaneryu@gmail.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
79 lines
2.6 KiB
Bash
Executable File
79 lines
2.6 KiB
Bash
Executable File
#! /bin/bash
|
|
# SPDX-License-Identifier: GPL-2.0
|
|
# Copyright (c) 2018 Google, Inc. All Rights Reserved.
|
|
#
|
|
# FS QA Test No. 485
|
|
#
|
|
# Regression test for:
|
|
# 349fa7d6e193 ("ext4: prevent right-shifting extents beyond EXT_MAX_BLOCKS")
|
|
# 7d83fb14258b ("xfs: prevent creating negative-sized file via INSERT_RANGE")
|
|
#
|
|
seq=`basename $0`
|
|
seqres=$RESULT_DIR/$seq
|
|
echo "QA output created by $seq"
|
|
|
|
status=1 # failure is the default!
|
|
trap "_cleanup; exit \$status" 0 1 2 3 15
|
|
|
|
_cleanup()
|
|
{
|
|
cd /
|
|
rm -f $testfile
|
|
}
|
|
|
|
# get standard environment, filters and checks
|
|
. ./common/rc
|
|
. ./common/filter
|
|
|
|
# remove previous $seqres.full before test
|
|
rm -f $seqres.full
|
|
|
|
# real QA test starts here
|
|
_supported_fs generic
|
|
_supported_os Linux
|
|
_require_test
|
|
_require_math
|
|
_require_xfs_io_command "falloc" "-k"
|
|
_require_xfs_io_command "finsert"
|
|
_require_xfs_io_command "truncate"
|
|
|
|
block_size=$(_get_file_block_size $TEST_DIR)
|
|
max_file_size=$(_get_max_file_size)
|
|
max_blocks=$((max_file_size / block_size))
|
|
testfile=$TEST_DIR/testfile.$seq
|
|
|
|
echo "# With KEEP_SIZE"
|
|
rm -f "$testfile"
|
|
|
|
# Add an extent at the beginning of the file. With ext4, this is needed to
|
|
# reproduce the bug where the extents appear out of order later.
|
|
$XFS_IO_PROG -f -c "falloc 0 $((2 * block_size))" "$testfile"
|
|
|
|
# Add an extent just below s_maxbytes, without changing i_size (i.e. with -k).
|
|
# The out-of-order extents bug can't be reproduced if i_size is changed, because
|
|
# then the range insertion fails due to the new i_size being > s_maxbytes.
|
|
$XFS_IO_PROG -c "falloc -k $(( (max_blocks - 1) * $block_size )) $block_size" \
|
|
"$testfile"
|
|
|
|
# Insert an extent at the beginning of the file. With the ext4 bug, this caused
|
|
# the logical block number of the extent just below s_maxbytes to wrap around,
|
|
# causing the extents to get out of order, causing corruption detected by
|
|
# e2fsck. With the fix, the range insertion fails with EINVAL. Though, with
|
|
# xfs and f2fs the insertion succeeds, resulting in extents beyond s_maxbytes,
|
|
# but there is no wraparound -- which is arguably okay. So we allow either
|
|
# behavior and just rely on fsck detecting if something went wrong.
|
|
$XFS_IO_PROG -c "finsert 0 $((2 * block_size))" "$testfile" &>>$seqres.full
|
|
|
|
# Also do the same test, but with changing i_size (i.e. without -k). The
|
|
# insertion should fail with EFBIG. This exposed an XFS bug where i_size + len
|
|
# underwent signed overflow, resulting in a negative-sized file.
|
|
echo "# Without KEEP_SIZE"
|
|
rm -f "$testfile"
|
|
$XFS_IO_PROG -f -c "falloc 0 $((2 * block_size))" "$testfile"
|
|
$XFS_IO_PROG -c "falloc $(( (max_blocks - 1) * $block_size )) $block_size" \
|
|
"$testfile"
|
|
$XFS_IO_PROG -c "finsert 0 $((2 * block_size))" "$testfile"
|
|
|
|
status=0
|
|
exit
|