mirror of
https://github.com/linux-apfs/apfstests.git
synced 2026-05-01 15:01:44 -07:00
xfs: Check for extent overflow when remapping an extent
This test verifies that XFS does not cause inode fork's extent count to overflow when remapping extents from one file's inode fork to another. Reviewed-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Allison Henderson <allison.henderson@oracle.com> Signed-off-by: Chandan Babu R <chandanrlinux@gmail.com>
This commit is contained in:
committed by
Eryu Guan
parent
7425ee44da
commit
3ab311f592
Executable
+81
@@ -0,0 +1,81 @@
|
||||
#! /bin/bash
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
# Copyright (c) 2021 Chandan Babu R. All Rights Reserved.
|
||||
#
|
||||
# FS QA Test 536
|
||||
#
|
||||
# Verify that XFS does not cause inode fork's extent count to overflow when
|
||||
# remapping extents from one file's inode fork to another.
|
||||
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 -f $tmp.*
|
||||
}
|
||||
|
||||
# get standard environment, filters and checks
|
||||
. ./common/rc
|
||||
. ./common/filter
|
||||
. ./common/reflink
|
||||
. ./common/inject
|
||||
|
||||
# remove previous $seqres.full before test
|
||||
rm -f $seqres.full
|
||||
|
||||
# real QA test starts here
|
||||
|
||||
_supported_fs xfs
|
||||
_require_scratch
|
||||
_require_scratch_reflink
|
||||
_require_xfs_debug
|
||||
_require_xfs_io_command "reflink"
|
||||
_require_xfs_io_error_injection "reduce_max_iextents"
|
||||
|
||||
echo "* Reflink remap extents"
|
||||
|
||||
echo "Format and mount fs"
|
||||
_scratch_mkfs >> $seqres.full
|
||||
_scratch_mount >> $seqres.full
|
||||
|
||||
bsize=$(_get_block_size $SCRATCH_MNT)
|
||||
|
||||
srcfile=${SCRATCH_MNT}/srcfile
|
||||
dstfile=${SCRATCH_MNT}/dstfile
|
||||
|
||||
nr_blks=15
|
||||
|
||||
echo "Create \$srcfile having an extent of length $nr_blks blocks"
|
||||
$XFS_IO_PROG -f -c "pwrite -b $((nr_blks * bsize)) 0 $((nr_blks * bsize))" \
|
||||
-c fsync $srcfile >> $seqres.full
|
||||
|
||||
echo "Create \$dstfile having an extent of length $nr_blks blocks"
|
||||
$XFS_IO_PROG -f -c "pwrite -b $((nr_blks * bsize)) 0 $((nr_blks * bsize))" \
|
||||
-c fsync $dstfile >> $seqres.full
|
||||
|
||||
echo "Inject reduce_max_iextents error tag"
|
||||
_scratch_inject_error reduce_max_iextents 1
|
||||
|
||||
echo "Reflink every other block from \$srcfile into \$dstfile"
|
||||
for i in $(seq 1 2 $((nr_blks - 1))); do
|
||||
_reflink_range $srcfile $((i * bsize)) $dstfile $((i * bsize)) $bsize \
|
||||
>> $seqres.full 2>&1
|
||||
done
|
||||
|
||||
echo "Verify \$dstfile's extent count"
|
||||
nextents=$(_xfs_get_fsxattr nextents $dstfile)
|
||||
if (( $nextents > 10 )); then
|
||||
echo "Extent count overflow check failed: nextents = $nextents"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# success, all done
|
||||
status=0
|
||||
exit
|
||||
@@ -0,0 +1,8 @@
|
||||
QA output created by 536
|
||||
* Reflink remap extents
|
||||
Format and mount fs
|
||||
Create $srcfile having an extent of length 15 blocks
|
||||
Create $dstfile having an extent of length 15 blocks
|
||||
Inject reduce_max_iextents error tag
|
||||
Reflink every other block from $srcfile into $dstfile
|
||||
Verify $dstfile's extent count
|
||||
@@ -512,3 +512,4 @@
|
||||
533 auto quick dir hardlink symlink
|
||||
534 auto quick
|
||||
535 auto quick reflink
|
||||
536 auto quick reflink
|
||||
|
||||
Reference in New Issue
Block a user