qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Max Reitz <mreitz@redhat.com>
To: qemu-devel@nongnu.org
Cc: Kevin Wolf <kwolf@redhat.com>,
	Stefan Hajnoczi <stefanha@redhat.com>,
	Max Reitz <mreitz@redhat.com>
Subject: [Qemu-devel] [PATCH v6 16/24] block: Add opaque value to the amend CB
Date: Tue, 10 Feb 2015 15:28:58 -0500	[thread overview]
Message-ID: <1423600146-7642-17-git-send-email-mreitz@redhat.com> (raw)
In-Reply-To: <1423600146-7642-1-git-send-email-mreitz@redhat.com>

Add an opaque value which is to be passed to the bdrv_amend_options()
status callback.

Signed-off-by: Max Reitz <mreitz@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
---
 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 99f6604..8c3b707 100644
--- a/block/qcow2.c
+++ b/block/qcow2.c
@@ -2603,7 +2603,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;
@@ -2652,7 +2652,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;
     }
@@ -2667,7 +2667,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;
@@ -2749,7 +2750,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 6d94b59..679192a 100644
--- a/block/qcow2.h
+++ b/block/qcow2.h
@@ -557,7 +557,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 8f17136..48785fb 100644
--- a/include/block/block_int.h
+++ b/include/block/block_int.h
@@ -236,7 +236,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

  parent reply	other threads:[~2015-02-10 20:29 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-02-10 20:28 [Qemu-devel] [PATCH v6 00/24] qcow2: Support refcount orders != 4 Max Reitz
2015-02-10 20:28 ` [Qemu-devel] [PATCH v6 01/24] qcow2: Add two new fields to BDRVQcowState Max Reitz
2015-02-11 13:51   ` Eric Blake
2015-02-10 20:28 ` [Qemu-devel] [PATCH v6 02/24] qcow2: Add refcount_bits to format-specific info Max Reitz
2015-02-10 20:28 ` [Qemu-devel] [PATCH v6 03/24] qcow2: Do not return new value after refcount update Max Reitz
2015-02-10 20:28 ` [Qemu-devel] [PATCH v6 04/24] qcow2: Only return status from qcow2_get_refcount Max Reitz
2015-02-11 15:47   ` Eric Blake
2015-02-17 10:19   ` Kevin Wolf
2015-02-17 16:56     ` Eric Blake
2015-02-10 20:28 ` [Qemu-devel] [PATCH v6 05/24] qcow2: Use unsigned addend for update_refcount() Max Reitz
2015-02-11 16:41   ` Eric Blake
2015-02-10 20:28 ` [Qemu-devel] [PATCH v6 06/24] qcow2: Use 64 bits for refcount values Max Reitz
2015-02-11 17:01   ` Eric Blake
2015-02-10 20:28 ` [Qemu-devel] [PATCH v6 07/24] qcow2: Helper for refcount array reallocation Max Reitz
2015-02-11 18:19   ` Eric Blake
2015-02-10 20:28 ` [Qemu-devel] [PATCH v6 08/24] qcow2: Helper function for refcount modification Max Reitz
2015-02-11 18:38   ` Eric Blake
2015-02-10 20:28 ` [Qemu-devel] [PATCH v6 09/24] qcow2: More helpers " Max Reitz
2015-02-17 13:38   ` Kevin Wolf
2015-02-17 13:54     ` Max Reitz
2015-02-10 20:28 ` [Qemu-devel] [PATCH v6 10/24] qcow2: Open images with refcount order != 4 Max Reitz
2015-02-10 20:28 ` [Qemu-devel] [PATCH v6 11/24] qcow2: refcount_order parameter for qcow2_create2 Max Reitz
2015-02-18 11:05   ` Kevin Wolf
2015-02-10 20:28 ` [Qemu-devel] [PATCH v6 12/24] qcow2: Use symbolic macros in qcow2_amend_options Max Reitz
2015-02-10 20:28 ` [Qemu-devel] [PATCH v6 13/24] iotests: Prepare for refcount_bits option Max Reitz
2015-02-10 20:28 ` [Qemu-devel] [PATCH v6 14/24] qcow2: Allow creation with refcount order != 4 Max Reitz
2015-02-18 11:01   ` Kevin Wolf
2015-02-10 20:28 ` [Qemu-devel] [PATCH v6 15/24] progress: Allow regressing progress Max Reitz
2015-02-10 20:28 ` Max Reitz [this message]
2015-02-10 20:28 ` [Qemu-devel] [PATCH v6 17/24] qcow2: Use error_report() in qcow2_amend_options() Max Reitz
2015-02-10 20:29 ` [Qemu-devel] [PATCH v6 18/24] qcow2: Use abort() instead of assert(false) Max Reitz
2015-02-10 20:29 ` [Qemu-devel] [PATCH v6 19/24] qcow2: Split upgrade/downgrade paths for amend Max Reitz
2015-02-10 20:29 ` [Qemu-devel] [PATCH v6 20/24] qcow2: Use intermediate helper CB " Max Reitz
2015-02-10 20:29 ` [Qemu-devel] [PATCH v6 21/24] qcow2: Add function for refcount order amendment Max Reitz
2015-02-10 20:29 ` [Qemu-devel] [PATCH v6 22/24] qcow2: Invoke refcount order amendment function Max Reitz
2015-02-10 20:29 ` [Qemu-devel] [PATCH v6 23/24] qcow2: Point to amend function in check Max Reitz
2015-02-10 20:29 ` [Qemu-devel] [PATCH v6 24/24] iotests: Add test for different refcount widths Max Reitz
2015-02-18 11:04   ` Kevin Wolf
2015-02-17 11:00 ` [Qemu-devel] [PATCH v6 00/24] qcow2: Support refcount orders != 4 Kevin Wolf

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=1423600146-7642-17-git-send-email-mreitz@redhat.com \
    --to=mreitz@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).