#!/bin/bash
#
# Test concurrent pread/pwrite
#
# Copyright (C) 2014 Red Hat, Inc.
#
# 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; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will 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, see <http://www.gnu.org/licenses/>.
#

# creator
owner=kwolf@redhat.com

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

status=1	# failure is the default!

_cleanup()
{
	_cleanup_test_img
}
trap "_cleanup; exit \$status" 0 1 2 3 15

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

_supported_fmt raw
_supported_proto generic
_supported_os Linux

CLUSTER_SIZE=4k
size=128M

_make_test_img $size

echo
echo "== Some concurrent requests involving RMW =="

test_io()
{
echo "open -o driver=$IMGFMT,file.align=4k blkdebug::$TEST_IMG"
# A simple RMW request
cat  <<EOF
aio_write -P 10 0x200 0x200
aio_flush
EOF

# Sequential RMW requests on the same physical sector
off=0x1000
for ev in "head" "after_head"; do
cat  <<EOF
break pwritev_rmw_$ev A
aio_write -P 10 $((off + 0x200)) 0x200
wait_break A
aio_write -P 11 $((off + 0x400)) 0x200
sleep 100
resume A
aio_flush
EOF
off=$((off + 0x1000))
done

# Chained dependencies
cat  <<EOF
break pwritev_rmw_after_tail A
aio_write -P 10 0x5000 0x200
wait_break A
aio_write -P 11 0x5200 0x200
aio_write -P 12 0x5400 0x200
aio_write -P 13 0x5600 0x200
aio_write -P 14 0x5800 0x200
aio_write -P 15 0x5a00 0x200
aio_write -P 16 0x5c00 0x200
aio_write -P 17 0x5e00 0x200
sleep 100
resume A
aio_flush
EOF

# Overlapping multiple requests
cat  <<EOF
break pwritev_rmw_after_tail A
aio_write -P 10 0x6000 0x200
wait_break A
break pwritev_rmw_after_head B
aio_write -P 10 0x7e00 0x200
wait_break B
aio_write -P 11 0x6800 0x1000
resume A
sleep 100
resume B
aio_flush
EOF

cat  <<EOF
break pwritev_rmw_after_tail A
aio_write -P 10 0x8000 0x200
wait_break A
break pwritev_rmw_after_head B
aio_write -P 10 0x9e00 0x200
wait_break B
aio_write -P 11 0x8800 0x1000
resume B
sleep 100
resume A
aio_flush
EOF

cat  <<EOF
break pwritev_rmw_after_tail A
aio_write -P 10 0xa000 0x200
wait_break A
aio_write -P 11 0xa800 0x1000
break pwritev_rmw_after_head B
aio_write -P 10 0xbe00 0x200
wait_break B
resume A
sleep 100
resume B
aio_flush
EOF

cat  <<EOF
break pwritev_rmw_after_tail A
aio_write -P 10 0xc000 0x200
wait_break A
aio_write -P 11 0xc800 0x1000
break pwritev_rmw_after_head B
aio_write -P 10 0xde00 0x200
wait_break B
resume B
sleep 100
resume A
aio_flush
EOF

# Only RMW for the tail part
cat  <<EOF
break pwritev_rmw_after_tail A
aio_write -P 10 0xe000 0x1800
wait_break A
aio_write -P 11 0xf000 0xc00
sleep 100
resume A
aio_flush
EOF

cat  <<EOF
break pwritev A
aio_write -P 10 0x10000 0x800
wait_break A
break pwritev_rmw_after_tail B
aio_write -P 11 0x10000 0x400
break pwritev_done C
resume A
wait_break C
resume C
sleep 100
wait_break B
resume B
aio_flush
EOF

cat  <<EOF
break pwritev A
aio_write -P 10 0x11000 0x800
wait_break A
aio_write -P 11 0x11000 0x1000
sleep 100
resume A
aio_flush
EOF
}

test_io | $QEMU_IO  | _filter_qemu_io | \
    sed -e 's,[0-9/]* bytes at offset [0-9]*,XXX/XXX bytes at offset XXX,g' \
        -e 's/^[0-9]* \(bytes\|KiB\)/XXX bytes/' \
        -e '/Suspended/d' \
        -e '/blkdebug: Resuming request/d'

echo
echo "== Verify image content =="

verify_io()
{
    # A simple RMW request
    echo read -P 0       0 0x200
    echo read -P 10  0x200 0x200
    echo read -P 0   0x400 0xc00

    # Sequential RMW requests on the same physical sector
    echo read -P 0  0x1000 0x200
    echo read -P 10 0x1200 0x200
    echo read -P 11 0x1400 0x200
    echo read -P 0  0x1600 0xa00

    echo read -P 0  0x2000 0x200
    echo read -P 10 0x2200 0x200
    echo read -P 11 0x2400 0x200
    echo read -P 0  0x2600 0xa00

    # Chained dependencies
    echo read -P 10 0x5000 0x200
    echo read -P 11 0x5200 0x200
    echo read -P 12 0x5400 0x200
    echo read -P 13 0x5600 0x200
    echo read -P 14 0x5800 0x200
    echo read -P 15 0x5a00 0x200
    echo read -P 16 0x5c00 0x200
    echo read -P 17 0x5e00 0x200

    # Overlapping multiple requests
    echo read -P 10 0x6000 0x200
    echo read -P  0 0x6200 0x600
    echo read -P 11 0x6800 0x1000
    echo read -P  0 0x7800 0x600
    echo read -P 10 0x7e00 0x200

    echo read -P 10 0x8000 0x200
    echo read -P  0 0x8200 0x600
    echo read -P 11 0x8800 0x1000
    echo read -P  0 0x9800 0x600
    echo read -P 10 0x9e00 0x200

    echo read -P 10 0xa000 0x200
    echo read -P  0 0xa200 0x600
    echo read -P 11 0xa800 0x1000
    echo read -P  0 0xb800 0x600
    echo read -P 10 0xbe00 0x200

    echo read -P 10 0xc000 0x200
    echo read -P  0 0xc200 0x600
    echo read -P 11 0xc800 0x1000
    echo read -P  0 0xd800 0x600
    echo read -P 10 0xde00 0x200

    # Only RMW for the tail part
    echo read -P 10 0xe000 0x1000
    echo read -P 11 0xf800 0x400
    echo read -P  0 0xfc00 0x400

    echo read -P 11 0x10000 0x400
    echo read -P 10 0x10400 0x400

    echo read -P 11 0x11800 0x800
}

verify_io | $QEMU_IO "$TEST_IMG" | _filter_qemu_io

_check_test_img

# success, all done
echo "*** done"
rm -f $seq.full
status=0
