+++ /dev/null
-#! /bin/bash
-# FS QA Test No. btrfs/047
-#
-# Verify that after an incremental btrfs send the replicated file has
-# the same exact hole and data structure as in the origin filesystem.
-# This didn't use to be the case before the send stream version 2 -
-# holes were sent as write operations of 0 valued bytes instead of punching
-# holes with the fallocate system call, and pre-allocated extents were sent
-# as well as write operations of 0 valued bytes instead of intructions for
-# the receiver to use the fallocate system call. Also check that prealloc
-# extents that lie beyond the file's size are replicated by an incremental
-# send.
-#
-# More specifically, this structure preserving guarantee was added by the
-# following linux kernel commits:
-#
-# Btrfs: send, use fallocate command to punch holes
-# Btrfs: send, use fallocate command to allocate extents
-#
-#-----------------------------------------------------------------------
-# Copyright (c) 2014 Filipe Manana. All Rights Reserved.
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation.
-#
-# This program is distributed in the hope that it would be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-#-----------------------------------------------------------------------
-#
-
-seq=`basename $0`
-seqres=$RESULT_DIR/$seq
-echo "QA output created by $seq"
-
-tmp=/tmp/$$
-status=1 # failure is the default!
-trap "_cleanup; exit \$status" 0 1 2 3 15
-
-_cleanup()
-{
- rm -fr $send_files_dir
- rm -fr $tmp
-}
-
-# get standard environment, filters and checks
-. ./common/rc
-. ./common/filter
-. ./common/punch
-
-# real QA test starts here
-_supported_fs btrfs
-_supported_os Linux
-_require_test
-_require_scratch
-_require_fssum
-_require_xfs_io_command "fiemap"
-_require_btrfs_send_stream_version
-
-send_files_dir=$TEST_DIR/btrfs-test-$seq
-
-rm -f $seqres.full
-rm -fr $send_files_dir
-mkdir $send_files_dir
-
-_scratch_mkfs >/dev/null 2>&1
-_scratch_mount
-
-$XFS_IO_PROG -f -c "pwrite -S 0x01 -b 300000 0 300000" $SCRATCH_MNT/foo \
- | _filter_xfs_io
-
-_run_btrfs_util_prog subvolume snapshot -r $SCRATCH_MNT $SCRATCH_MNT/mysnap1
-
-$XFS_IO_PROG -c "fpunch 100000 50000" $SCRATCH_MNT/foo
-$XFS_IO_PROG -c "falloc 100000 50000" $SCRATCH_MNT/foo
-$XFS_IO_PROG -c "pwrite -S 0xff -b 1000 120000 1000" $SCRATCH_MNT/foo \
- | _filter_xfs_io
-$XFS_IO_PROG -c "fpunch 250000 20000" $SCRATCH_MNT/foo
-
-$XFS_IO_PROG -c "falloc -k 300000 1000000" $SCRATCH_MNT/foo
-$XFS_IO_PROG -c "falloc -k 9000000 2000000" $SCRATCH_MNT/foo
-
-_run_btrfs_util_prog subvolume snapshot -r $SCRATCH_MNT $SCRATCH_MNT/mysnap2
-
-_run_btrfs_util_prog send --stream-version 2 $SCRATCH_MNT/mysnap1 \
- -f $send_files_dir/1.snap
-_run_btrfs_util_prog send --stream-version 2 -p $SCRATCH_MNT/mysnap1 \
- $SCRATCH_MNT/mysnap2 -f $send_files_dir/2.snap
-
-md5sum $SCRATCH_MNT/mysnap2/foo | _filter_scratch
-# List all hole and data segments.
-$XFS_IO_PROG -r -c "seek -r -a 0" $SCRATCH_MNT/mysnap2/foo
-# List all extents, we're interested here in prealloc extents that lie beyond
-# the file's size.
-$XFS_IO_PROG -r -c "fiemap -v" $SCRATCH_MNT/mysnap2/foo | _filter_fiemap
-
-_scratch_unmount
-_check_scratch_fs
-
-_scratch_mkfs >/dev/null 2>&1
-_scratch_mount
-
-_run_btrfs_util_prog receive $SCRATCH_MNT -f $send_files_dir/1.snap
-_run_btrfs_util_prog receive $SCRATCH_MNT -f $send_files_dir/2.snap
-
-md5sum $SCRATCH_MNT/mysnap2/foo | _filter_scratch
-# List all hole and data segments.
-$XFS_IO_PROG -r -c "seek -r -a 0" $SCRATCH_MNT/mysnap2/foo
-# List all extents, we're interested here in prealloc extents that lie beyond
-# the file's size.
-$XFS_IO_PROG -r -c "fiemap -v" $SCRATCH_MNT/mysnap2/foo | _filter_fiemap
-
-status=0
-exit