| #! /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. |
| . ./common/preamble |
| _begin_fstest auto prealloc collapse |
| |
| # Import common functions. |
| . ./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 |