From nobody Tue Feb 10 07:22:22 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=virtuozzo.com ARC-Seal: i=1; a=rsa-sha256; t=1571163787; cv=none; d=zoho.com; s=zohoarc; b=fQS+FGRYk5VmOTuOEyj4tadgAvti51wu8F1zAZ1ft9b3KlcX4/nr/8JNBbxrzz3Cyr653yVEVVJ/Ewa/iHlQZipVJNeW1qjyca2YNrRbrOwar9+gkAL1cENFIo9LfvRxJYzP2/tH5FNu2RbBop+46KZscCNXt/AhWIRQF2yj84s= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1571163787; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=f7TfuVds+Iu+0ntTO7p5c1/ivZG5D+xvhRdyH+LYj2Y=; b=hhpK/NU/TGHj7c5vX4FzSK/5XwBJbmStXzOTvNs+tCPgrwOqEJxm8m5c9IQ68gqEBNvtMr9dltwghwZdnfi3XAsvyS3o9ikq49e1vb4BHk1n3v2kmL9gUJep08LZj6kjAeaash2RTBLO18dIkFifZpXFRbftc74pjibj/+nsGLY= ARC-Authentication-Results: i=1; mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1571163787289935.0296102105078; Tue, 15 Oct 2019 11:23:07 -0700 (PDT) Received: from localhost ([::1]:56020 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iKRTN-00088i-Qz for importer@patchew.org; Tue, 15 Oct 2019 14:23:05 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59671) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iKRR6-0005oM-6G for qemu-devel@nongnu.org; Tue, 15 Oct 2019 14:20:45 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iKRR4-0001Su-T0 for qemu-devel@nongnu.org; Tue, 15 Oct 2019 14:20:43 -0400 Received: from relay.sw.ru ([185.231.240.75]:35020) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iKRR4-0001RH-LQ; Tue, 15 Oct 2019 14:20:42 -0400 Received: from [172.16.25.136] (helo=dhcp-172-16-25-136.sw.ru) by relay.sw.ru with esmtp (Exim 4.92.2) (envelope-from ) id 1iKRQz-0003ry-6u; Tue, 15 Oct 2019 21:20:37 +0300 From: Andrey Shinkevich To: qemu-devel@nongnu.org, qemu-block@nongnu.org Subject: [PATCH v3 4/5] block-stream: add compress option Date: Tue, 15 Oct 2019 21:20:24 +0300 Message-Id: <1571163625-642312-5-git-send-email-andrey.shinkevich@virtuozzo.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1571163625-642312-1-git-send-email-andrey.shinkevich@virtuozzo.com> References: <1571163625-642312-1-git-send-email-andrey.shinkevich@virtuozzo.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 185.231.240.75 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: kwolf@redhat.com, fam@euphon.net, vsementsov@virtuozzo.com, armbru@redhat.com, mreitz@redhat.com, stefanha@redhat.com, andrey.shinkevich@virtuozzo.com, den@openvz.org, jsnow@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Allow data compression during block-stream job for backup backing chain. Signed-off-by: Andrey Shinkevich --- 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 =3D blk_bs(blk); + int flags =3D BDRV_REQ_COPY_ON_READ | BDRV_REQ_PREFETCH; + + if (bs->all_write_compressed) { + flags |=3D BDRV_REQ_WRITE_COMPRESSED; + } + assert(bytes < SIZE_MAX); =20 - 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); } =20 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, QD= ict *bs_opts, int bdrv_flags =3D 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, QD= ict *bs_opts, } =20 read_only =3D qemu_opt_get_bool(opts, BDRV_OPT_READ_ONLY, false); + compress =3D qemu_opt_get_bool(opts, BDRV_OPT_COMPRESS, false); =20 /* init */ if ((!file || !*file) && !qdict_size(bs_opts)) { @@ -595,6 +596,8 @@ static BlockBackend *blockdev_init(const char *file, QD= ict *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) =3D=3D 0); =20 if (runstate_check(RUN_STATE_INMIGRATE)) { @@ -3308,6 +3311,13 @@ void qmp_block_stream(bool has_job_id, const char *j= ob_id, const char *device, goto out; } =20 + if (bs->all_write_compressed && + bs->drv->bdrv_co_pwritev_compressed_part =3D=3D 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 =3D has_backing_file ? backing_file : base_name; =20 --=20 1.8.3.1