#! /bin/bash
# FS QA Test No. 017
#
# test remount ro - pv 795642
#
#-----------------------------------------------------------------------
# Copyright (c) 2000-2002 Silicon Graphics, 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
#
#-----------------------------------------------------------------------
#
# creator
owner=dxm@sgi.com

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

here=`pwd`
tmp=/tmp/$$
status=1
trap "_cleanup; rm -f $tmp.*; exit \$status" 0 1 2 3 15

_cleanup()
{
    echo "*** unmount"
    umount $SCRATCH_MNT 2>/dev/null
}

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

# real QA test starts here
_supported_fs xfs
_supported_os Linux

_require_scratch

checkopts=""
[ "$USE_BIG_LOOPFS" = yes ] && checkopts=-t

echo "*** init FS"

rm -f $seq.full
umount $SCRATCH_DEV >/dev/null 2>&1
echo "*** MKFS ***"                         >>$seq.full
echo ""                                     >>$seq.full
_scratch_mkfs_xfs                           >>$seq.full 2>&1 \
    || _fail "mkfs failed"
_scratch_mount                              >>$seq.full 2>&1 \
    || _fail "mount failed"

echo "*** test"

for l in 0 1 2 3 4
do
        echo "    *** test $l"
        $FSSTRESS_PROG -d $SCRATCH_MNT -n 1000 $FSSTRESS_AVOID >>$seq.full

        _scratch_mount -o remount,ro \
            || _fail "remount ro failed"

        echo ""                                 >>$seq.full
        echo "*** xfs_logprint ***"             >>$seq.full
        echo ""                                 >>$seq.full
        _scratch_xfs_logprint -tb               | tee -a $seq.full \
            | head | grep -q "<CLEAN>" || _fail "DIRTY LOG"

        echo ""                             >>$seq.full
        echo "*** XFS_CHECK ***"            >>$seq.full
        echo ""                             >>$seq.full
        _scratch_xfs_check $checkopts       >>$seq.full 2>&1 \
            || _fail "xfs_check $checkopts failed"
        _scratch_mount -o remount,rw \
            || _fail "remount rw failed"
done

echo "*** done"
# happy exit
rm -f $seq.full
status=0
exit 0
