#!/bin/bash
# SPDX-License-Identifier: GPL-2.0
# Copyright (c) 2000-2002 Silicon Graphics, Inc.  All Rights Reserved.
#

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

tmp=/tmp/$$
seq=soak
status=1	# failure is the default!

_cleanup()
{
    echo "        *** umount"
    _scratch_unmount >/dev/null 2>&1
}

trap "_cleanup; exit \$status" 0 1 2 3 15

ROOT="."
LOG="$ROOT/soak.log"
FULL="$ROOT/soak.full"

_log()
{
    echo "$*" 1>&2
    echo "$*" >>$LOG
    echo "$*" >>$FULL
}

_logp()
{
    tee -a $FULL
}

_fail()
{
    _log "$*"
    status=1
    exit 1
}

_require_scratch

passes=-1
stress=100000
proc=1

if [ $# -gt 0 ]
then
    passes=$1
    if [ $# -gt 1 ]
    then
        stress=$2
        if [ $# -gt 2 ]
        then
            proc=$3
        fi
    fi
fi

echo "" >$FULL
echo "" >$LOG
_log "*** soak test started (passes=$passes, stress=$stress, proc=$proc)"
_log "***     (`date`)"


_log "    *** init"
_log "        *** unmounting scratch device"

_scratch_unmount 2>&1 >>$FULL

_log "        *** clean scratch device"

mkfs_xfs -f $SCRATCH_DEV 2>&1 >>$FULL \
                        || _fail "            !!! failed to mkfs SCRATCH_DEV"

pass=1

while [ $pass -le $passes -o $passes -lt 0 ]
do
    _log "    *** pass $pass (`date`)"
    
    _log "        *** check"
    _check_scratch_fs
    
    _log "        *** mounting scratch device"

    if ! _scratch_mount 2>&1 | _logp
    then
        _fail "            !!! failed to mount"
    fi
                        
    if [ $pass != 1 ]
    then
        _log "        *** cleanup"
        rm -rf $SCRATCH_MNT/soak_test \
                        || _fail "            !!! couldn't delete old dir"

        _log "        *** check"
        _check_scratch_fs
    fi

    _log "        *** mkdir"
    mkdir $SCRATCH_MNT/soak_test \
                        || _fail "            !!! couldn't delete old dir"
    
    _log "        *** stress"
    ltp/fsstress -d $SCRATCH_MNT/soak_test -p $proc -n $stress $FSSTRESS_AVOID 2>&1 | \
        >>$FULL

    _log "        *** unmounting scratch device"

    _scratch_unmount 2>&1 | _logp \
                            || _fail "            !!! failed to umount"
    
    let "pass = pass + 1"
done

