All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
To: "Denis V. Lunev" <den@openvz.org>,
	qemu-block@nongnu.org, qemu-devel@nongnu.org
Cc: Kevin Wolf <kwolf@redhat.com>, Fam Zheng <famz@redhat.com>,
	Jeff Cody <jcody@redhat.com>, Max Reitz <mreitz@redhat.com>,
	Stefan Hajnoczi <stefanha@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v3 2/2] mirror: fix improperly filled copy_bitmap for mirror block job
Date: Fri, 23 Sep 2016 14:00:20 +0300	[thread overview]
Message-ID: <57E50B44.3080809@virtuozzo.com> (raw)
In-Reply-To: <1473957290-13382-3-git-send-email-den@openvz.org>

On 15.09.2016 19:34, Denis V. Lunev wrote:
> bdrv_is_allocated_above() returns true in the case even for completel
> zeroed areas as BDRV_BLOCK_ALLOCATED flag is set in both cases.
>
> The patch stops using bdrv_is_allocated_above() wrapper and switches to
> bdrv_get_block_status_above() to distinguish zeroed areas and areas with
> data to avoid extra IO operations if possible.
>
> Signed-off-by: Denis V. Lunev <den@openvz.org>
> CC: Stefan Hajnoczi <stefanha@redhat.com>
> CC: Fam Zheng <famz@redhat.com>
> CC: Kevin Wolf <kwolf@redhat.com>
> CC: Max Reitz <mreitz@redhat.com>
> CC: Jeff Cody <jcody@redhat.com>
> ---
>   block/mirror.c | 17 +++++++++++------
>   1 file changed, 11 insertions(+), 6 deletions(-)
>
> diff --git a/block/mirror.c b/block/mirror.c
> index e0b3f41..2710f62 100644
> --- a/block/mirror.c
> +++ b/block/mirror.c
> @@ -548,11 +548,11 @@ static void mirror_throttle(MirrorBlockJob *s)
>   
>   static int coroutine_fn mirror_dirty_init(MirrorBlockJob *s)
>   {
> -    int64_t sector_num, end;
> +    int64_t sector_num, end, alloc_mask;
>       BlockDriverState *base = s->base;
>       BlockDriverState *bs = blk_bs(s->common.blk);
>       BlockDriverState *target_bs = blk_bs(s->target);
> -    int ret, n;
> +    int n;
>   
>       end = s->bdev_length / BDRV_SECTOR_SIZE;
>   
> @@ -585,11 +585,15 @@ static int coroutine_fn mirror_dirty_init(MirrorBlockJob *s)
>           mirror_drain(s);
>       }
>   
> +    alloc_mask = base == NULL ? BDRV_BLOCK_ALLOCATED : BDRV_BLOCK_DATA;

should not s/==/!= ?

> +
>       /* First part, loop on the sectors and initialize the dirty bitmap.  */
>       for (sector_num = 0; sector_num < end; ) {
>           /* Just to make sure we are not exceeding int limit. */
>           int nb_sectors = MIN(INT_MAX >> BDRV_SECTOR_BITS,
>                                end - sector_num);
> +        int64_t status;
> +        BlockDriverState *file;
>   
>           mirror_throttle(s);
>   
> @@ -597,13 +601,14 @@ static int coroutine_fn mirror_dirty_init(MirrorBlockJob *s)
>               return 0;
>           }
>   
> -        ret = bdrv_is_allocated_above(bs, base, sector_num, nb_sectors, &n);
> -        if (ret < 0) {
> -            return ret;
> +        status = bdrv_get_block_status_above(bs, base, sector_num,
> +                                             nb_sectors, &n, &file);
> +        if (status < 0) {
> +            return status;
>           }
>   
>           assert(n > 0);
> -        if (ret == 1) {
> +        if (status & alloc_mask) {
>               bdrv_set_dirty_bitmap(s->dirty_bitmap, sector_num, n);
>           }
>           sector_num += n;


-- 
Best regards,
Vladimir

      parent reply	other threads:[~2016-09-23 11:00 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-09-15 16:34 [Qemu-devel] [PATCH v3 0/2] mirror: fix improperly filled copy_bitmap for mirror block job Denis V. Lunev
2016-09-15 16:34 ` [Qemu-devel] [PATCH v3 1/2] block: sync bdrv_co_get_block_status_above() with bdrv_is_allocated_above() Denis V. Lunev
2016-09-19  1:21   ` Fam Zheng
2016-09-19  4:37     ` Denis V. Lunev
2016-09-19 20:39       ` Eric Blake
2016-09-26 15:04         ` Kevin Wolf
2016-09-26 21:42           ` [Qemu-devel] [Qemu-block] " Kashyap Chamarthy
2016-09-19 23:18   ` [Qemu-devel] " Max Reitz
2016-09-20  6:13     ` Jeff Cody
2016-09-15 16:34 ` [Qemu-devel] [PATCH v3 2/2] mirror: fix improperly filled copy_bitmap for mirror block job Denis V. Lunev
2016-09-15 17:19   ` Eric Blake
2016-09-23 11:00   ` Vladimir Sementsov-Ogievskiy [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=57E50B44.3080809@virtuozzo.com \
    --to=vsementsov@virtuozzo.com \
    --cc=den@openvz.org \
    --cc=famz@redhat.com \
    --cc=jcody@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=mreitz@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@redhat.com \
    /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.