[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v10 1/4] block: Add synchronous wrapper for bdrv_co_
From: |
Miroslav Rezanina |
Subject: |
[Qemu-devel] [PATCH v10 1/4] block: Add synchronous wrapper for bdrv_co_is_allocated_above |
Date: |
Tue, 12 Feb 2013 08:00:22 +0100 |
There's no synchronous wrapper for bdrv_co_is_allocated_above function
so it's not possible to check for sector allocation in an image with
a backing file.
Signed-off-by: Miroslav Rezanina <address@hidden>
---
block.c | 39 +++++++++++++++++++++++++++++++++++++++
include/block/block.h | 2 ++
2 files changed, 41 insertions(+), 0 deletions(-)
diff --git a/block.c b/block.c
index 50dab8e..08039d2 100644
--- a/block.c
+++ b/block.c
@@ -2681,6 +2681,7 @@ int bdrv_has_zero_init(BlockDriverState *bs)
typedef struct BdrvCoIsAllocatedData {
BlockDriverState *bs;
+ BlockDriverState *base;
int64_t sector_num;
int nb_sectors;
int *pnum;
@@ -2813,6 +2814,44 @@ int coroutine_fn
bdrv_co_is_allocated_above(BlockDriverState *top,
return 0;
}
+/* Coroutine wrapper for bdrv_is_allocated_above() */
+static void coroutine_fn bdrv_is_allocated_above_co_entry(void *opaque)
+{
+ BdrvCoIsAllocatedData *data = opaque;
+ BlockDriverState *top = data->bs;
+ BlockDriverState *base = data->base;
+
+ data->ret = bdrv_co_is_allocated_above(top, base, data->sector_num,
+ data->nb_sectors, data->pnum);
+ data->done = true;
+}
+
+/*
+ * Synchronous wrapper around bdrv_co_is_allocated_above().
+ *
+ * See bdrv_co_is_allocated_above() for details.
+ */
+int bdrv_is_allocated_above(BlockDriverState *top, BlockDriverState *base,
+ int64_t sector_num, int nb_sectors, int *pnum)
+{
+ Coroutine *co;
+ BdrvCoIsAllocatedData data = {
+ .bs = top,
+ .base = base,
+ .sector_num = sector_num,
+ .nb_sectors = nb_sectors,
+ .pnum = pnum,
+ .done = false,
+ };
+
+ co = qemu_coroutine_create(bdrv_is_allocated_above_co_entry);
+ qemu_coroutine_enter(co, &data);
+ while (!data.done) {
+ qemu_aio_wait();
+ }
+ return data.ret;
+}
+
BlockInfo *bdrv_query_info(BlockDriverState *bs)
{
BlockInfo *info = g_malloc0(sizeof(*info));
diff --git a/include/block/block.h b/include/block/block.h
index ce61883..8309fc1 100644
--- a/include/block/block.h
+++ b/include/block/block.h
@@ -279,6 +279,8 @@ int bdrv_co_discard(BlockDriverState *bs, int64_t
sector_num, int nb_sectors);
int bdrv_has_zero_init(BlockDriverState *bs);
int bdrv_is_allocated(BlockDriverState *bs, int64_t sector_num, int nb_sectors,
int *pnum);
+int bdrv_is_allocated_above(BlockDriverState *top, BlockDriverState *base,
+ int64_t sector_num, int nb_sectors, int *pnum);
void bdrv_set_on_error(BlockDriverState *bs, BlockdevOnError on_read_error,
BlockdevOnError on_write_error);
--
1.7.1
- [Qemu-devel] [PATCH v10 0/4] Add subcommand compare for qemu-img, Miroslav Rezanina, 2013/02/12
- [Qemu-devel] [PATCH v10 1/4] block: Add synchronous wrapper for bdrv_co_is_allocated_above,
Miroslav Rezanina <=
- [Qemu-devel] [PATCH v10 3/4] This patch adds new qemu-img subcommand that compares content of two disk images., Miroslav Rezanina, 2013/02/12
- [Qemu-devel] [PATCH v10 2/4] qemu-img: Add "Quiet mode" option, Miroslav Rezanina, 2013/02/12
- [Qemu-devel] [PATCH v10 4/4] qemu-iotests: Add qemu-img compare test, Miroslav Rezanina, 2013/02/12
- Re: [Qemu-devel] [PATCH v10 0/4] Add subcommand compare for qemu-img, Kevin Wolf, 2013/02/12
- Re: [Qemu-devel] [PATCH v10 0/4] Add subcommand compare for qemu-img, Stefan Hajnoczi, 2013/02/12
- Re: [Qemu-devel] [PATCH v10 0/4] Add subcommand compare for qemu-img, Miroslav Rezanina, 2013/02/13