From 51d4496438421e244619c7e4d792d513432b8b3d Mon Sep 17 00:00:00 2001 From: Yang Xu Date: Fri, 31 May 2019 10:12:27 +0800 Subject: [PATCH] ext4: regression test for online resizing maximum blocks This adds a regression test for online resizing maximum blocks which can trigger a BUG_ON with non-zero s_first_data_block filesystem. The bug was fixed by patch: f96c3ac8dfc2 ("ext4: fix crash during online resizing") The bug was introduced by patch: 1c6bd7173d66 ("ext4: convert file system to meta_bg if needed during resizing") Signed-off-by: Yang Xu Reviewed-by: Jan Kara Signed-off-by: Eryu Guan --- tests/ext4/035 | 54 ++++++++++++++++++++++++++++++++++++++++++++++ tests/ext4/035.out | 3 +++ tests/ext4/group | 1 + 3 files changed, 58 insertions(+) create mode 100755 tests/ext4/035 create mode 100644 tests/ext4/035.out diff --git a/tests/ext4/035 b/tests/ext4/035 new file mode 100755 index 00000000..ac5f38e0 --- /dev/null +++ b/tests/ext4/035 @@ -0,0 +1,54 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (c) 2019 FUJITSU LIMITED. All rights reserved. +# +# FSQA Test No. 035 +# +# Regression test for commit: +# f96c3ac8dfc2 ("ext4: fix crash during online resizing") +# +# This case tests a loss s_first_data_block on ext4 when computing +# maximum size with given number of group descriptor blocks. Filesystem +# with non-zero s_first_data_block can happen that computed maximum size +# lower than current size and leads to a BUG_ON in in ext4_alloc_group_tables() +# hitting on flex_gd->count == 0. +# +seq=`basename $0` +seqres=$RESULT_DIR/$seq +echo "QA output created by $seq" + +here=`pwd` +tmp=/tmp/$$ +status=1 # failure is the default! +trap "_cleanup; exit \$status" 0 1 2 3 15 + +_cleanup() +{ + cd / + rm -f $tmp.* +} + +# get standard environment, filters and checks +. ./common/rc +. ./common/filter + +# real QA test starts here +_supported_fs ext4 +_supported_os Linux +_require_scratch +_require_command "$RESIZE2FS_PROG" resize2fs + +rm -f $seqres.full + +$MKFS_EXT4_PROG -F -b 1024 -E "resize=262144" $SCRATCH_DEV 32768 >> $seqres.full 2>&1 +_scratch_mount + +echo "Resizing to 262145 blocks" +$RESIZE2FS_PROG $SCRATCH_DEV 262145 >> $seqres.full 2>&1 + +echo "Resizing to 300000 blocks" +$RESIZE2FS_PROG $SCRATCH_DEV 300000 >> $seqres.full 2>&1 + +# success, all done +status=0 +exit diff --git a/tests/ext4/035.out b/tests/ext4/035.out new file mode 100644 index 00000000..3acdb1e1 --- /dev/null +++ b/tests/ext4/035.out @@ -0,0 +1,3 @@ +QA output created by 035 +Resizing to 262145 blocks +Resizing to 300000 blocks diff --git a/tests/ext4/group b/tests/ext4/group index eb744a12..d27ec893 100644 --- a/tests/ext4/group +++ b/tests/ext4/group @@ -37,6 +37,7 @@ 032 auto quick ioctl resize 033 auto ioctl resize 034 auto quick quota +035 auto quick resize 271 auto rw quick 301 aio auto ioctl rw stress defrag 302 aio auto ioctl rw stress defrag -- 2.30.2