Files
apfstests/tests/xfs/140
T
Chandan Rajendra b0c8d2f735 xfs/140: work with 1k block size
Commit 7a7641063a (xfs/140: work with 64k
block size) created a test filesystem with AG size set to (8192 * block
size). When working with a 1k block sized XFS filesystem, this tries to
set the AG size to 8MiB which is less than the minimum AG size of
16MiB. Hence creation of the filesystem had actually failed.

This commit fixes the issue by resetting AG size to 16MiB if (8192 *
block size) results in a value less than 16MiB. Later the test file size
and the test file block count are then appropriately calculated.

Reported-by: Dave Chinner <david@fromorbit.com>
Signed-off-by: Chandan Rajendra <chandan@linux.vnet.ibm.com>
Reviewed-by: Eryu Guan <guaneryu@gmail.com>
Signed-off-by: Eryu Guan <guaneryu@gmail.com>
2018-10-21 17:29:40 +08:00

80 lines
2.0 KiB
Bash
Executable File

#! /bin/bash
# SPDX-License-Identifier: GPL-2.0
# Copyright (c) 2015, Oracle and/or its affiliates. All Rights Reserved.
#
# FS QA Test No. 140
#
# Try to ENOSPC while expanding the refcntbt by CoWing every other block
# of a file that eats the whole AG.
#
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 -rf $tmp.* $testdir
}
# get standard environment, filters and checks
. ./common/rc
. ./common/filter
. ./common/reflink
# real QA test starts here
_supported_os Linux
_require_scratch_reflink
_require_cp_reflink
rm -f $seqres.full
_scratch_mkfs >/dev/null 2>&1
_scratch_mount
blksz=$(_get_file_block_size $SCRATCH_MNT)
_scratch_unmount
agsize=$((8192 * $blksz))
if [[ $agsize -lt $((16 * 1024 * 1024)) ]]; then
agsize=$((16 * 1024 * 1024))
fi
sz=$((4096 * $blksz + $agsize))
nr=$(($sz / $blksz))
echo "Format and mount"
_scratch_mkfs -d agsize=$agsize > $seqres.full 2>&1
_scratch_mount >> $seqres.full 2>&1
testdir=$SCRATCH_MNT/test-$seq
mkdir $testdir
echo "Create the original files"
_pwrite_byte 0x61 0 $sz $testdir/file1 >> $seqres.full
_cp_reflink $testdir/file1 $testdir/file2 >> $seqres.full
_pwrite_byte 0x61 0 $sz $testdir/file2.chk >> $seqres.full
_scratch_cycle_mount
echo "Compare files"
cmp -s $testdir/file1 $testdir/file2 || echo "file1 and file2 do not match"
cmp -s $testdir/file2 $testdir/file2.chk || echo "file2 and file2.chk do not match"
echo "CoW every other block"
seq 1 2 $((nr - 1)) | while read f; do
_pwrite_byte 0x62 $((f * blksz)) $blksz $testdir/file2 >> $seqres.full
_pwrite_byte 0x62 $((f * blksz)) $blksz $testdir/file2.chk >> $seqres.full
done
_scratch_cycle_mount
echo "Compare files"
! cmp -s $testdir/file1 $testdir/file2 || echo "file1 and file2 must not match"
cmp -s $testdir/file2 $testdir/file2.chk || echo "file2 and file2.chk do not match"
# success, all done
status=0
exit