qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v2 4/6] qemu-img: Enable progress output for com


From: Max Reitz
Subject: Re: [Qemu-devel] [PATCH v2 4/6] qemu-img: Enable progress output for commit
Date: Thu, 10 Apr 2014 16:37:20 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.4.0

On 08.04.2014 17:34, Kevin Wolf wrote:
Am 08.04.2014 um 14:50 hat Max Reitz geschrieben:
Implement progress output for the commit command by querying the
progress of the block job.

Signed-off-by: Max Reitz <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
---
  qemu-img-cmds.hx |  4 ++--
  qemu-img.c       | 33 +++++++++++++++++++++++++++++++--
  qemu-img.texi    |  2 +-
  3 files changed, 34 insertions(+), 5 deletions(-)

diff --git a/qemu-img-cmds.hx b/qemu-img-cmds.hx
index d029609..8bc55cd 100644
--- a/qemu-img-cmds.hx
+++ b/qemu-img-cmds.hx
@@ -22,9 +22,9 @@ STEXI
  ETEXI
DEF("commit", img_commit,
-    "commit [-q] [-f fmt] [-t cache] filename")
+    "commit [-q] [-f fmt] [-t cache] [-p] filename")
  STEXI
address@hidden commit [-q] [-f @var{fmt}] [-t @var{cache}] @var{filename}
address@hidden commit [-q] [-f @var{fmt}] [-t @var{cache}] [-p] @var{filename}
  ETEXI
DEF("compare", img_compare,
diff --git a/qemu-img.c b/qemu-img.c
index e86911f..0a9eff7 100644
--- a/qemu-img.c
+++ b/qemu-img.c
@@ -690,12 +690,27 @@ static void dummy_block_job_cb(void *opaque, int ret)
  static void run_block_job(BlockJob *job, Error **errp)
  {
      BlockJobInfo *info;
+    uint64_t mod_offset = 0;
do {
          aio_poll(qemu_get_aio_context(), true);
info = block_job_query(job); + if (info->offset) {
+            if (!mod_offset) {
On a fully populated image this doesn't look entirely right. I think the
first 2 MB (or whatever the buffer size is) will be disregarded in the
calculation, even though they are real work that is done.

Hm, right. I'll see how I get it included into this supposedly common function.

Max

+                /* Some block jobs (at least "commit") will only work on a
+                 * subset of the image file and therefore basically skip many
+                 * sectors at the start (processing them apparently
+                 * instantaneously). These sectors should be ignored when
+                 * calculating the progress. */
+                mod_offset = info->offset;
+            }
+
+            qemu_progress_print((float)(info->offset - mod_offset) /
+                                (info->len - mod_offset) * 100.f, 0);
+        }
+
          if (!info->busy && info->offset < info->len) {
              block_job_resume(job);
          }
Kevin




reply via email to

[Prev in Thread] Current Thread [Next in Thread]