[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 4/5] block: mark blocks dirty on coroutine write
From: |
Stefan Hajnoczi |
Subject: |
[Qemu-devel] [PATCH v2 4/5] block: mark blocks dirty on coroutine write completion |
Date: |
Thu, 13 Oct 2011 13:08:24 +0100 |
The aio write operation marks blocks dirty when the write operation
completes. The coroutine write operation marks blocks dirty before
issuing the write operation.
It seems safest to mark the block dirty when the operation completes so
that anything tracking dirty blocks will not act before the change has
been made to the image file.
Make the coroutine write operation dirty blocks on write completion.
Signed-off-by: Stefan Hajnoczi <address@hidden>
---
block.c | 5 ++++-
1 files changed, 4 insertions(+), 1 deletions(-)
diff --git a/block.c b/block.c
index e94fa61..02e15ca 100644
--- a/block.c
+++ b/block.c
@@ -1311,6 +1311,7 @@ static int coroutine_fn
bdrv_co_do_writev(BlockDriverState *bs,
int64_t sector_num, int nb_sectors, QEMUIOVector *qiov)
{
BlockDriver *drv = bs->drv;
+ int ret;
if (!bs->drv) {
return -ENOMEDIUM;
@@ -1322,6 +1323,8 @@ static int coroutine_fn
bdrv_co_do_writev(BlockDriverState *bs,
return -EIO;
}
+ ret = drv->bdrv_co_writev(bs, sector_num, nb_sectors, qiov);
+
if (bs->dirty_bitmap) {
set_dirty_bitmap(bs, sector_num, nb_sectors, 1);
}
@@ -1330,7 +1333,7 @@ static int coroutine_fn
bdrv_co_do_writev(BlockDriverState *bs,
bs->wr_highest_sector = sector_num + nb_sectors - 1;
}
- return drv->bdrv_co_writev(bs, sector_num, nb_sectors, qiov);
+ return ret;
}
int coroutine_fn bdrv_co_writev(BlockDriverState *bs, int64_t sector_num,
--
1.7.6.3
- [Qemu-devel] [PATCH v2 0/5] block: do request processing in a coroutine, Stefan Hajnoczi, 2011/10/13
- [Qemu-devel] [PATCH v2 4/5] block: mark blocks dirty on coroutine write completion,
Stefan Hajnoczi <=
- [Qemu-devel] [PATCH v2 5/5] block: switch bdrv_aio_writev() to coroutines, Stefan Hajnoczi, 2011/10/13
- [Qemu-devel] [PATCH v2 2/5] block: switch bdrv_read()/bdrv_write() to coroutines, Stefan Hajnoczi, 2011/10/13
- [Qemu-devel] [PATCH v2 1/5] block: directly invoke .bdrv_* from emulation functions, Stefan Hajnoczi, 2011/10/13
- [Qemu-devel] [PATCH v2 3/5] block: switch bdrv_aio_readv() to coroutines, Stefan Hajnoczi, 2011/10/13
- Re: [Qemu-devel] [PATCH v2 0/5] block: do request processing in a coroutine, Kevin Wolf, 2011/10/13