From patchwork Tue Nov 14 10:16:49 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Nefedov X-Patchwork-Id: 837772 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="DWjZjczo"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3ybk3p5PB3z9sBZ for ; Tue, 14 Nov 2017 21:18:14 +1100 (AEDT) Received: from localhost ([::1]:58628 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eEYIG-000397-Pz for incoming@patchwork.ozlabs.org; Tue, 14 Nov 2017 05:18:12 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:48206) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eEYHO-00037T-P4 for qemu-devel@nongnu.org; Tue, 14 Nov 2017 05:17:19 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eEYHI-00075h-Sr for qemu-devel@nongnu.org; Tue, 14 Nov 2017 05:17:18 -0500 Received: from mail-db5eur01on0109.outbound.protection.outlook.com ([104.47.2.109]:61264 helo=EUR01-DB5-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 1eEYHI-00071Y-Ld; Tue, 14 Nov 2017 05:17:12 -0500 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=lsE0r0DiZ4ENtrXLmKuWT0Z4+DG1Oeh+PpBpC7wkeYg=; b=DWjZjczoKozRrrnoLPOVeaJqoB6pnije5bUJY/0YmcsF1to7oGWRDXmA3BHAX6ftV1LqS5LYLJAH+uAv2SzVuV6RwtZR7KeF72liuMSVZUPhTBHEphUD3q6G5h9TOXmNgwU4r+1uNpbasSfx2br1hbhyYwj2eB5OIyeXsibCIko= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=anton.nefedov@virtuozzo.com; Received: from xantnef-ws.sw.ru (195.214.232.6) by HE1PR0801MB1993.eurprd08.prod.outlook.com (2603:10a6:3:4f::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.218.12; Tue, 14 Nov 2017 10:17:11 +0000 From: Anton Nefedov To: qemu-devel@nongnu.org Date: Tue, 14 Nov 2017 13:16:49 +0300 Message-Id: <1510654613-47868-2-git-send-email-anton.nefedov@virtuozzo.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1510654613-47868-1-git-send-email-anton.nefedov@virtuozzo.com> References: <1510654613-47868-1-git-send-email-anton.nefedov@virtuozzo.com> MIME-Version: 1.0 X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: HE1PR0202CA0012.eurprd02.prod.outlook.com (2603:10a6:3:8c::22) To HE1PR0801MB1993.eurprd08.prod.outlook.com (2603:10a6:3:4f::23) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: f63fd12f-7fab-42f6-c79b-08d52b48deac X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(2017052603258); SRVR:HE1PR0801MB1993; X-Microsoft-Exchange-Diagnostics: 1; HE1PR0801MB1993; 3:cCYvucWxxuxQIBlkTIbV94q6aGniJ7f3Z3rAqEUBhXUag23fKfd63QpU8R69zHbmO1q+zGkwUFTIG47fO93oIhOFEXFHaFNAB3yMdzbMkJdShdKnTcbslTaUiQURwp0ZDGlEjqacuRUnyaAaeQwmuOLsqL4TPZLH+R2pismfwK4gbDGjD2dXSNABIh0imszIpkQfEfMM0n+05q/Rd4U9dbZ2B5qeQhLyzeufxeo3vKN/zkDFIcw6yjYOG4ORZMQ9; 25:LmqOqjye42rd1zvDpSm3B3AY9zTEUROTUA0jSc7SsBAFtswubCCtPA66uiCrn3ZCUyNitaDHloYPWDbKmSq+mX7Zy5AEqZimsIinPwQos9MqfQc61xNsHleek+4tc2Urz1tXHouCbgzP4g5sVA1yYCOeohVEt6+jD2HfWaSCO0XPSaYlh7gyQ/x89UUTnae6OMSvFnROcNwcONHBwqeUxwS/jNSUPz7cQsfV6f98fhm3c4BduA9wXsK0V16mu9tnpDcBBjnBVxRL86LeliVOGD7Dulr7d5IpyB2hqoQ/VXj1mQOchCp2LwMD29I5ISECeszi9pEkmo1KOa/rthKYhA==; 31:aZfmz23yI6WSfz3fnQSSKm+4th53J9/tTlTlnynEXuib+u4+yxiMYJb9Q2VfgCnM/vxVbPxNh8p/Ua0KworiZ8aVXwFn+MkvYbNVZHSAKxy3ofOOrrvJdk6+OTjDc+qOlxB56PShPk2XxxKXdMJ13KjDJThv7NjKk1EQUiOumn6SgfPUhHaZ0j9Z+xFsrL1+wh9/qjIR4oFga0zA5NBFStRVJKpU5lm14mwjtc5tMGo= X-MS-TrafficTypeDiagnostic: HE1PR0801MB1993: X-Microsoft-Exchange-Diagnostics: 1; HE1PR0801MB1993; 20:3oIsiuJN3c3ru6uxNM8LB/y1u2DLQohnL9dGnD5lCqb3znKd07G8NrTeMr26+LaontLUJERsqUE1V9NIRGkb3t+EwDcR/WCZgslnx0hFVBsl/+VR374ldQauOCg/46MAY6Bk9ryVhEGfT0J5fYCsxKq1X3wb+SaRBxdGXClrbgBUIQ6/O7v33fxRpItcszT08KCVLiN4tSGT3/l5ZKKpUBgBOG9bpggIIchZN+3PJloVuONO1TVQbmCxy4jBTs0xZhXrwPgaiiCWzElYgzsXeF7UcMTGVWLQhBTWSmJNQb8AONZSwLJn2c4c1b3HOyL/X/on1PY83WSdwt+o0a05fws71wM4/410DcDZFLpmZXUF2lOzUF9Qj2b4AoEQDde9w5k+2ApOfIt3XoZs43CiNxjKwZSqITOmolbRf7tgMgc=; 4:GeniwSWOpS8rOTdsGoOzGqhQFHNuYcAIxy9erVPVkvb6dayJNuQHqAN6zPgkErITMYPgskwstXULMn2wiNyakUNXdZO5JT2pTMJwFq/Lfy/md40tS2IW4RfXG3aJBYAZl+ACzx1kZqIO4fA8zdgEMm5OL5J+HLdG49usjpTFM6bYvcyl5RFa2/ctVR6ldZ/U1Vy025TKKx6LqflTRkzAo+UIxqiF2Xf8Qmhan1vq7R46zqQn9usS+tSCUKGg9z/ZAwYHitzgwqRzZHzeDQv/3A== 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)(5005006)(8121501046)(3231022)(3002001)(10201501046)(100000703101)(100105400095)(93006095)(93001095)(6041248)(20161123562025)(20161123558100)(20161123564025)(20161123560025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123555025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:HE1PR0801MB1993; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:HE1PR0801MB1993; X-Forefront-PRVS: 04916EA04C X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(6009001)(376002)(346002)(39830400002)(189002)(199003)(97736004)(5003940100001)(6916009)(3846002)(2361001)(5660300001)(69596002)(6116002)(8936002)(8676002)(81156014)(2950100002)(48376002)(33646002)(81166006)(2351001)(25786009)(6666003)(189998001)(50226002)(47776003)(6506006)(16526018)(106356001)(107886003)(105586002)(68736007)(478600001)(305945005)(36756003)(76176999)(50986999)(101416001)(316002)(16586007)(50466002)(4326008)(6512007)(2906002)(6486002)(53416004)(66066001)(53936002)(7736002)(86362001); DIR:OUT; SFP:1102; SCL:1; SRVR:HE1PR0801MB1993; H:xantnef-ws.sw.ru; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: virtuozzo.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HE1PR0801MB1993; 23:ZgTjI1pg520ciFp6J0V9uKHfLwy2utDyyPGqRgL?= jY5Ndjzwoo+aLodBrzcZr6Lhj7m5NgPyOpJ+yINCgZBcWNFDp1EduJZi6QJIighiBA16pG1vIs4VYWfCX+oZZDhp3KDYYsZ/l95CA8twnkwnjeXoKsSFeDMepRJj0yFCqgJIv4qOQXD3GeW5mnIV7j+BuvJ6WJuodSGUOykrPvym68CodLvamzFrqqj/2Zlx7qQKcL2zrnEx9MjTgZfscJIG3+QA6LrgnGxPmM/aToNrhfAyhi0HhzFTKYgojQMIoilpZZr3Ct6UVwGfPakN5D1K+ilcqhyBriEpu14Tu3CQdZtZOWpGwegdWC5XS731sUI+/rOHv37bC88+tGLxMgME4DZMcHeJttk0iUJ+qQWlUMtCSnDtc7S/wRfPPOSnbyG5GqKjutGmjO//+/Zhq8e6pLEJsMHoW77jChWIsOvZPXhY5OwwcOhunUL2UkdPoZeloUZDmZ/fZzDdaUZQt2A/fZy01u6B0sr/OkHE3uuHEKKQiq7RLyZiDDy0240/lIjV3ClvquDK3bAVpEFwkzMlcvlViOO27jTmRcvz9UxyAt7BitPCxZ7wqhtt9neTLdwybzJyP+WDFPPqftSUSbKvAYYVTgWFbArYH12wKd4WKwL/wMzYbVJ9G6WW62OTn5S/VF1CjGyXWyOb5TZ/cmk0p0btyOxgcfVMJxmWOxVjVxGwfw9CUYliUDGfe4ZdEqMV8nmS1k0Bj/zlqZ/n4YOv4XQq5lpSMkdfNQOu8XDsWy8Z2dwfoBzt8esHNmi1Z94U9Fi5IbC4FHHsiD48Cw9T2T5BOsRJicrRGfuZQA+f002umR+ZP3n6gs8xCFM+4GETXQhCU4gV5pcW0xZttKXVScnJNtOHnPVcKAkYOADESQv1TSSokQXZd872FMEsJaiUCFOlA2Sfm0JUtKHXzFP9phtN9Ej30CSgQQ+D2laGlANhLGRwBrv5MhIfJqfMMcJd3SnaR2zYAGA+MbZs3RuIhcUSZ1hoIPNH4Dl/L1Tq6rSP4U+ESrxtg7cG9+v5iTQxShKrudAhLdnQLFRhKXOGEH0NANLMNpcE/M7jhlpHR62N8x0F/wrOBBvR2kmMApunkxRsgUT2w4es039XDuRZEnwTdAFffZCq3OFbeMfIqSxXzpIlgdIEjIyLNtLRhajs= X-Microsoft-Exchange-Diagnostics: 1; HE1PR0801MB1993; 6:NGo1d7Pja1KTKcket0+fdWaxRDbs3dY1jN9r2U7ESXKuh6EfX0MV9OADyoRxuizW7dvPMO/jttRe+5O0EHLiS9WJfVJxZx88gLueXwQXJ3OXMLYvWbMyY6SG3KvdCnVeIh/EJ4dx6gS0oRYJNdOTVviH94o/Sr720s00FVh7fsyEDoaXrPPC7FeiMuKACUdHYZ07thfzti7JNz3e2hC8H6JCmga4paJn7BfHx0/VuEFgrE9gjMun2qd7y1HyojBdt5WGeXIBwpSwnXwUS2t1jdb8A1kB/qeCF2325A4iwxYilP22jUqwal7/EN8QN2kNAqmtN/LnGkW/MNnRAYPJfL54v3fzTQTwlnUZoNICupg=; 5:z7nsc4kre7UIa1P2GGLkgbRJAXFIrOh2YGUAlE+QdA27SzMNTXhSiIgR00EhQo6uE5vhLpJ01U0n4cLG5Zw9pulx5rf6sGLqIdiW5THgVSN4/t7/f/XcU1vrA5J+KI260Sgk0YcsYorAPx/v1WshYoesUcm6PLVhMGXwoHl2d+c=; 24:bv0CwyzIFSVUWPaqZptdv2Crk563iEvjVamGJDDQCHSgMKK0IZ3h11LrvMWbO1t3R/tPybzafAm05InSnCEE0q6Xj5B0aVtpw2eEtvEQUak=; 7:HGlL+MzPgPUXHV1AJNZGFGlwVL8jQ1LcLaBpxeCFhXSpiyyQBTGjSyjJVu9R6ckL2YhVxAXL4IvITX5uTofCdT2msMDHW8z1S7zqKuywWD9Lgc2KPjt00qXtyWQA4D2D693Y1LRn52IenFl5X78QB3heFDujergdBvUdsQSJYkkTpPVGXCrxOSbyLr5RaQNsx2dBxwBpMIwHzc3FlKv/qpmIpfJdlgAjKrZen/Pjxz00hxlaFLJdT934Xx0MiEg/ SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; HE1PR0801MB1993; 20:lU7yAG5JVXPF4EAhHxnMs38FRFcCC3raDkZFVlzvhY3wAkFCVa/QS02VR428tMkfucmTBEbsRAdW8HOUfVUnAnuN9xHodYs8m+r8k47g+w6jj7sxWa+xlAS1084Wjnuftg4XBhG6HvXgRNQiwxFE+7e1eqBIrACXHWKY763A8uM= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Nov 2017 10:17:11.0829 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: f63fd12f-7fab-42f6-c79b-08d52b48deac X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0801MB1993 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 104.47.2.109 Subject: [Qemu-devel] [PATCH 1/5] qcow2: reject unaligned offsets in 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, mreitz@redhat.com, stefanha@redhat.com Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Misaligned compressed write is not supported. Signed-off-by: Anton Nefedov Reviewed-by: Eric Blake --- block/qcow2.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/block/qcow2.c b/block/qcow2.c index 92cb9f9..45c5651 100644 --- a/block/qcow2.c +++ b/block/qcow2.c @@ -3349,6 +3349,10 @@ qcow2_co_pwritev_compressed(BlockDriverState *bs, uint64_t offset, return bdrv_truncate(bs->file, cluster_offset, PREALLOC_MODE_OFF, NULL); } + if (offset_into_cluster(s, offset)) { + return -EINVAL; + } + buf = qemu_blockalign(bs, s->cluster_size); if (bytes != s->cluster_size) { if (bytes > s->cluster_size || From patchwork Tue Nov 14 10:16:50 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Nefedov X-Patchwork-Id: 837774 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="VX7e2tOW"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3ybk6h2PX8z9s81 for ; Tue, 14 Nov 2017 21:20:44 +1100 (AEDT) Received: from localhost ([::1]:58643 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eEYKg-0005As-Fu for incoming@patchwork.ozlabs.org; Tue, 14 Nov 2017 05:20:42 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:48267) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eEYHV-0003BM-S9 for qemu-devel@nongnu.org; Tue, 14 Nov 2017 05:17:29 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eEYHL-000789-W8 for qemu-devel@nongnu.org; Tue, 14 Nov 2017 05:17:25 -0500 Received: from mail-db5eur01on0129.outbound.protection.outlook.com ([104.47.2.129]:55200 helo=EUR01-DB5-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 1eEYHL-000770-L9; Tue, 14 Nov 2017 05:17:15 -0500 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=aRJWzfFwxQgGpmtCUv/7OB5Ez1wvB8AqrIUttg/9x6I=; b=VX7e2tOWhBGZC4VxFSiqGJZq9hN4p7jmnXjK5y0cBxRlCFAYxp/ciYKUlNWceTfVV85zuDmHQbhqY21XIGMGd63S+mM4LE3CXodkQ6U8YHu7JwbQopuGWwf7ugferVMcwOSOvkbnVkzkrObZADG+FODazIHQid/9dZLQkMD4Xu0= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=anton.nefedov@virtuozzo.com; Received: from xantnef-ws.sw.ru (195.214.232.6) by HE1PR0801MB1993.eurprd08.prod.outlook.com (2603:10a6:3:4f::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.218.12; Tue, 14 Nov 2017 10:17:13 +0000 From: Anton Nefedov To: qemu-devel@nongnu.org Date: Tue, 14 Nov 2017 13:16:50 +0300 Message-Id: <1510654613-47868-3-git-send-email-anton.nefedov@virtuozzo.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1510654613-47868-1-git-send-email-anton.nefedov@virtuozzo.com> References: <1510654613-47868-1-git-send-email-anton.nefedov@virtuozzo.com> MIME-Version: 1.0 X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: HE1PR0202CA0012.eurprd02.prod.outlook.com (2603:10a6:3:8c::22) To HE1PR0801MB1993.eurprd08.prod.outlook.com (2603:10a6:3:4f::23) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 6fe0e5b6-3f5f-4dfa-f4ca-08d52b48dfdd X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(2017052603258); SRVR:HE1PR0801MB1993; X-Microsoft-Exchange-Diagnostics: 1; HE1PR0801MB1993; 3:O6/eFdu6P/vV6ZzTAC0J0LrA2/EFgO8mp5yOEyUJAUWt6FG4j4U6NCo0R5XXT7FBW5BqcaZ5+nIKUWrQf9Gt0SIXwfXj0LOtFPoTb0YZiAYF3rpGWzCLUCF+oa9jSTx1gxfYx51nUbhYotGIto45+MHG1KCZLgohG1ukK8IhjKEnxThjJQ7CZ0Zdui/ijUZFuqRwJpD68cLEZcbfzC3pv657KfA1HBYADHbjZx12ns5urEFmbNC1C9oeDL+PZlU3; 25:+I0Xl/Fq6Lu1QRtuk07UKCwE/rRLhvGZTdUUDjE/fSHMrgBs5gxbUZiXsVrmOnsFZg/WCXaTCBMBw0B7tS7b3e3dr8dm10HOzTbQ/RwQb3mQe44L5Fe5jYv4BdeZuSI54ee/3af1Yf8d5L6AAFhVxZRriLEDgCMomoc1l9bv/ltXWfw4zzhzjziPxq6zfjZ9VbQpGiPwpTTbBDvGaJ+1FZPJrEyxYlzXIJiGPmuuayMLCvZA5ORR9pFpjKbAyZsAT6/5lLSZdX38ceL5NDtyUTJ1mkP3nKOS+2S5ZiDEwGqVDCi9/5ZCSVQ3rqFLzcRzy4CN1BM9oRRefD7SjWjIH2kmbCVgQnAw7G3fIr3T/mI=; 31:qHdkkph0hzNw7ni5MzOD5ON4uUDroHJnj90ftlYpUw8Ymjvdq4cDapegUnAm5PHy2E+hA3mfTLjGYt0WdLaC2gbDFhOc7aZ2MtdCfHnF5PLordueLt52aJPrRzTgJJUaW1o2ncah7a4EN9QZ0J0QCyKGegWxFYTScGHzRSKwKvGGMa/T2F2Hho8R/2GgQ2/cTcGw7rAMiLHz8NzVVmvV/xRm1H1Ty+mZ71lskWAPlJ8= X-MS-TrafficTypeDiagnostic: HE1PR0801MB1993: X-Microsoft-Exchange-Diagnostics: 1; HE1PR0801MB1993; 20:2Y21pvR4E0P5H85ds3HZs1xWLoEI1IoPeHYgjHMmZgg5R+rUWm/z0zxqmpQ81f/ws42E8UgJeD6sznlH6bkkpu13Hp/fDQWKu8t9X9O3fTnSwpu9wXhWYgugAIILvQTGYLm9PeG7h5jAwLCI5QAKbbhGpA06AYkeOYL+XanLW7gVLxPWbRuBqVC1hoNpgxExvVLKu50Ti+NAEh8funpLW4aYzxPF0NLtx4MT+Ce3lyz4Pb+dI7ENPWEBxvMbYaHpL9pMZBe7GQk/RpdOQHe3HuCqBlvnIbhUWe/IB4Gd58ymRZ+Xm7Ata1/7STrS/h0OIqs1tTqrNzXKAd2e181fOMBtS8/3U6Sa1cbDfL9Ix5eSiFhVjPWTwWroY0bNs9CDb6QNaF1Kp/rScCQ381qZ/79TLETa4YGZhMQi59UiQbU=; 4:emF3XCXAetf/4+oHT2AzAdeQbsmpm3hdMwXj8kTB5ovAe3XO2F1QpKXQxMI0oVysCsScWKRKR2aQR+fLQNp5yAuCAsAUi2dqLfI+JpIym9khsjQlyBH79EA1zSxkKrX8z3qx0p6gZZROvEBz4zpQhXOm4OZ/0TEWthpaEJDk3YgJYL+ENHVIwgm2zn32OC9Q1WQEziGo/uzcoowAP52W2KX4NhxfqSwrcpP/wKEhcF5bVxqO0bNzbZSbs5QaE7agfPNXX632lxk0zJuZopPPnw== 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)(5005006)(8121501046)(3231022)(3002001)(10201501046)(100000703101)(100105400095)(93006095)(93001095)(6041248)(20161123562025)(20161123558100)(20161123564025)(20161123560025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123555025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:HE1PR0801MB1993; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:HE1PR0801MB1993; X-Forefront-PRVS: 04916EA04C X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(6009001)(376002)(346002)(39830400002)(189002)(199003)(97736004)(5003940100001)(6916009)(3846002)(2361001)(5660300001)(69596002)(6116002)(8936002)(8676002)(81156014)(2950100002)(48376002)(33646002)(81166006)(2351001)(25786009)(6666003)(189998001)(50226002)(47776003)(6506006)(16526018)(106356001)(107886003)(105586002)(68736007)(478600001)(305945005)(36756003)(76176999)(50986999)(54906003)(101416001)(316002)(16586007)(50466002)(4326008)(6512007)(2906002)(6486002)(53416004)(66066001)(53936002)(7736002)(86362001)(21314002); DIR:OUT; SFP:1102; SCL:1; SRVR:HE1PR0801MB1993; H:xantnef-ws.sw.ru; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: virtuozzo.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HE1PR0801MB1993; 23:VbDl9SIqdC3e4AtpoRHV3dy3ULYjOFN0vc7tv+C?= rIwf67QSRLWFlwi8ccFl9GNJ9NXI4ZRL/xHNlsU8zOgcoJz/2+DPcUM8Y+fXW1ctFFvqfbQNsDLPPNsNNGnCjBQA/06wVRoeVujHzmgRUKgzYc5jOJj1lbBJUuOdX18zYzuPI3jEgniI3Lv2BD9GAikcC1coF9NxpO0hEIfFJ0pz7YQsjGz0qFNPROHllngtaHF1/bZ5gELUCXKyt3HckRc3t+hrlyHzZhwguVxzu+21ZnPdlF8XA3xsisOxlcl9yY8BW4Y3HoJepUBvpR+dtnY/XABaqZ++LqorII8loEGwG2hWfVFsNBc0fMTh66zLYoIOhrze32CZfxCXUmETK0fGF4Y1wWfnL9NxWmsaWrwFtQKi5GBDADSbeMx92eVk6VqY8WVXN5sW5RkVJ9DeMl9cGN+K8h8knVl369CVoLAQ+fZSmoMzGsUTqSGCyZQUYPYY5ujszTlD3pQNApTWjDIqrAexuhaitTZgGW0K+8skipvxEIDbjjKyTEMTb8MQrGu/JfeaSY19l+Y7TDxsqrjm7oc6QuXUWpzbS+ZnfVNs1MOnhq7XlKGQSSphlDKVv3Gp6FqpCdqEyIxtLiXZV3Dv3b07RJ1G14aZ4MqKoEqjZvD6TbtVUQYPrZKHo3r17RY1bee+Zm7hqxNfTJ7BlMGrmO+O7lmacCe7gD3U2BchvNWK7gM/cPnzZpsW5V0K+NOeIdtM8YGRCljMi+BdQY0cpzRWekN9BW/k6JIsMLXpe0RtCv4SuM8xeLcnB+we6/ER7GFCQrum1mrD3zWECUuFtCm0g/mZnm8FZrQdJ6JhdeifGFDEBrX2duB1M+CBaEn0gpz9z/zu/w3x3nLEAHEgb+/ggkbaR0uTdDSxyvNq63CFA5l7OS0rjWhs3jjy6TN/EKIdcvkt0qXK3uQCKX71Y/WLsb3+M3gfFnMZ6QmmlUar+DEDHfGHK76jnItfqX9326U3hJE7nGAJk/cJb30FbSvCEb3iz+Cdrlcxqf05OGIPjBpVB1aZvlI0Dl/xdZ5eMXOKXkSnWAbq8roJ/vrffpVb7U+YKBbQZ9+MtbdJjjrKx1htrdlDWlvpyjyIBEWFl7EN1B5UhXDtxs3GxgjoKviZKTzlb86xZhBqvVB72LtGkmSmRfdlwglTXJoxji/EC4JSvig4rC+8DYXeEpkXWtzkMX6HArm6SgXD3X8Wu6w== X-Microsoft-Exchange-Diagnostics: 1; HE1PR0801MB1993; 6:aJUU/0uIFGHPEfzhDQ3lydtNE+rtkENFecwV2hYuDgpcLX+GKQpABZ4DkxS2gRHGNPMp3J58o8UV8jTkuNqorYIBWmDZfNOjxwlblQCWWp23cU509noFZlan4/ALfaaufihpvaoEjss1VNty0uVbkv3Zy1CP6++fwKLQ6kCN+ozrdhrIrovLGp2sBb1lWr1lDPpMrhnYgw73mOa8xqNFNDdUoZZdhjD7e1BqAOJQGqMIez7xbNSQxDN24Nngv/jjpPmSoGee+Td0U4aRCSG10nWVPcHq5FYkKL0Vt8flo6RTqtwCxf6IXaVmHuZ9Q7VnhJvWrnBYi+b6haPZjWQEKIvtfj/3vFqt+OjSbyegF70=; 5:3hc6KhJNUKvxxeBaAY9Wr+KVZwIKkIb68iqiBg8uBBVU/m28QH2C4qQOU3MWVXGiVtAARyDT/K1AsuAEJXb5uYeu6OA3RicQjVV0h8uOgIZ6Ph/sLluZjkup1kpptOI21RbdcJgY0wUA8eXfMXW9LtlAQ14fx04e6fLJvaHF0qQ=; 24:/QtK86fGt9VWgslaaOuxhb+Xa9MNhWN+FIbinj9inIyhudc0q8Tx1Na4YC0qpcJUIeZQbxzW0AI/fqVR2HoDQzDt8E1rfTZOkXTG2jzbmMU=; 7:S1+EMCezeMWdK0j5udeWnzWCh/errTt1pwDmIoApXsITCy0KLYLUQSc53IVoxcBXyv1Es5hKnJsVxTnw1GkY4RjVvWQ9Dm4cgyDz1oa4IkPdHc/ypKz1nnZ1JFEG0HRXQMlmx2q8qLyy2f7PJeW8cH9hZVL/WiAnMXEw1mpFi7uooZvL9SEKAvty/WIuaAAiQb/aryJ5N/ZlYcDk/AmSKb9WKOB/TYJZM0uMbEB/2pCjcvCbSt2YvPNwy7FjkB1K SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; HE1PR0801MB1993; 20:Za93DzHDBjdiFVMnHwuyeWRhajeYg5y9goUAkMzLVvr64HsIzHHAJBfTvHYbvF+ObNqt8qa7UgE0YAMK1+y9hIR929eKVHE5tGGWOtgDJP03lgWHgyQUKnuqMyBadQ25rzQuBEEAMpFWAJhym3i8zAQUM2J1+QRwH8V84HWXDx4= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Nov 2017 10:17:13.0204 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 6fe0e5b6-3f5f-4dfa-f4ca-08d52b48dfdd X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0801MB1993 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 104.47.2.129 Subject: [Qemu-devel] [PATCH 2/5] 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+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" 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. For unaligned requests we use a workaround and do write data without compression. Signed-off-by: Anton Nefedov --- block/qcow2.c | 77 +++++++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 56 insertions(+), 21 deletions(-) diff --git a/block/qcow2.c b/block/qcow2.c index 45c5651..3d5f17d 100644 --- a/block/qcow2.c +++ b/block/qcow2.c @@ -3325,11 +3325,9 @@ static int qcow2_truncate(BlockDriverState *bs, int64_t offset, return 0; } -/* 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 = bs->opaque; QEMUIOVector hd_qiov; @@ -3339,25 +3337,12 @@ qcow2_co_pwritev_compressed(BlockDriverState *bs, uint64_t offset, uint8_t *buf, *out_buf; int64_t cluster_offset; - if (bytes == 0) { - /* align end of file to a sector boundary to ease reading with - sector based I/Os */ - cluster_offset = 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 <= s->cluster_size); + assert(!offset_into_cluster(s, offset)); buf = qemu_blockalign(bs, s->cluster_size); - if (bytes != s->cluster_size) { - if (bytes > s->cluster_size || - offset + bytes != bs->total_sectors << BDRV_SECTOR_BITS) - { + if (bytes < s->cluster_size) { + if (offset + bytes != bs->total_sectors << BDRV_SECTOR_BITS) { qemu_vfree(buf); return -EINVAL; } @@ -3437,6 +3422,56 @@ fail: return ret; } +/* 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 = bs->opaque; + QEMUIOVector hd_qiov; + uint64_t curr_off = 0; + int ret; + + if (bytes == 0) { + /* align end of file to a sector boundary to ease reading with + sector based I/Os */ + int64_t cluster_offset = 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 = MIN(bytes, s->cluster_size); + qemu_iovec_concat(&hd_qiov, qiov, curr_off, chunk_size); + + ret = qcow2_co_pwritev_cluster_compressed(bs, offset + curr_off, + chunk_size, &hd_qiov); + if (ret == -ENOTSUP) { + ret = qcow2_co_pwritev(bs, offset + curr_off, chunk_size, + &hd_qiov, 0); + } + if (ret < 0) { + break; + } + curr_off += chunk_size; + bytes -= chunk_size; + } while (bytes); + qemu_iovec_destroy(&hd_qiov); + + return ret; +} + static int make_completely_empty(BlockDriverState *bs) { BDRVQcow2State *s = bs->opaque; From patchwork Tue Nov 14 10:16:51 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Nefedov X-Patchwork-Id: 837773 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="EbAWc9au"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3ybk3z0g3Fz9s81 for ; Tue, 14 Nov 2017 21:18:23 +1100 (AEDT) Received: from localhost ([::1]:58629 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eEYIP-0003Dl-4v for incoming@patchwork.ozlabs.org; Tue, 14 Nov 2017 05:18:21 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:48251) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eEYHT-0003AF-Rk for qemu-devel@nongnu.org; Tue, 14 Nov 2017 05:17:27 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eEYHN-00079q-Sg for qemu-devel@nongnu.org; Tue, 14 Nov 2017 05:17:23 -0500 Received: from mail-db5eur01on0136.outbound.protection.outlook.com ([104.47.2.136]:21775 helo=EUR01-DB5-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 1eEYHN-00078P-H6; Tue, 14 Nov 2017 05:17:17 -0500 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=rh6fahBpaLDgcYGTgG2A/cpfLw0j1jmMvl41r3annOs=; b=EbAWc9au5YA0OON+30VIdQuothvNXQW4dBtxAT/jCAM3k4eF1+5xqiB/f6HatxBBfXSQlBvtV1ribRT9MNdL7Ng5kBbGgu/2lRXTTA4k4dbaw72SPDLiwCJPB8WhPy7EdPdlFZ//KNQa7KLHFDqdguN64pjlbkugcBB5A1tT/CY= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=anton.nefedov@virtuozzo.com; Received: from xantnef-ws.sw.ru (195.214.232.6) by HE1PR0801MB1993.eurprd08.prod.outlook.com (2603:10a6:3:4f::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.218.12; Tue, 14 Nov 2017 10:17:14 +0000 From: Anton Nefedov To: qemu-devel@nongnu.org Date: Tue, 14 Nov 2017 13:16:51 +0300 Message-Id: <1510654613-47868-4-git-send-email-anton.nefedov@virtuozzo.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1510654613-47868-1-git-send-email-anton.nefedov@virtuozzo.com> References: <1510654613-47868-1-git-send-email-anton.nefedov@virtuozzo.com> MIME-Version: 1.0 X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: HE1PR0202CA0012.eurprd02.prod.outlook.com (2603:10a6:3:8c::22) To HE1PR0801MB1993.eurprd08.prod.outlook.com (2603:10a6:3:4f::23) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 3e212435-f908-4d13-4a62-08d52b48e0f7 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(2017052603258); SRVR:HE1PR0801MB1993; X-Microsoft-Exchange-Diagnostics: 1; HE1PR0801MB1993; 3:Z8jWPvo/PuVgthl9+TvJw4zxKvMLPXWrn9BrXPUJUpw2dCff1y42vxnynhOSd2BGQ7LMqsMhsmSrlG/S6ZnvJCSXH2+EOE4kIQyq0T0x4gESZEzK54EcZE5WUSvPhZV0fhO6F0vR8jXr2dmjlYrwNky9ec+7pYhu+p0xomN+l5sZZ92pwfg2ppMUXX2OHwtXkOJfh+3ho1XcSi/Bzfhimg7a9avCQTSy+CFwErdAW+6nl4B0HEQLKG1k2C3JxnIP; 25:iB1vZ2yucCfma3KfdKVS+OS8RASUbEgP/Z8fGdVHCVwFXiWo9MHavrxt89dD+6Ro1gDb/hR+QoGyh9NRzIN5T7Rxm6WvC4zuB8KNl0h328aVdrH0FL5/7uTBcXQSBIxoR3x7B+ZZpHwjrrgSf2/J7aykQwYS8QRvwSeKHopq1m9oIydOY0UvYC3KIKacnAJAaPWAboLQIjXTfz1eQq/h+sVQciqYA4Lz+zAa0njFgAHmUg3xoFprFQaRDtO14wVcag4Ct6aWtFYLdbotv4+lOuz6qWWlJqKXT+/fVLcHe/u0gkh5tZYnhwLkt/VkloTBKqXnVN8raVxWgcebN2LodmLHK/ju1/JVyLeT3FJrmfo=; 31:af5/L7rwovicqZtLeErS3EB74JMzSvKKOrdCMsClfnqDUqR2Wmcq7ZKok/s3PsXt0wRxoz+KVRE5bgcXf7SvykryAkU+7KCAunsJgFGFLi3CzgsDF96pbrBTrtZhfoDR3AHRNKbsVsQcLD5CNwdepfu6FgfWnW1K9ZcLIA08LBca3U/8V29FXOUUVTawsDvsEF+iHA55BBCsU3uz06i9arl/4zzDnO5+JCMvQP4AYbE= X-MS-TrafficTypeDiagnostic: HE1PR0801MB1993: X-Microsoft-Exchange-Diagnostics: 1; HE1PR0801MB1993; 20:9VG4O7S3EBxcXy79y+0RlmFy44ynoeeMGlb1rR/5dT4jYR84Cv0pQDPfNlz1QUcaE8EdLtGD6feKu45iQmSqtMtmxGY9lNMKAvTJNr5sCXjYpysKc2wNupabhqqqYISd4UIaMpL/2KfMYg6fZi7paH9muwHtreH/4UISilsaja5FgAbfL8LZFR8rv2HP6ASGxYWwtmScqKuI7HNyiHA+qG+NZ1FEAmqR+qQ5cIoNCnfxYID3PQfzGEEj/BikjKnPeUEO8kppfm3yJZCepIcjSWLckGWDD+R3tCAXs6eMyD9qBGlUaybtEYDaKNd9jJDzzU3ORTVXtzM17KOrVJNlkD883g+d8bEpGTfW6uw+aU1QXysvxwMDYcKsssSS/sd7HG3SahsaLmcetuZjalufSHmXwNBckEHXT1PBg4qIQr0=; 4:545yG7qPqCc4obmfANCZMNQ2wHIsvtsdL1s7UtUtA9mYU4NsCOUzGOz3W9q/LHlTJNKW03lHSjfKFiFcvRajY3G2A+eCbsZbbERQZ0I8Q1PwAsfIc5ySYweEbLZ/4fdUnRonJUVWOV7racCr8yvTJ+qGIgza64/DUES8xeGI5u99y6Zg7OBjblDuS9V0GfaX7cHhkYqlZNTtq3qOc9Cj2QOvde1V4KxsAFdr+bcehDdsiWqRTBQlZ5sM1rIT0u0EZJpMVhR1yDVk80AvDz7mkA== 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)(5005006)(8121501046)(3231022)(3002001)(10201501046)(100000703101)(100105400095)(93006095)(93001095)(6041248)(20161123562025)(20161123558100)(20161123564025)(20161123560025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123555025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:HE1PR0801MB1993; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:HE1PR0801MB1993; X-Forefront-PRVS: 04916EA04C X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(6009001)(376002)(346002)(39830400002)(189002)(199003)(97736004)(5003940100001)(6916009)(3846002)(2361001)(5660300001)(69596002)(6116002)(8936002)(8676002)(81156014)(230783001)(2950100002)(48376002)(33646002)(81166006)(2351001)(25786009)(6666003)(189998001)(50226002)(47776003)(6506006)(16526018)(106356001)(107886003)(105586002)(68736007)(478600001)(305945005)(36756003)(76176999)(50986999)(101416001)(316002)(16586007)(50466002)(4326008)(6512007)(2906002)(6486002)(53416004)(66066001)(53936002)(7736002)(86362001); DIR:OUT; SFP:1102; SCL:1; SRVR:HE1PR0801MB1993; H:xantnef-ws.sw.ru; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: virtuozzo.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HE1PR0801MB1993; 23:1si7QgEDGAAr46045RmyDskLfRlQsYSYuEdg6Yp?= bE8FGXLSfSkW8iedqTrNWsUi1kppP4GTFMtVJwhlkPrZOuv767iLGRNRgMX90lV0KvwuowmQBmraFFfmHELkUkOkR1FKlrYShYx0GnshEIKA8yTOzDzuwyNcPJ6bZQq5BOIklhA+0TL9RZQPf63UGU2ZK+u0y+ixIpONiAf5CGxlacR42BAHTFFH+p5TEPOezm3t4RoDbaVB0uQX8JaQJo3wGf+s/0CUb6vSp2xC8D0C3FCDvulEwjgX8ppFA+FxpFhcejU9h3n7qatuAJ1SHlXw5B3UO1IskiGHqXYIliHhi43PJd+DDFWADkdmYjoN8nbxhhGpMQ1B+7p0+X6LP06PhfzkthmLDE2gtPDC3mxK2igrwMRNQzySojBg/pWLBNPPpNwaIbrHbD+eJp8Kt4s3PweQxAQkkeQG8dA0SdgRHcjJOFMmRUMuQS7GQ9u1CYKV85N8qKJFUNd1L+37FJZKd0YlM+54MRPK7PYHbYXs8qa7waXgvrPXcFWANY5dGLpqVC4lSIx3f/Rvmlr7nahPbG+owQajJ852ypXutbFZXTivD9bPZrwHzcTltLXPvSGR0aToZCq5yYwswYQVbgO2SRGuL4F42UDB0WujM6T2EFWBZnM+41MoiGAQlenaFT6A8FzjKdz2DZc192tuj/5QSsfs5dbiAt518Ae/KkxsxxTpea/QR8Dd9pqpTV2c77q2qNAY1DmxFIUm4oGoM9sQDUl1wkD8r+AXb31jFN4uU1RrgBrwgv+3F5yHrAdsJuQnTFjqYpJzIcofMetwb+0Tpdh3kp9UnCJFMEbnAV5CxIuGiYKLKxVPyAjXauGoLWUXbeLEI2W9gslg+Y9y/F0gKpb2PFb5wpHwQEoOkZTJ7xUINpla7XUQECRtViCsWJ4hRLmCuR/aFJqB++W+4FEAuG8Dq/ivMntjN4tD91DKsP2KH74z97Q9KORhVhPYoUcFY8X8WEBavffF4d3Z3SuvwAsVZqoKStTyjT/NtPB0sO2uEBg3adRj9cIeC3XSMhg1pck5e6e6e22qT99HdyW1OV8GsPZ4w3vhZd+1l4uJWfU1KPR9sMyl7xVEbtp+u8JR0J2RRF9uKOB2qP3L8UTomR4uoeiEibCPWHBCijEZlAteB7sFhJIt0aKXKjJiwMEiFDH6IvlSOjgaru3hoZDnO X-Microsoft-Exchange-Diagnostics: 1; HE1PR0801MB1993; 6:EtJ8VDcQBaw2/cqdPwF0S2yjRt7tvNCkQKJ/1dNWTyo96d4ae5WiGkkWQFY9IOxOsQku2PcLE2jlp/EhG79lmUHfJTs/APbsVgKzzV6IkXXcLKYdZ3kmacEoBcVKHO01F/i3Mf+XrteugGV+ukLoDvKSeb1TD4k5/RVNaj/PLL1MimElTJaTmOdTBhEGbAypoRR0RKPj2IaBcoqq94bISalPyt97IJmOxvf98ysr67J2IPfk4X6TDPDf1wJh/bBcNacJBX6x1PQPG+HMjCaHDO9HheH5M8V3kg10+5hwsWQ0TTd/tBTNgLPEZ0Jw0e9WkJWCL1vvtmlaRhoKpB+BC241zXw5FiUlvFxDXGvLmcY=; 5:/AEn/no97M/j7j7bHtYGRlvg+WrIcvYdZ9UI3BffWHPXsmef+TKFNK7973uN6UwTqRL7WtDDIBqWF4dxWDnsDH2kWPvyMjPV1PcMimDbaYeKLpBJeNK/mcnOLZiDmILQdBd0aDV3fgEGl3WyHB+owP/0idAvuvO9+GQ+4755nuk=; 24:zTqD7hPYgHkwVGZ7oc5OTTR+mSu9dnYuOjsOesyFNjrP/bPGyIMKKxzP033zcShGSW6mBMQ1hmpmG3IGw6IP6kb8MMZLKk/z1dU7fxeLCmA=; 7:06LAFDCI84KgkT6wy3LlClA80Y9HEfkISn8i+yxbLVQiGkByL1jUc6Gh1Ex7JcFAXzX1xubdSdQe72vchzx/bTMJCdnB0ExldMbR2aQSBA/o8qEXzYRnE+ZpEa4VfehKvDNRi6kqQSzuziz67FF4cmNAUuTj9GiC90jiDJRX9HvuVZEdWwlrz3xn5YJSm+57CCsTgvXvLNuLQtgtmeaN3Lpo88ihtwfheDXsNBAW0qwsqSrgd/LkhbE+EDV4y7/n SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; HE1PR0801MB1993; 20:T8HGcb3ZfXwI3tg5cScsT0rvbzAO5x3RnOW8lCYWowtrU1GW7wG3xP48vWAopFNl5Bd+5CenQz+fJILMAxnNh8uDmXldh6bVQ4Mpt5G6G+j18SnJiqzpt2MPafX8dSFm3XZp6UWEkj91Lf9SFesAOpMtSoPhnjaxb31V4DNPPoM= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Nov 2017 10:17:14.9266 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 3e212435-f908-4d13-4a62-08d52b48e0f7 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0801MB1993 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 104.47.2.136 Subject: [Qemu-devel] [PATCH 3/5] 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+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Anton Nefedov Reviewed-by: Max Reitz --- block/io.c | 30 ++++++++++++++++++++++++------ block/trace-events | 2 +- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/block/io.c b/block/io.c index 3d5ef2c..93c6b24 100644 --- a/block/io.c +++ b/block/io.c @@ -953,7 +953,7 @@ bdrv_driver_pwritev_compressed(BlockDriverState *bs, uint64_t offset, } 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 = child->bs; @@ -988,12 +988,13 @@ static int coroutine_fn bdrv_co_do_copy_on_readv(BdrvChild *child, * allocating cluster in the image file. Note that this value may exceed * 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_bytes); skip_bytes = offset - cluster_offset; trace_bdrv_co_do_copy_on_readv(bs, offset, bytes, - cluster_offset, cluster_bytes); + cluster_offset, cluster_bytes, flags); bounce_buffer = qemu_try_blockalign(bs, MIN(MIN(max_transfer, cluster_bytes), @@ -1041,8 +1042,13 @@ static int coroutine_fn bdrv_co_do_copy_on_readv(BdrvChild *child, /* This does not change the data on the disk, it is not * necessary to flush even in cache=writethrough mode. */ - ret = bdrv_driver_pwritev(bs, cluster_offset, pnum, - &local_qiov, 0); + if (flags & BDRV_REQ_WRITE_COMPRESSED) { + ret = bdrv_driver_pwritev_compressed(bs, cluster_offset, + pnum, &local_qiov); + } else { + ret = bdrv_driver_pwritev(bs, cluster_offset, pnum, + &local_qiov, 0); + } } if (ret < 0) { @@ -1107,7 +1113,12 @@ static int coroutine_fn bdrv_aligned_preadv(BdrvChild *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)); /* 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, } if (!ret || pnum != bytes) { - ret = bdrv_co_do_copy_on_readv(child, offset, bytes, qiov); + ret = bdrv_co_do_copy_on_readv(child, offset, bytes, qiov, flags); goto out; } } @@ -1209,6 +1220,13 @@ int coroutine_fn bdrv_co_preadv(BdrvChild *child, return ret; } + /* write compressed only makes sense with copy on read */ + if ((flags & BDRV_REQ_WRITE_COMPRESSED) && + !(flags & BDRV_REQ_COPY_ON_READ)) + { + return -EINVAL; + } + bdrv_inc_in_flight(bs); /* Don't do copy-on-read if we read data before write operation */ 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, unsigned int bytes, int flag bdrv_co_preadv(void *bs, int64_t offset, int64_t nbytes, unsigned int flags) "bs %p offset %"PRId64" nbytes %"PRId64" flags 0x%x" bdrv_co_pwritev(void *bs, int64_t offset, int64_t nbytes, unsigned int flags) "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, int64_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, int64_t cluster_offset, int64_t cluster_bytes, int flags) "bs %p offset %"PRId64" bytes %u cluster_offset %"PRId64" cluster_bytes %"PRId64" flags 0x%x" # block/stream.c stream_one_iteration(void *s, int64_t offset, uint64_t bytes, int is_allocated) "s %p offset %" PRId64 " bytes %" PRIu64 " is_allocated %d" From patchwork Tue Nov 14 10:16:52 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Nefedov X-Patchwork-Id: 837776 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="C3eNjxdA"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3ybk8Z6GLvz9s81 for ; Tue, 14 Nov 2017 21:22:22 +1100 (AEDT) Received: from localhost ([::1]:58653 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eEYMH-0006lh-22 for incoming@patchwork.ozlabs.org; Tue, 14 Nov 2017 05:22:21 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:48290) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eEYHY-0003Dn-Ln for qemu-devel@nongnu.org; Tue, 14 Nov 2017 05:17:29 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eEYHV-0007Gy-BO for qemu-devel@nongnu.org; Tue, 14 Nov 2017 05:17:28 -0500 Received: from mail-db5eur01on0091.outbound.protection.outlook.com ([104.47.2.91]:64462 helo=EUR01-DB5-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 1eEYHU-0007FN-TE; Tue, 14 Nov 2017 05:17:25 -0500 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=3Oqosq6QtUY9+6pUZcK724b0Uo12wYNzwlKHVeEx/hA=; b=C3eNjxdAlxT0MI9FAENcsy/38QS2T+9fmOjWXJLqZ7HAXutpr9zQ7cH4dnohaZJzjByF5ajBFr9cJ0EUVUsos/qN9IzYmX8ryw6lSEjsqPgtccGIttTFFhe3mRBqIseSAVFbbHROvvLL+BXFuKuE5S+EaLvaAatlNSmNyuS4F3s= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=anton.nefedov@virtuozzo.com; Received: from xantnef-ws.sw.ru (195.214.232.6) by HE1PR0801MB1993.eurprd08.prod.outlook.com (2603:10a6:3:4f::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.218.12; Tue, 14 Nov 2017 10:17:22 +0000 From: Anton Nefedov To: qemu-devel@nongnu.org Date: Tue, 14 Nov 2017 13:16:52 +0300 Message-Id: <1510654613-47868-5-git-send-email-anton.nefedov@virtuozzo.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1510654613-47868-1-git-send-email-anton.nefedov@virtuozzo.com> References: <1510654613-47868-1-git-send-email-anton.nefedov@virtuozzo.com> MIME-Version: 1.0 X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: HE1PR0202CA0012.eurprd02.prod.outlook.com (2603:10a6:3:8c::22) To HE1PR0801MB1993.eurprd08.prod.outlook.com (2603:10a6:3:4f::23) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 49191c10-b529-4796-7856-08d52b48e574 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(2017052603258); SRVR:HE1PR0801MB1993; X-Microsoft-Exchange-Diagnostics: 1; HE1PR0801MB1993; 3:ZVnH7fBFXwANWFmrC/OrfkoHGqaMCy7QOuSor3dfCXXE7DwcbNCRx5wpZdar5xSuUELFrmgwNjhftg4j+FiyrC++ZQjfYgzKsJfTdHzfaeomMad6o8Ur8IfM0t2dKk7a5W8tLK9u9fglQfx2OdUmtKpOxcBS9YGlpbSGPx3l/pDU8iVw74BZi0LxemgUzTARGmJTPUY7RHltnZrXe5CDj86XSNAPGXJAh3P+qj7c5CqWMGcwnP42tx/TpTruP8EA; 25:YmrleHBW+gtfiVoZaqShsP3g9EYNV85LSOm7+mZNyNJZRL5Mix17ZcwiaGHdkLOsK2PpeqcAFfs/6oQTjke9QPk4R/PPLoJlAoWp1X5WnC6c5xJG8Y/SoAi1K6bfPvoWSkhsuU/e+/BPNeD0Zes6sH80FzH8/SKrNmoVHPMJ+sfcCYv6NQfoSQihLUViaC6Fc0r0yfvYWvpTpDWr2b9MWIr5AFy0o8z/566S6uGqlAJbQw6AyyxnuukR+UBar4Mv2mGiNpxf1M7oZZ4jn9MS7uHDMJJuC3ejZ3QcjQGcaFSJoq+BojqiqhaqNi1NoNEzjtg9O0ziti0lHP2tgmFwEmFW78gcUpMJ+lozuvCJiNc=; 31:5mR8XxPMpGRnzy6A6mrae6m9FmaGi+GG0VLhjMqi5Tf3eKBr2oYgN2u2gLp6g7HuCCRo0mzTB4XcWGRdStznLLNYpJqt7Ggha4MmQC3Z72Ec3zPYmU9rsjaqXGwWj592LlNSoUv0z5YLO8OGx/K8xkHVJZt9XlKNnQMlYlcHdbsgQd6nT4y30lPZzZK6steohRFRwEtyRljsvS4cprPBvzmFTpzczzxEgIVVe+S20To= X-MS-TrafficTypeDiagnostic: HE1PR0801MB1993: X-Microsoft-Exchange-Diagnostics: 1; HE1PR0801MB1993; 20:7xzJK1tjnG7toKBgIhyHgV2VNUAi2ZXzK5BCot+eEMf+LV6BFEI4Ffl+RRwRCsY0u7P5k3dFC8PbldT5DM50ksxXyVUA/52lwKagI/jS0EEyrqm06PvUojbAU+olmD5A8YrK4puVvtjnATU0sAuCRYqublUYHaoryOQu5ZGmJ3QoXYIEYyfUKHUVK20eD+JnJtqcshCQTv4qBumMVAgf0N1APtTa1YodGiV26+HYSjLoFeLnaFdcSKj7X0F13hUKwztnpVYkY/aZXaSyZgf0jswIcmt+mO9GSA14bMB8xo+yEmMyqsmcEkupH9sHYm2R6uUwyyo5mXFxpMDyN993XXXqRq8p9GEnkRvZrk87OfoPkkWjN7qfhiceXwrgzQo5usz/drl6UvreAc6xpQbgo0LI4DMiaql5aHVbuHAdQKE=; 4:8Ye346jMRDjsIKvA78o1v8PIYbgpK5ni/3xO6APmgbjoI4KxITbIkvliPtoE5Xk/mEmY0tlkyeEvI+134KlLhPIqblaWFuXlzuwy+tYX4VYAo1nPPwUUry+2YDOUVGcPcnnd9DlI82s7wIJpNPL+LK2BnZtm3Sff8wUJ4RsgxGFtHIrj74DoCoE4mvoaN346i8KUJX+XPWzKhv4s0PQP1KgH1aNoF/JNw5FGevS+S3kmvOH77r8wHCUVFsoskfnOzQWVtHMYaYQUt4J4+fXmVA== 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)(5005006)(8121501046)(3231022)(3002001)(10201501046)(100000703101)(100105400095)(93006095)(93001095)(6041248)(20161123562025)(20161123558100)(20161123564025)(20161123560025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123555025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:HE1PR0801MB1993; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:HE1PR0801MB1993; X-Forefront-PRVS: 04916EA04C X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(6009001)(376002)(346002)(39830400002)(189002)(199003)(97736004)(5003940100001)(6916009)(3846002)(2361001)(5660300001)(69596002)(6116002)(8936002)(8676002)(81156014)(2950100002)(48376002)(33646002)(81166006)(2351001)(25786009)(6666003)(189998001)(50226002)(47776003)(575784001)(6506006)(16526018)(106356001)(105586002)(68736007)(478600001)(305945005)(36756003)(76176999)(50986999)(101416001)(316002)(16586007)(50466002)(4326008)(6512007)(2906002)(6486002)(53416004)(66066001)(53936002)(7736002)(7416002)(86362001); DIR:OUT; SFP:1102; SCL:1; SRVR:HE1PR0801MB1993; H:xantnef-ws.sw.ru; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: virtuozzo.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HE1PR0801MB1993; 23:LHWVagkIX6xjQu0l5tjHsdyOTiS3Qf+gPotEqjy?= bFCPxYlgNYdjcrT20h4eG/tcJpCMjJ8SnESZkibhuZjC76VaiugvtJ3oYls6zj8bg39F+VgLGr6DdZYF+YqBDtv0wQoAdT1zHyKzP5/sDtiMl0pO6iYruodRYx10F6hs4Kp0Mg1Wl7mqjzSWZXfiosLMLOszgXsVfKw/HO4vlTQ8ISZR7oaoPg40HCzpLSOYnaGKJbFnwUJm/whMOhQIvH6zPkEJ8wvEuB3o/XGshEd7/3K09zRlBcFxGnML7rxwAOWIehUm7Nxjc606+BfhlpWHijvqgUeluHO4JwD4F6KL3BKtFngUvyxsCgGCawpr2yrmz8nmR/yz1ypVqRBrs7fYHZuqAB5KGYI9hTHH3Z1DeEKN0xUHY+w9gh/m6glfTaZRCJ0gdvH27SimPY6K9xSVAsqA3CWjNxkcqjGZsWohnXSfe+gLrE2GOBxD8CufCSq3TlD1u+X/Q22PVutc9CYQR0F7ErHgyv7HaLB4WANMFVSZAaci8/6TLqmLffIPiJMHU6Fx8F29n3Ce4ugnYO7GuyWkRYKX8ccbVlwD5cQpua6iPfFLoMkTOD7Xa/snyZfoEkniWOxLjzNzxIIRBKulaF5MdQy2J3QET2IW9NBE5yIZ1HzUiyzlV4gd+XYKaJrxDA0EIl5bvLd4LK+VPxBTHdyBQmnTuDUzlgrwfRX5osl//9hA+wLbGWMrU2+Bf52zi05HKGNedtcEFU6jv2uhdWOtfh6Lv9rsPluj6PbCq/EQzilyBRj+JHK6sRKHx7fy5xVEOWbZ75o/AIl4xcNwVcSttf4+O8njhk9ZnIOPIdSbBEGFdDA/xK3l9U7JM74bXBhiwuo1G3rZwayp4SL0K+diVBQztQR5P5Q/iYNgttndz5CyoCedSDkzYaJc12eNWNkpTWTdwFgXUnwdeQaDyDujL1mMljon/pHuh7vO+1oelSPj/IPBrDryjn7QRqHnXJpAx3MVhQbBFSBDvsgqeFEgdw/BCr7YNEn0iACNN9tyahANZK/vVwCrOQTbiVyU8s38PBEyY/L9+ZNFkJWwF5MP3wKWXYpG2oObemtyKQCRRUdS/t6aQcoufK38bm6FrdsFWxEIxQWNWTK2qOJFflH4Z1bMSqy68b/QzLOLkGWBZS03tkcuEasLmW56jRgCEClpCkeP55gER2GyRSSQZ X-Microsoft-Exchange-Diagnostics: 1; HE1PR0801MB1993; 6:TA8Rb0qr/vAIrDJLn5I8dFF0BL/TRVEa9hzSxBc9hvdBNK9ocKy9OxRRtbpVFIYZHAepjlE1wuqp4V/9cWJu02nHKLMQOXyG3vqWYIlzYr3OJAkgxOlSN6u2+XffCMLiseCb8AoEI9GOPh/gdJn/ldUHDGMoHonLF8pOSun0dhUVu8U2p5tnVESQSB2E09/CaOn60enwktc3yy+5sgU9v7fmX0rrl+90g0Mi2KFBoxlxWXYVw1a0gt+lexQipFFIkH4paEByMwd0wx8Y1ogAAHXl4yOfOww4LnjURlz17zSKvV8CknNktBabwWxiuzXGwIgETm3fNSv75EyabmC4TgMIXlRU2wZH2jgNutg93ms=; 5:MSmOuiw70Hnwu6oISf1PnStoPzFTgzGBORe8MCMZHLM/kFTMcur0eqfYOLZDo5JLWXUyLu83vsM26+JPGaC7/9sb2n8txm1mUIs1TCLLbW2Y1zBqaMga/jingnPlbhQWE85xZ7UeHJVVj1gAUQNIFNURDmqtXDkDRMUe8397nbs=; 24:afMxq5BSSvIJJleAr4kIlGwW3cHEI+++NVn1q4ReG6LeGDuKZYWUWQY8EmMvz/diJ4rld3vOi6qKQn86yZdn1pm+i5uQuYOjLUDSBi2O4qo=; 7:YjXFwikmsDzNi3RM4hJEJGdfjQa5/at0wOOnUzh/d7HBKD+csLz9WEUSkEznXav5NA79Q5zkQc893DmpgvIj3uc9TuZLAUcxeacXnVBh30jlYYqIAJq8pNr1yc0xxqXTw9KviYDTsP0Yw00YebOO4aQaeH4uDMDsOz4xR/FgajW1y7IeUh1d7HB0TT9cvPDoCQfoI/g0HJV7Q8gT/zuTJZ/wpQke3wateJ5Ocu7D3dTlNgg8GxNIf9Bb6wqb2iM0 SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; HE1PR0801MB1993; 20:IFAsbwuuaaUTu3JYEaRDhpviA+K19HduGjlhw6EdRbmbAnVbse0T+ZrSM3rQqHjELRLUK//jiE6pt78CgPd48Fc/GsvFCKoLPOGVUWeJw4N6Be4tQdy6wicVUKqhB9+rhWWWy8DzRQ6gaAcQapHQJgkiMyCx2AGDBBnZ+Cs6abg= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Nov 2017 10:17:22.3017 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 49191c10-b529-4796-7856-08d52b48e574 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0801MB1993 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 104.47.2.91 Subject: [Qemu-devel] [PATCH 4/5] 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, jcody@redhat.com, armbru@redhat.com, mreitz@redhat.com, stefanha@redhat.com, dgilbert@redhat.com Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Anton Nefedov --- 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..b0d022f 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, 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' } } ## 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); /** * 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; static int coroutine_fn stream_populate(BlockBackend *blk, int64_t offset, uint64_t bytes, - void *buf) + void *buf, bool compress) { struct iovec iov = { .iov_base = buf, .iov_len = bytes, }; QEMUIOVector qiov; + int flags = BDRV_REQ_COPY_ON_READ; + + if (compress) { + flags |= BDRV_REQ_WRITE_COMPRESSED; + } assert(bytes < SIZE_MAX); qemu_iovec_init_external(&qiov, &iov, 1); /* Copy-on-read the unallocated clusters */ - return blk_co_preadv(blk, offset, qiov.size, &qiov, BDRV_REQ_COPY_ON_READ); + return blk_co_preadv(blk, offset, qiov.size, &qiov, flags); } 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 = stream_populate(blk, offset, n, buf); + ret = stream_populate(blk, offset, n, buf, s->compress); } if (ret < 0) { BlockErrorAction action = @@ -227,7 +233,8 @@ static const BlockJobDriver stream_job_driver = { 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 = base; s->backing_file_str = g_strdup(backing_file_str); s->bs_flags = orig_bs_flags; + s->compress = compress; s->on_error = on_error; trace_stream_start(bs, base, s); diff --git a/blockdev.c b/blockdev.c index 56a6b24..18a56d9 100644 --- a/blockdev.c +++ b/blockdev.c @@ -2968,6 +2968,7 @@ void qmp_block_stream(bool has_job_id, const char *job_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 *job_id, const char *device, on_error = BLOCKDEV_ON_ERROR_REPORT; } + if (!has_compress) { + compress = false; + } + bs = 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; } + if (compress && bs->drv->bdrv_co_pwritev_compressed == 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; 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 *qdict) const char *device = qdict_get_str(qdict, "device"); const char *base = qdict_get_try_str(qdict, "base"); int64_t speed = qdict_get_try_int(qdict, "speed", 0); + bool compress = qdict_get_try_bool(qdict, "compress", false); qmp_block_stream(true, device, device, base != NULL, base, false, NULL, false, NULL, qdict_haskey(qdict, "speed"), speed, + qdict_haskey(qdict, "compress"), compress, true, BLOCKDEV_ON_ERROR_REPORT, &error); 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 { .name = "block_stream", - .args_type = "device:B,speed:o?,base:s?", - .params = "device [speed [base]]", + .args_type = "device:B,speed:o?,base:s?,compress:o?", + .params = "device [speed [base]] [compress]", .help = "copy data from a backing file into a block device", .cmd = hmp_block_stream, }, From patchwork Tue Nov 14 10:16:53 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Nefedov X-Patchwork-Id: 837775 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="Hs0+MVTJ"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3ybk6j6xHNz9s81 for ; Tue, 14 Nov 2017 21:20:45 +1100 (AEDT) Received: from localhost ([::1]:58642 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eEYKh-0005Ap-Vo for incoming@patchwork.ozlabs.org; Tue, 14 Nov 2017 05:20:44 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:48355) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eEYHc-0003Gf-Uy for qemu-devel@nongnu.org; Tue, 14 Nov 2017 05:17:36 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eEYHY-0007K4-RO for qemu-devel@nongnu.org; Tue, 14 Nov 2017 05:17:32 -0500 Received: from mail-db5eur01on0131.outbound.protection.outlook.com ([104.47.2.131]:12736 helo=EUR01-DB5-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 1eEYHY-0007Iy-Fc; Tue, 14 Nov 2017 05:17:28 -0500 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=dsjoX+QIRYJUsOn9neb6nYxV61ovzxBlv/ekheKUOjY=; b=Hs0+MVTJdXhXlzx4PnMbBoJhGaOwCTQggLkF5yPZvX6Zb9hJc8IuccJLimuWY3Df8/HlqaRUZFNlIRXy1gCGu/lvEOf0dT02c3rniwypquIlT9GL2gPRCxro+CE1KaPGy2Vdh4k2PJ0Yxg42ePzKG4vGteiGdHELIn4yW3ZOokU= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=anton.nefedov@virtuozzo.com; Received: from xantnef-ws.sw.ru (195.214.232.6) by HE1PR0801MB1993.eurprd08.prod.outlook.com (2603:10a6:3:4f::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.218.12; Tue, 14 Nov 2017 10:17:26 +0000 From: Anton Nefedov To: qemu-devel@nongnu.org Date: Tue, 14 Nov 2017 13:16:53 +0300 Message-Id: <1510654613-47868-6-git-send-email-anton.nefedov@virtuozzo.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1510654613-47868-1-git-send-email-anton.nefedov@virtuozzo.com> References: <1510654613-47868-1-git-send-email-anton.nefedov@virtuozzo.com> MIME-Version: 1.0 X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: HE1PR0202CA0012.eurprd02.prod.outlook.com (2603:10a6:3:8c::22) To HE1PR0801MB1993.eurprd08.prod.outlook.com (2603:10a6:3:4f::23) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 7531b6c2-9c4a-433e-37ce-08d52b48e79b X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(2017052603258); SRVR:HE1PR0801MB1993; X-Microsoft-Exchange-Diagnostics: 1; HE1PR0801MB1993; 3:e9GPF52YsVrMN3vLkM+EKWs2QepsHodyAuxecnDsWPEqQ/yA3ihtdsakmHVfHUXmRFv6tvpJO0oWJNJATdsswePf+bNSq7Yx1UItQ16dz6y1NzlzWb0i27nRrLzR5tC+NePNqBq+33+YVWzS+gTFx48eLAcpHXJr2QsnDcBxUMkELUw1IbfBe48WlqYtHpS7C79QYo4ilsrTsW9qXyM42AZpHxayEnC0FGtZDKGvi5U9bBSxNsJgtbMM+aRS+TZH; 25:7FFPDy2JhHAU1QJ+ytdfaL643UjpkS40IcWNwuv5MTntzEYK8arpXVbvfbLTw3FiQN7MdQIqGDZoGzG1/IBOjFm8NkjXAgkdgHuynCyM0heuIOWF3aBcl6jWTn3VdwnErtkF54D9ocWH8UNgAeJbFVowUlvny5jkxrEiupRUxBmgT2O6iNn0KErtbzF+ROyY83F50F42NRPVNpjZzZHgFciE+4nkpdYA8+RfmU5p0Nc5cbL7AKJF0tQM7mMXct4anys/NOeK21WbWiTZOpomRAgXLqjhvpbdZxwItEPsttNXNgCaVEmRJRr5+m38hF2n6lA21ka3qzknOnjDUUeThE06tkYEyaYK69+0QvJ0QKE=; 31:H5s9M8lvKhxX2uOV+mvLzCLIFu0PqkUP9LZKM1TL/hUeyJ4yUWuvw9LjxxjBv8GojW6vxJDa6nKulcFnWy/T+a2hub4/az+gydt14TE6NtEEXGGxyZVZFNvy72wESVKDjdit42sGuad7Iapan5+itUSYbaFkGsnobwmGBz5Ki6KzVIaTHeyJB4WYs+wfQyKlWyt5C6RKnb5iy/skXFVJiABPvkCN28360LP3h2VA1M8= X-MS-TrafficTypeDiagnostic: HE1PR0801MB1993: X-Microsoft-Exchange-Diagnostics: 1; HE1PR0801MB1993; 20:nsSMJ5P4kc+rUHO8f9DyhgEo62IB3J3rOwjr2HM0J/PY8U5U4jZt4AECkdkc9LW5lVOgT/A55n8T8duXScX1Ub+jdmakHURYk02Yks6w+rz7S5r3aAerkp8nhVBzK+qijteu3sjbZqrEAJvX0B98xTkdx8C6543D9bCdAABQrx8wCwRESzbnigeeclVIRfz5870f65W5q9LS3kj1YpUzmVBVaGp14BIJBJGqKcMC/xySCEGEooTzLPNzcL7zKDLF8FMIyNeznYGV23Bmeuw5yz7YESVxdPnlDFe8nWeYrXkCrdXV1FU7tpCFDj5t3Pf4N+OzZMOLMvzwZvPrOOsH9HU6x6YVm2SUz/xxXkJorNBw0yZ1hyfrGK9e7tbzOkfTzjE8NKrgItBRFIsBfrRCmuw5Sd6rHodbnuKCVayejKo=; 4:z8kCu0kzkAAlcYIzrVupXIo1K6ncCo/OCT0GXkIUli64J9xrwc0gDJ0Svbg84sFkvywKTiSKvEoag+Oz+HeQwrQgsbVAM2/FKfVVHnfdx1I1BnBs5/Lc/ByCBYW0jXjJIEmFND2tPpX+6EsPv9IMy9QkhFgu+lHdZgxm008ep3brhQDEup/W/yhSwCtPMviI7jz5+/3OSP9BxLVCz+8FKMNiGzvBFFZ5gGrrVLfKAa55KeAmABrWLsB7KV4Eny5RZvv7ZB9f9K44faoAKmflgw== 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)(5005006)(8121501046)(3231022)(3002001)(10201501046)(100000703101)(100105400095)(93006095)(93001095)(6041248)(20161123562025)(20161123558100)(20161123564025)(20161123560025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123555025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:HE1PR0801MB1993; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:HE1PR0801MB1993; X-Forefront-PRVS: 04916EA04C X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(6009001)(376002)(346002)(39830400002)(189002)(199003)(97736004)(5003940100001)(6916009)(3846002)(2361001)(5660300001)(69596002)(6116002)(8936002)(8676002)(81156014)(2950100002)(48376002)(33646002)(81166006)(2351001)(25786009)(6666003)(189998001)(50226002)(47776003)(6506006)(16526018)(106356001)(107886003)(105586002)(68736007)(478600001)(305945005)(36756003)(76176999)(50986999)(101416001)(316002)(16586007)(50466002)(4326008)(6512007)(2906002)(6486002)(53416004)(66066001)(53936002)(7736002)(86362001); DIR:OUT; SFP:1102; SCL:1; SRVR:HE1PR0801MB1993; H:xantnef-ws.sw.ru; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: virtuozzo.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HE1PR0801MB1993; 23:+5puWYCmYV4JjQPvAfwJaq2ChvypnQgh+vrNxeh?= bX9/gRSQvc+EPI1U6dTo65DUoyZlCLwSJWLi/K9XePe2YaRlMTN6EuTbuF+WBueTQVrQFx2kbM8C5J0tX+e6oTfVVlOvvR/xEz4zw+nT/4+cbSfqFEak1ZAHmBY4ytBQxSUnUBl6SZ6R1QpkKtK3WqPQaH9Ye+xQL36DZpeS+/B+lpKo8eQ3C91GEwEVxRrvTehzpRNDtFge5sCkuquK/XJYuO8JnxXL7Gzxc+b5Ws4/c/Z8TTCKJbGZk1gnfwRGCL78FnLWwJcq1BytWZqSODyosrW1TtK7vWid9lVM/HwNNgRaaJ5SoExz/fOh0MMDZ+dYlXcHnsa2rWzl6pk6gZ9tMPTB3tRCaU97tjN1zOl2BwT404tZGSDWKTYy4a/FsDxpw8Tp9RrvMYKrzXgaS9hWy+rV7o9XHQrfcT4/Wrhbnz/KXrfj61Ngy9mf+NV3jACQ2rs5AzcxH/V9A6jrheICsz39mM4h+uB4MAdkD65jkDuCqqWxB+3bx9PzWiLoW3nYjxNiZaWZRwCyMb6b4kMj88nA4PbouIXwwj+9cJNueQ5jajAclwvmeFiScckcz8r/xOnzSH0+rchoSCaIvQphbp1DZ8LolQWEpA9T1/cUw9Zrn8hE0g7Xy88CBhwsDPehZchzUHj4mqJx/mghRNtZBGa17TKLeh+n3hIUraEG23pnYvFIEP9DvHg6n7519PRJQtz7xREWFPEx1Nh+PBAzl1Ntt0as+x3U1dtenqa+FMjt5aAZSBkH+LPgXRxVygmJS6dMSFi8botE9aetVwkTZBZrPsI2sDW9VL0ymThreG0U5sUXX0q4/eL/l6XFtDAGXGcGhKg1ByWFhMB45g+UKYPEW4HBNKrrLWYLNjXbl6R35QD47fMhec/hcxkySTFPakX8HEESzPtHx7Kz1Kjdh90tSqY6AzzlkQCMQy/FSP81GhTSjFQyYcAD2uVYxrJ5UJLKWEOjUKGfjDj29HV2uY1AIj8zi1jZRpGYqNRX/eJysBIp8O2uL8eG9T+b9JMprwNUiXgB3so+I8n0x0q+ABuERQk970sdcO7UhAftSJQm2YvE9FYIxiYlzfGxoqTrvTcBI+sDslQh2aKbmtBeITR/VBt20UhXesDk6EBZDRCk36hTnof3CNe5McSzI8cQ= X-Microsoft-Exchange-Diagnostics: 1; HE1PR0801MB1993; 6:wLmHVzr9mJza75AvYzvkPXqoTU2LQsZzxEeViiWMGK9afpzy5+MKVgeqSeV7pZzipxRkKG68WqlIFqyu9vk7Say/OrCUF5QszynSJH7kySuUg3kjqZ10LCok33FWZSfPGT5Z8M4FQX4ieLlmz6mvyrQlwdghGqJvoGHx6HtYMnRpEy02BYFk44rQQntyK1nxlM/YHWCYJ1+rCY5/6bovGbzQRZuVcwqGQjD2g8/D+QOiUSmHlWj0uX10Rye78U5J597gYkbYVPhfUtwFdXHmtIkEE0LGwGYnG56hALaxxKES/50HSpgHS3nwAzWezfRLkRaRSY1ibiAou06DFKKuvsPOvxr1JyhrWpJKmUEyvlQ=; 5:r0LfIc668y5s9fCba1yKQbP+7KRzmBXjxVnkSuluABWvqtz/BWW9Iif0LQdjHCTBN7HtchboU0++vzQMHicyQOjmKfGdnj7hx5XZXmXFzWV42lajCK6xpnyW9GxHgGm/3Cvky1lsAkInoboYvZsqdT7+CQd3V6WPluy5jZYQkyU=; 24:urGxTHwKvmb0NwwZdHiD6mZ0rFh0qf4lAKJ7ZGNfPuDDVGB9zLMbtdnlUCbDMMf16C6/l8b4OhXn/635hCu78EXMaCE4GLTUYDiioEaAcx8=; 7:uxwGmN/5DXrFa1p1Tr6EUKNQrrlcv+1LwY+uKzUrnuVglcwRseeh3BEkXXoyGTyvw+gcVH+p3QcfR5K/X+HTCycoH2K9XWXqIoEpiN4CIvsDE1Ny2hz7ysCcMfXCmVY7PCfdfAFx/E9KtgfJkkvA2rdvjyyaJNO5vSdUDLVyDKZidXJ2mFeM1wH8T3imF1bWqvrZjWKl5+YCA5DrdXmcPjkEN+Gxh8aq5cYvhXZBt+OfHC0Scx1CHhwdzd/Pyhsp SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; HE1PR0801MB1993; 20:CLNXO/OW8/dDxgptbTsQJUrRvHUsCl0kEuBEubw4kgvDTlDB0HkoNlPaGACtXli/FAjyVgIOQNomL2ftJtRwPl/UIMSrsvJK9//tvm2uoFQTz+urw2fAhacbEY5N38SSqC0K1PJZiGGv57vtaod/h2JeFnMyGQBQfLDlQWhfC5s= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Nov 2017 10:17:26.0360 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 7531b6c2-9c4a-433e-37ce-08d52b48e79b X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0801MB1993 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 104.47.2.131 Subject: [Qemu-devel] [PATCH 5/5] iotest 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+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Anton Nefedov --- tests/qemu-iotests/030 | 69 +++++++++++++++++++++++++++++++++++++++++++++- tests/qemu-iotests/030.out | 4 +-- 2 files changed, 70 insertions(+), 3 deletions(-) diff --git a/tests/qemu-iotests/030 b/tests/qemu-iotests/030 index 1883894..52cbe5d 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 backing_img = os.path.join(iotests.test_dir, 'backing.img') mid_img = os.path.join(iotests.test_dir, 'mid.img') @@ -800,5 +800,72 @@ class TestSetSpeed(iotests.QMPTestCase): self.cancel_and_wait() +class TestCompressed(iotests.QMPTestCase): + supported_fmts = ['qcow2'] + cluster_size = 64 * 1024; + image_len = 1 * 1024 * 1024; + + def setUp(self): + qemu_img('create', backing_img, str(TestCompressed.image_len)) + qemu_io('-f', 'raw', '-c', 'write -P 1 0 ' + str(TestCompressed.image_len), backing_img) + qemu_img('create', '-f', iotests.imgfmt, '-o', 'backing_file=%s' % backing_img, test_img) + + # write '4' in every 4th cluster + step=4 + for i in range(TestCompressed.image_len / TestCompressed.cluster_size / step + 1): + qemu_io('-c', 'write -P %d %d %d' % + (step, step * i * TestCompressed.cluster_size, + TestCompressed.cluster_size), + test_img) + + self.vm = iotests.VM().add_drive(test_img) + self.vm.launch() + + def tearDown(self): + os.remove(test_img) + os.remove(backing_img) + + def _pattern(self, x, divs): + return divs[-1] if not x%divs[-1] else self._pattern(x, divs[:-1]) + + def test_compressed(self): + self.assert_no_active_block_jobs() + + result = self.vm.qmp('block-stream', device='drive0', compress=True) + 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 '2' in every 2nd cluster + step = 2 + for i in range(TestCompressed.image_len / TestCompressed.cluster_size / step + 1): + result = self.vm.qmp('human-monitor-command', + command_line= + 'qemu-io drive0 \"write -P %d %d %d\"' % + (step, step * i * TestCompressed.cluster_size, + 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_size): + outp = qemu_io('-c', 'read -P %d %d %d' % + (self._pattern(i, [1,4,2]), + 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__ == '__main__': iotests.main(supported_fmts=['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 OK