#!/usr/bin/env bash
#
# Test case for write zeroes with unmap
#
# Copyright (C) 2017 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=eblake@redhat.com

seq="$(basename $0)"
echo "QA output created by $seq"

status=1	# failure is the default!

_cleanup()
{
	_cleanup_test_img
    rm -f "$TEST_DIR/blkdebug.conf"
}
trap "_cleanup; exit \$status" 0 1 2 3 15

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

_supported_fmt qcow2
_supported_proto file
_supported_os Linux

# v2 images can't mark clusters as zero
_unsupported_imgopts compat=0.10

echo
echo '=== Testing write zeroes with unmap ==='
echo

TEST_IMG="$TEST_IMG.base" _make_test_img 64M
_make_test_img -b "$TEST_IMG.base" -F $IMGFMT

# Offsets chosen at or near 2M boundaries so test works at all cluster sizes
# 8k and larger (smaller clusters fail due to non-contiguous allocations)

# Aligned writes to unallocated cluster should not allocate mapping, but must
# mark cluster as zero, whether or not unmap was requested
$QEMU_IO -c "write -z -u 2M 2M" "$TEST_IMG.base" | _filter_qemu_io
$QEMU_IO -c "write -z 6M 2M" "$TEST_IMG.base" | _filter_qemu_io
$QEMU_IO -c "map" "$TEST_IMG.base" | _filter_qemu_io
$QEMU_IMG map --output=json "$TEST_IMG.base" | _filter_qemu_img_map

# Unaligned writes need not allocate mapping if the cluster already reads
# as zero, but must mark cluster as zero, whether or not unmap was requested
$QEMU_IO -c "write -z -u 10485761 2097150" "$TEST_IMG.base" | _filter_qemu_io
$QEMU_IO -c "write -z 14680065 2097150" "$TEST_IMG.base" | _filter_qemu_io
$QEMU_IO -c "map" "$TEST_IMG.base" | _filter_qemu_io
$QEMU_IMG map --output=json "$TEST_IMG.base" | _filter_qemu_img_map

# Requesting unmap of normal data must deallocate; omitting unmap should
# preserve the mapping
$QEMU_IO -c "write 18M 14M" "$TEST_IMG.base" | _filter_qemu_io
$QEMU_IO -c "write -z -u 20M 2M" "$TEST_IMG.base" | _filter_qemu_io
$QEMU_IO -c "write -z 24M 6M" "$TEST_IMG.base" | _filter_qemu_io
$QEMU_IO -c "map" "$TEST_IMG.base" | _filter_qemu_io
$QEMU_IMG map --output=json "$TEST_IMG.base" | _filter_qemu_img_map

# Likewise when writing on already-mapped zero data
$QEMU_IO -c "write -z -u 26M 2M" "$TEST_IMG.base" | _filter_qemu_io
$QEMU_IO -c "write -z 28M 2M" "$TEST_IMG.base" | _filter_qemu_io
$QEMU_IO -c "map" "$TEST_IMG.base" | _filter_qemu_io
$QEMU_IMG map --output=json "$TEST_IMG.base" | _filter_qemu_img_map

# Writing on unmapped zeroes does not allocate
$QEMU_IO -c "write -z 32M 8M" "$TEST_IMG.base" | _filter_qemu_io
$QEMU_IO -c "write -z -u 34M 2M" "$TEST_IMG.base" | _filter_qemu_io
$QEMU_IO -c "write -z 36M 2M" "$TEST_IMG.base" | _filter_qemu_io
$QEMU_IO -c "map" "$TEST_IMG.base" | _filter_qemu_io
$QEMU_IMG map --output=json "$TEST_IMG.base" | _filter_qemu_img_map

# Writing zero overrides a backing file, regardless of backing cluster type
$QEMU_IO -c "write -z 40M 8M" "$TEST_IMG.base" | _filter_qemu_io
$QEMU_IO -c "write 48M 8M" "$TEST_IMG.base" | _filter_qemu_io
$QEMU_IO -c "write -z -u 42M 2M" "$TEST_IMG" | _filter_qemu_io
$QEMU_IO -c "write -z 44M 2M" "$TEST_IMG" | _filter_qemu_io
$QEMU_IO -c "write -z -u 50M 2M" "$TEST_IMG" | _filter_qemu_io
$QEMU_IO -c "write -z 52M 2M" "$TEST_IMG" | _filter_qemu_io
$QEMU_IO -c "write -z -u 58M 2M" "$TEST_IMG" | _filter_qemu_io
$QEMU_IO -c "write -z 60M 2M" "$TEST_IMG" | _filter_qemu_io
$QEMU_IO -c "map" "$TEST_IMG" | _filter_qemu_io
$QEMU_IMG map --output=json "$TEST_IMG" | _filter_qemu_img_map

# Final check that mappings are correct and images are still sane
TEST_IMG="$TEST_IMG.base" _check_test_img
_check_test_img

echo
echo '=== Testing cache optimization ==='
echo

BLKDBG_TEST_IMG="blkdebug:$TEST_DIR/blkdebug.conf:$TEST_IMG.base"

cat > "$TEST_DIR/blkdebug.conf" <<EOF
[inject-error]
event = "l2_update"
errno = "5"
immediately = "on"
once = "off"
EOF

# None of the following writes should trigger an L2 update, because the
# cluster already reads as zero, and we don't have to change allocation
$QEMU_IO -c "w -z -u 20M 2M" "$BLKDBG_TEST_IMG" | _filter_qemu_io
$QEMU_IO -c "w -z 20M 2M" "$BLKDBG_TEST_IMG" | _filter_qemu_io
$QEMU_IO -c "w -z 28M 2M" "$BLKDBG_TEST_IMG" | _filter_qemu_io

# success, all done
echo '*** done'
status=0
