From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33439) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1asnMB-0001Ta-Hk for qemu-devel@nongnu.org; Wed, 20 Apr 2016 04:19:32 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1asnMA-0003lD-Mn for qemu-devel@nongnu.org; Wed, 20 Apr 2016 04:19:31 -0400 Date: Wed, 20 Apr 2016 16:19:28 +0800 From: Fam Zheng Message-ID: <20160420081928.GA2922@ad-mail.usersys.redhat.com> References: <1461106788-14285-1-git-send-email-mreitz@redhat.com> <1461106788-14285-3-git-send-email-mreitz@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1461106788-14285-3-git-send-email-mreitz@redhat.com> Subject: Re: [Qemu-devel] [PATCH for-2.6 2/2] block/mirror: Refresh stale bitmap iterator cache List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Max Reitz Cc: qemu-block@nongnu.org, qemu-devel@nongnu.org, Kevin Wolf , Jeff Cody On Wed, 04/20 00:59, Max Reitz wrote: > If the drive's dirty bitmap is dirtied while the mirror operation is > running, the cache of the iterator used by the mirror code may become > stale and not contain all dirty bits. > > This only becomes an issue if we are looking for contiguously dirty > chunks on the drive. In that case, we can easily detect the discrepancy > and just refresh the iterator if one occurs. > > Signed-off-by: Max Reitz > --- > block/mirror.c | 5 +++++ > 1 file changed, 5 insertions(+) > > diff --git a/block/mirror.c b/block/mirror.c > index 2714a77..9df1fae 100644 > --- a/block/mirror.c > +++ b/block/mirror.c > @@ -334,6 +334,11 @@ static uint64_t coroutine_fn mirror_iteration(MirrorBlockJob *s) > } > > hbitmap_next = hbitmap_iter_next(&s->hbi); > + if (hbitmap_next > next_sector || hbitmap_next < 0) { > + /* The bitmap iterator's cache is stale, refresh it */ > + bdrv_set_dirty_iter(&s->hbi, next_sector); > + hbitmap_next = hbitmap_iter_next(&s->hbi); > + } > assert(hbitmap_next == next_sector); > nb_chunks++; > } > -- > 2.8.0 > Reviewed-by: Fam Zheng