| #! /bin/bash |
| # SPDX-License-Identifier: GPL-2.0-or-later |
| # Copyright (c) 2022 Oracle. All Rights Reserved. |
| # |
| # FS QA Test No. 789 |
| # |
| # Simple tests of the old xfs swapext ioctl |
| |
| . ./common/preamble |
| _begin_fstest auto quick fiexchange swapext |
| |
| # Override the default cleanup function. |
| _cleanup() |
| { |
| cd / |
| rm -r -f $tmp.* $dir |
| } |
| |
| # Import common functions. |
| . ./common/filter |
| |
| # real QA test starts here |
| _supported_fs xfs |
| _require_xfs_io_command swapext '-v exchrange' |
| _require_test |
| |
| # We can't do any reasonable swapping if the files we're going to create are |
| # realtime files, the rt extent size is greater than 1 block, and we can't use |
| # atomic extent swapping to make sure that partially written extents are fully |
| # swapped. |
| file_blksz=$(_get_file_block_size $TEST_DIR) |
| fs_blksz=$(_get_block_size $TEST_DIR) |
| if (( $file_blksz != $fs_blksz )); then |
| _xfs_has_feature $TEST_DIR reflink || \ |
| _notrun "test requires atomic extent swapping for rextsize=$((file_blksz / fs_blksz))" |
| fi |
| |
| dir=$TEST_DIR/test-$seq |
| mkdir -p $dir |
| |
| $XFS_IO_PROG -f -c 'pwrite -S 0x58 0 256k -b 1m' $dir/a >> $seqres.full |
| $XFS_IO_PROG -f -c 'pwrite -S 0x59 0 256k -b 1m' $dir/b >> $seqres.full |
| $XFS_IO_PROG -f -c 'pwrite -S 0x60 0 256k -b 1m' $dir/c >> $seqres.full |
| $XFS_IO_PROG -f -c 'pwrite -S 0x61 0 128k -b 1m' $dir/d >> $seqres.full |
| md5sum $dir/a $dir/b $dir/c $dir/d | _filter_test_dir |
| |
| # Swap two files that are the same length |
| echo swap |
| $XFS_IO_PROG -c "swapext $dir/b" $dir/a |
| md5sum $dir/a $dir/b | _filter_test_dir |
| |
| # Try to swap two files that are not the same length |
| echo fail swap |
| $XFS_IO_PROG -c "swapext $dir/c" $dir/d |
| md5sum $dir/c $dir/d | _filter_test_dir |
| |
| # success, all done |
| status=0 |
| exit |