2
0
Эх сурвалжийг харах

qemu-img: add support for rate limit in qemu-img commit

add support for rate limit in qemu-img commit.

Signed-off-by: Zhengui <lizhengui@huawei.com>
Message-Id: <1603205264-17424-2-git-send-email-lizhengui@huawei.com>
Reviewed-by: Alberto Garcia <berto@igalia.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Zhengui 4 жил өмнө
parent
commit
a0441b66e8

+ 3 - 1
docs/tools/qemu-img.rst

@@ -349,7 +349,7 @@ Command description:
   state after (the attempt at) repairing it. That is, a successful ``-r all``
   state after (the attempt at) repairing it. That is, a successful ``-r all``
   will yield the exit code 0, independently of the image state before.
   will yield the exit code 0, independently of the image state before.
 
 
-.. option:: commit [--object OBJECTDEF] [--image-opts] [-q] [-f FMT] [-t CACHE] [-b BASE] [-d] [-p] FILENAME
+.. option:: commit [--object OBJECTDEF] [--image-opts] [-q] [-f FMT] [-t CACHE] [-b BASE] [-r RATE_LIMIT] [-d] [-p] FILENAME
 
 
   Commit the changes recorded in *FILENAME* in its base image or backing file.
   Commit the changes recorded in *FILENAME* in its base image or backing file.
   If the backing file is smaller than the snapshot, then the backing file will be
   If the backing file is smaller than the snapshot, then the backing file will be
@@ -371,6 +371,8 @@ Command description:
   garbage data when read. For this reason, ``-b`` implies ``-d`` (so that
   garbage data when read. For this reason, ``-b`` implies ``-d`` (so that
   the top image stays valid).
   the top image stays valid).
 
 
+  The rate limit for the commit process is specified by ``-r``.
+
 .. option:: compare [--object OBJECTDEF] [--image-opts] [-f FMT] [-F FMT] [-T SRC_CACHE] [-p] [-q] [-s] [-U] FILENAME1 FILENAME2
 .. option:: compare [--object OBJECTDEF] [--image-opts] [-f FMT] [-F FMT] [-T SRC_CACHE] [-p] [-q] [-s] [-U] FILENAME1 FILENAME2
 
 
   Check if two images have the same content. You can compare images with
   Check if two images have the same content. You can compare images with

+ 2 - 2
qemu-img-cmds.hx

@@ -34,9 +34,9 @@ SRST
 ERST
 ERST
 
 
 DEF("commit", img_commit,
 DEF("commit", img_commit,
-    "commit [--object objectdef] [--image-opts] [-q] [-f fmt] [-t cache] [-b base] [-d] [-p] filename")
+    "commit [--object objectdef] [--image-opts] [-q] [-f fmt] [-t cache] [-b base] [-r rate_limit] [-d] [-p] filename")
 SRST
 SRST
-.. option:: commit [--object OBJECTDEF] [--image-opts] [-q] [-f FMT] [-t CACHE] [-b BASE] [-d] [-p] FILENAME
+.. option:: commit [--object OBJECTDEF] [--image-opts] [-q] [-f FMT] [-t CACHE] [-b BASE] [-r RATE_LIMIT] [-d] [-p] FILENAME
 ERST
 ERST
 
 
 DEF("compare", img_compare,
 DEF("compare", img_compare,

+ 9 - 2
qemu-img.c

@@ -980,6 +980,7 @@ static int img_commit(int argc, char **argv)
     CommonBlockJobCBInfo cbi;
     CommonBlockJobCBInfo cbi;
     bool image_opts = false;
     bool image_opts = false;
     AioContext *aio_context;
     AioContext *aio_context;
+    int64_t rate_limit = 0;
 
 
     fmt = NULL;
     fmt = NULL;
     cache = BDRV_DEFAULT_CACHE;
     cache = BDRV_DEFAULT_CACHE;
@@ -991,7 +992,7 @@ static int img_commit(int argc, char **argv)
             {"image-opts", no_argument, 0, OPTION_IMAGE_OPTS},
             {"image-opts", no_argument, 0, OPTION_IMAGE_OPTS},
             {0, 0, 0, 0}
             {0, 0, 0, 0}
         };
         };
-        c = getopt_long(argc, argv, ":f:ht:b:dpq",
+        c = getopt_long(argc, argv, ":f:ht:b:dpqr:",
                         long_options, NULL);
                         long_options, NULL);
         if (c == -1) {
         if (c == -1) {
             break;
             break;
@@ -1026,6 +1027,12 @@ static int img_commit(int argc, char **argv)
         case 'q':
         case 'q':
             quiet = true;
             quiet = true;
             break;
             break;
+        case 'r':
+            rate_limit = cvtnum("rate limit", optarg);
+            if (rate_limit < 0) {
+                return 1;
+            }
+            break;
         case OPTION_OBJECT: {
         case OPTION_OBJECT: {
             QemuOpts *opts;
             QemuOpts *opts;
             opts = qemu_opts_parse_noisily(&qemu_object_opts,
             opts = qemu_opts_parse_noisily(&qemu_object_opts,
@@ -1099,7 +1106,7 @@ static int img_commit(int argc, char **argv)
 
 
     aio_context = bdrv_get_aio_context(bs);
     aio_context = bdrv_get_aio_context(bs);
     aio_context_acquire(aio_context);
     aio_context_acquire(aio_context);
-    commit_active_start("commit", bs, base_bs, JOB_DEFAULT, 0,
+    commit_active_start("commit", bs, base_bs, JOB_DEFAULT, rate_limit,
                         BLOCKDEV_ON_ERROR_REPORT, NULL, common_block_job_cb,
                         BLOCKDEV_ON_ERROR_REPORT, NULL, common_block_job_cb,
                         &cbi, false, &local_err);
                         &cbi, false, &local_err);
     aio_context_release(aio_context);
     aio_context_release(aio_context);