#! /bin/bash # SPDX-License-Identifier: GPL-2.0 # Copyright (c) 2013 Samsung Electronics. All Rights Reserved. # # FS QA Test No. generci/017 # # Test multiple fallocate collapse range calls on same file. # For different blocksizes, collapse a single alternate block multiple times # until the file is left with 80 blocks and as much number of extents. # Also check for file system consistency after completing this operation # for each blocksize. seq=`basename $0` seqres=$RESULT_DIR/$seq echo "QA output created by $seq" here=`pwd` tmp=/tmp/$$ status=1 # failure is the default! trap "rm -f $tmp.*; exit \$status" 0 1 2 3 15 # get standard environment, filters and checks . ./common/rc . ./common/filter # real QA test starts here _supported_fs generic _require_scratch _require_xfs_io_command "fiemap" _require_xfs_io_command "fcollapse" _do_die_on_error=y _scratch_mkfs > /dev/null 2>&1 _scratch_mount testfile=$SCRATCH_MNT/$seq.$$ BLOCKS=10240 BSIZE=`_get_block_size $SCRATCH_MNT` length=$(($BLOCKS * $BSIZE)) # Write file $XFS_IO_PROG -f -c "pwrite 0 $length" -c fsync $testfile > /dev/null # Collapse alternate blocks for (( i = 1; i <= 7; i++ )); do for (( j=0; j < $(($BLOCKS/(2**$i))); j++ )); do offset=$(($j*$BSIZE)) $XFS_IO_PROG -c "fcollapse $offset $BSIZE" $testfile > /dev/null done done # Check if 80 extents are present $XFS_IO_PROG -c "fiemap -v" $testfile | grep "^ *[0-9]*:" |wc -l # success, all done status=0 exit