#! /bin/bash
# FS QA Test No. 305
#
# Regression test for commit:
# 9559996 ext4: remove mb_groups before tearing down the buddy_cache
#
#-----------------------------------------------------------------------
# Copyright (c) 2013 Red Hat, Inc.  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.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write the Free Software Foundation,
# Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
#-----------------------------------------------------------------------
#

seq=`basename $0`
seqres=$RESULT_DIR/$seq
echo "QA output created by $seq"

PIDS=""
status=1	# failure is the default!
trap "_cleanup; exit \$status" 0 1 2 3 15

_cleanup()
{
    cd /
    kill $PIDS >/dev/null 2>&1
}

# get standard environment, filters and checks
. ./common/rc
. ./common/filter

# real QA test starts here
_supported_fs ext4
_supported_os Linux

_require_scratch

rm -f $seqres.full
echo "Silence is golden"

DEV_BASENAME=$(_short_dev $SCRATCH_DEV)
echo "Start test on device $SCRATCH_DEV, basename $DEV_BASENAME" >$seqres.full
_scratch_mkfs >>$seqres.full 2>&1

while true; do
	cat /proc/fs/ext4/$DEV_BASENAME/mb_groups > /dev/null 2>&1
done &
PIDS=$!

# 30 loops is enough to crash a buggy kernel
i=0
while [ $i -lt 30 ]; do
	_try_scratch_mount
	_scratch_unmount
	let i=i+1
done

# no BUG_ON, all done
kill $PIDS >/dev/null 2>&1
wait
status=0
exit
