[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v3 4/5] block-stream: add compress option
From: |
Andrey Shinkevich |
Subject: |
[PATCH v3 4/5] block-stream: add compress option |
Date: |
Tue, 15 Oct 2019 21:20:24 +0300 |
Allow data compression during block-stream job for backup backing chain.
Signed-off-by: Andrey Shinkevich <address@hidden>
---
block/stream.c | 10 ++++++++--
blockdev.c | 12 +++++++++++-
2 files changed, 19 insertions(+), 3 deletions(-)
diff --git a/block/stream.c b/block/stream.c
index 5562ccb..25f9324 100644
--- a/block/stream.c
+++ b/block/stream.c
@@ -41,10 +41,16 @@ typedef struct StreamBlockJob {
static int coroutine_fn stream_populate(BlockBackend *blk,
int64_t offset, uint64_t bytes)
{
+ BlockDriverState *bs = blk_bs(blk);
+ int flags = BDRV_REQ_COPY_ON_READ | BDRV_REQ_PREFETCH;
+
+ if (bs->all_write_compressed) {
+ flags |= BDRV_REQ_WRITE_COMPRESSED;
+ }
+
assert(bytes < SIZE_MAX);
- return blk_co_preadv(blk, offset, bytes, NULL,
- BDRV_REQ_COPY_ON_READ | BDRV_REQ_PREFETCH);
+ return blk_co_preadv(blk, offset, bytes, NULL, flags);
}
static void stream_abort(Job *job)
diff --git a/blockdev.c b/blockdev.c
index 2103730..fd824da 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -471,7 +471,7 @@ static BlockBackend *blockdev_init(const char *file, QDict
*bs_opts,
int bdrv_flags = 0;
int on_read_error, on_write_error;
bool account_invalid, account_failed;
- bool writethrough, read_only;
+ bool writethrough, read_only, compress;
BlockBackend *blk;
BlockDriverState *bs;
ThrottleConfig cfg;
@@ -570,6 +570,7 @@ static BlockBackend *blockdev_init(const char *file, QDict
*bs_opts,
}
read_only = qemu_opt_get_bool(opts, BDRV_OPT_READ_ONLY, false);
+ compress = qemu_opt_get_bool(opts, BDRV_OPT_COMPRESS, false);
/* init */
if ((!file || !*file) && !qdict_size(bs_opts)) {
@@ -595,6 +596,8 @@ static BlockBackend *blockdev_init(const char *file, QDict
*bs_opts,
qdict_set_default_str(bs_opts, BDRV_OPT_READ_ONLY,
read_only ? "on" : "off");
qdict_set_default_str(bs_opts, BDRV_OPT_AUTO_READ_ONLY, "on");
+ qdict_set_default_str(bs_opts, BDRV_OPT_COMPRESS,
+ compress ? "on" : "off");
assert((bdrv_flags & BDRV_O_CACHE_MASK) == 0);
if (runstate_check(RUN_STATE_INMIGRATE)) {
@@ -3308,6 +3311,13 @@ void qmp_block_stream(bool has_job_id, const char
*job_id, const char *device,
goto out;
}
+ if (bs->all_write_compressed &&
+ bs->drv->bdrv_co_pwritev_compressed_part == NULL) {
+ error_setg(errp, "Compression is not supported for this drive %s",
+ bdrv_get_device_name(bs));
+ goto out;
+ }
+
/* backing_file string overrides base bs filename */
base_name = has_backing_file ? backing_file : base_name;
--
1.8.3.1
- [PATCH v3 0/5] qcow2: advanced compression options, Andrey Shinkevich, 2019/10/15
- [PATCH v3 4/5] block-stream: add compress option,
Andrey Shinkevich <=
- [PATCH v3 2/5] tests/qemu-iotests: add case to write compressed data of multiple clusters, Andrey Shinkevich, 2019/10/15
- [PATCH v3 3/5] block: support compressed write for copy-on-read, Andrey Shinkevich, 2019/10/15
- [PATCH v3 5/5] tests/qemu-iotests: add case for block-stream compress, Andrey Shinkevich, 2019/10/15
- [PATCH v3 1/5] qcow2: Allow writing compressed data of multiple clusters, Andrey Shinkevich, 2019/10/15
- Re: [PATCH v3 0/5] qcow2: advanced compression options, no-reply, 2019/10/16
- Re: [PATCH v3 0/5] qcow2: advanced compression options, no-reply, 2019/10/16
- Re: [PATCH v3 0/5] qcow2: advanced compression options, no-reply, 2019/10/16
- Re: [PATCH v3 0/5] qcow2: advanced compression options, no-reply, 2019/10/16