2 # SPDX-License-Identifier: GPL-2.0
3 # Copyright (C) 2016 SUSE Linux Products GmbH. All Rights Reserved.
5 # FS QA Test No. btrfs/129
7 # Test that an incremental send operation does not prematurely issues rmdir
8 # operations under a particular scenario (the rmdir operation is sent before
9 # the target directory is empty).
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
37 send_files_dir=$TEST_DIR/btrfs-test-$seq
40 rm -fr $send_files_dir
43 _scratch_mkfs >>$seqres.full 2>&1
47 mkdir $SCRATCH_MNT/tmp
48 mkdir $SCRATCH_MNT/del
49 mv $SCRATCH_MNT/tmp $SCRATCH_MNT/del
50 mkdir $SCRATCH_MNT/a/c
51 mkdir $SCRATCH_MNT/del/x
53 # Filesystem looks like:
63 _run_btrfs_util_prog subvolume snapshot -r $SCRATCH_MNT $SCRATCH_MNT/mysnap1
65 # When inode 260 was processed, rename operations for it and for inode 258 were
66 # issued (the rename for inode 260 must happen before the rename for inode 258).
67 # Then immediately after issuing the rename operation for inode 258, and before
68 # inode 261 was processed, the send stream issued a rmdir operation for inode
69 # 260, which would make the receiver fail with the error ENOTEMPTY because inode
70 # 261 was not yet renamed, it was still a child of inode 260 at that time.
72 mv $SCRATCH_MNT/a/c $SCRATCH_MNT
73 mv $SCRATCH_MNT/del/x $SCRATCH_MNT/a
74 mv $SCRATCH_MNT/del/tmp $SCRATCH_MNT/c
75 rmdir $SCRATCH_MNT/del
77 # Filesystem now looks like:
86 _run_btrfs_util_prog subvolume snapshot -r $SCRATCH_MNT $SCRATCH_MNT/mysnap2
88 run_check $FSSUM_PROG -A -f -w $send_files_dir/1.fssum $SCRATCH_MNT/mysnap1
89 run_check $FSSUM_PROG -A -f -w $send_files_dir/2.fssum \
90 -x $SCRATCH_MNT/mysnap2/mysnap1 $SCRATCH_MNT/mysnap2
92 _run_btrfs_util_prog send -f $send_files_dir/1.snap $SCRATCH_MNT/mysnap1
93 _run_btrfs_util_prog send -p $SCRATCH_MNT/mysnap1 -f $send_files_dir/2.snap \
96 # Now recreate the filesystem by receiving both send streams and verify we get
97 # the same content that the original filesystem had.
99 _scratch_mkfs >>$seqres.full 2>&1
102 _run_btrfs_util_prog receive -f $send_files_dir/1.snap $SCRATCH_MNT
103 run_check $FSSUM_PROG -r $send_files_dir/1.fssum $SCRATCH_MNT/mysnap1
104 _run_btrfs_util_prog receive -f $send_files_dir/2.snap $SCRATCH_MNT
105 run_check $FSSUM_PROG -r $send_files_dir/2.fssum $SCRATCH_MNT/mysnap2
107 echo "Silence is golden"