btrfs/079: fix failure to umount scratch fs due to running filefrag process
[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 _supported_os Linux
35 _require_scratch
36 _require_fssum
37
38 rm -f $seqres.full
39
40 _scratch_mkfs >/dev/null 2>&1
41 _scratch_mount
42
43 mkdir -p $SCRATCH_MNT/a/b
44 mkdir $SCRATCH_MNT/0
45 mkdir $SCRATCH_MNT/1
46 mkdir $SCRATCH_MNT/a/b/c
47 mv $SCRATCH_MNT/0 $SCRATCH_MNT/a/b/c
48 mv $SCRATCH_MNT/1 $SCRATCH_MNT/a/b/c
49 echo 'ola mundo' > $SCRATCH_MNT/a/b/c/foo.txt
50 mkdir $SCRATCH_MNT/a/b/c/x
51 mkdir $SCRATCH_MNT/a/b/c/x2
52 mkdir $SCRATCH_MNT/a/b/y
53 mkdir $SCRATCH_MNT/a/b/z
54 mkdir -p $SCRATCH_MNT/a/b/d1/d2/d3
55 mkdir $SCRATCH_MNT/a/b/d4
56
57 # Filesystem looks like:
58 #
59 # .                        (ino 256)
60 # |-- a/                   (ino 257)
61 #     |-- b/               (ino 258)
62 #         |-- c/           (ino 261)
63 #         |   |-- foo.txt  (ino 262)
64 #         |   |-- 0/       (ino 259)
65 #         |   |-- 1/       (ino 260)
66 #         |   |-- x/       (ino 263)
67 #         |   |-- x2/      (ino 264)
68 #         |
69 #         |-- y/           (ino 265)
70 #         |-- z/           (ino 266)
71 #         |-- d1/          (ino 267)
72 #         |   |-- d2/      (ino 268)
73 #         |       |-- d3/  (ino 269)
74 #         |
75 #         |-- d4/          (ino 270)
76
77 _run_btrfs_util_prog subvolume snapshot -r $SCRATCH_MNT $SCRATCH_MNT/mysnap1
78
79 rm -f $SCRATCH_MNT/a/b/c/foo.txt
80 mv $SCRATCH_MNT/a/b/y $SCRATCH_MNT/a/b/YY
81 mv $SCRATCH_MNT/a/b/z $SCRATCH_MNT/a
82 mv $SCRATCH_MNT/a/b/c/x $SCRATCH_MNT/a/b/YY
83 mv $SCRATCH_MNT/a/b/c/0 $SCRATCH_MNT/a/b/YY/00
84 mv $SCRATCH_MNT/a/b/c/x2 $SCRATCH_MNT/a/z/X_2
85 mv $SCRATCH_MNT/a/b/c/1 $SCRATCH_MNT/a/z/X_2
86 rmdir $SCRATCH_MNT/a/b/c
87 mv $SCRATCH_MNT/a/b/d4 $SCRATCH_MNT/a/d44
88 mv $SCRATCH_MNT/a/b/d1/d2 $SCRATCH_MNT/a/d44
89 rmdir $SCRATCH_MNT/a/b/d1
90
91 # Filesystem now looks like:
92 #
93 # .                        (ino 256)
94 # |-- a/                   (ino 257)
95 #     |-- b/               (ino 258)
96 #     |   |-- YY/          (ino 265)
97 #     |        |-- x/      (ino 263)
98 #     |        |-- 00/     (ino 259)
99 #     |
100 #     |-- z/               (ino 266)
101 #     |   |-- X_2/         (ino 264)
102 #     |        |-- 1/      (ino 260)
103 #     |
104 #     |-- d44/             (ino 270)
105 #          |-- d2/         (ino 268)
106 #              |-- d3/     (ino 269)
107
108 _run_btrfs_util_prog subvolume snapshot -r $SCRATCH_MNT $SCRATCH_MNT/mysnap2
109
110 run_check $FSSUM_PROG -A -f -w $tmp/1.fssum $SCRATCH_MNT/mysnap1
111 run_check $FSSUM_PROG -A -f -w $tmp/2.fssum -x $SCRATCH_MNT/mysnap2/mysnap1 \
112         $SCRATCH_MNT/mysnap2
113
114 _run_btrfs_util_prog send -f $tmp/1.snap $SCRATCH_MNT/mysnap1
115 _run_btrfs_util_prog send -p $SCRATCH_MNT/mysnap1 -f $tmp/2.snap \
116         $SCRATCH_MNT/mysnap2
117
118 _check_scratch_fs
119
120 _scratch_unmount
121 _scratch_mkfs >/dev/null 2>&1
122 _scratch_mount
123
124 _run_btrfs_util_prog receive -f $tmp/1.snap $SCRATCH_MNT
125 run_check $FSSUM_PROG -r $tmp/1.fssum $SCRATCH_MNT/mysnap1
126
127 _run_btrfs_util_prog receive -f $tmp/2.snap $SCRATCH_MNT
128 run_check $FSSUM_PROG -r $tmp/2.fssum $SCRATCH_MNT/mysnap2
129
130 status=0
131 exit