ext4: regression test for wrong assert in ext4_mb_normalize_request()

Regression test for:
    b5b6077 ext4: fix wrong assert in ext4_mb_normalize_request()

Meanwhile make minor changes to _scratch_mkfs_ext4() in common/rc,
_scratch_mkfs_ext4() might fail due to conflicts between being passed options
and MKFS_OPTIONS. We fix this by ignoring MKFS_OPTIONS if it fails the first
time(see _scratch_mkfs_xfs()), as suggested by Lukas Czerner.

[dchinner: converted to use xfs_io]

Signed-off-by: Xiaoguang Wang <wangxg.fnst@cn.fujitsu.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
This commit is contained in:
Xiaoguang Wang
2014-08-13 11:15:15 +10:00
committed by Dave Chinner
parent 83ef157def
commit 313db9fe06
4 changed files with 96 additions and 1 deletions
+38 -1
View File
@@ -446,12 +446,31 @@ _setup_large_ext4_fs()
_scratch_mkfs_ext4() _scratch_mkfs_ext4()
{ {
# extra mkfs options can be added by tests
local extra_mkfs_options=$*
local tmp_dir=/tmp/ local tmp_dir=/tmp/
/sbin/mkfs -t $FSTYP -- -F $MKFS_OPTIONS $* $SCRATCH_DEV \ /sbin/mkfs -t ext4 -- -F $MKFS_OPTIONS $extra_mkfs_options $SCRATCH_DEV \
2>$tmp_dir.mkfserr 1>$tmp_dir.mkfsstd 2>$tmp_dir.mkfserr 1>$tmp_dir.mkfsstd
local mkfs_status=$? local mkfs_status=$?
# a mkfs failure may be caused by conflicts between
# $MKFS_OPTIONS and $extra_mkfs_options
if [ $mkfs_status -ne 0 -a ! -z "$extra_mkfs_options" ]; then
(
echo -n "** mkfs failed with extra mkfs options "
echo "added to \"$MKFS_OPTIONS\" by test $seq **"
echo -n "** attempting to mkfs using only test $seq "
echo "options: $extra_mkfs_options **"
) >> $seqres.full
# running mkfs again. overwrite previous mkfs output files
/sbin/mkfs -t ext4 -- -F $extra_mkfs_options $SCRATCH_DEV \
2>$tmp_dir.mkfserr 1>$tmp_dir.mkfsstd
local mkfs_status=$?
fi
if [ $mkfs_status -eq 0 -a "$LARGE_SCRATCH_DEV" = yes ]; then if [ $mkfs_status -eq 0 -a "$LARGE_SCRATCH_DEV" = yes ]; then
# manually parse the mkfs output to get the fs size in bytes # manually parse the mkfs output to get the fs size in bytes
fs_size=`cat $tmp_dir.mkfsstd | awk ' \ fs_size=`cat $tmp_dir.mkfsstd | awk ' \
@@ -1163,6 +1182,24 @@ _require_xfs_crc()
umount $SCRATCH_MNT umount $SCRATCH_MNT
} }
# this test requires the bigalloc feature to be available in mkfs.ext4
#
_require_ext4_mkfs_bigalloc()
{
_scratch_mkfs_ext4 -O bigalloc >/dev/null 2>&1 \
|| _notrun "mkfs.ext4 doesn't have bigalloc feature"
}
# this test requires the ext4 kernel support bigalloc feature
#
_require_ext4_bigalloc()
{
_scratch_mkfs_ext4 -O bigalloc >/dev/null 2>&1
_scratch_mount >/dev/null 2>&1 \
|| _notrun "Ext4 kernel doesn't support bigalloc feature"
umount $SCRATCH_MNT
}
# this test requires the finobt feature to be available in mkfs.xfs # this test requires the finobt feature to be available in mkfs.xfs
# #
_require_xfs_mkfs_finobt() _require_xfs_mkfs_finobt()
Executable
+54
View File
@@ -0,0 +1,54 @@
#! /bin/bash
# FS QA Test No. ext4/003
#
# Regression test for commit:
# b5b6077 ext4: fix wrong assert in ext4_mb_normalize_request()
# This testcase checks whether this bug has been fixed.
#
#-----------------------------------------------------------------------
# Copyright (c) 2014 Fujitsu. All Rights Reserved.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it would be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#-----------------------------------------------------------------------
seq=`basename $0`
seqres=$RESULT_DIR/$seq
echo "QA output created by $seq"
trap "_cleanup; exit \$status" 0 1 2 3 15
_cleanup()
{
_scratch_unmount
}
# get standard environment, filters and checks
. ./common/rc
. ./common/filter
# real QA test starts here
_supported_fs ext4
_supported_os Linux
_require_scratch
_require_ext4_mkfs_bigalloc
_require_ext4_bigalloc
rm -f $seqres.full
yes | mkfs.ext4 -O bigalloc -C 65536 -g 256 $SCRATCH_DEV 512m \
>> $seqres.full 2>&1
_scratch_mount || _fail "couldn't mount fs"
$XFS_IO_PROG -f -c "pwrite 0 256m -b 1M" $SCRATCH_MNT/testfile 2>&1 | \
_filter_xfs_io
status=0
exit
+3
View File
@@ -0,0 +1,3 @@
QA output created by 003
wrote 268435456/268435456 bytes at offset 0
XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+1
View File
@@ -5,6 +5,7 @@
# #
001 auto prealloc quick 001 auto prealloc quick
002 auto quick prealloc 002 auto quick prealloc
003 auto quick
271 auto rw quick 271 auto rw quick
301 aio dangerous ioctl rw stress 301 aio dangerous ioctl rw stress
302 aio dangerous ioctl rw stress 302 aio dangerous ioctl rw stress