| #! /bin/bash |
| # SPDX-License-Identifier: GPL-2.0 |
| # Copyright (c) 2015 Facebook. All Rights Reserved. |
| # |
| # FS QA Test No. 092 |
| # |
| # fallocate/truncate tests with FALLOC_FL_KEEP_SIZE option. |
| # Verify if the disk space is released after truncating a file to i_size after |
| # writing to a portion of a preallocated range. |
| # |
| # This also verifies that truncat'ing up past i_size doesn't remove the |
| # preallocated space. |
| # |
| . ./common/preamble |
| _begin_fstest auto quick prealloc |
| |
| status=0 # success is the default! |
| |
| # Import common functions. |
| . ./common/filter |
| . ./common/punch |
| |
| # real QA test starts here |
| |
| # Modify as appropriate. |
| _supported_fs generic |
| _require_test |
| _require_xfs_io_command "falloc" |
| _require_xfs_io_command "fiemap" |
| |
| # First test to make sure that truncating at i_size trims the preallocated bit |
| # past i_size |
| $XFS_IO_PROG -f -c "falloc -k 0 10M" -c "pwrite 0 5M" -c "truncate 5M"\ |
| $TEST_DIR/testfile.$seq | _filter_xfs_io |
| sync |
| $XFS_IO_PROG -c "fiemap -v" $TEST_DIR/testfile.$seq | _filter_fiemap |
| |
| # Now verify that if we truncate up past i_size we don't trim the preallocated |
| # bit |
| $XFS_IO_PROG -c "falloc -k 5M 5M" -c "truncate 7M" $TEST_DIR/testfile.$seq |
| $XFS_IO_PROG -c "fiemap -v" $TEST_DIR/testfile.$seq | _filter_fiemap |
| |
| # success, all done |
| exit |