2 # SPDX-License-Identifier: GPL-2.0
3 # Copyright (C) 2017 SUSE Linux Products GmbH. All Rights Reserved.
5 # FS QA Test No. btrfs/145
7 # Test that an incremental send works if we rename some directory inode A and
8 # then rename some file inode B to the name inode A had, for the case where the
9 # directory inode A is an ancestor of inode B in the parent snapshot.
12 seqres=$RESULT_DIR/$seq
13 echo "QA output created by $seq"
16 status=1 # failure is the default!
17 trap "_cleanup; exit \$status" 0 1 2 3 15
22 rm -fr $send_files_dir
26 # get standard environment, filters and checks
30 # real QA test starts here
36 send_files_dir=$TEST_DIR/btrfs-test-$seq
39 rm -fr $send_files_dir
42 _scratch_mkfs >>$seqres.full 2>&1
45 mkdir $SCRATCH_MNT/dir1
46 mkdir $SCRATCH_MNT/dir1/dir2
47 touch $SCRATCH_MNT/dir1/dir2/file1
48 touch $SCRATCH_MNT/dir1/dir2/file2
49 touch $SCRATCH_MNT/dir1/dir2/file3
50 mkdir $SCRATCH_MNT/dir1/dir3
51 mv $SCRATCH_MNT/dir1/dir2/file2 $SCRATCH_MNT/dir1/dir3/file22
52 mkdir $SCRATCH_MNT/dir1/dir3/dir4
54 # Filesystem looks like:
58 # |--- dir1/ (ino 257)
59 # |--- dir2/ (ino 258)
60 # | |--- file1 (ino 259)
61 # | |--- file3 (ino 261)
63 # |--- dir3/ (ino 262)
64 # |--- file22 (ino 260)
65 # |--- dir4/ (ino 263)
67 $BTRFS_UTIL_PROG subvolume snapshot -r $SCRATCH_MNT \
68 $SCRATCH_MNT/mysnap1 > /dev/null
70 $BTRFS_UTIL_PROG send -f $send_files_dir/1.snap \
71 $SCRATCH_MNT/mysnap1 2>&1 1>/dev/null | _filter_scratch
73 mv $SCRATCH_MNT/dir1/dir2/file3 $SCRATCH_MNT/dir1/dir3/dir4/file33
74 mv $SCRATCH_MNT/dir1/dir2/file1 $SCRATCH_MNT/dir1/dir3/dir4/file11
75 mv $SCRATCH_MNT/dir1/dir3 $SCRATCH_MNT/dir1/file3
76 mv $SCRATCH_MNT/dir1/file3/file22 $SCRATCH_MNT/dir1/dir3
78 # Filesystem now looks like:
82 # |--- dir1/ (ino 257)
83 # |--- dir2/ (ino 258)
85 # |--- file3/ (ino 262)
86 # |--- dir4/ (ino 263)
87 # |--- file11 (ino 269)
88 # |--- file33 (ino 261)
90 $BTRFS_UTIL_PROG subvolume snapshot -r $SCRATCH_MNT \
91 $SCRATCH_MNT/mysnap2 > /dev/null
93 $BTRFS_UTIL_PROG send -p $SCRATCH_MNT/mysnap1 -f $send_files_dir/2.snap \
94 $SCRATCH_MNT/mysnap2 2>&1 1>/dev/null | _filter_scratch
96 $FSSUM_PROG -A -f -w $send_files_dir/1.fssum $SCRATCH_MNT/mysnap1
97 $FSSUM_PROG -A -f -w $send_files_dir/2.fssum \
98 -x $SCRATCH_MNT/mysnap2/mysnap1 $SCRATCH_MNT/mysnap2
100 # Now recreate the filesystem by receiving both send streams and verify we get
101 # the same content that the original filesystem had.
103 _scratch_mkfs >>$seqres.full 2>&1
106 $BTRFS_UTIL_PROG receive -f $send_files_dir/1.snap $SCRATCH_MNT > /dev/null
107 $BTRFS_UTIL_PROG receive -f $send_files_dir/2.snap $SCRATCH_MNT > /dev/null
108 $FSSUM_PROG -r $send_files_dir/1.fssum $SCRATCH_MNT/mysnap1
109 $FSSUM_PROG -r $send_files_dir/2.fssum $SCRATCH_MNT/mysnap2