#! /bin/bash # SPDX-License-Identifier: GPL-2.0 # Copyright (c) 2021 Chandan Babu R. All Rights Reserved. # # FS QA Test 531 # # Verify that XFS does not cause inode fork's extent count to overflow when # punching out an extent. . ./common/preamble _begin_fstest auto quick punch zero insert collapse # Import common functions. . ./common/filter . ./common/inject # real QA test starts here _supported_fs xfs _require_scratch _require_xfs_debug _require_xfs_io_command "fpunch" _require_xfs_io_command "finsert" _require_xfs_io_command "fcollapse" _require_xfs_io_command "fzero" _require_xfs_io_error_injection "reduce_max_iextents" echo "Format and mount fs" _scratch_mkfs >> $seqres.full _scratch_mount >> $seqres.full bsize=$(_get_file_block_size $SCRATCH_MNT) nr_blks=30 testfile=$SCRATCH_MNT/testfile for op in fpunch finsert fcollapse fzero; do echo "* $op regular file" echo "Create \$testfile" touch $testfile echo "Inject reduce_max_iextents error tag" _scratch_inject_error reduce_max_iextents 1 $XFS_IO_PROG -f -s \ -c "pwrite -b $((nr_blks * bsize)) 0 $((nr_blks * bsize))" \ $testfile >> $seqres.full echo "$op alternating blocks" for i in $(seq 1 2 $((nr_blks - 1))); do $XFS_IO_PROG -f -c "$op $((i * bsize)) $bsize" $testfile \ >> $seqres.full 2>&1 [[ $? != 0 ]] && break done echo "Verify \$testfile's extent count" nextents=$(_xfs_get_fsxattr nextents $testfile) if (( $nextents > 10 )); then echo "Extent count overflow check failed: nextents = $nextents" exit 1 fi echo "Disable reduce_max_iextents error tag" _scratch_inject_error reduce_max_iextents 0 rm $testfile done # success, all done status=0 exit