#!/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 fuse
_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
