4 # Regression test for commit:
5 # 9c92ee2 ("xfs: validate sb_logsunit is a multiple of the fs blocksize")
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
11 #-----------------------------------------------------------------------
12 # Copyright (c) 2018 FUJITSU. All Rights Reserved.
13 # Author: Xiao Yang <yangx.jy@cn.fujitsu.com>
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.
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.
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 #-----------------------------------------------------------------------
30 seqres="$RESULT_DIR/$seq"
31 echo "QA output created by $seq"
35 status=1 # failure is the default!
36 trap "_cleanup; exit \$status" 0 1 2 3 15
43 # get standard environment, filters and checks
47 # real QA test starts here
51 # We corrupt XFS on purpose, and check if assert failures would crash system.
52 _require_no_xfs_bug_on_assert
57 _scratch_mkfs > $seqres.full 2>&1 || _fail "mkfs failed"
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
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"
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
70 if _try_scratch_mount >> $seqres.full 2>&1; then
71 for i in $(seq 1 1000); do
72 echo > ${SCRATCH_MNT}/$i
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
81 echo "Silence is golden"