fsx/fsstress: round blocksize properly
[xfstests-dev.git] / tests / btrfs / 043
1 #! /bin/bash
2 # SPDX-License-Identifier: GPL-2.0
3 # Copyright (c) 2014 Filipe Manana.  All Rights Reserved.
4 #
5 # FS QA Test No. btrfs/043
6 #
7 # Regression test for btrfs incremental send issue where a rmdir instruction
8 # is sent against an orphan directory inode which is not empty yet, causing
9 # btrfs receive to fail when it attempts to remove the directory.
10 #
11 # This issue is fixed by the following linux kernel btrfs patch:
12 #
13 #   Btrfs: fix send attempting to rmdir non-empty directories
14 #
15 seq=`basename $0`
16 seqres=$RESULT_DIR/$seq
17 echo "QA output created by $seq"
18
19 tmp=`mktemp -d`
20 status=1        # failure is the default!
21 trap "_cleanup; exit \$status" 0 1 2 3 15
22
23 _cleanup()
24 {
25     rm -fr $tmp
26 }
27
28 # get standard environment, filters and checks
29 . ./common/rc
30 . ./common/filter
31
32 # real QA test starts here
33 _supported_fs btrfs
34 _require_scratch
35 _require_fssum
36
37 rm -f $seqres.full
38
39 _scratch_mkfs >/dev/null 2>&1
40 _scratch_mount
41
42 mkdir -p $SCRATCH_MNT/a/b
43 mkdir $SCRATCH_MNT/0
44 mkdir $SCRATCH_MNT/1
45 mkdir $SCRATCH_MNT/a/b/c
46 mv $SCRATCH_MNT/0 $SCRATCH_MNT/a/b/c
47 mv $SCRATCH_MNT/1 $SCRATCH_MNT/a/b/c
48 echo 'ola mundo' > $SCRATCH_MNT/a/b/c/foo.txt
49 mkdir $SCRATCH_MNT/a/b/c/x
50 mkdir $SCRATCH_MNT/a/b/c/x2
51 mkdir $SCRATCH_MNT/a/b/y
52 mkdir $SCRATCH_MNT/a/b/z
53 mkdir -p $SCRATCH_MNT/a/b/d1/d2/d3
54 mkdir $SCRATCH_MNT/a/b/d4
55
56 # Filesystem looks like:
57 #
58 # .                        (ino 256)
59 # |-- a/                   (ino 257)
60 #     |-- b/               (ino 258)
61 #         |-- c/           (ino 261)
62 #         |   |-- foo.txt  (ino 262)
63 #         |   |-- 0/       (ino 259)
64 #         |   |-- 1/       (ino 260)
65 #         |   |-- x/       (ino 263)
66 #         |   |-- x2/      (ino 264)
67 #         |
68 #         |-- y/           (ino 265)
69 #         |-- z/           (ino 266)
70 #         |-- d1/          (ino 267)
71 #         |   |-- d2/      (ino 268)
72 #         |       |-- d3/  (ino 269)
73 #         |
74 #         |-- d4/          (ino 270)
75
76 _run_btrfs_util_prog subvolume snapshot -r $SCRATCH_MNT $SCRATCH_MNT/mysnap1
77
78 rm -f $SCRATCH_MNT/a/b/c/foo.txt
79 mv $SCRATCH_MNT/a/b/y $SCRATCH_MNT/a/b/YY
80 mv $SCRATCH_MNT/a/b/z $SCRATCH_MNT/a
81 mv $SCRATCH_MNT/a/b/c/x $SCRATCH_MNT/a/b/YY
82 mv $SCRATCH_MNT/a/b/c/0 $SCRATCH_MNT/a/b/YY/00
83 mv $SCRATCH_MNT/a/b/c/x2 $SCRATCH_MNT/a/z/X_2
84 mv $SCRATCH_MNT/a/b/c/1 $SCRATCH_MNT/a/z/X_2
85 rmdir $SCRATCH_MNT/a/b/c
86 mv $SCRATCH_MNT/a/b/d4 $SCRATCH_MNT/a/d44
87 mv $SCRATCH_MNT/a/b/d1/d2 $SCRATCH_MNT/a/d44
88 rmdir $SCRATCH_MNT/a/b/d1
89
90 # Filesystem now looks like:
91 #
92 # .                        (ino 256)
93 # |-- a/                   (ino 257)
94 #     |-- b/               (ino 258)
95 #     |   |-- YY/          (ino 265)
96 #     |        |-- x/      (ino 263)
97 #     |        |-- 00/     (ino 259)
98 #     |
99 #     |-- z/               (ino 266)
100 #     |   |-- X_2/         (ino 264)
101 #     |        |-- 1/      (ino 260)
102 #     |
103 #     |-- d44/             (ino 270)
104 #          |-- d2/         (ino 268)
105 #              |-- d3/     (ino 269)
106
107 _run_btrfs_util_prog subvolume snapshot -r $SCRATCH_MNT $SCRATCH_MNT/mysnap2
108
109 run_check $FSSUM_PROG -A -f -w $tmp/1.fssum $SCRATCH_MNT/mysnap1
110 run_check $FSSUM_PROG -A -f -w $tmp/2.fssum -x $SCRATCH_MNT/mysnap2/mysnap1 \
111         $SCRATCH_MNT/mysnap2
112
113 _run_btrfs_util_prog send -f $tmp/1.snap $SCRATCH_MNT/mysnap1
114 _run_btrfs_util_prog send -p $SCRATCH_MNT/mysnap1 -f $tmp/2.snap \
115         $SCRATCH_MNT/mysnap2
116
117 _check_scratch_fs
118
119 _scratch_unmount
120 _scratch_mkfs >/dev/null 2>&1
121 _scratch_mount
122
123 _run_btrfs_util_prog receive -f $tmp/1.snap $SCRATCH_MNT
124 run_check $FSSUM_PROG -r $tmp/1.fssum $SCRATCH_MNT/mysnap1
125
126 _run_btrfs_util_prog receive -f $tmp/2.snap $SCRATCH_MNT
127 run_check $FSSUM_PROG -r $tmp/2.fssum $SCRATCH_MNT/mysnap2
128
129 status=0
130 exit