mirror of
https://github.com/linux-apfs/apfstests.git
synced 2026-05-01 15:01:44 -07:00
b0c8d2f735
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>
80 lines
2.0 KiB
Bash
Executable File
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
|