#!/usr/bin/env bash
# group: rw auto quick
#
# 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
