| #! /bin/bash |
| # SPDX-License-Identifier: GPL-2.0 |
| # Copyright (c) 2020 Facebook. All Rights Reserved. |
| # |
| # FS QA Test 172 |
| # |
| # Validate that without no-holes we do not get an i_size that is after a gap in |
| # the file extents on disk. This is fixed by the following patches |
| # |
| # btrfs: use the file extent tree infrastructure |
| # btrfs: replace all uses of btrfs_ordered_update_i_size |
| # |
| . ./common/preamble |
| _begin_fstest auto quick log replay recoveryloop |
| |
| # Import common functions. |
| . ./common/filter |
| . ./common/dmlogwrites |
| |
| # real QA test starts here |
| |
| # Modify as appropriate. |
| _supported_fs btrfs |
| _require_scratch |
| _require_log_writes |
| _require_xfs_io_command "sync_range" |
| |
| _log_writes_init $SCRATCH_DEV |
| _log_writes_mkfs "-O ^no-holes" >> $seqres.full 2>&1 |
| |
| # There's not a straightforward way to commit the transaction without also |
| # flushing dirty pages, so shorten the commit interval to 1 so we're sure to get |
| # a commit with our broken file |
| _log_writes_mount -o commit=1 |
| |
| $XFS_IO_PROG -f -c "pwrite 0 5m" $SCRATCH_MNT/file | _filter_xfs_io |
| $XFS_IO_PROG -f -c "sync_range -abw 4m 1m" $SCRATCH_MNT/file | _filter_xfs_io |
| |
| # Now wait for a transaction commit to happen, wait 2x just to be super sure |
| sleep 2 |
| |
| _log_writes_unmount |
| _log_writes_remove |
| |
| cur=$(_log_writes_find_next_fua 0) |
| echo "cur=$cur" >> $seqres.full |
| while [ ! -z "$cur" ]; do |
| _log_writes_replay_log_range $cur $SCRATCH_DEV >> $seqres.full |
| |
| # We only care about the fs consistency, so just run fsck, we don't have |
| # to mount the fs to validate it |
| _check_scratch_fs |
| |
| cur=$(_log_writes_find_next_fua $(($cur + 1))) |
| done |
| |
| # success, all done |
| status=0 |
| exit |