common: check if a given rename flag is supported in _require_renameat2
[xfstests-dev.git] / tests / xfs / 148
1 #! /bin/bash
2 # SPDX-License-Identifier: GPL-2.0
3 # Copyright (c) 2006 Silicon Graphics, Inc.  All Rights Reserved.
4 #
5 # FS QA Test No. 148
6 #
7 # Exercise xfs parallel repair on broken filesystems
8 # This is a clone of test 030 useing xfs_prepair64 instead of xfs_repair
9 #
10 seq=`basename $0`
11 seqres=$RESULT_DIR/$seq
12 echo "QA output created by $seq"
13
14 here=`pwd`
15 tmp=/tmp/$$
16 status=1        # failure is the default!
17
18 _cleanup()
19 {
20         cd /
21         _scratch_unmount 2>/dev/null
22         rm -f $tmp.*
23 }
24
25 trap "_cleanup; exit \$status" 0 1 2 3 15
26
27 # get standard environment, filters and checks
28 . ./common/rc
29 . ./common/filter
30 . ./common/repair
31
32 [ -z "$XFS_PARALLEL_REPAIR64_PROG" ] && _notrun "parallel repair binary xfs_prepair64 is not installed"
33
34 # force use of parallel repair
35 export XFS_REPAIR_PROG=$XFS_PARALLEL_REPAIR64_PROG
36
37 # nuke the superblock, AGI, AGF, AGFL; then try repair the damage
38
39 _check_ag()
40 {
41         for structure in 'sb 0' 'agf 0' 'agi 0' 'agfl 0'
42         do
43                 echo "Corrupting $structure - setting bits to $1"
44                 _check_repair $1 "$structure"
45         done
46 }
47
48 # real QA test starts here
49 _supported_fs xfs
50 _supported_os Linux
51
52 _require_scratch
53 _require_no_large_scratch_dev
54
55 DSIZE="-dsize=100m"
56
57 # first we need to ensure there are no bogus secondary
58 # superblocks between the primary and first secondary
59 # superblock (hanging around from earlier tests)...
60 #
61
62 _scratch_mkfs_xfs $DSIZE >/dev/null 2>&1
63 if [ $? -ne 0 ]         # probably don't have a big enough scratch
64 then
65         _notrun "SCRATCH_DEV too small, results would be non-deterministic"
66 else
67         _scratch_mount
68         src/feature -U $SCRATCH_DEV && \
69                 _notrun "UQuota are enabled, test needs controlled sb recovery"
70         src/feature -G $SCRATCH_DEV && \
71                 _notrun "GQuota are enabled, test needs controlled sb recovery"
72         src/feature -P $SCRATCH_DEV && \
73                 _notrun "PQuota are enabled, test needs controlled sb recovery"
74         _scratch_unmount
75 fi
76 clear=""
77 eval `xfs_db -r -c "sb 1" -c stack $SCRATCH_DEV | $PERL_PROG -ne '
78         if (/byte offset (\d+), length (\d+)/) {
79                 print "clear=", $1 / 512, "\n"; exit
80         }'`
81 [ -z "$clear" ] && echo "Cannot calculate length to clear"
82 src/devzero -v -1 -n "$clear" $SCRATCH_DEV >/dev/null
83
84 # now kick off the real prepair test...
85 #
86 _scratch_mkfs_xfs $DSIZE | _filter_mkfs 2>$tmp.mkfs
87 . $tmp.mkfs
88 _check_ag 0
89 _check_ag -1
90
91 # success, all done
92 status=0
93 exit