From d34e87ea0f948909baea0a899926580c76e02a67 Mon Sep 17 00:00:00 2001 From: Yufen Yu Date: Tue, 26 Feb 2019 22:11:53 +0800 Subject: [PATCH] generic/299: limit max file size 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 Reviewed-by: Eryu Guan Signed-off-by: Eryu Guan --- common/rc | 23 +++++++++++++++++++++++ tests/generic/299 | 6 ++++++ tests/generic/485 | 25 +------------------------ 3 files changed, 30 insertions(+), 24 deletions(-) diff --git a/common/rc b/common/rc index c88c304c..7d9a59e9 100644 --- a/common/rc +++ b/common/rc @@ -3810,6 +3810,29 @@ _require_scratch_feature() esac } +# Get the maximum size of a file in $TEST_DIR (s_maxbytes). On ext4 this will +# be UINT32_MAX * block_size, but other filesystems may allow up to LLONG_MAX. +_get_max_file_size() +{ + local testfile=$TEST_DIR/maxfilesize.$seq + local l=0 + local r=9223372036854775807 # LLONG_MAX + + rm -f $testfile + while (( l < r )); do + # Use _math() to avoid signed integer overflow. + local m=$(_math "($l + $r + 1) / 2") + if $XFS_IO_PROG -f -c "truncate $m" $testfile \ + |& grep -q 'File too large' + then + r=$(( m - 1 )) + else + l=$m + fi + done + echo $l +} + # The maximum filesystem label length, /not/ including terminating NULL _label_get_max() { diff --git a/tests/generic/299 b/tests/generic/299 index c4d74fc8..5e3d55df 100755 --- a/tests/generic/299 +++ b/tests/generic/299 @@ -25,6 +25,7 @@ trap "rm -f $tmp.*; exit \$status" 0 1 2 3 15 # real QA test starts here _supported_fs generic _supported_os Linux +_require_test _require_scratch _require_odirect _require_block_device $SCRATCH_DEV @@ -33,6 +34,11 @@ NUM_JOBS=$((4*LOAD_FACTOR)) BLK_DEV_SIZE=`blockdev --getsz $SCRATCH_DEV` FILE_SIZE=$((BLK_DEV_SIZE * 512)) +max_file_size=$(_get_max_file_size) +if [ $max_file_size -lt $FILE_SIZE ]; then + FILE_SIZE=$max_file_size +fi + cat >$fio_config <