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>
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()
{
# real QA test starts here
_supported_fs generic
_supported_os Linux
+_require_test
_require_scratch
_require_odirect
_require_block_device $SCRATCH_DEV
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 <<EOF
###########
# $seq test fio activity
_require_xfs_io_command "finsert"
_require_xfs_io_command "truncate"
-# 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
-}
-
block_size=$(_get_file_block_size $TEST_DIR)
-max_file_size=$(get_max_file_size)
+max_file_size=$(_get_max_file_size)
max_blocks=$((max_file_size / block_size))
testfile=$TEST_DIR/testfile.$seq