From nobody Tue Apr 30 16:49:00 2024 Delivered-To: importer@patchew.org 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; Authentication-Results: mx.zoho.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 1496241952155743.2100692371135; Wed, 31 May 2017 07:45:52 -0700 (PDT) Received: from localhost ([::1]:59953 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dG4sf-0002FD-EC for importer@patchew.org; Wed, 31 May 2017 10:45:49 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:37617) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dG4r2-00013k-Jz for qemu-devel@nongnu.org; Wed, 31 May 2017 10:44:10 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dG4r1-0004tR-0o for qemu-devel@nongnu.org; Wed, 31 May 2017 10:44:08 -0400 Received: from mail-he1eur01on0091.outbound.protection.outlook.com ([104.47.0.91]:58940 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 1dG4qt-0004ep-5f; Wed, 31 May 2017 10:43:59 -0400 Received: from pavelb-Z68P-DS3.sw.ru (195.214.232.6) by VI1PR0802MB2557.eurprd08.prod.outlook.com (2603:10a6:800:ae::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1124.9; Wed, 31 May 2017 14:43:48 +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=Qf0uOenQynUALTB3PqGJqcPrXLujaSupzX0VcOohk0o=; b=dHVJR0irOQjgcZd0lRRi04SCVBujH5rJybnr/90unKTymJe0DswC3pEI9MLbpXmpbiI5Fh+wl22FaK+f/bQZ4VzVgIKO0EgP99itM37kjDHBWZNeYi3x6xpbar49WnicxsxaZiHKmIQ5lUorvM4y4/AWlcGxFEsJGZmu75qQZ0o= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none; nongnu.org; dmarc=none action=none header.from=virtuozzo.com; From: Pavel Butsykin To: , Date: Wed, 31 May 2017 17:43:30 +0300 Message-ID: <20170531144331.30173-2-pbutsykin@virtuozzo.com> X-Mailer: git-send-email 2.13.0 In-Reply-To: <20170531144331.30173-1-pbutsykin@virtuozzo.com> References: <20170531144331.30173-1-pbutsykin@virtuozzo.com> MIME-Version: 1.0 X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: HE1PR0202CA0022.eurprd02.prod.outlook.com (2603:10a6:3:8c::32) To VI1PR0802MB2557.eurprd08.prod.outlook.com (2603:10a6:800:ae::7) X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI1PR0802MB2557: X-MS-Office365-Filtering-Correlation-Id: 86796568-ac56-43e2-d4da-08d4a83372d4 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(201703131423075)(201703031133081); SRVR:VI1PR0802MB2557; X-Microsoft-Exchange-Diagnostics: 1; VI1PR0802MB2557; 3:bkkpVmjK5h8/QRfacInjxWKXd5jGFFL0oQ/nroQXQjHK6aM8qfbvagpGst8JSI+vs30363wzV6nq/tYQjufxGYl1ZYN7lWL+sVN9HM0Ewm3YhbKXymMvjw+9pluC1pY7VuWuakdXbBkE+3CEF7MHlT0SCGLd4QzxLQom/YVzGXeM97OJVwb48x0GWTf7+yX/3iuItDBp7kmh+6S+QzKYi6UKRXWCeDnd7xIPNukebbHfiu9KtVTYoLOn8ZZrS26t6I3CMR47tx9c7zV0Ex2LdxdLaNDANKd04xigqLzesMdfVjFTDwUuig0SLXdq4q4sh9XbGcyOiaSjSKioycY8ew==; 25:ZTaKGRr1o87prCG8PUo2lz7QaaAO8ylSgrBfb4zO54JCEjSJQBvmhZycckdEQhuK0Wa+I3xIle8daOZ9dLl+0GypbRYCgFFa1A69kguBoxk0mwr811sG4ltzE7iBODHRy13hXIkT3siEtJ03nFzMs8gkhhS94MsWqVS1Y9dfYNv7y4XQN0GF79T+ZBT2y2h+TcOjb04GIME70tcyUfRDRiSk5zLjvYZdHKFMPNO1nBUvaYcksvVbeAnMPiAMbH1PbXu/UkbKkTdRFJRzbHH4baaPpU6affxP6Sk84P80zJbyfGNppXFFTrtJAlAdsmtR/gF+LHz1FMpskksjjGevwmjXfnAlk/snZu3V2xYU87oUW5sjhEQ1OuZ8sOQut2QKvI0Nn7rhmJeDYkl4Jcc0QJRa8aaoYtEYf7K2kLoyCxcOTMyhyfP0QtNiidT2gPhu35zLeZ1dm8q4IKc+v8wuruqckm8IIn7hPrDcqtwAENY= X-Microsoft-Exchange-Diagnostics: 1; VI1PR0802MB2557; 31:mwu1kOU6qIqgtTPr2zTmPU1iTZhu9zr3tbQKB/8V7TzpEggTDKLPZVkH+py5iBVguf1d9TrK7xsdNf9O9YcA8X9WK0ccQYWC/l/fuOGKsLcDx3I7FyXgK+K2UK3LwlXHmWPXhj0Ls2/Z09Oy0y6NWSrGJdCkkdFdd53uUKRSQ622gWJbTuZE3/3OSPs0IWGahea3q6dCLzP23rHOkqiGOzLUWh6CZRsTlBz7EC429DQ=; 20:lOrCeHCUjprQ5E5Oz/Z9W5Yd6ZFIO8lU9CelfoJlh+tdCj7HqFNBUvlxTRqJkTopCpA2Lw5fAs59LEQ3yo2ekXCvLsYCHfbGOwB6MtSSIwMpwwsnpPRUgsmO4PdmIe9pMqJL5XySxO8wN8yAbOxg165lwxgS7C2AZ8C83smFXcMtZFeUy3F+vbb3e6MfWj7FJuJjo/kISHSTdn2zs8ODm9VNhv4QiWLS8TGIE/eD504mnq6mETm+O5W95+CtaJfWyRaigWwHAuYJbew6WYz14ZKJ2XAjAMxbD9DSrXzy2GVymyiDjEJjOxBtPiN+39Oo0MCy7uFmSb+OE9Rd+ZKxpEwOL4ohind3RgegL5ncZZXFEB1hjd7TZytqmzORz3ln0WiYTSWEvh3A+jaoQUKePLJ366WYwSm3l/Q8OdcBm/o= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700073)(100105000095)(100000701073)(100105300095)(100000702073)(100105100095)(6040450)(601004)(2401047)(5005006)(8121501046)(3002001)(100000703073)(100105400095)(10201501046)(93006095)(93001095)(6041248)(20161123560025)(20161123564025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123555025)(20161123562025)(20161123558100)(6072148)(100000704073)(100105200095)(100000705073)(100105500095); SRVR:VI1PR0802MB2557; BCL:0; PCL:0; RULEID:(100000800073)(100110000095)(100000801073)(100110300095)(100000802073)(100110100095)(100000803073)(100110400095)(100000804073)(100110200095)(100000805073)(100110500095); SRVR:VI1PR0802MB2557; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR0802MB2557; 4:tV8V0NbozVVGQ2Oua9p3urJ07IAMJZP0J6RyGZ9Z?= =?us-ascii?Q?0+YpYPxxx3FrIyvzEcCjIkbc9duwn6btENvDAbtiARjzsgp4h2CJwT8+es9d?= =?us-ascii?Q?xhUMEx0VLjddRsjBbwOQqjkcLmsyGzZRIlIjiVI6EIlzfhuQmtW7TqAt6hkE?= =?us-ascii?Q?tlx9MnfjPGvrZVrFs7BFnYG/KS7mDUWWRuiS54nPfs/WPCkQwEdsj2BaHDOC?= =?us-ascii?Q?DGjTNqtg5jNtMA74C5YWNo+QvEoMRgU95c1x/8OwbTZgByHbRLGlm26rCAxB?= =?us-ascii?Q?jZ9jGuYry8JnZFh0oUd4Wp9UuVGiazF0PGmTI6n20T4s3YJDBZ1c7QrVAI3x?= =?us-ascii?Q?W5m6pvh1nyXwx8bRgVxAY8LHLsj84VEKviCYv6jiFzCvQceQ2dF4BixlRtZV?= =?us-ascii?Q?kaant36efb5X2Fv/Nru4Hx3v7voCPpkxVleRJyndVfjuEEq1QeyFTtEp7Dc7?= =?us-ascii?Q?pKWkXeVB/dJtEtF253v0LPMvlHe29hEP2Z4h/QEo/peixJEVShEAX8+EI3TB?= =?us-ascii?Q?FQ3fahlrsqxApZ3t2jEXe6msFDk9BqHSAOxhqe3/xTcENnayH84jDxrYf3dt?= =?us-ascii?Q?Y5MGG8Ho+wYfaUCeb8MTWvgwKCIn5IS9jEq24LuGonMJ0kz/iWz2NXfdp33j?= =?us-ascii?Q?ThPqvAm5yC+K4+IUXVFhaRZkf15ip5sd/iiVwc3sDzb3vogR7nhmcOo7+0Ar?= =?us-ascii?Q?zur5rnvNXiscTXLWhZz5AbnUEvtiRGCZbei2zQRIS9lxCnn+KNcpl4T4L+zX?= =?us-ascii?Q?zXOgY2/T7FNVbh03+nrL+8dP2pAc3DHV3d7kjjJvKGYR91Aw/RgFmAYwkCwz?= =?us-ascii?Q?qF8+4EliPYVVStytumcAm1NfWdXbNVacsnQmYXl8bwu1bW/rU//Bk7vae0s8?= =?us-ascii?Q?FHJP27IpHQT7kKZ8r+S/ZaK4MjAfCaVFI1NUXaK7kEEDC4FG9R5j50VgW3hq?= =?us-ascii?Q?P+AZ9C6lS0HBKF7ONfC6wQykMu8+C2j+5Fz7V0bFhZtljKEBAU6b+LtyCvkk?= =?us-ascii?Q?ahmMi5+cr1AQtGx0ZgWBpJn8GYTMd1/LnrB973Q9isWRjFjnRe2XVXjrtGBz?= =?us-ascii?Q?kMHBUrDzCbNaoIElLlMHE3a/39NHpc5TO3GbGhnz83Kaz20So1bNfhlFlRs0?= =?us-ascii?Q?712iFWhO9+VSLzpFPKkDFyQtesYacriN?= X-Forefront-PRVS: 0324C2C0E2 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(4630300001)(6009001)(39410400002)(39450400003)(39400400002)(39840400002)(4326008)(107886003)(81166006)(48376002)(38730400002)(8676002)(7736002)(50986999)(5660300001)(6512007)(25786009)(76176999)(50226002)(50466002)(54906002)(305945005)(1076002)(6486002)(53936002)(6666003)(6506006)(5003940100001)(3846002)(6116002)(2950100002)(36756003)(33646002)(47776003)(478600001)(2906002)(189998001)(42186005)(53416004)(575784001)(86362001)(66066001); DIR:OUT; SFP:1102; SCL:1; SRVR:VI1PR0802MB2557; H:pavelb-Z68P-DS3.sw.ru; FPR:; SPF:None; MLV:sfv; LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR0802MB2557; 23:bH/qW5FqPxXhwZeZYgeqrkWM/ZHD1EUjYnAbNl1?= =?us-ascii?Q?vKYn+fRHkjc3TrK+Wr9mUrra4om4BBRPfr8H0V1dqHyDro3xB76hv65BUSz5?= =?us-ascii?Q?IsCfT4gIWM++eD4G1bE55KluhK0unrKf+X+XFzFA5sMA4RaLsdnC9z9rutc5?= =?us-ascii?Q?g8NVJ0LUYVvzUTdEdyvM7CclTVG/Uow8bzPTN1XOlL1ZKgNcEoIrnPHFQN3y?= =?us-ascii?Q?63cKYRbmZp5GaZ8RnRHl5PtsiBEkKHKP/rsqkYxr1+X9ssGKdISviqdCH4mG?= =?us-ascii?Q?KeV2c0bifbb+XZC/mUBUF3UkFe9ro4Qtkk6zYnQPhEVweo6qGJiV8lUOd2Sl?= =?us-ascii?Q?rQ4SvXEvNdKzzSzUCbwKCMRpzPdi73egRuQljPvwmVm95JD+WdjErKFXbSOo?= =?us-ascii?Q?LzTdcVvTbkRbZJo9SDQGfee6Z2LplEQaNqVYOJxqxRjTJT0GJ9wM9Q048c5K?= =?us-ascii?Q?B5y1jDfGXwCPWpSVAzmlAX2Wv5f2HPd5F8Mc4PbFnXldkWebEPXRHFfX1S4Z?= =?us-ascii?Q?hpjG1pGcSNgAXUmxyUX2zXcFKLHgOZWYJYxwkGppJMihKiNbLzMeBoiG92TT?= =?us-ascii?Q?V7e8jQ32n0lOw8XgxsFNfx0iZJ9UzF97yC9nCupy2ZxknlpI2hF6k0XuYMOV?= =?us-ascii?Q?JmBKpn2XEksETwAsjlCof5vFMS5gSTFeM3QhnIVM6tm+pY01HU5LE+kHN3t5?= =?us-ascii?Q?I2pnyS7SSxjuO8DJinRYSZ/cr6om8kp1VrF1VerSIY4bDOHxfv/D/1IRivVa?= =?us-ascii?Q?7+Oh5Wq3I7K+crBG6OTE0MZ5Y49bK1A22srOqcB4tMWisNnQhvrkUb+YG0vY?= =?us-ascii?Q?VwT0UeGbWz9zVsbjP2sf/YKVDC8cqFgPIhjF4GGbh6+uSgIeZSOc0kfkFjTC?= =?us-ascii?Q?kGVNhz0BhQKzlErX/HqoueBO31f4dAhQy2rXPJy1ceYS0GC3zr5VthwF+F8c?= =?us-ascii?Q?liR+tqHMFO18kTVb0i4NsuK9RyuQGXXMaoqlkileqjQmUHzorfFkpPDfQuJH?= =?us-ascii?Q?ZVyyk+uj4yaKkyIoF8nJZ+EDzQ47TQDAIDEiVea97pG3lVy35BTJ/bJbhFmV?= =?us-ascii?Q?xDr99BaS36QNOKUD5r/ahiv/2NWmi?= X-Microsoft-Exchange-Diagnostics: 1; VI1PR0802MB2557; 6:qnVR/xSg+Jv2/ankFRb21g94t061wNifeawtBy+9KHClBRCMRcHGV0vIZCbM4szgyo5hoVzUXTAwL6GrvjtsYL6TmEG7aNabyIQ/37CI3L9H8BCIf6+K43rVJwLHHzZkV4gVnRsUkJuNqahSiXYvq2RGZhbWGSGfQ6bYW74olV+YNGIxMb0s7IhSGdkp9Xk/NjmvK+6Y/p+P+r8QgkAWQKhKZjiYm3KAb3DaoCc3Qr93NqK+NtPGoHWtL0X24sLjyKySKX20R+3MgGUs7Cr33eUrhfe6mLdNGzdnbWwFXRPp7ksaMvi22Qohyv/c+OBSajylEOwmaQ+AjqChLj6xvXQEgqvhDd4MxtT0F0hdtlXAAFyjN4aGm71A+HZlYhTbeSX3yuq4F4bBYGffrHiRUNSgjgR7vx3ZIcRl8VDQmiCY69owGIsmN9dY/34tNQyrfivfehys34jJCvOtAbjtrWjRKGy2FhXWH6/91xpyPwiXBsAYUWz0+yDh0HhSrTLTJg1KAP+kfWxDOStxSqnzPw== X-Microsoft-Exchange-Diagnostics: 1; VI1PR0802MB2557; 5:eD1zDD05zIopJZrdxWc4Du8/EY97Bz2ggZE1GV6oJF75MW0xmISNxlilQM32kxVET7dLOtjDmJZcWrMdv8h1nqNY5GmWFpx4wd4cowLs/JVYYhIj2c94PQ7fdotlcyYrilgdGVwqsLFBfJyo1012BbJJj3wpe7kCHjm3RUt1ffRYVvNnMo5dfAIljepQtRftkNvqk8GnZOcWO47oryKhDkJumB95V/hk6nLH6tQRN86Blyddkp/+4jyYOQnl4FVxRMqgHwgNW2//kK6RYktWWsZzN1DlGSPBeB4FHExQoDf9I2BsvFjw+PgaildsnVJqzk+oichR2wRBfj5crkka45XkxBR5VZC4agAMiOScR+MErSvsdJtS+NF3GHP6tu7fva5jiiRDAWN56c5ShfzP/KBm98RX+CAiI4GoadRQUlCBnImyPZtpN+Ly4ycU9XUeo9B6+hLd1Q8g3tk8vMmC8QM6k/L7jjrkUm7YQuav0POPSkCQS9KnJ0iZdqBPCNDD; 24:+5lluXueVxCUxZXxY+SGBKHhXZQCa2mXEXhfPr4v6huGp1dnYufrCMMP0O+p5NnohJ7nBNwpvV0udgM3+IiYqjJSibCvQPVUnA3XyRiahS4= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR0802MB2557; 7:FZYQAJ6l338jwEs5iNt4VU7QA94aQUiV2qwETayCsONHEy9YCmpEDIfMA31UZZWLgSyiWadRjNI/e9yklVwir6M/MQpgdjPdOyyz3o244pzwFARRtDzkXCFIqdtlYN/HJnk/w3VnLyjiD5zjfohRYpHnYX8GJtfg8a/MlOFsZzo8Z/0sADvQlCcOJ+/kRfMcTCDgAgAdbv5RDd44Oh8mYPoQi5/avCtdCHqjPosXg5Ta8JDtSr9ghiPvmSviLkUEP1S9iFdQYUaamNQ1J4QwCM5ZNELiPjwXHXL2jOfeWZxBiOhfkmMwLY/iRTJiNu+lfBrLdfJUwFwRUHC9Qx4y1A==; 20:0KOnaRSbRW87sO4zZDZxQW/JGog+baX3sjAm7D2Q8oTL2Gp9ZVLQ4kSjBA2uec9GNFUEpB6RstEu5XDhzVOdypf9Hp3TCW27xYDGFdP1XVcGWyiP/j8bHizX+2Vgt1snsmsEiYHTDiLN7XD7tp9I7z7ngzqoCUxiuP7LyR0atpI= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 May 2017 14:43:48.1619 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0802MB2557 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 104.47.0.91 Subject: [Qemu-devel] [PATCH 1/2] qcow2: add reduce image support 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, pbutsykin@virtuozzo.com, armbru@redhat.com, mreitz@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" This patch adds the reduction of the image file for qcow2. As a result, this allows us to reduce the virtual image size and free up space on the disk wi= thout copying the image. Image can be fragmented and reduction is done by punching holes in the image file. Signed-off-by: Pavel Butsykin --- block/qcow2-cache.c | 8 +++++ block/qcow2-cluster.c | 83 ++++++++++++++++++++++++++++++++++++++++++++++= ++++ block/qcow2-refcount.c | 65 +++++++++++++++++++++++++++++++++++++++ block/qcow2.c | 40 ++++++++++++++++++------ block/qcow2.h | 4 +++ qapi/block-core.json | 4 ++- 6 files changed, 193 insertions(+), 11 deletions(-) diff --git a/block/qcow2-cache.c b/block/qcow2-cache.c index 1d25147392..da55118ca7 100644 --- a/block/qcow2-cache.c +++ b/block/qcow2-cache.c @@ -411,3 +411,11 @@ void qcow2_cache_entry_mark_dirty(BlockDriverState *bs= , Qcow2Cache *c, assert(c->entries[i].offset !=3D 0); c->entries[i].dirty =3D true; } + +void qcow2_cache_entry_mark_clean(BlockDriverState *bs, Qcow2Cache *c, + void *table) +{ + int i =3D qcow2_cache_get_table_idx(bs, c, table); + assert(c->entries[i].offset !=3D 0); + c->entries[i].dirty =3D false; +} diff --git a/block/qcow2-cluster.c b/block/qcow2-cluster.c index 347d94b0d2..47e04d7317 100644 --- a/block/qcow2-cluster.c +++ b/block/qcow2-cluster.c @@ -32,6 +32,89 @@ #include "qemu/bswap.h" #include "trace.h" =20 +int qcow2_reduce_l1_table(BlockDriverState *bs, uint64_t max_size) +{ + BDRVQcow2State *s =3D bs->opaque; + int64_t new_l1_size_bytes, free_l1_clusters; + uint64_t *new_l1_table; + int new_l1_size, i, ret; + + if (max_size >=3D s->l1_size) { + return 0; + } + + new_l1_size =3D max_size; + +#ifdef DEBUG_ALLOC2 + fprintf(stderr, "reduce l1_table from %d to %" PRId64 "\n", + s->l1_size, new_l1_size); +#endif + + ret =3D qcow2_cache_flush(bs, s->l2_table_cache); + if (ret < 0) { + return ret; + } + + BLKDBG_EVENT(bs->file, BLKDBG_L1_REDUCE_FREE_L2_CLUSTERS); + for (i =3D s->l1_size - 1; i > new_l1_size - 1; i--) { + if ((s->l1_table[i] & L1E_OFFSET_MASK) =3D=3D 0) { + continue; + } + qcow2_free_clusters(bs, s->l1_table[i] & L1E_OFFSET_MASK, + s->l2_size * sizeof(uint64_t), + QCOW2_DISCARD_ALWAYS); + } + + new_l1_size_bytes =3D sizeof(uint64_t) * new_l1_size; + + BLKDBG_EVENT(bs->file, BLKDBG_L1_REDUCE_WRITE_TABLE); + ret =3D bdrv_pwrite_zeroes(bs->file, s->l1_table_offset + new_l1_size_= bytes, + s->l1_size * sizeof(uint64_t) - new_l1_size_b= ytes, + 0); + if (ret < 0) { + return ret; + } + + ret =3D bdrv_flush(bs->file->bs); + if (ret < 0) { + return ret; + } + + /* set new table size */ + BLKDBG_EVENT(bs->file, BLKDBG_L1_REDUCE_ACTIVATE_TABLE); + new_l1_size =3D cpu_to_be32(new_l1_size); + ret =3D bdrv_pwrite_sync(bs->file, offsetof(QCowHeader, l1_size), + &new_l1_size, sizeof(new_l1_size)); + new_l1_size =3D be32_to_cpu(new_l1_size); + if (ret < 0) { + return ret; + } + + BLKDBG_EVENT(bs->file, BLKDBG_L1_REDUCE_FREE_L1_CLUSTERS); + free_l1_clusters =3D + DIV_ROUND_UP(s->l1_size * sizeof(uint64_t), s->cluster_size) - + DIV_ROUND_UP(new_l1_size_bytes, s->cluster_size); + if (free_l1_clusters) { + qcow2_free_clusters(bs, s->l1_table_offset + + ROUND_UP(new_l1_size_bytes, s->cluster_siz= e), + free_l1_clusters << s->cluster_bits, + QCOW2_DISCARD_ALWAYS); + } + + new_l1_table =3D qemu_try_blockalign(bs->file->bs, + align_offset(new_l1_size_bytes, 512= )); + if (new_l1_table =3D=3D NULL) { + return -ENOMEM; + } + memcpy(new_l1_table, s->l1_table, new_l1_size_bytes); + + qemu_vfree(s->l1_table); + s->l1_table =3D new_l1_table; + s->l1_size =3D new_l1_size; + + return 0; +} + int qcow2_grow_l1_table(BlockDriverState *bs, uint64_t min_size, bool exact_size) { diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c index 7c06061aae..5481b623cd 100644 --- a/block/qcow2-refcount.c +++ b/block/qcow2-refcount.c @@ -29,6 +29,7 @@ #include "block/qcow2.h" #include "qemu/range.h" #include "qemu/bswap.h" +#include "qemu/cutils.h" =20 static int64_t alloc_clusters_noref(BlockDriverState *bs, uint64_t size); static int QEMU_WARN_UNUSED_RESULT update_refcount(BlockDriverState *bs, @@ -2931,3 +2932,67 @@ done: qemu_vfree(new_refblock); return ret; } + +int qcow2_reftable_shrink(BlockDriverState *bs) +{ + BDRVQcow2State *s =3D bs->opaque; + int i, ret; + + ret =3D qcow2_cache_flush(bs, s->refcount_block_cache); + if (ret < 0) { + return ret; + } + + for (i =3D 0; i < s->refcount_table_size; i++) { + int64_t refblock_offs =3D s->refcount_table[i] & REFT_OFFSET_MASK; + void *refblock; + bool unused_block; + + if (refblock_offs =3D=3D 0) { + continue; + } + ret =3D qcow2_cache_get(bs, s->refcount_block_cache, refblock_offs, + &refblock); + if (ret < 0) { + return ret; + } + + /* the refblock has own reference */ + if (i =3D=3D refblock_offs >> (s->refcount_block_bits + s->cluster= _bits)) { + uint64_t blk_index =3D (refblock_offs >> s->cluster_bits) & + (s->refcount_block_size - 1); + uint64_t refcount =3D s->get_refcount(refblock, blk_index); + + s->set_refcount(refblock, blk_index, 0); + + unused_block =3D buffer_is_zero(refblock, s->refcount_block_si= ze); + + s->set_refcount(refblock, blk_index, refcount); + } else { + unused_block =3D buffer_is_zero(refblock, s->refcount_block_si= ze); + } + + if (unused_block) { + qcow2_free_clusters(bs, refblock_offs, s->cluster_size, + QCOW2_DISCARD_ALWAYS); + qcow2_cache_entry_mark_clean(bs, s->refcount_block_cache, refb= lock); + s->refcount_table[i] =3D 0; + } + qcow2_cache_put(bs, s->refcount_block_cache, &refblock); + } + + for (i =3D 0; i < s->refcount_table_size; i++) { + s->refcount_table[i] =3D cpu_to_be64(s->refcount_table[i]); + } + ret =3D bdrv_pwrite_sync(bs->file, s->refcount_table_offset, + s->refcount_table, + sizeof(uint64_t) * s->refcount_table_size); + if (ret < 0) { + return ret; + } + for (i =3D 0; i < s->refcount_table_size; i++) { + s->refcount_table[i] =3D be64_to_cpu(s->refcount_table[i]); + } + + return 0; +} diff --git a/block/qcow2.c b/block/qcow2.c index a8d61f0981..4da8bc85d1 100644 --- a/block/qcow2.c +++ b/block/qcow2.c @@ -2545,6 +2545,7 @@ static int qcow2_truncate(BlockDriverState *bs, int64= _t offset, Error **errp) { BDRVQcow2State *s =3D bs->opaque; int64_t new_l1_size; + uint64_t total_size; int ret; =20 if (offset & 511) { @@ -2558,17 +2559,36 @@ static int qcow2_truncate(BlockDriverState *bs, int= 64_t offset, Error **errp) return -ENOTSUP; } =20 - /* shrinking is currently not supported */ - if (offset < bs->total_sectors * 512) { - error_setg(errp, "qcow2 doesn't support shrinking images yet"); - return -ENOTSUP; - } - new_l1_size =3D size_to_l1(s, offset); - ret =3D qcow2_grow_l1_table(bs, new_l1_size, true); - if (ret < 0) { - error_setg_errno(errp, -ret, "Failed to grow the L1 table"); - return ret; + total_size =3D bs->total_sectors << BDRV_SECTOR_BITS; + + if (offset < total_size) { + ret =3D qcow2_cluster_discard(bs, ROUND_UP(offset, s->cluster_size= ), + total_size - ROUND_UP(offset, + s->cluster_size), + QCOW2_DISCARD_ALWAYS, true); + if (ret < 0) { + error_setg_errno(errp, -ret, "Failed to discard reduced claste= rs"); + return ret; + } + + ret =3D qcow2_reduce_l1_table(bs, new_l1_size); + if (ret < 0) { + error_setg_errno(errp, -ret, "Failed to reduce the L1 table"); + return ret; + } + + ret =3D qcow2_reftable_shrink(bs); + if (ret < 0) { + error_setg_errno(errp, -ret, "Failed to shrink the refcount ta= ble"); + return ret; + } + } else { + ret =3D qcow2_grow_l1_table(bs, new_l1_size, true); + if (ret < 0) { + error_setg_errno(errp, -ret, "Failed to grow the L1 table"); + return ret; + } } =20 /* write updated header.size */ diff --git a/block/qcow2.h b/block/qcow2.h index 1801dc30dc..03cebabb3d 100644 --- a/block/qcow2.h +++ b/block/qcow2.h @@ -531,10 +531,12 @@ int qcow2_pre_write_overlap_check(BlockDriverState *b= s, int ign, int64_t offset, int qcow2_change_refcount_order(BlockDriverState *bs, int refcount_order, BlockDriverAmendStatusCB *status_cb, void *cb_opaque, Error **errp); +int qcow2_reftable_shrink(BlockDriverState *bs); =20 /* qcow2-cluster.c functions */ int qcow2_grow_l1_table(BlockDriverState *bs, uint64_t min_size, bool exact_size); +int qcow2_reduce_l1_table(BlockDriverState *bs, uint64_t max_size); int qcow2_write_l1_entry(BlockDriverState *bs, int l1_index); int qcow2_decompress_cluster(BlockDriverState *bs, uint64_t cluster_offset= ); int qcow2_encrypt_sectors(BDRVQcow2State *s, int64_t sector_num, @@ -583,6 +585,8 @@ int qcow2_cache_destroy(BlockDriverState* bs, Qcow2Cach= e *c); =20 void qcow2_cache_entry_mark_dirty(BlockDriverState *bs, Qcow2Cache *c, void *table); +void qcow2_cache_entry_mark_clean(BlockDriverState *bs, Qcow2Cache *c, + void *table); int qcow2_cache_flush(BlockDriverState *bs, Qcow2Cache *c); int qcow2_cache_write(BlockDriverState *bs, Qcow2Cache *c); int qcow2_cache_set_dependency(BlockDriverState *bs, Qcow2Cache *c, diff --git a/qapi/block-core.json b/qapi/block-core.json index 6b974b952f..dcd2d0241f 100644 --- a/qapi/block-core.json +++ b/qapi/block-core.json @@ -2371,7 +2371,9 @@ 'cluster_alloc_bytes', 'cluster_free', 'flush_to_os', 'flush_to_disk', 'pwritev_rmw_head', 'pwritev_rmw_after_head', 'pwritev_rmw_tail', 'pwritev_rmw_after_tail', 'pwritev', - 'pwritev_zero', 'pwritev_done', 'empty_image_prepare' ] } + 'pwritev_zero', 'pwritev_done', 'empty_image_prepare', + 'l1_reduce_write_table', 'l1_reduce_activate_table', + 'l1_reduce_free_l2_clusters', 'l1_reduce_free_l1_clusters' ] } =20 ## # @BlkdebugInjectErrorOptions: --=20 2.11.0 From nobody Tue Apr 30 16:49:00 2024 Delivered-To: importer@patchew.org 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; Authentication-Results: mx.zoho.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 1496241939989491.2863234799079; Wed, 31 May 2017 07:45:39 -0700 (PDT) Received: from localhost ([::1]:59950 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dG4sT-00025L-CQ for importer@patchew.org; Wed, 31 May 2017 10:45:37 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:37583) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dG4qz-00011Q-V5 for qemu-devel@nongnu.org; Wed, 31 May 2017 10:44:07 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dG4qz-0004sX-5d for qemu-devel@nongnu.org; Wed, 31 May 2017 10:44:06 -0400 Received: from mail-he1eur01on0091.outbound.protection.outlook.com ([104.47.0.91]:58940 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 1dG4qu-0004ep-2j; Wed, 31 May 2017 10:44:00 -0400 Received: from pavelb-Z68P-DS3.sw.ru (195.214.232.6) by VI1PR0802MB2557.eurprd08.prod.outlook.com (2603:10a6:800:ae::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1124.9; Wed, 31 May 2017 14:43:49 +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=s9FRcNNYu98k/sfV4GA6CAJOpagvgc9roZ02vDlVIBU=; b=JcFRrHRtGcTGt4yH+WhA2MWr3Bu17Za3PAeleZcUcQ8K6qiKBp7MuOO9SPjG/Z5KgTswqARUHkw64A25TPOyWIG6UDtfa3B7VhPNpQl+35uEhZsZCM4SVzalWDuBfREye/ZozhdR0GoBjn3tyDaReBnhtbH+rRJ1EuejKrbtUUg= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none; nongnu.org; dmarc=none action=none header.from=virtuozzo.com; From: Pavel Butsykin To: , Date: Wed, 31 May 2017 17:43:31 +0300 Message-ID: <20170531144331.30173-3-pbutsykin@virtuozzo.com> X-Mailer: git-send-email 2.13.0 In-Reply-To: <20170531144331.30173-1-pbutsykin@virtuozzo.com> References: <20170531144331.30173-1-pbutsykin@virtuozzo.com> MIME-Version: 1.0 X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: HE1PR0202CA0022.eurprd02.prod.outlook.com (2603:10a6:3:8c::32) To VI1PR0802MB2557.eurprd08.prod.outlook.com (2603:10a6:800:ae::7) X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI1PR0802MB2557: X-MS-Office365-Filtering-Correlation-Id: 4e9513f2-e153-4598-07f5-08d4a833738a X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(201703131423075)(201703031133081); SRVR:VI1PR0802MB2557; X-Microsoft-Exchange-Diagnostics: 1; VI1PR0802MB2557; 3:A0ABJ89KWBbepacDXkcTRyGVt4RpF62H7oSR2Ta/w10du7LpF+qNSI2JE/5JYR0xRhejUAmbnx/v2HiQfxP19TWmCg9vu5rjysouXrfxmz7aq2OwCvSQC8gm1dxqoX4mj2uKhJ45vN0YkAAt7HLugKy2RLXB8DO+qEgVy+SU+rH+Rq5M8gMon/AwMDFWBnzh7B40BrIttY/set8TxAM+hAU0v3MNam3qYdIukAnYXNocagPxL9yTIG0XaswsSKAm29PPXvG6B3G3bhyOW8FejODLnL4acmSMfZux6pA8i6QaC0OhYs0z10AObPGhTtwARaSq3PNeIiYS2YLdgD+IiA==; 25:hYK/tSJVvj03B+loyJmhpiX8aszROcJA2SkVFR/auAPoI64u6QXnPf91QnbEdE11ROoW6k5hDEz2r1pPx+lspWBRqI5PAtl5sQILLAqrg/oqJJim363b7wmtnK/1p45IMyUKnxIqj4tCl/DTxC1Z+CH+8pxRWrqZtym3ELgf++zUsOKoCktW9d6d5HeOd0EtbMg+6lmIa3G59NumihhUZ52vfiqyLsvNjbH/nc+TDkh4nTSpi7GTeoCrwpEEizfJcup9uQ+otQR8YC8x8fQmOmreyToxYGXTifuH/pPayVSBoL59TvrJYRj+5jFpcBNXRa9RkzERNJkvWFFdLCUyrTBHScUn2S2U1TSAW9HlM3E8XfNvvevpOXYeLmNfB2D9ZI7whzkFeo0hu8QVpC6ieD/d7oPoOGcVJSD9cq1+q2sAuwJZJCrEc3DZ9TJeexn8EUC8QAmglbZiOwzbtnjlBivDPE6nSncP8A/ABFAunI0= X-Microsoft-Exchange-Diagnostics: 1; VI1PR0802MB2557; 31:Zgwh4/3M3pQzcfaFRf5xTx8tZK7JrfgF09EioWfNcPLtgJsM21MT4PVrwubp0ekKt2W9LuHIXQ7NyAXDQW7EFBcqVwBa3pwgQf6nRq5peg8rZpEKe1rpvntfg1IWhLf7FzfdOam7ZQ9tbY5ETBLWc2RfpU69ozVFPMUvnAeytJGF3R5tvYOa/U1G8UIfJNSWm8oqMS57JvuU5qBVf1Xf0SGGgy8dzbxsXGIk3FSPxpY=; 20:pDMlRkXhJtP6QsLOKnEHREI5Le8hAT5mtNa77JIOaG0WNqLHWV7V5MThTxLv6x6S3+DyJBL6L24lHgLPtjPaobK+uyIdyuLjvp1WCbl/soOP8dkE7vzJe6zU8LuK48vngl1W3uRefk3TjTMSIxey7b10EoNxb7PDpxAshvw2F4txK1o1qDOeQnHB0CgQ+/Sb4pR3Zhj9/ANqMAw2bMZB2SxCbymCFaLXfqwyBQV8v7BbpZOKbTGbBTaeAE2KUKGfLkyYXMzPJ6mpjH639A1MQAn+MeUkzhCcDB8IFEber2GKYvRl++UXx8Bou/SuzT/HqkhBC2/BQvdcm/9pZOHIQ8y4hLlM5rr1NwtSG7YPRXvsFngBz9AslfGxx22UlilacF9lxqPXBtABAGa2mxUMxZobCoFZp0S8yWcEf9KsttA= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700073)(100105000095)(100000701073)(100105300095)(100000702073)(100105100095)(6040450)(601004)(2401047)(5005006)(8121501046)(3002001)(100000703073)(100105400095)(10201501046)(93006095)(93001095)(6041248)(20161123560025)(20161123564025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123555025)(20161123562025)(20161123558100)(6072148)(100000704073)(100105200095)(100000705073)(100105500095); SRVR:VI1PR0802MB2557; BCL:0; PCL:0; RULEID:(100000800073)(100110000095)(100000801073)(100110300095)(100000802073)(100110100095)(100000803073)(100110400095)(100000804073)(100110200095)(100000805073)(100110500095); SRVR:VI1PR0802MB2557; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR0802MB2557; 4:nGQqDHw62JD8lfTslNAaJMD5Q9C4BbBHdZjMZ/Hk?= =?us-ascii?Q?h+rxmF2OsMKO/wn+EkyK4gQo2RyMKunk2MMR3jMqB0BCMW4GVHTb+Bp9AzzA?= =?us-ascii?Q?vRaXoB6E3nCnkWFXI0J9sfSJ4y3gkEisHx1I8/zEkYCzXHx/WYFA6Jd+RX+i?= =?us-ascii?Q?f/+Q3gMt6bBeWvQ2BfMJ90oGehbt3987v3n40zUV7bemhp3B0u17Rkb/8rq4?= =?us-ascii?Q?68JmZulxk4HkhoZaf7H3Xcqk1C0wI+qGTxWgjD+hKViiL7KKgqpR8CE7kjCA?= =?us-ascii?Q?g1bLAarWMw5egtCLG5IU9r1ZuJKzGpwC+32JsP7HULuwv4f0YWvtDL1PfDgd?= =?us-ascii?Q?9ZsYp4aD0Tz/jKC8GQLX3yN/sBs758DwODB4UQVjn0EpfBR+LVAPv484UNs/?= =?us-ascii?Q?5yxXYCjmcCfB4pKk8cbAhX0bApj92v0wdnEsX0RDDOeG0YS7TifgaaK4l5IL?= =?us-ascii?Q?+lAoU0RbOsNIBj6fVMxUY6fO/aGh/fMRBRbL4sMR+kIzL03wKE+Qm+jGH6Z/?= =?us-ascii?Q?GHdlDTBn3SQ5onPUUeJEyNQn+m/8eiz8WlioLRvVu0yIY1KwaWVNmCUdplNR?= =?us-ascii?Q?hnaFhO8rHlnW1LD6Rg/yv97ZEBS62QTgLqIwXQ4Hhb8UdaxDP2qbqXgWQEeI?= =?us-ascii?Q?GsiT2rjDIN0hljOzESStz+jvf2W4PGAiESYOrAqYfyZJuOdpvcZOFE4ao484?= =?us-ascii?Q?6xXskmOMlIS0O7CbVzR8fVvlr9BAxZ1LpyOMNTmeMHLvnTlsy5ZxOaU/8UkO?= =?us-ascii?Q?2sRT8QzdRZMzK1OZuWdrd5P+kgUY83Ga0Llui6no9iRGcckZWbF1T1N+/YLF?= =?us-ascii?Q?tamTsQlQQHwBr/GXOWdm/KtaayrKpy4fr6/zAyWTcfP9ZHtf35/qCx5r9lt4?= =?us-ascii?Q?qhjXV4ota/ZVTj6xSB/GhBxja4SwkHitLodzRFvTpVFYkIB6FzEZimC7wv62?= =?us-ascii?Q?qTJ5L3Jc4oCZWv2SWd7B6qe0o0Vm9YCttBhxfGL7O2cmRslSNFg4giMfWvdJ?= =?us-ascii?Q?BjmbVeIS9DSJSqlXnH+fO+GfbA9NiYcOmzZWJxhA0u31gYCSu0ein8lloaXY?= =?us-ascii?Q?BKmSDWvWc2cyMirXOqrEL69uhTuUqSnAxdAh8tnb2ODwRSRgG9SVjnUSfAkJ?= =?us-ascii?Q?0QRkyusLRD7LSmhQkUnX8RrLYhXcVjoc?= X-Forefront-PRVS: 0324C2C0E2 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(4630300001)(979002)(6009001)(39410400002)(39450400003)(39400400002)(39840400002)(4326008)(107886003)(81166006)(48376002)(38730400002)(8676002)(7736002)(50986999)(5660300001)(6512007)(25786009)(76176999)(50226002)(50466002)(54906002)(305945005)(1076002)(6486002)(53936002)(6666003)(6506006)(5003940100001)(3846002)(6116002)(2950100002)(36756003)(33646002)(47776003)(478600001)(2906002)(189998001)(42186005)(53416004)(86362001)(66066001)(21314002)(969003)(989001)(999001)(1009001)(1019001); DIR:OUT; SFP:1102; SCL:1; SRVR:VI1PR0802MB2557; H:pavelb-Z68P-DS3.sw.ru; FPR:; SPF:None; MLV:ovrnspm; PTR:InfoNoRecords; LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR0802MB2557; 23:aZCp4FW220S7a3oR89XvfGYbkj7EPpXESE4fixt?= =?us-ascii?Q?Qm7jAcnzO9L04nN85158dCa9OdZFdeCyWK5Rf4RNyO//04VWtMDQ293hR3vo?= =?us-ascii?Q?90/NJWXoAJWZWnPEZ19LiNedoehs7myEITTpOnN3WBkyyNw/TpAkX2mddawC?= =?us-ascii?Q?QLRAWRbU0KpGp+wKwK2shM/HCW32P5HKpKjV9L9b2KJy+wxC1sqJAP3fBMkt?= =?us-ascii?Q?wZcfDbBFK68CcrvMgCZkQ7u4yBlbFQXM47sVCmY9OyQRKYdrRnu7TpT37r1p?= =?us-ascii?Q?WkGNjgHg60jhpsw3ltv3/U56aLqAYXfetMFX+s4hop52Kn8baKdI9pu7OuOB?= =?us-ascii?Q?YLZ2YB18TWh2zHj3srVkcbdEU991uJk2yFQGfw1rLetx4OVSQ+i/uOQLhF0E?= =?us-ascii?Q?0F59q/QseWnl7B9VFkbmw/Sx8QCpeFEZ7WUEdCwAa5v12vb3aHnGIUdINans?= =?us-ascii?Q?Nr3YHJTAvs/ad0L8LIEB+Sgqlm4W3rOcGrQYVRACJ3EYfuo1FSaezao9yT2p?= =?us-ascii?Q?5oSJSs3WjnD/aTOzjRVhOrCFMGM1gTELeIP0FuElE2OZcl5dEVncR1xxXD6v?= =?us-ascii?Q?eBD/UO+bKGFkRKZ9foSB+1fINnIml0+/vXRmVevR6AAlGePpifVHaA0PetNT?= =?us-ascii?Q?kUSIJje4oRBsb0Q+ECKzriUYu+4JrKOINVkzZ69OXLKlZLK/YZgBgsfxyleV?= =?us-ascii?Q?Eqj2gsNG5XceF5427IKhBoYiqrb4hYCaIS2Bag3Jr7Jekz6J4PiYr8xx+Ugy?= =?us-ascii?Q?Xe35wtSMj6nrW19uUHSwvcNyPvcJFkCu2kZJq9dlXidmxPp7+ZFgpTpyp1y9?= =?us-ascii?Q?A+KVnqz3rUIGRxBxhFY/4F4CcoNATHk4Y9twUOFKQqRWh6JBQ+N4V8wSFeap?= =?us-ascii?Q?vthq1ZYtYmCbBLpvT1PkkOwwwQWErxTiI8qBBzVC7A6CzzZ7d3/KufohrP1Y?= =?us-ascii?Q?um42Jc71I8vpPFJG1p9+S/YbBJA3ydCsLsl+C30b0488y2MdxDrOP2UsYb7+?= =?us-ascii?Q?9TXJJoz3RsjnaeSfxqivfezGJJ3LyAv6DBohFwAdMCbXapTwjIwD/1pNBoM3?= =?us-ascii?Q?ey9AKMi6Rc522eUi31UE4rau+0SuYYdpuHRTgwTN484+sHKUeFco6U//Fpg3?= =?us-ascii?Q?BC0VSMJsuwlZBtd2otDk1qf9jQ5ikkpXwYxl8Hbg+Cg5xnYbhrp4ZTA=3D?= =?us-ascii?Q?=3D?= X-Microsoft-Exchange-Diagnostics: 1; VI1PR0802MB2557; 6:f1jMpgYxTvvLz5PSM3cVdV0Ek315TQfjIm3liO6iv95XRUThouTWy3EuDSV3kBCnwXczDcK5mqB7crlUBaRQjkXu560VEkWJ4miT7FHhIgigYixpMlAJIAQOo87ayJsSWdUkkch9AfIDWt5hhvuV38isiQkcICTABzYAUkWjCjeetsijx3DbaQGMtbPorBc8ZzSf1UxFD1o/ZKDd7S4F/U0qw4HTE6yzLZNAmtCzJTPgkKZ+x6IOjyAbbb1rcnVUWSAtUqGaYkU0Y5tXGdx/LVDpFe8J/DOzB1mm85oubsMOh6AtDx7055kceAX1vTcl7tYR/9VuFHy7d8LF0DMgXG5Iwh29kDVF5YQOTHHTI8vPmVLCHCST9IoX6dgJ3RpNx+btsUUNqgF/o9OUKLwglCstYI8XkQOOFVOllJ9xgwTXzmF4T4+Yr9fUwrU0KyiwQVBsZ4UFgyglGSNVM9JI3ESbwcVJWa37eWPlEDaewVb7VgQQ56NkOShQcKMOPFnHd89lmJ3lCP+SXeWWzf8MGQ== X-Microsoft-Exchange-Diagnostics: 1; VI1PR0802MB2557; 5:35FF0DCmZaXAt0MkHsZ3GkVfAk59vrxw9dW+TCJmfZ07+URcqzOP43cQhtUjW03s+g2qgxHA7PLimoKS9d+ypqgQ5bzB9BFAnpos+Ge65idz+FRNFixgGAdquVqIfmhoFL5lb8kcSHga+YovOEi23qwLHTZqcclP0eBYM01OrDteMD4ve+H3/vYc4VLa68QjuB/BPksYD9t7usmpQ0JMK+4bNeS5KwW4LYzkx/TIaOzdRClJZmpAbHU5Qmfswxfqgwni3heO0TfxIRt6vG7a9/3YAjP9TKRS3UcKCioS6z0Hq68Nn/6AG0rw8eUYlKi7aLRXqdow+zVv78ygdLJRcMz52LEXiQMhWd07LDTJJlygy1wQdbms4ddbElUKn9iKyOX2LYEKjLPQpanZ3RsWW7BEqvDf2yZMzzvg+fZyqf9H1YtSoCyWL/BzwNNzu2hA8aWQ6VIQIpOci238ufp/aCIj7ZYx7imHXZIKlHKDFdIvh5krXuYpm4yXHkZkbi+2; 24:T0nemxz5S1Bj00ZVyP/3+gF52p7Z3FdiaEkPrbE/5kYoEEfLwbaTTStqp6yglheyNw6Zvs1QOpCYuS07TYJbeDxNyVcElODmWtUKKV8ly/k= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR0802MB2557; 7:Iv4nWgCAmhO4iaekw9h+7PYi7QaOlr0u3OGqTeSMcGXkYoAp/jK4U4BYObtiBMQVZOLk/hMi2mk4PwcUimg+lDKSoAOH7u3jWeStehWCxftNbw1QcSzaQyDFh95M2o1Y3Cumg2O9j9NsMGUc7hm7ANH9elRO7Xqtwm5RY7AN+YdQX2gQ+Dk6kuTDuh4Q93hRZkW2xd0hHYAaIeGTbwutSV7Kaok2fXCWIILW5ZB0sC7C4xVB2kl0rvWlru2AIrknV+37zFWVZAeDvnX4SsCYY2g4iE8eH1RL0t2f5aA2GYSdX7nsMmBmhfIXpU919ukweRRHfQNIxjX2TlbBnXX0CQ==; 20:4VU9ZN4/Y/+JA2tDTuHP+3FidwAgKF1O0EjtLZEe85xqKTnhk07i4Hqz1GLi3+IRmD35tOXFuOUU94Y0Hgap21qffOuB4Ml0mznDcL/5ViJNOBvDT4k6Y3t2WDpI4PFPQLGS9+ML8dmIVbgDTghZhF/4ahPCWQsCqJPJ+WVgf6o= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 May 2017 14:43:49.3338 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0802MB2557 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 104.47.0.91 Subject: [Qemu-devel] [PATCH 2/2] qemu-iotests: add reducing image test in 025 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, pbutsykin@virtuozzo.com, armbru@redhat.com, mreitz@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: Pavel Butsykin --- tests/qemu-iotests/025 | 19 +++++++++++++++++-- tests/qemu-iotests/025.out | 12 +++++++++++- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/tests/qemu-iotests/025 b/tests/qemu-iotests/025 index f5e672e6b3..658601579b 100755 --- a/tests/qemu-iotests/025 +++ b/tests/qemu-iotests/025 @@ -38,7 +38,7 @@ trap "_cleanup; exit \$status" 0 1 2 3 15 . ./common.filter . ./common.pattern =20 -_supported_fmt raw qcow2 qed +_supported_fmt raw qcow2 _supported_proto file sheepdog rbd nfs _supported_os Linux =20 @@ -46,6 +46,7 @@ echo "=3D=3D=3D Creating image" echo small_size=3D$((128 * 1024 * 1024)) big_size=3D$((384 * 1024 * 1024)) +bigger_size=3D$((512 * 1024 * 1024)) _make_test_img $small_size =20 echo @@ -54,7 +55,20 @@ io_pattern write 0 $small_size 0 1 0xc5 _check_test_img =20 echo -echo "=3D=3D=3D Resizing image" +echo "=3D=3D=3D Growing image" +$QEMU_IO "$TEST_IMG" <