All of lore.kernel.org
 help / color / mirror / Atom feed
From: Maxim Levitsky <mlevitsk@redhat.com>
To: Alberto Garcia <berto@igalia.com>, qemu-devel@nongnu.org
Cc: Kevin Wolf <kwolf@redhat.com>,
	qemu-block@nongnu.org, Max Reitz <mreitz@redhat.com>
Subject: Re: [PATCH] iotests: Add test for the regression fixed in c8bf9a9169
Date: Thu, 26 Nov 2020 13:32:48 +0200	[thread overview]
Message-ID: <2b8297fe6d6a1b4ee2d09bcb5c3a939f55b5a81d.camel@redhat.com> (raw)
In-Reply-To: <20201125185551.20475-1-berto@igalia.com>

On Wed, 2020-11-25 at 19:55 +0100, Alberto Garcia wrote:
> Signed-off-by: Alberto Garcia <berto@igalia.com>
> Suggested-by: Maxim Levitsky <mlevitsk@redhat.com>
> ---
>  tests/qemu-iotests/313     | 103 +++++++++++++++++++++++++++++++++++++
>  tests/qemu-iotests/313.out |  29 +++++++++++
>  tests/qemu-iotests/group   |   1 +
>  3 files changed, 133 insertions(+)
>  create mode 100755 tests/qemu-iotests/313
>  create mode 100644 tests/qemu-iotests/313.out
> 
> diff --git a/tests/qemu-iotests/313 b/tests/qemu-iotests/313
> new file mode 100755
> index 0000000000..0a5202ad49
> --- /dev/null
> +++ b/tests/qemu-iotests/313
> @@ -0,0 +1,103 @@
> +#!/usr/bin/env bash
> +#
> +# Test for the regression fixed in commit c8bf9a9169
> +#
> +# Copyright (C) 2020 Igalia, S.L.
> +# Author: Alberto Garcia <berto@igalia.com>
> +# Based on a test case by Maxim Levitsky <mlevitsk@redhat.com>
> +#
> +# 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=berto@igalia.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 qcow2
> +_supported_proto file
> +_supported_os Linux
> +_unsupported_imgopts cluster_size refcount_bits extended_l2 compat=0.10 data_file
> +
> +# The cluster size must be at least the granularity of the mirror job (4KB)
> +# Note that larger cluster sizes will produce very large images (several GBs)
> +cluster_size=4096
> +refcount_bits=64 # Make it equal to the L2 entry size for convenience
> +options="cluster_size=${cluster_size},refcount_bits=${refcount_bits}"
> +
> +# Number of refcount entries per refcount blocks
> +ref_entries=$(( ${cluster_size} * 8 / ${refcount_bits} ))
> +
> +# Number of data clusters needed to fill a refcount block
> +# Equals ${ref_entries} minus two (one L2 table and one refcount block)
> +data_clusters_per_refblock=$(( ${ref_entries} - 2 ))
> +
> +# Number of entries in the refcount cache
> +ref_blocks=4
> +
> +# Write enough data clusters to fill the refcount cache and allocate
> +# one more refcount block.
> +# Subtract 3 clusters from the total: qcow2 header, refcount table, L1 table
> +total_data_clusters=$(( ${data_clusters_per_refblock} * ${ref_blocks} + 1 - 3 ))
> +
> +# Total size to write in bytes
> +total_size=$(( ${total_data_clusters} * ${cluster_size} ))
> +
> +echo
> +echo '### Create the image'
> +echo
> +TEST_IMG_FILE=$TEST_IMG.base _make_test_img -o $options $total_size | _filter_img_create_size
> +
> +echo
> +echo '### Write data to allocate more refcount blocks than the cache can hold'
> +echo
> +$QEMU_IO -c "write -P 1 0 $total_size" $TEST_IMG.base | _filter_qemu_io
> +
> +echo
> +echo '### Create an overlay'
> +echo
> +_make_test_img -F $IMGFMT -b $TEST_IMG.base -o $options | _filter_img_create_size
> +
> +echo
> +echo '### Fill the overlay with zeroes'
> +echo
> +$QEMU_IO -c "write -z 0 $total_size" $TEST_IMG | _filter_qemu_io
> +
> +echo
> +echo '### Commit changes to the base image'
> +echo
> +$QEMU_IMG commit $TEST_IMG
> +
> +echo
> +echo '### Check the base image'
> +echo
> +$QEMU_IMG check $TEST_IMG.base
> +
> +# success, all done
> +echo "*** done"
> +rm -f $seq.full
> +status=0
> diff --git a/tests/qemu-iotests/313.out b/tests/qemu-iotests/313.out
> new file mode 100644
> index 0000000000..adb9f7bd95
> --- /dev/null
> +++ b/tests/qemu-iotests/313.out
> @@ -0,0 +1,29 @@
> +QA output created by 313
> +
> +### Create the image
> +
> +Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=SIZE
> +
> +### Write data to allocate more refcount blocks than the cache can hold
> +
> +wrote 8347648/8347648 bytes at offset 0
> +7.961 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +
> +### Create an overlay
> +
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=SIZE backing_file=TEST_DIR/t.IMGFMT.base backing_fmt=IMGFMT
> +
> +### Fill the overlay with zeroes
> +
> +wrote 8347648/8347648 bytes at offset 0
> +7.961 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +
> +### Commit changes to the base image
> +
> +Image committed.
> +
> +### Check the base image
> +
> +No errors were found on the image.
> +Image end offset: 8396800
> +*** done
> diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group
> index 2960dff728..df339f1720 100644
> --- a/tests/qemu-iotests/group
> +++ b/tests/qemu-iotests/group
> @@ -316,3 +316,4 @@
>  305 rw quick
>  307 rw quick export
>  309 rw auto quick
> +313 rw auto quick


Tested this and it reproduces the bug just fine.

Reviewed-by: Maxim Levitsky <mlevitsk@redhat.com>

Best regards,
	Maxim Levitsky




      reply	other threads:[~2020-11-26 11:45 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-11-25 18:55 [PATCH] iotests: Add test for the regression fixed in c8bf9a9169 Alberto Garcia
2020-11-26 11:32 ` Maxim Levitsky [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=2b8297fe6d6a1b4ee2d09bcb5c3a939f55b5a81d.camel@redhat.com \
    --to=mlevitsk@redhat.com \
    --cc=berto@igalia.com \
    --cc=kwolf@redhat.com \
    --cc=mreitz@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.