2 # SPDX-License-Identifier: GPL-2.0
3 # Copyright (c) 2017 NETGEAR, Inc. All Rights Reserved.
5 # FS QA Test No. btrfs/152
7 # Test that incremental send/receive operations don't corrupt metadata when
11 seqres=$RESULT_DIR/$seq
12 echo "QA output created by $seq"
15 status=1 # failure is the default!
16 trap "_cleanup; exit \$status" 0 1 2 3 15
24 # get standard environment, filters and checks
28 # real QA test starts here
35 _scratch_mkfs >>$seqres.full 2>&1
39 $BTRFS_UTIL_PROG quota enable $SCRATCH_MNT
41 # Create 2 source and 4 destination subvolumes
42 for subvol in subvol1 subvol2 recv1_1 recv1_2 recv2_1 recv2_2; do
43 $BTRFS_UTIL_PROG subvolume create $SCRATCH_MNT/$subvol | _filter_scratch
45 mkdir $SCRATCH_MNT/subvol{1,2}/.snapshots
46 touch $SCRATCH_MNT/subvol{1,2}/foo
48 # Create base snapshots and send them
49 $BTRFS_UTIL_PROG subvolume snapshot -r $SCRATCH_MNT/subvol1 \
50 $SCRATCH_MNT/subvol1/.snapshots/1 | _filter_scratch
51 $BTRFS_UTIL_PROG subvolume snapshot -r $SCRATCH_MNT/subvol2 \
52 $SCRATCH_MNT/subvol2/.snapshots/1 | _filter_scratch
53 for recv in recv1_1 recv1_2 recv2_1 recv2_2; do
54 $BTRFS_UTIL_PROG send $SCRATCH_MNT/subvol1/.snapshots/1 2> /dev/null | \
55 $BTRFS_UTIL_PROG receive $SCRATCH_MNT/${recv} | _filter_scratch
58 # Now do 10 loops of concurrent incremental send/receives
59 for i in `seq 1 10`; do
63 $BTRFS_UTIL_PROG subvolume snapshot -r $SCRATCH_MNT/subvol1 \
64 $SCRATCH_MNT/subvol1/.snapshots/${curr} > /dev/null
65 ($BTRFS_UTIL_PROG send -p $SCRATCH_MNT/subvol1/.snapshots/${prev} \
66 $SCRATCH_MNT/subvol1/.snapshots/${curr} 2> /dev/null | \
67 $BTRFS_UTIL_PROG receive $SCRATCH_MNT/recv1_1) > /dev/null &
68 ($BTRFS_UTIL_PROG send -p $SCRATCH_MNT/subvol1/.snapshots/${prev} \
69 $SCRATCH_MNT/subvol1/.snapshots/${curr} 2> /dev/null | \
70 $BTRFS_UTIL_PROG receive $SCRATCH_MNT/recv1_2) > /dev/null &
72 $BTRFS_UTIL_PROG subvolume snapshot -r $SCRATCH_MNT/subvol2 \
73 $SCRATCH_MNT/subvol2/.snapshots/${curr} > /dev/null
74 ($BTRFS_UTIL_PROG send -p $SCRATCH_MNT/subvol2/.snapshots/${prev} \
75 $SCRATCH_MNT/subvol2/.snapshots/${curr} 2> /dev/null | \
76 $BTRFS_UTIL_PROG receive $SCRATCH_MNT/recv2_1) > /dev/null &
77 ($BTRFS_UTIL_PROG send -p $SCRATCH_MNT/subvol2/.snapshots/${prev} \
78 $SCRATCH_MNT/subvol2/.snapshots/${curr} 2> /dev/null | \
79 $BTRFS_UTIL_PROG receive $SCRATCH_MNT/recv2_2) > /dev/null &