From nobody Fri May 3 00:06:03 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=temperror (zoho.com: Error in retrieving data from DNS) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (208.118.235.17 [208.118.235.17]) by mx.zohomail.com with SMTPS id 1510852442273266.0490411237587; Thu, 16 Nov 2017 09:14:02 -0800 (PST) Received: from localhost ([::1]:41819 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eFNTN-0002OA-GU for importer@patchew.org; Thu, 16 Nov 2017 11:57:05 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:40183) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eFNRm-0001R6-4z for qemu-devel@nongnu.org; Thu, 16 Nov 2017 11:55:27 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eFNRi-0007Ob-KE for qemu-devel@nongnu.org; Thu, 16 Nov 2017 11:55:25 -0500 Received: from mail-he1eur01on0120.outbound.protection.outlook.com ([104.47.0.120]:43088 helo=EUR01-HE1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1eFNRi-0007Fo-1z; Thu, 16 Nov 2017 11:55:22 -0500 Received: from xantnef-ws.sw.ru (195.214.232.6) by DB6PR0801MB1992.eurprd08.prod.outlook.com (2603:10a6:4:76::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.239.5; Thu, 16 Nov 2017 16:55:16 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=RPxr/th3PVLkqye9KPeFeSApsdSLDDHupBr0cyEDcDY=; b=Upt6/jhUaDr7hn/JkX/zeqQwf1nSIPb7kz0MFz+VCxDfdvFqrTRBL2PO3RZXshCyqOTc3/HfpAojkcI0dRxaHr8MuaI+fhSC8aDluyPSjRLDWxE0y5nhB60GOJalEJ64Io01H1LugjM8JIn29i/UaQyhD7jOAWZvuwz+6sGPLrs= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=anton.nefedov@virtuozzo.com; From: Anton Nefedov To: qemu-devel@nongnu.org Date: Thu, 16 Nov 2017 19:54:55 +0300 Message-Id: <1510851298-59922-2-git-send-email-anton.nefedov@virtuozzo.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1510851298-59922-1-git-send-email-anton.nefedov@virtuozzo.com> References: <1510851298-59922-1-git-send-email-anton.nefedov@virtuozzo.com> MIME-Version: 1.0 X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: DB3PR0202CA0008.eurprd02.prod.outlook.com (2603:10a6:8:1::21) To DB6PR0801MB1992.eurprd08.prod.outlook.com (2603:10a6:4:76::9) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: e71ce6ed-d01e-454b-6b4a-08d52d12d091 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(4534020)(4602075)(7168017)(4627115)(201703031133081)(201702281549075)(2017052603258); SRVR:DB6PR0801MB1992; X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1992; 3:JQZwHWh+8b3Y2iTdRIHqHGVwG5YsSFTrawQ9bWeWrinQrBWnIbRwES9DsuzI2oDH1ZLzARWV0uS6qV87hYld6MSSiQkPpZX8jjP4k+SUoNnjvoTGKYLxNLUgCCC6n/IKx1rOoQeAz+itBXh5Gr97yiJ1SBZOYhgNWV7mJcHD2MtUApc2odK68kBvq1kNLFFxT1T2DLdXTmxH8Emg+GKa2v4WQIUXw+dQjca64PRxl1jbLd2STU+oXsE3dw+Gf3vI; 25:0ZCvmezSraYMrSCbC0WwUlz2komn+ULE9iefu/Haz8q3lgRdQLPKKNktLHWe4G51oHL/3q1waMexeUH5WhmCUsw+7StPc5xKWxrKaymNRq8q9SH1SZM9v6LrCRp9BzBLKjWlN792To5o1J39MVBsXyPgsY9Y4moDiZORFUfKZitBsXooDZmdYpCvRQkL2mwPLP2LVMP2tR53iyxUWq26LfqJpoBpgxOgvcamEd4IRX+NnCxI2Wd3QNUdPcSKBBpAWzzekv0YETkSnMCYFWhCrMKEBNbNWSHdTc92slpw2eNkq2uMjCATEcJvfB8YZxKKuoccd+uJM+84WfIWdWE4FA==; 31:9nN8yt1PuhCTmW2PsRuNdV3nqd8p4UV+8gYzyhOgywzgRTLkkXY/pfKeRJ5MmzzJTkem/OGkggb+TOpQLyoB6keS0gdR6Ki8aafYH0mhPQAyNTygExAIbI2xFjBThGwkx/FhXN89cegKpKUN8blldYL2NF79rP88eMpZ5HSWN7coxLg7fn+Lfx6Wk7j8kqSDSScmGZfcEkUYqXYsKQxWUvA1fdp8AWYe9nbVufnvBR4= X-MS-TrafficTypeDiagnostic: DB6PR0801MB1992: X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1992; 20:MXnE0WboXVjQJwzhs9wO/AvhQikHUC6i6Cmd9S45jIH5mwJ+Un2/X0Dag7/MfPtZaztNbFK46UO1nCwylsloCm3osI3f/8Q1GFqzhLjSqdAR0ozrOXMJbrnqdZQQbpCgR39wcIg0mGGeJ86ScRs4rW4eQxynFczAc3Ji/2A0br62uS2vciVlF2sDILn+qyh244Fd7lRvG248uGQ1JkRJcX0D+eskybgNXE9yI/Qu+R9bGOudhvMVPpv6c62MxUstPYEb9TtqmP4eq3bmsbxj+31hHWeB7G03ZIcZvQ2IPd+f++GgSqkePsh4U6OGoI0jHVYFslvpmIzzyxn03K+u8iXGtZr6S8rBuKZj4nst64lJaYhkHMFkg2SzJXgQ+jTtU+WzZTvPIrs/lWTeSzHuH1NAayzqBBa17J4dDS0cwu0=; 4:YS2mL1XzHx8opZ9XDnKTQUEm8/lTqDWSZxhfE9NKXgRYEn4wvg8zBRq9RTlsLnV2QNK7McYolVnJ/s+3BG0UCuSkPeUsiNkdO+/ffdEA8hhvuGhD2h4tksX1QaUsZjjIIl3rueVf0mltRkzYH6GxPt9ymLgfk7dyvUYjCPEcBZIot4Ol2HqKlYnwwrP0/gIEI4eVFN+AYI05lGKagdM7NwMZ3L5zg0qPtx6tQ8/QYYN4KtkCtL/OMTOf/BOELKcogst2F5syDQXE1BM7/cQrkw== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(8121501046)(5005006)(3002001)(10201501046)(3231022)(100000703101)(100105400095)(93006095)(93001095)(6041248)(20161123562025)(20161123560025)(20161123564025)(20161123555025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123558100)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:DB6PR0801MB1992; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:DB6PR0801MB1992; X-Forefront-PRVS: 0493852DA9 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(6009001)(376002)(346002)(189002)(199003)(189998001)(69596002)(54906003)(97736004)(2950100002)(6916009)(6666003)(47776003)(50466002)(66066001)(3846002)(48376002)(5660300001)(316002)(6116002)(16586007)(86362001)(5003940100001)(16526018)(33646002)(6512007)(478600001)(2361001)(106356001)(53936002)(105586002)(2351001)(36756003)(7736002)(76176999)(50986999)(107886003)(305945005)(50226002)(68736007)(53416004)(8676002)(81156014)(81166006)(25786009)(4326008)(8936002)(6506006)(101416001)(6486002)(2906002)(21314002); DIR:OUT; SFP:1102; SCL:1; SRVR:DB6PR0801MB1992; H:xantnef-ws.sw.ru; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: temperror (zoho.com: Error in retrieving data from DNS) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: None (protection.outlook.com: virtuozzo.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DB6PR0801MB1992; 23:X5F3PYeLy4MOd2V/HQyTFxf3eY3dmMJ9Ud3P0cr?= =?us-ascii?Q?Q3qFDQ1UH9/RFj/zROEXkxKkuSnaGeC7Xu9Ix6DIkugPqTqnmUWe6kyvQtDr?= =?us-ascii?Q?Ve8BMnjH9N6ms160PW3qmO02OvT9nl8w3OTTwzPbYQ7znhaulCAlPLwp66cN?= =?us-ascii?Q?27OI+1+GriqdfpuEStGxFqWhCT19J4otk5cuA1f1RZ5vgFk//8KCWgqZKTv3?= =?us-ascii?Q?Va6KB6F11JJ/16T8oeQuX3abYDHR9YOqv07j4bPVSiCtpHlnur+vUvLxVwGa?= =?us-ascii?Q?qtc+CIJpyOYerVOr+gmLMTQTP2Z1D7hzDb0AguPFpb/Zr1qpED/VHXbpMDj0?= =?us-ascii?Q?l5mOj4SrpM6W1nVanPqRRAOSKB3YUFvSQ+TDoM/fbgQ2Q/dOCtHCwrwHlFq7?= =?us-ascii?Q?xl9K1XoMeJW3SGfE+aXEivofBc8eDRm1AS8KjJr/ngu883IuZ7jlQaPETH98?= =?us-ascii?Q?LB/tWFhSMPSOYVbZXhy9C0xHH6aNT/SWAFvNhvib1JmPGp14+++7hRBSIiJX?= =?us-ascii?Q?toT5upaq3fUP3VMFX3mJUk3GxKjRcjBLJycE6LFXvE9eNooN9pxhmzcjHS3N?= =?us-ascii?Q?tfXSsh3iJUp6UQZRM9BvAdqEcN4bN3XNC+5zBrjA7hNQgYWy/c4jaXk3BL9y?= =?us-ascii?Q?Vl9d19iIbXRrfD60ldKk80fYIewSvnsHklMs1fEPQtvggYpJlx79X9t3yHVW?= =?us-ascii?Q?paZRBDL0YyH9l1J3BJk3vBBSJ6jVPi7KRIanmBugS8pdv0bHG3siZWGBxBsu?= =?us-ascii?Q?qMXnC7HLCCFRObDMfbw+wn3NCNCuXFjVPFmLTWvz6RWqh7+SwOefh26WBJwe?= =?us-ascii?Q?wTs5nVtfSO0MXWC7Z4Q9Axw2LZsiJIRihkne7onZ8Qnyg5lvaUanKQa2Elwj?= =?us-ascii?Q?4MvJ+Bm6HNY65Nlwp3WVMgVIXy4aO45okQvbDXfOHfpQ35a7PXyUAi6gzKuV?= =?us-ascii?Q?0VdjrdX/9FtWeLaIRKQRcoWWFDNx60cZPgfDiY8Lv0cIBrkPTNirrw+FKy37?= =?us-ascii?Q?rngIMa4heb4VU/WUYjljROBze0rk4Cg0rRqz20S87Mgvk8sAH1bp0qWxPQIi?= =?us-ascii?Q?8kP6QgE7YzOQV+dSLms5KeUJvtfrEXSxugAk2cZHPJ5ZXyTY5o+ox/fycW8p?= =?us-ascii?Q?datSIohvQ3wNFKQsW26iY7qjcPwBr4uCwa+MKnBJW6CdVtYBa1QtknunzBc7?= =?us-ascii?Q?MhnydjPItHhNFu1Rc38SaFULnyCHHzAjNwRXT?= X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1992; 6:1Jr/QsEpgPCi3WzGv7kZqRpXTz0XlJf8zv4q5q5z+U5jmHFkdPafBK4jpgpniAZ2MJjo4IxV7uUtwNWC9XsHkLp2/POYdi0o9lCMCYjrPXjq5rdz1UaZ/EIIvs8bA9Vu9PUGlDZLCNOoo89Cq1ANr/u6UoGxxHxZHtqGxKi1QiowlewPHSxLV4KX9nMWgtgxi6QW3HN50Z+OD88+hvReKg7nEkqbAd6KSoGdJTlqE3H7HjXptHfkxxNU+Hspw2APStkG0TiK753VD2EA0paNHVoKFXqOohgflxzBnJ94v7GG3cnE+hn61CUGX7P4FrufceKkzoSrLWuoGVX5l9rvMs8Vha89VxczPjt9v2HxT8o=; 5:sArn/TsOqSAfIT4mPtg9OyW8HVrdl/S9Ho4RCpidXEWxhmxFJsxvs0EsA6z++ozPxlWdw2Bw7ZKDLh/gd+33a86Fhf/92RicWFAOIk8i5Y+Bbed/ONsjMTXINrhCvrfT/83JDgSS6ZcXCP0kLvqM0OQLT/cqyc+jMavMyTRXxnA=; 24:TfXnXoD9f3rffnw0ENkRhLEYhshowZ8dwewYrJ1x6GrtthLIpEHy50IR/ET/aGvO9IcXHz6BzywqhKjma7hxBea6wObTlldFmKYI7O5WdV8=; 7:xMgS2Ou8f6xH9/dT/JYBNoEgCO2yU7Sa+IOhW6xKfK2jETaY1ANgGJZ9yWxlslFnMN5pC9+G7RbWfnZ0BuieD99U1m2UsFgga1g32c/bh3nZburIkaQpJjm5r9kD7HN/N5YfAAf33YoDA+5fk7H/NEvB/Yn3je2h6gWNjTDZtaPaFlWL4z9WYJcJqtfZF9XznHdHt+TC+ZAWM3UTSfgrPW37f1wbihlA8TYtl2NjrnKqO1EHCuo1Q/rQCpFOKm7s SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1992; 20:a56nvuI3fqbMO8h5ALd48vvm2ZJtUuyHLuEuLpDrcHDqLK1bsXzC/QyIQFHx1HJW4EO8nzouVAvVNaP3A/OOISxmRiqHIZPZXf9zTN0NiQLwOt2yAwfsbJ5jHtar/TL4xKUuQvsVXuq7SFNVScEXU6vOvv05hLPcjxg4zlr8nac= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Nov 2017 16:55:16.6364 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: e71ce6ed-d01e-454b-6b4a-08d52d12d091 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0801MB1992 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 104.47.0.120 Subject: [Qemu-devel] [PATCH v2 1/4] qcow2: multiple clusters write compressed X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: kwolf@redhat.com, Anton Nefedov , famz@redhat.com, den@virtuozzo.com, qemu-block@nongnu.org, Pavel Butsykin , mreitz@redhat.com, stefanha@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_6 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Pavel Butsykin At the moment, qcow2_co_pwritev_compressed can process the requests size less than or equal to one cluster. This patch added possibility to write compressed data in the QCOW2 more than one cluster. The implementation is simple, we just split large requests into separate clusters and write using existing functionality. Signed-off-by: Anton Nefedov --- block/qcow2.c | 73 ++++++++++++++++++++++++++++++++++++++++++-------------= ---- 1 file changed, 52 insertions(+), 21 deletions(-) diff --git a/block/qcow2.c b/block/qcow2.c index c276b24..f1e2759 100644 --- a/block/qcow2.c +++ b/block/qcow2.c @@ -3332,11 +3332,9 @@ static int qcow2_truncate(BlockDriverState *bs, int6= 4_t offset, return 0; } =20 -/* XXX: put compressed sectors first, then all the cluster aligned - tables to avoid losing bytes in alignment */ static coroutine_fn int -qcow2_co_pwritev_compressed(BlockDriverState *bs, uint64_t offset, - uint64_t bytes, QEMUIOVector *qiov) +qcow2_co_pwritev_cluster_compressed(BlockDriverState *bs, uint64_t offset, + uint64_t bytes, QEMUIOVector *qiov) { BDRVQcow2State *s =3D bs->opaque; QEMUIOVector hd_qiov; @@ -3346,25 +3344,12 @@ qcow2_co_pwritev_compressed(BlockDriverState *bs, u= int64_t offset, uint8_t *buf, *out_buf; int64_t cluster_offset; =20 - if (bytes =3D=3D 0) { - /* align end of file to a sector boundary to ease reading with - sector based I/Os */ - cluster_offset =3D bdrv_getlength(bs->file->bs); - if (cluster_offset < 0) { - return cluster_offset; - } - return bdrv_truncate(bs->file, cluster_offset, PREALLOC_MODE_OFF, = NULL); - } - - if (offset_into_cluster(s, offset)) { - return -EINVAL; - } + assert(bytes <=3D s->cluster_size); + assert(!offset_into_cluster(s, offset)); =20 buf =3D qemu_blockalign(bs, s->cluster_size); - if (bytes !=3D s->cluster_size) { - if (bytes > s->cluster_size || - offset + bytes !=3D bs->total_sectors << BDRV_SECTOR_BITS) - { + if (bytes < s->cluster_size) { + if (offset + bytes !=3D bs->total_sectors << BDRV_SECTOR_BITS) { qemu_vfree(buf); return -EINVAL; } @@ -3444,6 +3429,52 @@ fail: return ret; } =20 +/* XXX: put compressed sectors first, then all the cluster aligned + tables to avoid losing bytes in alignment */ +static coroutine_fn int +qcow2_co_pwritev_compressed(BlockDriverState *bs, uint64_t offset, + uint64_t bytes, QEMUIOVector *qiov) +{ + BDRVQcow2State *s =3D bs->opaque; + QEMUIOVector hd_qiov; + uint64_t curr_off =3D 0; + int ret; + + if (bytes =3D=3D 0) { + /* align end of file to a sector boundary to ease reading with + sector based I/Os */ + int64_t cluster_offset =3D bdrv_getlength(bs->file->bs); + if (cluster_offset < 0) { + return cluster_offset; + } + return bdrv_truncate(bs->file, cluster_offset, PREALLOC_MODE_OFF, = NULL); + } + + if (offset_into_cluster(s, offset)) { + return -EINVAL; + } + + qemu_iovec_init(&hd_qiov, qiov->niov); + do { + uint32_t chunk_size; + + qemu_iovec_reset(&hd_qiov); + chunk_size =3D MIN(bytes, s->cluster_size); + qemu_iovec_concat(&hd_qiov, qiov, curr_off, chunk_size); + + ret =3D qcow2_co_pwritev_cluster_compressed(bs, offset + curr_off, + chunk_size, &hd_qiov); + if (ret < 0) { + break; + } + curr_off +=3D chunk_size; + bytes -=3D chunk_size; + } while (bytes); + qemu_iovec_destroy(&hd_qiov); + + return ret; +} + static int make_completely_empty(BlockDriverState *bs) { BDRVQcow2State *s =3D bs->opaque; --=20 2.7.4 From nobody Fri May 3 00:06:03 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1510852205860339.1355196407153; Thu, 16 Nov 2017 09:10:05 -0800 (PST) Received: from localhost ([::1]:41833 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eFNVu-00053v-QB for importer@patchew.org; Thu, 16 Nov 2017 11:59:42 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:40181) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eFNRm-0001R4-4b for qemu-devel@nongnu.org; Thu, 16 Nov 2017 11:55:27 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eFNRj-0007QK-Bm for qemu-devel@nongnu.org; Thu, 16 Nov 2017 11:55:25 -0500 Received: from mail-he1eur01on0120.outbound.protection.outlook.com ([104.47.0.120]:43088 helo=EUR01-HE1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1eFNRi-0007Fo-Uj; Thu, 16 Nov 2017 11:55:23 -0500 Received: from xantnef-ws.sw.ru (195.214.232.6) by DB6PR0801MB1992.eurprd08.prod.outlook.com (2603:10a6:4:76::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.239.5; Thu, 16 Nov 2017 16:55:17 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=58TOI4R9GHQ5bOgm6vTvqqdDeh+VFS5JmOL1dICbKtA=; b=PXW+ws7KVo6oDdvOVRG2V7Ctp1DufsDC2OhpVdiCm2eDzzwuQnOrz/38FIx3vB2ykLJ3mptmzV1THm8WQEYFFDf71uYoDPBYTs0TeJ+UmlqBI3gHusXFw3Mz9n/emggfDjguvmXlNCjxYp/mQHUCJKdN3Jes5/O6x3srJuT8eiw= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=anton.nefedov@virtuozzo.com; From: Anton Nefedov To: qemu-devel@nongnu.org Date: Thu, 16 Nov 2017 19:54:56 +0300 Message-Id: <1510851298-59922-3-git-send-email-anton.nefedov@virtuozzo.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1510851298-59922-1-git-send-email-anton.nefedov@virtuozzo.com> References: <1510851298-59922-1-git-send-email-anton.nefedov@virtuozzo.com> MIME-Version: 1.0 X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: DB3PR0202CA0008.eurprd02.prod.outlook.com (2603:10a6:8:1::21) To DB6PR0801MB1992.eurprd08.prod.outlook.com (2603:10a6:4:76::9) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 7663d880-063a-439c-625b-08d52d12d14b X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(4534020)(4602075)(7168017)(4627115)(201703031133081)(201702281549075)(2017052603258); SRVR:DB6PR0801MB1992; X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1992; 3:lb2L1mJwLNNUMtZxTUcZF+91gl9QrJS4eijieYsHz+fMuczbEDRiWxhd6aMDnbX0brZNKwdHqIjM/ZBOxs4hxDbxnc7wnFgDCbU5bQup8snjSsfJun6ApiDYADcIRGC536jbuKb3EX3/MKq9LneeZC/YwRr+7DDEbDWZelyCrYvym7YsVtdhZQ+pvpZLdYrHAAobWUwxybfxosyMMnA7D6Ey5i33sVOeGZ1Jl+uPheqv2CUjXaPF51IyaVvrdlPw; 25:DV42jYLqJjTk8VOOxAQ28WrIykq/VgVpi/lDovkgobO+H7FUV7TwEGgTj46FCxf4N2wz1wgn5TRZ0QeVOvHrpkl5i2aUmSW5dQlBI8CfxOKSal3mhC05ljYmJMQJ+sLsPLZ0404dQ1txVp98VR9ow4sC1P7Bxmoe+SWg7pJV0aVWw5MfaKOaf0e8hvts6/bw3ajoN4Ivfd1HMUX/c5MedU9LiwBkbukvX6DS2KKCQUHQIYSexa8IQB1XO02naQszBAyxh5rypcH11AcOnob3N0IljCRIlAsDtZ6V/dqiu/gGFKlBWRXQFshfKWAunE/DpMIL+6EurLsa3MSyqPE9PQ==; 31:S7EPl3hNBeJ2HPKVWYDKsBbhoKEYImN3H28xGlKpMp7iUmru6RubX+gf0thDQN+o4/Go28kR564k24Y223ESr15KpwIw0sZ1M3VHss674M0FRUMhw9BZ6YHGkoSiFryMcSoAyuzPgjxUOpA349dI+RINq+JeBUFkhJj7xJGHpvmaPiZ+mNSvVU+COoiMpM8UgZtLNEYtBTef5RIwSh/fjWrnxTzON7jHj+n/J6QqKSs= X-MS-TrafficTypeDiagnostic: DB6PR0801MB1992: X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1992; 20:Luq2o9K+zxICjqyMom83MrZyD8SHjExHvZzuSvbtRIf8FDItptx1ejZx3l4b/gFqU+eVBUoqfP5Fg1LuorIYWIbT5l/dN9O8CeZcjycIFDFtOEJLX5tSlr7JDOUYxlcKU8zuw/3zst5mk37sQQ8CCwiEclYGIWr1oPuc51G86TZl8YOjjs/odEwgq31qUlXRfZot/BfGkMgtT2GGeeitjESUSgWdQUk0FyVjCgLTsklWHhz76z+PtjhQyofuFDBNkgICyvCRJi+72ZIVOBd7X9tcqf3CqzbOVMIjengpaH3LvkOYJic3aezATZOHHhPbsU/nr3aA4dZA4yJaMZP4PKksGRkXuMFYJagy1rnaIgg/jMkXLrDGZtYVhW+1IswRiLGjWLCsUWoxoGatiHxQPD6SEXwnzLER8ebtZOv1lZs=; 4:jbM0mF/pAMaw1TmBGBXjOMzOzluDl44z4eudlaXOIK5kTCrspGaerUxigBHuPXpDKIrJLagNsMmYtFtu3v/VNz0dvsFaR1l6zuyb+FlNo5jM0plA76osgyZHj69rPtdykCDZXwSJESl14j2BeSSNNb2DRiiSuqVgi+Ker+s5yWZPVhTZPTOVc+wnS/B3ioqWPckCrBrXdGKPkDkyXRYFkawaddSRuCNkq6wCQMYiMYMS5rQQhnKpSctjAFmA1a5X0ANHq1LZ4BZkHMxMqfKEDg== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(8121501046)(5005006)(3002001)(10201501046)(3231022)(100000703101)(100105400095)(93006095)(93001095)(6041248)(20161123562025)(20161123560025)(20161123564025)(20161123555025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123558100)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:DB6PR0801MB1992; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:DB6PR0801MB1992; X-Forefront-PRVS: 0493852DA9 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(6009001)(376002)(346002)(189002)(199003)(189998001)(69596002)(97736004)(2950100002)(6916009)(6666003)(47776003)(50466002)(230783001)(66066001)(3846002)(48376002)(5660300001)(316002)(6116002)(16586007)(86362001)(5003940100001)(16526018)(33646002)(6512007)(478600001)(2361001)(106356001)(53936002)(105586002)(2351001)(36756003)(7736002)(76176999)(50986999)(107886003)(305945005)(50226002)(68736007)(53416004)(8676002)(81156014)(81166006)(25786009)(4326008)(8936002)(6506006)(101416001)(6486002)(2906002); DIR:OUT; SFP:1102; SCL:1; SRVR:DB6PR0801MB1992; H:xantnef-ws.sw.ru; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: None (protection.outlook.com: virtuozzo.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DB6PR0801MB1992; 23:1QKpucK9gw47trcTZvxBlwUW/P4pCUF0YvFYGZ2?= =?us-ascii?Q?BdzH78/b83mvHepCS34t7De+Cb+CM9kBzRyhpkbTVRNcLKIoxVEb19nGx3fN?= =?us-ascii?Q?UQEyr/4xY+H7xsqyGw/HLB1oIgTHylJ1ODmoncYWdVkUZ90N1ccYmEvBdALa?= =?us-ascii?Q?WztwqXfohgKCj/P4DYXqsEjgULFSo1bWpVST4jbuSCEvVvJp868WwS2GWnsV?= =?us-ascii?Q?vHjVyRake6NqM1VYV4+l9ZeXtUk8O652HXu+hmUkQBeJu3MiJJLlwR6ICAai?= =?us-ascii?Q?UNqeO2dNnH3u9uBIJgTft9Bn+2oWwZVeg+L7+smWGw4sKycto5Uc5anu38A6?= =?us-ascii?Q?qzR5JkTPDo41idBu2vNI/mhT4WUD/vX3Ws1M8hOsyJ6jRgZFED9ZqoXa0nX2?= =?us-ascii?Q?4OHD/2oipn01EDRcvvfPxEzjtQG3DZskMrE8pBE0nD8WwnCe5mCrAjvQBdkd?= =?us-ascii?Q?XPXHhwCl3WUSRlX/KpKyPJXVdrThpXp/bRf/f1gvmJi7YXrLyRUHBbHok0/V?= =?us-ascii?Q?Z1/xCQ4YDcmUNZ9DmT4PgN+/I8H/tf2VD4YCPPGxaTk3CrWeQR9X67XiZ9U2?= =?us-ascii?Q?vEuokXrdyx53EXn9HS04X4Kw9x5wRkAwdyNZ2dVk67c4uLNyZ5bploKk9uiT?= =?us-ascii?Q?DOp0+zJkIdhSSOHYNH51HJarZDckMaZNgGFJuLSvwqKPcEqoLWL+LVLnBC6+?= =?us-ascii?Q?VfT1vyqJGM1D7Fqvtwd3BuKsxe7cKQiDE72/iEounnLWKXDVgXnM++P/yvjv?= =?us-ascii?Q?+/4DG13nfv5ZE/nAOzVyBUp5/qgxEU6+6H4hoQWqU4AJUs8MeWoF/OwTF+WZ?= =?us-ascii?Q?ddckpWS/O5gJ7kHV1/uQ/vh641NABeDOlx1elQE/qhtnJJDI1wtGLWIJ2OaK?= =?us-ascii?Q?2LZwa1/XGn4jI+j0ZIKXyHM9w9s7Fs9X0L2ni2O5sGU1LQ1GbS0xuswJM303?= =?us-ascii?Q?1lKXQqc3EWjDil+5IVg2rANM4Jxpp3BkGHb5DyKljVCn9/DC4Me2vOG5xyWa?= =?us-ascii?Q?5HY/IUCvs69yQnSVa3Wa3uWaeDsTFVV8Iq0BCQSPUT55dDGb6A/f5HUWfCjG?= =?us-ascii?Q?vXKuJOnguY4mPM7d0q3VEQkC9o0zTUX1C61IBvJIumrZ4xEGuetNtGk675at?= =?us-ascii?Q?IxN1FL8fvcMAxJuBGGvztD1tLFD9KCKwQqvxZ8fUP2cru2dsPnhVaoHNqEJw?= =?us-ascii?Q?0fTQvRpJJNOvAKDo=3D?= X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1992; 6:4n4VYeEStuM7nqz/a6YI07Gr+AcQhMooYv4ExxIo/WBNIRMoYJUlaggFxiifZ3PtZn0nZMwrrHZCPMA92jQQtt9fjvm/0lbx3cCeYDK2Q8ksTsLDytDG9olrn617moevgV+h6q+CSYnlhiujaJRBAB5xu0PcpNVbl8A9nAWS5Gqkwb4Rs963OzWV4o1l8/X4L3nrn1NtE0IdIc6JttvVDh1jRRM/Vq/NN9hUgpr9pqwWYma7dFmxH8YfHZQ9ZHCH8s1smntgka6LDkCV+Rh3NYBxL7wBYPiyLxP5l7lmjRMSCjOQ/3WqoyHF68yIa756cEdo5s/n8+A8JpIdr88FWIhpaHwZ0VFw4ob+xR5uYds=; 5:h9UPlnnBJnBudAWlyTAJe6qRSB65at0i36Wx8ouDFyUKneW/Iax0Fg4k5RQeVTvubri9n5oP/thm6mj4GK96s2EltaZHXro7NHQLcQSdcxZ5WWzGnm7/HAg9gptqyL++jI+AWZnTu2D8f69oSZnu0bGgSxOXbsuTTGH2E6PHwvw=; 24:UJ7NdIVQ1i0sMicp8PnvBeAAjQ35qxliNECDTzOkhQy/ZmprPXEf5RFi125yd/3NqybCMPNDfPr0oUkGcltNtNcEzR1rYzf4G+/VDUVvyZo=; 7:EzcMPldeIl5ptLJlgIZ0eobzC4Cy7V31b3EpJKCFsh5mB/Ws8yBOsGCsA+N65STy0/ZSfzvJ03rAWtUa1VPpYvL6sC9ZK10L7p4c82ogkZLpLml2mLraxIY5wFFTxVPIJvQe9KKloS73EThEnq1wNzsjmknO9MFbcKZmBePr+uBYpCLjAOGqRQD10wmmo7caj5rlbNWRgjkI+G4eBygyaWz7roxu2EbbL6IEe+812xmP4WfG1vZ8j0WhsIQxVCR0 SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1992; 20:0qPyIgaxHT2TM4QlKyrkU2ZpknNfV23BImUqDmHFo/hmsfY+VTEphOgjDq0NTKkTGD/LbnLPWh9gHyH7o2GKSVjl3Ipxe9KQ9VUN8DBjfuJVv2OM+ZJ1gxeVKGqaZAzA9oNhS6Og1ptpek9N+BGJuBCVxvox7WK148r+WRXUUUo= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Nov 2017 16:55:17.8864 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 7663d880-063a-439c-625b-08d52d12d14b X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0801MB1992 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 104.47.0.120 Subject: [Qemu-devel] [PATCH v2 2/4] block: support compressed write for copy-on-read X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: kwolf@redhat.com, Anton Nefedov , famz@redhat.com, den@virtuozzo.com, qemu-block@nongnu.org, mreitz@redhat.com, stefanha@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Signed-off-by: Anton Nefedov Reviewed-by: Max Reitz Reviewed-by: Stefan Hajnoczi --- block/io.c | 23 +++++++++++++++++------ block/trace-events | 2 +- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/block/io.c b/block/io.c index 3d5ef2c..2ba62a3 100644 --- a/block/io.c +++ b/block/io.c @@ -953,7 +953,7 @@ bdrv_driver_pwritev_compressed(BlockDriverState *bs, ui= nt64_t offset, } =20 static int coroutine_fn bdrv_co_do_copy_on_readv(BdrvChild *child, - int64_t offset, unsigned int bytes, QEMUIOVector *qiov) + int64_t offset, unsigned int bytes, QEMUIOVector *qiov, int flags) { BlockDriverState *bs =3D child->bs; =20 @@ -988,12 +988,13 @@ static int coroutine_fn bdrv_co_do_copy_on_readv(Bdrv= Child *child, * allocating cluster in the image file. Note that this value may exc= eed * BDRV_REQUEST_MAX_BYTES (even when the original read did not), which * is one reason we loop rather than doing it all at once. + * Also this is crucial for compressed copy-on-read. */ bdrv_round_to_clusters(bs, offset, bytes, &cluster_offset, &cluster_by= tes); skip_bytes =3D offset - cluster_offset; =20 trace_bdrv_co_do_copy_on_readv(bs, offset, bytes, - cluster_offset, cluster_bytes); + cluster_offset, cluster_bytes, flags); =20 bounce_buffer =3D qemu_try_blockalign(bs, MIN(MIN(max_transfer, cluster_byte= s), @@ -1041,8 +1042,13 @@ static int coroutine_fn bdrv_co_do_copy_on_readv(Bdr= vChild *child, /* This does not change the data on the disk, it is not * necessary to flush even in cache=3Dwritethrough mode. */ - ret =3D bdrv_driver_pwritev(bs, cluster_offset, pnum, - &local_qiov, 0); + if (flags & BDRV_REQ_WRITE_COMPRESSED) { + ret =3D bdrv_driver_pwritev_compressed(bs, cluster_off= set, + pnum, &local_qiov= ); + } else { + ret =3D bdrv_driver_pwritev(bs, cluster_offset, pnum, + &local_qiov, 0); + } } =20 if (ret < 0) { @@ -1107,7 +1113,12 @@ static int coroutine_fn bdrv_aligned_preadv(BdrvChil= d *child, * potential fallback support, if we ever implement any read flags * to pass through to drivers. For now, there aren't any * passthrough flags. */ - assert(!(flags & ~(BDRV_REQ_NO_SERIALISING | BDRV_REQ_COPY_ON_READ))); + assert(!(flags & ~(BDRV_REQ_NO_SERIALISING | BDRV_REQ_COPY_ON_READ | + BDRV_REQ_WRITE_COMPRESSED))); + + /* write compressed only makes sense with copy on read */ + assert(!(flags & BDRV_REQ_WRITE_COMPRESSED) || + (flags & BDRV_REQ_COPY_ON_READ)); =20 /* Handle Copy on Read and associated serialisation */ if (flags & BDRV_REQ_COPY_ON_READ) { @@ -1132,7 +1143,7 @@ static int coroutine_fn bdrv_aligned_preadv(BdrvChild= *child, } =20 if (!ret || pnum !=3D bytes) { - ret =3D bdrv_co_do_copy_on_readv(child, offset, bytes, qiov); + ret =3D bdrv_co_do_copy_on_readv(child, offset, bytes, qiov, f= lags); goto out; } } diff --git a/block/trace-events b/block/trace-events index 11c8d5f..12fe188 100644 --- a/block/trace-events +++ b/block/trace-events @@ -12,7 +12,7 @@ blk_co_pwritev(void *blk, void *bs, int64_t offset, unsig= ned int bytes, int flag bdrv_co_preadv(void *bs, int64_t offset, int64_t nbytes, unsigned int flag= s) "bs %p offset %"PRId64" nbytes %"PRId64" flags 0x%x" bdrv_co_pwritev(void *bs, int64_t offset, int64_t nbytes, unsigned int fla= gs) "bs %p offset %"PRId64" nbytes %"PRId64" flags 0x%x" bdrv_co_pwrite_zeroes(void *bs, int64_t offset, int count, int flags) "bs = %p offset %"PRId64" count %d flags 0x%x" -bdrv_co_do_copy_on_readv(void *bs, int64_t offset, unsigned int bytes, int= 64_t cluster_offset, int64_t cluster_bytes) "bs %p offset %"PRId64" bytes %= u cluster_offset %"PRId64" cluster_bytes %"PRId64 +bdrv_co_do_copy_on_readv(void *bs, int64_t offset, unsigned int bytes, int= 64_t cluster_offset, int64_t cluster_bytes, int flags) "bs %p offset %"PRId= 64" bytes %u cluster_offset %"PRId64" cluster_bytes %"PRId64" flags 0x%x" =20 # block/stream.c stream_one_iteration(void *s, int64_t offset, uint64_t bytes, int is_alloc= ated) "s %p offset %" PRId64 " bytes %" PRIu64 " is_allocated %d" --=20 2.7.4 From nobody Fri May 3 00:06:03 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1510852360869974.8108965969367; Thu, 16 Nov 2017 09:12:40 -0800 (PST) Received: from localhost ([::1]:41832 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eFNVq-00050v-P6 for importer@patchew.org; Thu, 16 Nov 2017 11:59:38 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:40187) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eFNRm-0001R7-5f for qemu-devel@nongnu.org; Thu, 16 Nov 2017 11:55:27 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eFNRj-0007Re-VV for qemu-devel@nongnu.org; Thu, 16 Nov 2017 11:55:25 -0500 Received: from mail-he1eur01on0120.outbound.protection.outlook.com ([104.47.0.120]:43088 helo=EUR01-HE1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1eFNRj-0007Fo-Mf; Thu, 16 Nov 2017 11:55:23 -0500 Received: from xantnef-ws.sw.ru (195.214.232.6) by DB6PR0801MB1992.eurprd08.prod.outlook.com (2603:10a6:4:76::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.239.5; Thu, 16 Nov 2017 16:55:19 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=HzQAt0IughnxdlowGw/d/RrK8qLCQkHCj5HLKBBhdnU=; b=Z5CGkhH5460R2zCIJTbQBFMSZSZArs0ns3oS++CnMq3ttYr+iHmrwZYQXHNEHe0UW9WT+wMhEUCZJSwNKVAUSaliBob3MccnjQTIe34AbAef+zEf6KCZdNlRPteb5UuQQ4rt7ZiS/RvUMevrbCi0Ey44kr7yWFLbWDwZFlgDifw= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=anton.nefedov@virtuozzo.com; From: Anton Nefedov To: qemu-devel@nongnu.org Date: Thu, 16 Nov 2017 19:54:57 +0300 Message-Id: <1510851298-59922-4-git-send-email-anton.nefedov@virtuozzo.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1510851298-59922-1-git-send-email-anton.nefedov@virtuozzo.com> References: <1510851298-59922-1-git-send-email-anton.nefedov@virtuozzo.com> MIME-Version: 1.0 X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: DB3PR0202CA0008.eurprd02.prod.outlook.com (2603:10a6:8:1::21) To DB6PR0801MB1992.eurprd08.prod.outlook.com (2603:10a6:4:76::9) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 76f49baf-a30b-41f9-a90d-08d52d12d1f4 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(4534020)(4602075)(7168017)(4627115)(201703031133081)(201702281549075)(2017052603258); SRVR:DB6PR0801MB1992; X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1992; 3:QFgcIFva3+LtW7ABtzf5uonA1jfCtsTgIS0dmNh/dHXOhZhGh3NcTlCqcA3S+A8R0b9V1nMd0uODVLbWO6+sXgp7m+yOZf/9Yg/roFRuXqg48yfC1iw3PRcJXdoXf8eht7e4QXEZSplWmG8tZUpycGnkLU75aA2mkSKuKL32DKTTf2ZRH4371/vzErXZjHIcclOSbxHg6DxUGgNrY8BBKrSsaWn5fcC+ibl4ghSq4jmFwUBQH25skHwh0G07ryI0; 25:zwe1Ajx9i0/w+qG4ael18jxtRWyanje25oKcFoqUeNCbPoSv4m4dXghOu/kTiHWXWboULCdZnVp4yqo4yjPosxS8cD4w1pzXbwrdxV3L2uuTG/CPO9A23Bm7LPutj8cJFPvVjO1UxJEWGFYpnKCJTpXLbGmKRqvCRtzuNTbiGkLX2E2ysPbwnjZNCn2DsauvaOlef+mDeYnPTrkQu2h0v9i0tq57kva8AIdRfu1o91mZfHJTmm2RF9B7ABmO84ZFOAq22eVuMYHqC4BXDBVP+dvLrXWJXFJ8n71nqbtwy5AcZ0bw6EnyVRaIpHmk6p6mEI82slNVSI+az95urxnSBA==; 31:z3u6kxl7IgMHRefpYDNv82+FWMJ9FiwITtfZh7/WQANY8oANqvTtly67qBF3Mub3LqSC0E/P7w9C//4OnmDftyo8W3xJWgYEeqIGdvDbLUcMLgBQyN78ycBbo7h7BUbKkMHVaJhgVJ4tD/auHThkwyq3RUE4sIQ6zp5d7Lrg3FnZABGIBQi1c5bGO2It77gXnXkY/+sM6NpMs/TLcaCD0MN4sY2MLw7OXdibGAzc6PI= X-MS-TrafficTypeDiagnostic: DB6PR0801MB1992: X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1992; 20:swU0S3LLazZ+1ReEYcsCavNMxPOWjgyFOfZPqWL1shWLJmCcXSRe06TlYc2TTr/X1VmcN20da6muHXg1QZittGdiSiopdsyZfhteJf2x/G8qzMMCw30gkneMluol66+Gs8K0KjwbNKv99jmVwItQWa0Cy8KGx9Y/C0yYSbzNTyWOeZ9+jZdV+rE+DBzMvkkbOBi+Xm8/H0SG5Ali5NVP40LH1VTsWYR5lisWDQnv8avVEECUw12ZTKce2/tqQt5n5J/+qO1KRG9lU14LGaqb17/ekzwkBWwdbcxt7D8aMMM5zKvGXn0O4NYcMj9RTLhcWDNbiSS1CCjh0FiiY2cDo6qsRoLSok3PU7PDoKq8vfyIFARD8BFkTZTM7aAhpT7psCKZRwUEq0Erzm7DNXgEJHVXS+C9R0EDRscQC35WK5s=; 4:44Z49fsWRfliNXO72eslJ8kTd6qWWQ4ksOVgn1j+cMv+IcSAsKbZ/zmCXQ/I45Xj6Hs551v5KwtZogFoa/kjoqTAh6xAUoesVQAiGdNd8ABQixU/4hwTMuZCee2nEfmQvOkaXRJPBIzk1cvkCjfKf5byo7xvbNvsyx8Z15T2jUfXIJaMuhGtEMf6MHpLdxx8MRX5A2mRhuZ6orJvJ+ldwbGueSyHTTOZFEOw6im6VS8oBYk56UnQqDzToAsOcp90Om5Rjh7I5YWnLH4ez4gKlg== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(8121501046)(5005006)(3002001)(10201501046)(3231022)(100000703101)(100105400095)(93006095)(93001095)(6041248)(20161123562025)(20161123560025)(20161123564025)(20161123555025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123558100)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:DB6PR0801MB1992; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:DB6PR0801MB1992; X-Forefront-PRVS: 0493852DA9 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(6009001)(376002)(346002)(189002)(199003)(189998001)(69596002)(97736004)(2950100002)(6916009)(6666003)(47776003)(50466002)(66066001)(3846002)(48376002)(5660300001)(316002)(6116002)(16586007)(86362001)(5003940100001)(16526018)(33646002)(6512007)(478600001)(2361001)(106356001)(53936002)(105586002)(2351001)(36756003)(7736002)(76176999)(50986999)(107886003)(305945005)(50226002)(68736007)(53416004)(8676002)(81156014)(81166006)(25786009)(4326008)(8936002)(6506006)(101416001)(6486002)(2906002); DIR:OUT; SFP:1102; SCL:1; SRVR:DB6PR0801MB1992; H:xantnef-ws.sw.ru; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: None (protection.outlook.com: virtuozzo.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DB6PR0801MB1992; 23:4frONvuFmNBf5cKsp/1PTlaN+VZ4FNmgt5O7MT0?= =?us-ascii?Q?MHILO2KWzgmiyz6ZEvkxmxq6GWD8BbOqVfzC92zdd/YB+5GMocM1uie354wH?= =?us-ascii?Q?hvxoV/tZ4cMg7itodQ5tYXfi39kLgKhos3uZmYDiiX9USGRSryZZbFgS8N65?= =?us-ascii?Q?1gz7sPnQWs8C8YQ2sGLQ4tyimFLPcUqjvVGofmqEWVTl0GAMCp6ey2mb4w5j?= =?us-ascii?Q?6PY5RjHXF07qpNr9SZbuyOopZBB5QPcgZoAmBrhaNcQBiE7sLcBofNyzRRdg?= =?us-ascii?Q?XZBusN0wY5OASeBIvIv8uMaORoPdnBXVeIORO36TteqPhJ/3lB+S/w5s4BIL?= =?us-ascii?Q?VhWu7FWshrp7VPI9vGr6NFKt6D8YAjq8pDCU5bqBoVfIffYp5IuaW5+xl6Q4?= =?us-ascii?Q?CdjBbcajOuwSc86gq/GZ2ZTNzl9EjatRxaLmkaMM7f1+Pb8Dt+avtN+vk9IC?= =?us-ascii?Q?fcIT/UPfArAGoCKdozpFwVWKRfbnXrk/q9oapJcytdFpxdqMSzjk5Vt/wWNY?= =?us-ascii?Q?pQ1+umokt0IpjChrpzCwMr1Z4ccgxqN7t+nBhuwOci/2nSvJ/Zbm9shEygAz?= =?us-ascii?Q?VAgCSPjPwrkwHhMmMdkdRvAkKQslRkmJN94/L3lGmgmaesIzq7exriMEnax9?= =?us-ascii?Q?A81zUehghEVZNjlCZblbapN6flmbWQ3UqXgZzhoYFvnbISNNtjpYPaSKk/ek?= =?us-ascii?Q?VgJPvRMVx9OYIvmTtjCDPHOjvOYsXyQh+d5yZ204XzUyLCnbn5mc7aFYV17V?= =?us-ascii?Q?+/QDuThLOm53sVGln/InRjF6K+fICV5vhaujcAnqVd+EDjPu7mx36Z7IbeH2?= =?us-ascii?Q?0xkXGmPD+EfFueToCKi3YxgCIPv1Cb2iTlbrNABsQToqJBhYgTquPHC32rDH?= =?us-ascii?Q?qoQC14wSMk4mk7AD9QfZv8DvMYy3WJyvOvyeGKD8bHkBdKeyti7UyB0VMa3v?= =?us-ascii?Q?wg2290AoNaeTsqqaWrx71vCAa5YmFTSAUWhwXGc2a1oSNcVTQFj6hbPgY5E8?= =?us-ascii?Q?hSnTBhkIH/Pc4b1iZPHfoCcL2AJ9cbN4sLu8tPVodO+VfzH5B+MP9MVnkUIS?= =?us-ascii?Q?lIkABlFov8egzsbN8uH33bYBmB16KsHlHNAHxQca0UqQ0pDFPF6vbU6AYNzT?= =?us-ascii?Q?wnuPr0QVBli7tEEAIEZ6dSjUWObdl49JnV1ByjPvk7ujRjAIcC5h4SA=3D?= =?us-ascii?Q?=3D?= X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1992; 6:/1xG3M/1Xv/Of+gGPA5AtExoSWKQdqClTLaeFR7dGvPvNQNjVSTFWGxIZJxZWIrVmEDX0Wzs4pZU0nFbuLgxkUaHWmhIHGnxDoGNnMM8gkJagz+TFjex7a7O3j/BmC4jAhUmrvzYd+ds4WpVeEw3i4L8ogeclnXRvsZ9dAlPY3RiIXsaNn9g3elgBRKKivysTyKdPBSY9alaB221YZBbmaHVZ1bMRW9Tb3gs7OsGI5HYst1QIZJ3k6b2ZjCuw0fyVrJW9LQcOFulNrmIfvtXuCbfXVgRCXQS/oVfzDW9Mu7A4bxkkI4yEzLnp05fh01Nk9AoBStl3c8v6onPodU7OuefOxgresMgxpCxLUsr950=; 5:uu7B2nY4/2p2aGI1zMQKDiq6sDP9D1kINMcjG1zjeb5FoCQx6T9AZemNxhuhTyrnKfa8agwwciQdWhFmmX+Z+qSYdcXWpjXB4GE2RNSeDF5bgdYzogkkc0BrK98f/yyxI5tNgTcYaxDUGYyouvi0w/G6Ifwl0U/XVt9KR3N+Kz8=; 24:CYQWnLRo9CuxKBDGYvOSYmYz70IJIb5duv5d5VJIhYd9ah6po9fxcgv4h5omnpeO4SnZ3WGb5U1Skn00t1aarCI09XgkZZqVSX+0kSn3X74=; 7:htjlggsm7HHkDkr+/fdMKOW/90b6arLK5R8cI5ndWqFl91XT78qXc9UkHPfJzUYu/BLaNVlxxoBVpy141LOSCJVZU6NVYBNwyM199MIGyycJmlvYdbO/1cVGJFxETvWf5k/NhLZdIMdhhSsd7+n0RBbFIKWQHTZuP89iqePafrmRabEVxeb30cyFuB3bi33/cPtBtIUkz65Jtxg8g1Aq48gfVqm4W/+cA/0iP81Ql2OFviCNQa7cerFH6SSxRlep SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1992; 20:DD6PVIBExx5AUch7kL5J/0x0vbiiAbj39cZBGLEECQEw0hM1T8QynYzce8Xv8Wzl2kCQl7EV1oqgctR+Fj7hBUQjS8LgFi3MWOY0QzXOqgrQ39RY8V6pngGG8SezLXbua3WbVJY42GTPkRrURLBobuEaT4+ccerb9dygL6b2MmM= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Nov 2017 16:55:19.0426 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 76f49baf-a30b-41f9-a90d-08d52d12d1f4 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0801MB1992 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 104.47.0.120 Subject: [Qemu-devel] [PATCH v2 3/4] block-stream: add compress option X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: kwolf@redhat.com, Anton Nefedov , famz@redhat.com, den@virtuozzo.com, qemu-block@nongnu.org, mreitz@redhat.com, stefanha@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" It might be useful to compress images during block-stream; this way the user can merge compressed images of a backing chain and the result will remain compressed. Signed-off-by: Anton Nefedov Reviewed-by: Stefan Hajnoczi --- qapi/block-core.json | 4 ++++ include/block/block_int.h | 4 +++- block/stream.c | 16 ++++++++++++---- blockdev.c | 13 ++++++++++++- hmp.c | 2 ++ hmp-commands.hx | 4 ++-- 6 files changed, 35 insertions(+), 8 deletions(-) diff --git a/qapi/block-core.json b/qapi/block-core.json index ab96e34..b7282cd 100644 --- a/qapi/block-core.json +++ b/qapi/block-core.json @@ -2007,6 +2007,9 @@ # # @speed: the maximum speed, in bytes per second # +# @compress: true to compress data; may only be set if the target format +# supports it (default: false). (Since 2.12) +# # @on-error: the action to take on an error (default report). # 'stop' and 'enospc' can only be used if the block device # supports io-status (see BlockInfo). Since 1.3. @@ -2026,6 +2029,7 @@ { 'command': 'block-stream', 'data': { '*job-id': 'str', 'device': 'str', '*base': 'str', '*base-node': 'str', '*backing-file': 'str', '*speed': 'int', + '*compress': 'bool', '*on-error': 'BlockdevOnError' } } =20 ## diff --git a/include/block/block_int.h b/include/block/block_int.h index a548277..093bf9b 100644 --- a/include/block/block_int.h +++ b/include/block/block_int.h @@ -863,6 +863,7 @@ int is_windows_drive(const char *filename); * @backing_file_str: The file name that will be written to @bs as the * the new backing file if the job completes. Ignored if @base is %NULL. * @speed: The maximum speed, in bytes per second, or 0 for unlimited. + * @compress: True to compress data. * @on_error: The action to take upon error. * @errp: Error object. * @@ -875,7 +876,8 @@ int is_windows_drive(const char *filename); */ void stream_start(const char *job_id, BlockDriverState *bs, BlockDriverState *base, const char *backing_file_str, - int64_t speed, BlockdevOnError on_error, Error **errp); + int64_t speed, bool compress, + BlockdevOnError on_error, Error **errp); =20 /** * commit_start: diff --git a/block/stream.c b/block/stream.c index e6f7234..75c9d66 100644 --- a/block/stream.c +++ b/block/stream.c @@ -38,23 +38,29 @@ typedef struct StreamBlockJob { BlockdevOnError on_error; char *backing_file_str; int bs_flags; + bool compress; } StreamBlockJob; =20 static int coroutine_fn stream_populate(BlockBackend *blk, int64_t offset, uint64_t bytes, - void *buf) + void *buf, bool compress) { struct iovec iov =3D { .iov_base =3D buf, .iov_len =3D bytes, }; QEMUIOVector qiov; + int flags =3D BDRV_REQ_COPY_ON_READ; + + if (compress) { + flags |=3D BDRV_REQ_WRITE_COMPRESSED; + } =20 assert(bytes < SIZE_MAX); qemu_iovec_init_external(&qiov, &iov, 1); =20 /* Copy-on-read the unallocated clusters */ - return blk_co_preadv(blk, offset, qiov.size, &qiov, BDRV_REQ_COPY_ON_R= EAD); + return blk_co_preadv(blk, offset, qiov.size, &qiov, flags); } =20 typedef struct { @@ -166,7 +172,7 @@ static void coroutine_fn stream_run(void *opaque) } trace_stream_one_iteration(s, offset, n, ret); if (copy) { - ret =3D stream_populate(blk, offset, n, buf); + ret =3D stream_populate(blk, offset, n, buf, s->compress); } if (ret < 0) { BlockErrorAction action =3D @@ -227,7 +233,8 @@ static const BlockJobDriver stream_job_driver =3D { =20 void stream_start(const char *job_id, BlockDriverState *bs, BlockDriverState *base, const char *backing_file_str, - int64_t speed, BlockdevOnError on_error, Error **errp) + int64_t speed, bool compress, + BlockdevOnError on_error, Error **errp) { StreamBlockJob *s; BlockDriverState *iter; @@ -267,6 +274,7 @@ void stream_start(const char *job_id, BlockDriverState = *bs, s->base =3D base; s->backing_file_str =3D g_strdup(backing_file_str); s->bs_flags =3D orig_bs_flags; + s->compress =3D compress; =20 s->on_error =3D on_error; trace_stream_start(bs, base, s); diff --git a/blockdev.c b/blockdev.c index 56a6b24..ae2a1d2 100644 --- a/blockdev.c +++ b/blockdev.c @@ -2968,6 +2968,7 @@ void qmp_block_stream(bool has_job_id, const char *jo= b_id, const char *device, bool has_base_node, const char *base_node, bool has_backing_file, const char *backing_file, bool has_speed, int64_t speed, + bool has_compress, bool compress, bool has_on_error, BlockdevOnError on_error, Error **errp) { @@ -2981,6 +2982,10 @@ void qmp_block_stream(bool has_job_id, const char *j= ob_id, const char *device, on_error =3D BLOCKDEV_ON_ERROR_REPORT; } =20 + if (!has_compress) { + compress =3D false; + } + bs =3D bdrv_lookup_bs(device, device, errp); if (!bs) { return; @@ -3034,11 +3039,17 @@ void qmp_block_stream(bool has_job_id, const char *= job_id, const char *device, goto out; } =20 + if (compress && bs->drv->bdrv_co_pwritev_compressed =3D=3D NULL) { + error_setg(errp, "Compression is not supported for this drive %s", + device); + goto out; + } + /* backing_file string overrides base bs filename */ base_name =3D has_backing_file ? backing_file : base_name; =20 stream_start(has_job_id ? job_id : NULL, bs, base_bs, base_name, - has_speed ? speed : 0, on_error, &local_err); + has_speed ? speed : 0, compress, on_error, &local_err); if (local_err) { error_propagate(errp, local_err); goto out; diff --git a/hmp.c b/hmp.c index 35a7041..854c88e 100644 --- a/hmp.c +++ b/hmp.c @@ -1812,9 +1812,11 @@ void hmp_block_stream(Monitor *mon, const QDict *qdi= ct) const char *device =3D qdict_get_str(qdict, "device"); const char *base =3D qdict_get_try_str(qdict, "base"); int64_t speed =3D qdict_get_try_int(qdict, "speed", 0); + bool compress =3D qdict_get_try_bool(qdict, "compress", false); =20 qmp_block_stream(true, device, device, base !=3D NULL, base, false, NU= LL, false, NULL, qdict_haskey(qdict, "speed"), speed, + qdict_haskey(qdict, "compress"), compress, true, BLOCKDEV_ON_ERROR_REPORT, &error); =20 hmp_handle_error(mon, &error); diff --git a/hmp-commands.hx b/hmp-commands.hx index 4afd57c..f6794bb 100644 --- a/hmp-commands.hx +++ b/hmp-commands.hx @@ -75,8 +75,8 @@ ETEXI =20 { .name =3D "block_stream", - .args_type =3D "device:B,speed:o?,base:s?", - .params =3D "device [speed [base]]", + .args_type =3D "device:B,speed:o?,base:s?,compress:o?", + .params =3D "device [speed [base]] [compress]", .help =3D "copy data from a backing file into a block device= ", .cmd =3D hmp_block_stream, }, --=20 2.7.4 From nobody Fri May 3 00:06:03 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (208.118.235.17 [208.118.235.17]) by mx.zohomail.com with SMTPS id 1510852753230231.252741644661; Thu, 16 Nov 2017 09:19:13 -0800 (PST) Received: from localhost ([::1]:41818 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eFNTM-0002Mp-Bw for importer@patchew.org; Thu, 16 Nov 2017 11:57:04 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:40192) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eFNRm-0001R8-LT for qemu-devel@nongnu.org; Thu, 16 Nov 2017 11:55:27 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eFNRl-0007T2-0j for qemu-devel@nongnu.org; Thu, 16 Nov 2017 11:55:26 -0500 Received: from mail-he1eur01on0120.outbound.protection.outlook.com ([104.47.0.120]:43088 helo=EUR01-HE1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1eFNRk-0007Fo-AZ; Thu, 16 Nov 2017 11:55:24 -0500 Received: from xantnef-ws.sw.ru (195.214.232.6) by DB6PR0801MB1992.eurprd08.prod.outlook.com (2603:10a6:4:76::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.239.5; Thu, 16 Nov 2017 16:55:20 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=hZ2e/Ju36tzG4lGnDLPLOYJXcF1Vwxy+b0DGPV1DO0U=; b=hvBaVt1rygH/QUuUqzJO2Z2AtCGcxiro8bgoIMuwn6My2kqSaRo0Tl6kbnlDTMXxiLabJwbmUFE/bsVxcVm9vSzIw4hM9VXJF61U+lWdjn5ornv3gMhHvguxqxw8zCrC87tTnpXSwju3zRT8YVi+qy/Q+bTs9Z6ClsRqzzfVySA= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=anton.nefedov@virtuozzo.com; From: Anton Nefedov To: qemu-devel@nongnu.org Date: Thu, 16 Nov 2017 19:54:58 +0300 Message-Id: <1510851298-59922-5-git-send-email-anton.nefedov@virtuozzo.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1510851298-59922-1-git-send-email-anton.nefedov@virtuozzo.com> References: <1510851298-59922-1-git-send-email-anton.nefedov@virtuozzo.com> MIME-Version: 1.0 X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: DB3PR0202CA0008.eurprd02.prod.outlook.com (2603:10a6:8:1::21) To DB6PR0801MB1992.eurprd08.prod.outlook.com (2603:10a6:4:76::9) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a327a508-4dee-4556-77a4-08d52d12d2c6 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(4534020)(4602075)(7168017)(4627115)(201703031133081)(201702281549075)(2017052603258); SRVR:DB6PR0801MB1992; X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1992; 3:a3BJNYcDhHHKJAF0UV1Y2Asfyqqv6pGi4JsY38OURIVwb7i/oqg/3pFoUVW2ZQYoBv9alomkk8yhLz07HKx05V5VvkrNjJ1GZcTUNTIfqjmfSRD3CWdEXL/Zsjl9Ej/ZVglbF6+rhZ7QCdaDMz7ZkzVxRv6hW6e7Ko6ziA7hwbGM4JavlOPGJBlktj5KRPwQ4IrVsaYPuJBQABIosTmXf8nP7kTNrHmIDE1X6d0iY8+M3eC5eXhXd2EDzSMFN3Dc; 25:bbMZymfEeH0KTX9YMbqyMEvfwvgtwcc92eKxzZJ0QEveOiBgsb3Wwl0Yp68NyVCR7C1pfJNU9lN5/MZVtqVoI9ndE81lQpLkfm9in23UT8yO9M+zj6JQCYBVvhBjtXbUwXvRmMjhDrWU/uNcKZ3LXt2Yf25OmgaHDlqzrjAXKeYHwk6QfddIi5CPERUbIzxShb/iZriR3HoyJNqLeMfQb3RDAbp5cqRA442/tgtptrEeQxGBIfnZ/kiLwDW8hHHirNBAZNCdG+zG+yda8Zyynd0wsr386YlJ90aArqDSbqV+0s+n8YXOM/lw0C3efa/7U6sVI0WxVidCN3o79WQEbA==; 31:ACgd010T2W9UHKoX+wyNYI1lPlsQwHFrHsilQ+uo3BZXHfoMJ4hX4qjWsHtiRTfPc702ccw7XAvg9bo7OejEmevOsbnYlZeue85WiHiOddA8BAktl1KwT8b70P0mjO5o6L33Y2ERfLxAtjXZ5WEo+kfTm0ueu893f0zrMdux3jqmHFE68lldjcJqlSPaWG0K4Lr6n5FbgzdfWeG93szjSawhDNLnjQZDLE3FBY5K2xE= X-MS-TrafficTypeDiagnostic: DB6PR0801MB1992: X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1992; 20:GfDrJ889KPk3ms3HJt23XcK6RGi4HGvgYRqftPq4wIrxyazD9vx3YOCiH3x8INuQaB419fiYrDx6XFEvpzqdU9AdKEfKTfxLVjlusF2U6WrrozNOyHGg5/iuvDn5hL4KehAYlUR/3kVdSD4Mi8XdBXSaLPQNxFztr9ZWPJiXD31vefF3iDyWEfXCAdZtqbKllC4b4JSxE5yzhIN+fuiWXF7UGptCdQJAB1D96uAVny18e9CQ6DbUWQS5o/n34LTLIIGskgGcYtdiFVGGiRZSY/3nmcV/8lR6eGCtx3vHp1iEs+U7H0lPkAkoCqKj5vEbNF+rL8+a8ikhTWT5QDsHbhoavnhOlyZ1i2zHC2Ypv5vjNYY72/IKUbqfugZ9R7LZHJSQaW3M5XMgA6gdGBK5pxJusZXQnz+pxhk1S4FCqY8=; 4:mHf0WuYT0GE/jqUogcJR6fL7/Xggl1QNCnMfsHbyfrUWgWz6Ipm28Xf5GRh3v2yR7AmmbGsFxeEZv+lKY1XXVgN4PsZVC9nTMfwtIwtypjfqjpw72lPo7JDh8Q37/woBpTVLv6YZgByKwLpmoA+P/YS8yhPJpUp6SBy4xcutWBViih5XTZeNvq6fvagW4Eacf1rUaFRgUJkauGbmGytKo/4j3KjGZCZ0ljFNIcxR6H8xwY2mp1BISYGdTB1mUFhd3AtIW7z6BuHf5bd8kmcNrg== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(8121501046)(5005006)(3002001)(10201501046)(3231022)(100000703101)(100105400095)(93006095)(93001095)(6041248)(20161123562025)(20161123560025)(20161123564025)(20161123555025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123558100)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:DB6PR0801MB1992; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:DB6PR0801MB1992; X-Forefront-PRVS: 0493852DA9 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(6009001)(376002)(346002)(189002)(199003)(189998001)(69596002)(97736004)(2950100002)(6916009)(6666003)(47776003)(50466002)(66066001)(3846002)(48376002)(5660300001)(316002)(6116002)(16586007)(86362001)(5003940100001)(16526018)(33646002)(6512007)(478600001)(2361001)(106356001)(53936002)(105586002)(2351001)(36756003)(7736002)(76176999)(50986999)(107886003)(305945005)(50226002)(68736007)(53416004)(8676002)(81156014)(81166006)(25786009)(4326008)(8936002)(6506006)(101416001)(6486002)(2906002); DIR:OUT; SFP:1102; SCL:1; SRVR:DB6PR0801MB1992; H:xantnef-ws.sw.ru; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: None (protection.outlook.com: virtuozzo.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DB6PR0801MB1992; 23:qd/VEpZNQmnIg/cx0C9FhQ61zuCHXXk7HO0Ig8K?= =?us-ascii?Q?DUZMDIl3OmWW80MazfZR3FQFdhldNAy70RqW5y2k5hgNJZAH/DAliTsFW5n3?= =?us-ascii?Q?eD4RcV22sViBcl1f135QWqh/obb+JiHgifZw7OSsJmC9EYHnNrM98u1ph0rM?= =?us-ascii?Q?hPG0B/S2vw8DKGlgv36bUM7C8EG6ewTmvnaRFQXCubMLTy5igOfaENV8Fsrd?= =?us-ascii?Q?B03KK20HGNege7VH9JjNPQtgkvrF21KuzsXTDVWYF855B/EaDflpJ7qBHXbo?= =?us-ascii?Q?KfeQaxS4nScbu25btn1ignr/JUzqVDnIbxnmU/tF9aD8KuQFyNYkAUQK7r0Y?= =?us-ascii?Q?SFeBAfTAtpqpBSXgQjrrO1P2r9ekBNd11zgA9cqwYblXFFoROeFuODWpmz5+?= =?us-ascii?Q?3sNvjOezSWFtw3H+HMM73uH+4sRvgcYWOmaNIL36MraLk3c8BDPiqUAhym+L?= =?us-ascii?Q?2ZQylZUAHkyALkFSVPqn9yEgmzb9/+AzB4W5tcwG4B731bxXNoi9HlxR0z9c?= =?us-ascii?Q?W/ABANFXS9UruUAdmVsQpjiTCEnaagFWOTB6PET5R1PoW0F552PJD3N97tZg?= =?us-ascii?Q?d+3iXNOXwrazRmvp2HvB57L4EUT17bD4raSRbm2MXQkLT7t//5H6kh/2qZEl?= =?us-ascii?Q?TkAv+oDmP57t2NVz5oCFlle/vryR7jO89ULTlEXlerJxO0Gfs5heedg8Iz7f?= =?us-ascii?Q?pFk6tN6F4dRK/Fv+ahzXpbVIO37u1Mwhw/IRpjTQyAYgM3K7ztr1reFATVoY?= =?us-ascii?Q?A/4UHF7q6xFDyGqjZXTaPA2IRGYY/fhH6pG/+Xi8FDuEtPGLLbbZ/ucPtHF7?= =?us-ascii?Q?TWKCW0Tyz5F7IrE2DzMHJUK2AaRGmfQWkBK+ld4EWIrkUHCJtDz3BR2ZFqtf?= =?us-ascii?Q?p0lKgWRX+utNbKMlDE9dnwAPxwP/kpGIQbXYayZf+zCtmy7srclPQpi4cQTA?= =?us-ascii?Q?PI1Xi3Y961jE0UlonfWtekCaDdkWX6hexp51Qozxiv8zp4FJsZZStK7UAhSY?= =?us-ascii?Q?3o2maXgNaP/lIbR4IRgJGNy1LlNQIqjHPynx6mCYQnTh8kR4oqLytj0imBbq?= =?us-ascii?Q?SElVMvnIFiNpO96Yq9901kzXM55WUQXNXKWvkIqMIJ7Q0+Xm+YRUCKr/p4pt?= =?us-ascii?Q?6C4ggQxkMObUR7Zv3lppwFJyNDkV/UUecIs0U0h4HUdDOdBqVTXlkAw=3D?= =?us-ascii?Q?=3D?= X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1992; 6:KSyQg7WJNkEUgzfp8WonDIO8KyQq1Vy98h4uMGuXyMZ9cNc8OK6FQTiHFktNuUJ3XBVINX3tSM+gZY42AYJJkyl+0PIjcJVZf1m0u0/PX4E64Myq9ygGNoM5AZDjkLFpjcItJJlh8rPtYnzOtTL0zZ0I3TZqvnG7H15smhNhTqVk6OvDxfEPO5EH3ppsMnhl6e3/9OEm2MOJFkuRwOJMwR/Zdv+V8NGZixhdjLWeGsCDeyI6lAHk9rLulKO/QrdSIAjcrXzVzX9DLJ4yGGRCc/SuMgQy6sh4esfJCVUlvE61aQWD9S9/qMQi8UU3rO1P5Tp5YqRu7fqdCASVhIfJ16uNnmrE1j4VOaPclMunE5I=; 5:TkPor96Sr0dxbmcHwJlqdkUz5YOADVlnNex9buYe1R8zqWWv068/3WmpmKXVbRChSXC0BPjJFkYB173ZFVlHqTGrCxy13dQuIYCUwRw2N4R8zy+ZLVlRBI65SiufQTvt9BiAfi04T58wGhFcCHE4lTO1kjmpD/GqMnf+7TQAHHU=; 24:rZwAI4MBirXgoPXvYpBx5eXnQs+mML8K425L48xNWA5PRqpGUE+YZJFCDskZwI/ehryr6csHQ7NYR8ltgJ4Gd4sdd+6VABpxhzKH6VECnrA=; 7:yUl9XPvXalq5OqWreRqnG5u1g/WEUQ2eeR6tMxe7m9V8yFlVd3l/vOUAwOizjD+k/KSZ1zgrcRdVW+Hu2ecjmv6xZReZvlfJeKW9yJAyiaTg9/1jb6LlGK4rXv6W8NgUEt0ZBoxuMTIrj8C2l7l6ZxXSd+S0G/bE3qZ+01cKMzrCp+1Fbn9BVl+ZhHWrLfQq6MlapClRtt4TmHNZBpPPT2fU7D9k30deH8S9UPxKCaEuxsliM+LMVwh9xmHROMLi SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1992; 20:NatI1C052A/bEUyR1hwNeTTxApJlVUaJs9qUL+S24r9HbpOyJLKaEQS47KrpxjHaebctyxn7YlexviDk1kcyOpwiRZi5xzhavPcC4W9A2mEnsqWaXXfqfgplBgZXw8TTo3sQvyvf573hEDOkO9JEJPa61n89XEy3O79/TJd0ETo= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Nov 2017 16:55:20.4176 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: a327a508-4dee-4556-77a4-08d52d12d2c6 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0801MB1992 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 104.47.0.120 Subject: [Qemu-devel] [PATCH v2 4/4] iotests: 030: add compressed block-stream test X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: kwolf@redhat.com, Anton Nefedov , famz@redhat.com, den@virtuozzo.com, qemu-block@nongnu.org, mreitz@redhat.com, stefanha@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Signed-off-by: Anton Nefedov --- tests/qemu-iotests/030 | 66 ++++++++++++++++++++++++++++++++++++++++++= +++- tests/qemu-iotests/030.out | 4 +-- 2 files changed, 67 insertions(+), 3 deletions(-) diff --git a/tests/qemu-iotests/030 b/tests/qemu-iotests/030 index 457984b..831d6f3 100755 --- a/tests/qemu-iotests/030 +++ b/tests/qemu-iotests/030 @@ -21,7 +21,7 @@ import time import os import iotests -from iotests import qemu_img, qemu_io +from iotests import qemu_img, qemu_img_pipe, qemu_io =20 backing_img =3D os.path.join(iotests.test_dir, 'backing.img') mid_img =3D os.path.join(iotests.test_dir, 'mid.img') @@ -804,5 +804,69 @@ class TestSetSpeed(iotests.QMPTestCase): =20 self.cancel_and_wait(resume=3DTrue) =20 +class TestCompressed(iotests.QMPTestCase): + supported_fmts =3D ['qcow2'] + cluster_size =3D 64 * 1024; + image_len =3D 1 * 1024 * 1024; + + def setUp(self): + qemu_img('create', '-f', iotests.imgfmt, '-o', 'cluster_size=3D%d'= % TestCompressed.cluster_size, backing_img, str(TestCompressed.image_len)) + qemu_io('-c', 'write -P 1 0 ' + str(TestCompressed.image_len), bac= king_img) + qemu_img('create', '-f', iotests.imgfmt, '-o', 'backing_file=3D%s,= cluster_size=3D%d' % (backing_img, TestCompressed.cluster_size), test_img) + + # write '3' in every 3rd cluster + step =3D 3 + for off in range(0, TestCompressed.image_len, TestCompressed.clust= er_size * step): + qemu_io('-c', 'write -P %d %d %d' % + (step, off, TestCompressed.cluster_size), test_img) + + self.vm =3D iotests.VM().add_drive(test_img) + self.vm.launch() + + def tearDown(self): + os.remove(test_img) + os.remove(backing_img) + + def _first_divider(self, x, divs): + return divs[0] if not x%divs[0] else self._first_divider(x, divs[1= :]) + + def test_compressed(self): + self.assert_no_active_block_jobs() + + result =3D self.vm.qmp('block-stream', device=3D'drive0', compress= =3DTrue) + if iotests.imgfmt not in TestCompressed.supported_fmts: + self.assert_qmp( + result, 'error/desc', + 'Compression is not supported for this drive drive0') + return + self.assert_qmp(result, 'return', {}) + + # write '4' in every 4th cluster + step =3D 4 + for off in range(0, TestCompressed.image_len, TestCompressed.clust= er_size * step): + result =3D self.vm.qmp('human-monitor-command', + command_line=3D + 'qemu-io drive0 "write -P %d %d %d"' % + (step, off, TestCompressed.cluster_size)) + self.assert_qmp(result, 'return', "") + + self.wait_until_completed() + self.assert_no_active_block_jobs() + + self.vm.shutdown() + + for i in range(TestCompressed.image_len / TestCompressed.cluster_s= ize): + outp =3D qemu_io('-c', 'read -P %d %d %d' % + (self._first_divider(i, [4, 3, 1]), + i * TestCompressed.cluster_size, + TestCompressed.cluster_size), + test_img) + self.assertTrue(not 'fail' in outp) + self.assertTrue('read' in outp and 'at offset' in outp) + + self.assertTrue( + "File contains external, encrypted or compressed clusters." + in qemu_img_pipe('map', test_img)) + if __name__ =3D=3D '__main__': iotests.main(supported_fmts=3D['qcow2', 'qed']) diff --git a/tests/qemu-iotests/030.out b/tests/qemu-iotests/030.out index 391c857..42314e9 100644 --- a/tests/qemu-iotests/030.out +++ b/tests/qemu-iotests/030.out @@ -1,5 +1,5 @@ -....................... +........................ ---------------------------------------------------------------------- -Ran 23 tests +Ran 24 tests =20 OK --=20 2.7.4