| #! /bin/bash |
| # SPDX-License-Identifier: GPL-2.0 |
| # Copyright (c) 2019 Red Hat, Inc. All Rights Reserved. |
| # |
| # FS QA Test No. generic/568 |
| # |
| # Test that fallocating an unaligned range allocates all blocks |
| # touched by that range |
| # |
| . ./common/preamble |
| _begin_fstest auto quick rw prealloc |
| |
| # Override the default cleanup function. |
| _cleanup() |
| { |
| cd / |
| rm -f "$tmp".* |
| rm -f "$TEST_DIR/falloctest-$seq" |
| } |
| |
| # Import common functions. |
| . ./common/filter |
| |
| _require_xfs_io_command "falloc" |
| |
| testfile="$TEST_DIR/falloctest-$seq" |
| |
| # Fallocate 2 bytes across a block boundary |
| block_size=$(_get_file_block_size "$TEST_DIR") |
| $XFS_IO_PROG -f -c "falloc $((block_size - 1)) 2" "$testfile" |
| |
| # Both the first blocks should be allocated now. Check that by |
| # inquiring whether the file grows when we write to the two bytes we |
| # have just fallocated. |
| |
| allocated_size_before=$(($(stat -c '%b * %B' "$testfile"))) |
| |
| $XFS_IO_PROG -c "pwrite $((block_size - 1)) 2" "$testfile" \ |
| | _filter_xfs_io | sed -e "s/$((block_size - 1))/block_size - 1/" |
| |
| allocated_size_after=$(($(stat -c '%b * %B' "$testfile"))) |
| |
| if [ $allocated_size_after -gt $allocated_size_before ]; then |
| echo "ERROR: File grew from ${allocated_size_before} B to" \ |
| "${allocated_size_after} B when writing to the fallocated range." |
| else |
| echo "OK: File did not grow." |
| fi |
| |
| status=0 |
| exit |