| #! /bin/bash |
| # SPDX-License-Identifier: GPL-2.0 |
| # Copyright (C) 2020 SUSE Linux Products GmbH. All Rights Reserved. |
| # |
| # FS QA Test No. 610 |
| # |
| # Test a fallocate() zero range operation against a large file range for which |
| # there are many small extents allocated. Verify the operation does not fail |
| # and the respective range return zeroes on subsequent reads. |
| # |
| . ./common/preamble |
| _begin_fstest auto quick prealloc zero |
| |
| # Import common functions. |
| . ./common/filter |
| |
| # real QA test starts here |
| _supported_fs generic |
| _require_scratch |
| _require_xfs_io_command "fzero" |
| _require_xfs_io_command "fpunch" |
| _require_test_program "punch-alternating" |
| |
| _scratch_mkfs >>$seqres.full 2>&1 |
| _scratch_mount |
| |
| # Create a file with many small extents. To speed up file creation, do |
| # buffered writes and then punch a hole on every other block. |
| $XFS_IO_PROG -f -c "pwrite -S 0xab -b 10M 0 100M" \ |
| $SCRATCH_MNT/foobar >>$seqres.full |
| $here/src/punch-alternating $SCRATCH_MNT/foobar >>$seqres.full |
| |
| # For btrfs, trigger a transaction commit to force metadata COW for the |
| # following fallocate zero range operation. |
| sync |
| |
| $XFS_IO_PROG -c "fzero 0 100M" $SCRATCH_MNT/foobar |
| |
| # Check the file content after umounting and mounting again the fs, to verify |
| # everything was persisted. |
| _scratch_cycle_mount |
| |
| echo "File content after zero range operation:" |
| od -A d -t x1 $SCRATCH_MNT/foobar |
| |
| status=0 |
| exit |