xfs: Add the appropriate _require helper
[xfstests-dev.git] / tests / xfs / 495
1 #! /bin/bash
2 # SPDX-License-Identifier: GPL-2.0
3 # Copyright (c) 2018 Oracle, Inc.  All Rights Reserved.
4 #
5 # FS QA Test No. 495
6 #
7 # Test for two related regressions -- first, check that repair doesn't
8 # repeatedly rebuild directories with a single leafn block; and check that
9 # repair also doesn't crash when it hits a corrupt da btree with a zero before
10 # pointer.
11 #
12 seq=`basename $0`
13 seqres=$RESULT_DIR/$seq
14 echo "QA output created by $seq"
15
16 here=`pwd`
17 tmp=/tmp/$$
18 status=1        # failure is the default!
19 trap "_cleanup; exit \$status" 0 1 2 3 7 15
20
21 _cleanup()
22 {
23         cd /
24         rm -f $tmp.*
25 }
26
27 # get standard environment, filters and checks
28 . ./common/rc
29 . ./common/filter
30 . ./common/populate
31 . ./common/fuzzy
32
33 # real QA test starts here
34 _supported_fs xfs
35 _require_scratch_nocheck
36 _require_populate_commands
37 _require_xfs_db_command "fuzz"
38
39 echo "Format and populate"
40 _scratch_populate_cached nofill > $seqres.full 2>&1
41
42 filter_nbrepair() {
43         grep rebuilding | sed -e 's/directory inode [0-9]*/directory inode XXX/g'
44 }
45
46 run_repair() {
47         _scratch_xfs_repair > $tmp.repair 2>&1
48         cat $tmp.repair >> $seqres.full
49         cat $tmp.repair | filter_nbrepair
50 }
51
52 echo "Check leafn rebuilds"
53 run_repair
54 run_repair
55
56 echo "Fuzz nbtree[0].before to zero"
57 _scratch_mount
58 inum=$(stat -c '%i' $SCRATCH_MNT/S_IFDIR.FMT_NODE)
59 blk_sz=$(_get_block_size $SCRATCH_MNT)
60 _scratch_unmount
61 leaf_offset=$(( (2 ** 35) / blk_sz ))
62 _scratch_xfs_fuzz_metadata_field "nbtree[0].before" "zeroes" "inode ${inum}" \
63                                  "dblock ${leaf_offset}" >> $seqres.full
64
65 echo "Check nbtree[0].before repair"
66 run_repair
67 run_repair
68
69 # success, all done
70 echo Done
71 status=0
72 exit