fstests: _fail test by default when _scratch_mount fails
[xfstests-dev.git] / tests / xfs / 439
1 #! /bin/bash
2 # FS QA Test No. 439
3 #
4 # Regression test for commit:
5 # 9c92ee2 ("xfs: validate sb_logsunit is a multiple of the fs blocksize")
6 #
7 # If log stripe unit isn't a multiple of the fs blocksize and mounting,
8 # the invalid sb_logsunit leads to crash as soon as we try to write to
9 # the log.
10 #
11 #-----------------------------------------------------------------------
12 # Copyright (c) 2018 FUJITSU.  All Rights Reserved.
13 # Author: Xiao Yang <yangx.jy@cn.fujitsu.com>
14 #
15 # This program is free software; you can redistribute it and/or
16 # modify it under the terms of the GNU General Public License as
17 # published by the Free Software Foundation.
18 #
19 # This program is distributed in the hope that it would be useful,
20 # but WITHOUT ANY WARRANTY; without even the implied warranty of
21 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
22 # GNU General Public License for more details.
23 #
24 # You should have received a copy of the GNU General Public License
25 # along with this program; if not, write the Free Software Foundation,
26 # Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
27 #-----------------------------------------------------------------------
28
29 seq=`basename "$0"`
30 seqres="$RESULT_DIR/$seq"
31 echo "QA output created by $seq"
32
33 here=`pwd`
34 tmp=/tmp/$$
35 status=1    # failure is the default!
36 trap "_cleanup; exit \$status" 0 1 2 3 15
37
38 _cleanup()
39 {
40         rm -rf $tmp.*
41 }
42
43 # get standard environment, filters and checks
44 . ./common/rc
45 . ./common/filter
46
47 # real QA test starts here
48 _supported_os Linux
49 _supported_fs xfs
50 _require_scratch
51 # We corrupt XFS on purpose, and check if assert failures would crash system.
52 _require_no_xfs_bug_on_assert
53
54 rm -f "$seqres.full"
55
56 # Format
57 _scratch_mkfs > $seqres.full 2>&1 || _fail "mkfs failed"
58
59 # Set logsunit to a value which is not a multiple of the fs blocksize
60 blksz=$(_scratch_xfs_get_sb_field blocksize)
61 _scratch_xfs_set_sb_field logsunit $((blksz - 1)) >> $seqres.full 2>&1
62
63 # Check if logsunit is set correctly
64 lsunit=$(_scratch_xfs_get_sb_field logsunit)
65 [ $lsunit -ne $((blksz - 1)) ] && _notrun "failed to set sb_logsunit"
66
67 # Mount and writing log may trigger a crash on buggy kernel
68 # The fix applied kernel refuses to mount, so a mount failure is
69 # expected
70 if _try_scratch_mount >> $seqres.full 2>&1; then
71         for i in $(seq 1 1000); do
72                 echo > ${SCRATCH_MNT}/$i
73         done
74         _scratch_unmount
75 fi
76
77 # We may trigger assert related WARNINGs if we corrupt log on a CONFIG_XFS_WARN
78 # or CONFIG_XFS_DEBUG (when bug_on_assert is disabled) build, so filter them.
79 _check_dmesg _filter_assert_dmesg
80
81 echo "Silence is golden"
82
83 # success, all done
84 status=0
85 exit