[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v7 17/25] block: Add opaque value to the amend CB
From: |
Max Reitz |
Subject: |
[Qemu-devel] [PATCH v7 17/25] block: Add opaque value to the amend CB |
Date: |
Wed, 18 Feb 2015 17:40:52 -0500 |
Add an opaque value which is to be passed to the bdrv_amend_options()
status callback.
Signed-off-by: Max Reitz <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
Reviewed-by: Stefan Hajnoczi <address@hidden>
---
block.c | 4 ++--
block/qcow2-cluster.c | 14 ++++++++------
block/qcow2.c | 9 +++++----
block/qcow2.h | 3 ++-
include/block/block.h | 4 ++--
include/block/block_int.h | 3 ++-
qemu-img.c | 5 +++--
7 files changed, 24 insertions(+), 18 deletions(-)
diff --git a/block.c b/block.c
index 210fd5f..555ad9c 100644
--- a/block.c
+++ b/block.c
@@ -5887,12 +5887,12 @@ void bdrv_add_before_write_notifier(BlockDriverState
*bs,
}
int bdrv_amend_options(BlockDriverState *bs, QemuOpts *opts,
- BlockDriverAmendStatusCB *status_cb)
+ BlockDriverAmendStatusCB *status_cb, void *cb_opaque)
{
if (!bs->drv->bdrv_amend_options) {
return -ENOTSUP;
}
- return bs->drv->bdrv_amend_options(bs, opts, status_cb);
+ return bs->drv->bdrv_amend_options(bs, opts, status_cb, cb_opaque);
}
/* This function will be called by the bdrv_recurse_is_first_non_filter method
diff --git a/block/qcow2-cluster.c b/block/qcow2-cluster.c
index ed2b44d..56363dd 100644
--- a/block/qcow2-cluster.c
+++ b/block/qcow2-cluster.c
@@ -1620,7 +1620,8 @@ fail:
static int expand_zero_clusters_in_l1(BlockDriverState *bs, uint64_t *l1_table,
int l1_size, int64_t *visited_l1_entries,
int64_t l1_entries,
- BlockDriverAmendStatusCB *status_cb)
+ BlockDriverAmendStatusCB *status_cb,
+ void *cb_opaque)
{
BDRVQcowState *s = bs->opaque;
bool is_active_l1 = (l1_table == s->l1_table);
@@ -1646,7 +1647,7 @@ static int expand_zero_clusters_in_l1(BlockDriverState
*bs, uint64_t *l1_table,
/* unallocated */
(*visited_l1_entries)++;
if (status_cb) {
- status_cb(bs, *visited_l1_entries, l1_entries);
+ status_cb(bs, *visited_l1_entries, l1_entries, cb_opaque);
}
continue;
}
@@ -1787,7 +1788,7 @@ static int expand_zero_clusters_in_l1(BlockDriverState
*bs, uint64_t *l1_table,
(*visited_l1_entries)++;
if (status_cb) {
- status_cb(bs, *visited_l1_entries, l1_entries);
+ status_cb(bs, *visited_l1_entries, l1_entries, cb_opaque);
}
}
@@ -1816,7 +1817,8 @@ fail:
* qcow2 version which doesn't yet support metadata zero clusters.
*/
int qcow2_expand_zero_clusters(BlockDriverState *bs,
- BlockDriverAmendStatusCB *status_cb)
+ BlockDriverAmendStatusCB *status_cb,
+ void *cb_opaque)
{
BDRVQcowState *s = bs->opaque;
uint64_t *l1_table = NULL;
@@ -1833,7 +1835,7 @@ int qcow2_expand_zero_clusters(BlockDriverState *bs,
ret = expand_zero_clusters_in_l1(bs, s->l1_table, s->l1_size,
&visited_l1_entries, l1_entries,
- status_cb);
+ status_cb, cb_opaque);
if (ret < 0) {
goto fail;
}
@@ -1868,7 +1870,7 @@ int qcow2_expand_zero_clusters(BlockDriverState *bs,
ret = expand_zero_clusters_in_l1(bs, l1_table, s->snapshots[i].l1_size,
&visited_l1_entries, l1_entries,
- status_cb);
+ status_cb, cb_opaque);
if (ret < 0) {
goto fail;
}
diff --git a/block/qcow2.c b/block/qcow2.c
index 4cdbd7e..3ee1466 100644
--- a/block/qcow2.c
+++ b/block/qcow2.c
@@ -2602,7 +2602,7 @@ static int qcow2_load_vmstate(BlockDriverState *bs,
uint8_t *buf,
* have to be removed.
*/
static int qcow2_downgrade(BlockDriverState *bs, int target_version,
- BlockDriverAmendStatusCB *status_cb)
+ BlockDriverAmendStatusCB *status_cb, void
*cb_opaque)
{
BDRVQcowState *s = bs->opaque;
int current_version = s->qcow_version;
@@ -2651,7 +2651,7 @@ static int qcow2_downgrade(BlockDriverState *bs, int
target_version,
/* clearing autoclear features is trivial */
s->autoclear_features = 0;
- ret = qcow2_expand_zero_clusters(bs, status_cb);
+ ret = qcow2_expand_zero_clusters(bs, status_cb, cb_opaque);
if (ret < 0) {
return ret;
}
@@ -2666,7 +2666,8 @@ static int qcow2_downgrade(BlockDriverState *bs, int
target_version,
}
static int qcow2_amend_options(BlockDriverState *bs, QemuOpts *opts,
- BlockDriverAmendStatusCB *status_cb)
+ BlockDriverAmendStatusCB *status_cb,
+ void *cb_opaque)
{
BDRVQcowState *s = bs->opaque;
int old_version = s->qcow_version, new_version = old_version;
@@ -2748,7 +2749,7 @@ static int qcow2_amend_options(BlockDriverState *bs,
QemuOpts *opts,
return ret;
}
} else {
- ret = qcow2_downgrade(bs, new_version, status_cb);
+ ret = qcow2_downgrade(bs, new_version, status_cb, cb_opaque);
if (ret < 0) {
return ret;
}
diff --git a/block/qcow2.h b/block/qcow2.h
index aa6d367..eed26db 100644
--- a/block/qcow2.h
+++ b/block/qcow2.h
@@ -546,7 +546,8 @@ int qcow2_discard_clusters(BlockDriverState *bs, uint64_t
offset,
int qcow2_zero_clusters(BlockDriverState *bs, uint64_t offset, int nb_sectors);
int qcow2_expand_zero_clusters(BlockDriverState *bs,
- BlockDriverAmendStatusCB *status_cb);
+ BlockDriverAmendStatusCB *status_cb,
+ void *cb_opaque);
/* qcow2-snapshot.c functions */
int qcow2_snapshot_create(BlockDriverState *bs, QEMUSnapshotInfo *sn_info);
diff --git a/include/block/block.h b/include/block/block.h
index 321295e..9a5e122 100644
--- a/include/block/block.h
+++ b/include/block/block.h
@@ -278,9 +278,9 @@ int bdrv_check(BlockDriverState *bs, BdrvCheckResult *res,
BdrvCheckMode fix);
* block driver; total_work_size may change during the course of the amendment
* operation */
typedef void BlockDriverAmendStatusCB(BlockDriverState *bs, int64_t offset,
- int64_t total_work_size);
+ int64_t total_work_size, void *opaque);
int bdrv_amend_options(BlockDriverState *bs_new, QemuOpts *opts,
- BlockDriverAmendStatusCB *status_cb);
+ BlockDriverAmendStatusCB *status_cb, void *cb_opaque);
/* external snapshots */
bool bdrv_recurse_is_first_non_filter(BlockDriverState *bs,
diff --git a/include/block/block_int.h b/include/block/block_int.h
index b661b43..6abbea4 100644
--- a/include/block/block_int.h
+++ b/include/block/block_int.h
@@ -237,7 +237,8 @@ struct BlockDriver {
BdrvCheckMode fix);
int (*bdrv_amend_options)(BlockDriverState *bs, QemuOpts *opts,
- BlockDriverAmendStatusCB *status_cb);
+ BlockDriverAmendStatusCB *status_cb,
+ void *cb_opaque);
void (*bdrv_debug_event)(BlockDriverState *bs, BlkDebugEvent event);
diff --git a/qemu-img.c b/qemu-img.c
index e148af8..c9daf9a 100644
--- a/qemu-img.c
+++ b/qemu-img.c
@@ -2883,7 +2883,8 @@ out:
}
static void amend_status_cb(BlockDriverState *bs,
- int64_t offset, int64_t total_work_size)
+ int64_t offset, int64_t total_work_size,
+ void *opaque)
{
qemu_progress_print(100.f * offset / total_work_size, 0);
}
@@ -3003,7 +3004,7 @@ static int img_amend(int argc, char **argv)
/* In case the driver does not call amend_status_cb() */
qemu_progress_print(0.f, 0);
- ret = bdrv_amend_options(bs, opts, &amend_status_cb);
+ ret = bdrv_amend_options(bs, opts, &amend_status_cb, NULL);
qemu_progress_print(100.f, 0);
if (ret < 0) {
error_report("Error while amending options: %s", strerror(-ret));
--
2.1.0
- [Qemu-devel] [PATCH v7 12/25] qcow2: Use symbolic macros in qcow2_amend_options, (continued)
- [Qemu-devel] [PATCH v7 12/25] qcow2: Use symbolic macros in qcow2_amend_options, Max Reitz, 2015/02/18
- [Qemu-devel] [PATCH v7 13/25] iotests: Prepare for refcount_bits option, Max Reitz, 2015/02/18
- [Qemu-devel] [PATCH v7 15/25] iotests: Add test for different refcount widths, Max Reitz, 2015/02/18
- [Qemu-devel] [PATCH v7 16/25] progress: Allow regressing progress, Max Reitz, 2015/02/18
- [Qemu-devel] [PATCH v7 18/25] qcow2: Use error_report() in qcow2_amend_options(), Max Reitz, 2015/02/18
- [Qemu-devel] [PATCH v7 14/25] qcow2: Allow creation with refcount order != 4, Max Reitz, 2015/02/18
- [Qemu-devel] [PATCH v7 21/25] qcow2: Use intermediate helper CB for amend, Max Reitz, 2015/02/18
- [Qemu-devel] [PATCH v7 19/25] qcow2: Use abort() instead of assert(false), Max Reitz, 2015/02/18
- [Qemu-devel] [PATCH v7 17/25] block: Add opaque value to the amend CB,
Max Reitz <=
- [Qemu-devel] [PATCH v7 20/25] qcow2: Split upgrade/downgrade paths for amend, Max Reitz, 2015/02/18
- [Qemu-devel] [PATCH v7 22/25] qcow2: Add function for refcount order amendment, Max Reitz, 2015/02/18
- [Qemu-devel] [PATCH v7 23/25] qcow2: Invoke refcount order amendment function, Max Reitz, 2015/02/18
- [Qemu-devel] [PATCH v7 24/25] qcow2: Point to amend function in check, Max Reitz, 2015/02/18
- [Qemu-devel] [PATCH v7 25/25] iotests: Extend test 112 for qemu-img amend, Max Reitz, 2015/02/18