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>
This commit is contained in:
Zhengui 2020-10-20 14:47:43 +00:00 committed by Kevin Wolf
parent d55450df99
commit a0441b66e8
3 changed files with 14 additions and 5 deletions

View File

@ -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

View File

@ -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,

View File

@ -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);