qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: qemu-devel@nongnu.org
Cc: kwolf@redhat.com, stefanha@redhat.com
Subject: [Qemu-devel] [PATCH 7/7] block: clear dirty bitmap when discarding
Date: Mon, 14 Jan 2013 16:26:58 +0100	[thread overview]
Message-ID: <1358177218-16802-8-git-send-email-pbonzini@redhat.com> (raw)
In-Reply-To: <1358177218-16802-1-git-send-email-pbonzini@redhat.com>

Note that resetting bits in the dirty bitmap is done _before_ actually
processing the request.  Writes, instead, set bits after the request
is completed.

This way, when there are concurrent write and discard requests, the
outcome will always be that the blocks are marked dirty.  This scenario
should never happen, but it is safer to do it this way.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 block.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/block.c b/block.c
index b5e64ec..ffcc9e6 100644
--- a/block.c
+++ b/block.c
@@ -4174,7 +4174,13 @@ int coroutine_fn bdrv_co_discard(BlockDriverState *bs, int64_t sector_num,
         return -EIO;
     } else if (bs->read_only) {
         return -EROFS;
-    } else if (bs->drv->bdrv_co_discard) {
+    }
+
+    if (bs->dirty_bitmap) {
+        set_dirty_bitmap(bs, sector_num, nb_sectors, 0);
+    }
+
+    if (bs->drv->bdrv_co_discard) {
         return bs->drv->bdrv_co_discard(bs, sector_num, nb_sectors);
     } else if (bs->drv->bdrv_aio_discard) {
         BlockDriverAIOCB *acb;
-- 
1.8.1

  parent reply	other threads:[~2013-01-14 15:27 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-01-14 15:26 [Qemu-devel] [PATCH resend 0/7] Discard improvements Paolo Bonzini
2013-01-14 15:26 ` [Qemu-devel] [PATCH 1/7] raw-posix: support discard on more filesystems Paolo Bonzini
2013-01-14 15:26 ` [Qemu-devel] [PATCH 2/7] raw-posix: remember whether discard failed Paolo Bonzini
2013-01-14 15:26 ` [Qemu-devel] [PATCH 3/7] raw: support discard on block devices Paolo Bonzini
2013-01-14 15:26 ` [Qemu-devel] [PATCH 4/7] block: make discard asynchronous Paolo Bonzini
2013-01-15  8:55   ` Stefan Hajnoczi
2013-01-14 15:26 ` [Qemu-devel] [PATCH 5/7] ide: fix TRIM with empty range entry Paolo Bonzini
2013-01-14 15:26 ` [Qemu-devel] [PATCH 6/7] ide: issue discard asynchronously but serialize the pieces Paolo Bonzini
2013-01-14 15:26 ` Paolo Bonzini [this message]
2013-01-15  9:05 ` [Qemu-devel] [PATCH resend 0/7] Discard improvements Stefan Hajnoczi

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=1358177218-16802-8-git-send-email-pbonzini@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=kwolf@redhat.com \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).