From nobody Wed Nov 5 13:42:54 2025 Delivered-To: importer@patchew.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 1497356492892278.87228315375046; Tue, 13 Jun 2017 05:21:32 -0700 (PDT) Received: from localhost ([::1]:43014 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dKkp7-0002dT-Gn for importer@patchew.org; Tue, 13 Jun 2017 08:21:29 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60604) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dKkm6-0000qV-BA for qemu-devel@nongnu.org; Tue, 13 Jun 2017 08:18:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dKkm0-00071O-0P for qemu-devel@nongnu.org; Tue, 13 Jun 2017 08:18:22 -0400 Received: from mail-he1eur01on0121.outbound.protection.outlook.com ([104.47.0.121]:46144 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 1dKklu-0006yS-12; Tue, 13 Jun 2017 08:18:10 -0400 Received: from pavelb-Z68P-DS3.sw.ru (195.214.232.6) by HE1PR0802MB2555.eurprd08.prod.outlook.com (2603:10a6:3:e1::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1157.12; Tue, 13 Jun 2017 12:18:01 +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=HfvW5KQK4SdDgakVf7zK0PcQ1GFdOi/mjJBKPN+Fe7g=; b=XBf2SxB0b8LQNw092TT/zsmVVJuvQIk//aiiIwC3mzhT7uXEDqBimUsNy8lPyHf/FkvA7Iun6D9yxFH4ymmFamrQxZbA7gTPb5doSLxY1u1RBmc135X65EJNgoqvH2Mrxqtxb70YSPJNGbgfYPCe8pLYFI+7Uho9EEk7UTvq5E4= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=pbutsykin@virtuozzo.com; From: Pavel Butsykin To: qemu-block@nongnu.org, qemu-devel@nongnu.org Date: Tue, 13 Jun 2017 15:16:36 +0300 Message-Id: <20170613121639.17853-2-pbutsykin@virtuozzo.com> X-Mailer: git-send-email 2.13.0 In-Reply-To: <20170613121639.17853-1-pbutsykin@virtuozzo.com> References: <20170613121639.17853-1-pbutsykin@virtuozzo.com> MIME-Version: 1.0 X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: HK2PR02CA0136.apcprd02.prod.outlook.com (2603:1096:202:16::20) To HE1PR0802MB2555.eurprd08.prod.outlook.com (2603:10a6:3:e1::20) X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: HE1PR0802MB2555: X-MS-Office365-Filtering-Correlation-Id: 8a97e3ed-a887-4120-adb1-08d4b2563f78 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(201703131423075)(201703031133081); SRVR:HE1PR0802MB2555; X-Microsoft-Exchange-Diagnostics: 1; HE1PR0802MB2555; 3:1dFZgQbyINtuUp5EWJjvNY+64r6/InaTNAlWtuqr+rErSfDvkZaZ7IiPwctXOaYRpQKFejTYuhGAeJ7v3vXe2SrDcUf5+GgLcXgkoAMZB308BhgD2WGF5iWJ2cECOhimT38cW6WeNFYa2vaOyW8uK7iK9lbAmZ+ocyMRBigr9Vhl6vWAMQi+9CsumYXdrM3owfF9WjvnN55rbbnlru/4wcVtybV9i3mhioURXoISzg5X5lSTqqg9+yZSZZ94q6egAS09r2kaW3zHl6WNRo6bWqd2PZgQbT95mFHUqYvfqc53td7qT1UKnpvWHms6TwNtRsgx7rCHHIT/NujaxGTVeQ==; 25:lRpnf8uylcRWfazWXIeJCKW7bpd7cDG8x3ER49BgkCSESHzf9jac7+DJHmqUcEpWa7YqR4Y3t/kZMbWxxAITZqJI2JUwShYNLXdOqJLr3cPKVrOhW+Us4FghLcjdjviO7GVi1FCy11mf1gChAbk22NOFd8d4+XjTyZxBmLc2gaXeulzeRxlljzlHCkkIKkN13G4UWghMYNnIZzzTUj7X+lN9crcv5DojYFaFzV2maNvQThjGbfkiQ7MYahIAoaPPT2ggsD3wfOKYu3QC4n9HCTbDQmdWG6z7P96zrEgmIBa2uWf8FGj8fWL4DRQeDp4s76+gTDro7I+GlgPoAaNl5+KQCaqlbZujTtowvjQgYsaD/OAk30pGN/mwtgEPH2MnZd2vEu3DOD4i3ZudIoi5cU21K7OkgR+0DFZdOqgUiDEkMZo//sZ8uSwNZl1mIYfY6yBSt+ydI/yaJ6FzVbZixVF+Zlv2hPQ9cvKqx1Ou42k= X-Microsoft-Exchange-Diagnostics: 1; HE1PR0802MB2555; 31:ImUXQLKx4VwizO5yyq65+yinfohTxUi5d77zLcRl3EXDjFl91jASTua8rOWrYeaiykkTaj3RTp3LGkryodC/D4KVQgZwbP9iQZS4Tqtgllmx2CHMcfJWTkrKkUxxpNt0UmNWxUwqasWoxAeA2+ccriOZ3HpE0CPyLM6LabuZ/okd1iaiiXcMHSh6z97P/3ThdQFtCx9aBkbzm9IM77tU0Kkt8Ta4gyV6d6mOjouGS+M=; 20:P5ApJsqeudBfdNn33N4g+WWcWRgB355vZIaa1PeaBPIhKeGIcXqO0MNzLbUWgE23Ba7QG7jtRvC3JI+Yi4mFCujQWGgpoh1S54/JpNT2ecmvE083WDNXmxWCNqQ1faJlPOTnUPSqKpDUlixWUrsscGYMBH92lowulx5o50zyZLUwg7bzqaTAgv7jtBoeyO+5S2GZtd5hbfPj5hRI0e/oTlX4Mlkz5Hmn9Xf1BAvVkhWWrKCopxQrCoZgeInQu+hEADhzbbqNtZj1tpOADi0i6TiQhYKsMgIXGQkUHJyBU4LQSOMsmzJFHJ8kxhOxykkW63LfXIur5LkmpdjW2F6vbCnCrcbb4Jop5oSVZ1J11bPbStbjE4jEPsduqF2IFKG1bL0bFbAy17zfNjLE4fNPbasgeUFI7CoHVEOlxHOsVUk= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(17755550239193); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(8121501046)(5005006)(93006095)(93001095)(3002001)(10201501046)(100000703101)(100105400095)(6041248)(20161123560025)(20161123562025)(20161123564025)(20161123555025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123558100)(6072148)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:HE1PR0802MB2555; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:HE1PR0802MB2555; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HE1PR0802MB2555; 4:tsbgIuFUm6nQQqF3jf95CNGjm85Pxs0al083C8Lw?= =?us-ascii?Q?rYqiwjHR0bvVqF59yvS06yjKVpsUScVcFRN6V74pIa1l57SGrfeR+eG6hTa3?= =?us-ascii?Q?bD2b6e6Fb/v3DjDhywJJKC5ITke5NFiJx7Pjy1YyHAc0caK0MliyI5iripic?= =?us-ascii?Q?1QQCQvnv6GIUxfvukORnmsx0nW+4Caq/cPnsXyqpo9k4mYSRlENZJO/XQzVr?= =?us-ascii?Q?iEMJVTb9YLdJaYvp5sidKXS4rcnJvzYK/GmpJ9F5IpBLsBHmduB9IYIDh3jf?= =?us-ascii?Q?x8v98i3Of2xt1y5MSuAJ93XN7XAyO5X29/XNEW7DVTWPNPqulC0fPzEFro9a?= =?us-ascii?Q?ltmFMgopSRYSua18vH33VbyhMTLsuUUkXl5ajW73IQn88mL6SiL7elS5xBCY?= =?us-ascii?Q?OtaStg5hxzD3MfdflsU9XvwXI7dDYD64S490W3dY20PvFelKsVrapfJ7y1aA?= =?us-ascii?Q?S6iYznJcLzKQLL98Q7DHL2eBRuFCN5y6umHVNyf72ue9CtJZ9mbSs3bFDqLi?= =?us-ascii?Q?O8gfOVgAxvJic6sSELzpmG0+LP2yQnQ06b+hmQLFGjE/obN82rE6lNu+6s/s?= =?us-ascii?Q?L6yIsNk3jlU/ip6H4MDA2mUmBWpTjxNsOcmB3L56O6gf7Skp9icUdsSznq7e?= =?us-ascii?Q?bFmX5ISTqee0iiVzfrs2hVOlOksYmVufpRQ/S7adMb5Kb1SWTNf89yjeHSm6?= =?us-ascii?Q?F6sl68gtQWoKvyvUqXSBr6dD/ferPnBkOA8c/sDvn5bW2pcEY8KzTdfP/iTO?= =?us-ascii?Q?2ma5VxsvtSRA8Un/Cs/+iXjRjvQ/KmXEGCqkGIxd6AJbN5pKGsSazD2Ycs/8?= =?us-ascii?Q?R8i1ngCMOj2ZUk7MNhT4JEaLQDsrG7zC/5y5n0c7CAaKHHh3V7Lc3GIsHbeC?= =?us-ascii?Q?eU6nvfA9QTAcaZh89yMawavMAmwk77xmokPYM7L37bnlqO2GC36oz2Y7w1b6?= =?us-ascii?Q?/GAQ5FG76fHTLA5tuN+18HJf78WLE8cPujcN/PU+q71vCBF3HcK0nuiytHwA?= =?us-ascii?Q?p45J//y1dCUmkaE/q4xRoWsWXIaUmNGGCVK2kYb+iy0e7BfoTcledjciQ/u3?= =?us-ascii?Q?6LUZYse/oXpFMcx8WgdZFL5t4iiRixEkGeBS5lsgttGfGOAs5+eiYRVk+lfG?= =?us-ascii?Q?V4lzJKTKgdj4Xolz62hijReRTZ+EFgmnSszQy1r9XGKVr96MRaKUkn+8pDoK?= =?us-ascii?Q?JHSzlrjNubG3EPE=3D?= X-Forefront-PRVS: 0337AFFE9A X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(4630300001)(6009001)(39450400003)(39400400002)(39410400002)(39830400002)(189002)(199003)(6506006)(25786009)(53936002)(50226002)(107886003)(110136004)(4326008)(53416004)(42186005)(6512007)(33646002)(6486002)(106356001)(38730400002)(5660300001)(105586002)(50466002)(5003940100001)(101416001)(305945005)(48376002)(69596002)(81156014)(189998001)(47776003)(66066001)(8676002)(81166006)(10056002)(6116002)(36756003)(3846002)(97736004)(6666003)(68736007)(575784001)(86362001)(1076002)(50986999)(76176999)(2950100002)(478600001)(2906002)(7736002); DIR:OUT; SFP:1102; SCL:1; SRVR:HE1PR0802MB2555; H:pavelb-Z68P-DS3.sw.ru; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: None (protection.outlook.com: virtuozzo.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HE1PR0802MB2555; 23:x6VfVT+zACpGJgKGRY0YPpXNWd4W1vFapalzkng?= =?us-ascii?Q?MAxYYvPUYxM3YTpN/ow3xHOZqPc4hTiBOsol36W0Y0o1c5oOkwT06806ZMUe?= =?us-ascii?Q?z5SswYMCgNuRlAWs6IzVSKuw8+L5+rkTnxN4Y8Z+PzQizKF5kIZ/6A1H58vx?= =?us-ascii?Q?YaOfEnyhQrgLC4oXobxGGmOlNf6uhbl7HvDKa/3mB9tdG+oX6xY2J4uBwRAD?= =?us-ascii?Q?qpA5tQvJhHKhKbABRa4BdhlxOZh0u6mJrNr2vyAH7BayRqMYC2ToltZSbAaj?= =?us-ascii?Q?V66Q1Qooqagfql4BOEtuLzVYF91xuShpCTGUC3thBdIiOEJHhs9O+Q8IYsjj?= =?us-ascii?Q?GfMA/6JpM04+d37bk4arkBN2djcou9pQ5qhuL0xr3qNfWtqSSoc+qmPIbH5u?= =?us-ascii?Q?ShBQh35RmJFkNksAIoF6c+EPlx70iQfNGw28bdWJqvrD0i2G2qzMBms9c1PW?= =?us-ascii?Q?uRKV11Qn46igeNu9qX0vz+Isc3s8eUNR233wTRomjpRuH4oIFrP8iuax2kh5?= =?us-ascii?Q?4tSpZM/eUiNHWHNiZjDRUZIrDbDIaUwUmfNTOBgMhp65JGQqVtS76ICa0m9E?= =?us-ascii?Q?bcQYOd4v9nveGbVmzJJNNyzwFv44FJ5eWQ/vO3FxEea+Ml7kYR2nz675vPVH?= =?us-ascii?Q?KimvoEL/DXzerc7hT37/byFz1eNzzXF8rv6mqw3EDRql4uV1vdE5VwQDNYgR?= =?us-ascii?Q?lSOC1h1vi0ndekpLxZz7I9sqFxGQorrOLKL5JNWoWBGz+EEvZOixYGp1y/xE?= =?us-ascii?Q?sMslTLpVoP1sHDOesee6eUMEEuoDczwiTG8DAqlcAnRAe6duFo+a7PR+0c21?= =?us-ascii?Q?OYv2KXRMA4EeU8Ic8d/2he0B+pMh7MJGIBY0gV3B1RMFxZFNqxWF2ri+XzQK?= =?us-ascii?Q?00xwZWr1o3Ayme4umAmUZQdJ5QEosyzVraXLPG7z8gjS/PR7fYrzO6ONPEY2?= =?us-ascii?Q?2X/QDiuaWG/RAPOJHJ9yBJltAnLIqpQz808bWtTF8ytVHszyUzPD0tB1ekFg?= =?us-ascii?Q?QmTBbPniuwRgscE8IWdZTBhw794o0On73iwHl88jwVcd9+ve1mG4X8mJMDcb?= =?us-ascii?Q?7ljp8rPzgFzyihZw63mwOiAYUY8eHincriEgqjJBDe2HsvVN3fRXXnptZVVg?= =?us-ascii?Q?vkGaqsj1BbG05S4Z+wTBG1/XW9fuFyymbpvQFQS5fKLzj1xXl14U70+0tCXT?= =?us-ascii?Q?tkdA5ilDi6WZIwLpFPRez3Dg5O5H0kN3JH9QCzPdVRzT1mYF1/H2Yr8TGers?= =?us-ascii?Q?2W4FWk2NjQA5Ec+idJffkHDmFbvQmv5WtzrCMrerA?= X-Microsoft-Exchange-Diagnostics: 1; HE1PR0802MB2555; 6:iv23ohSAsl0jH1SJKmxrEh04M1zSIUnNy4LRh3wWDifk5VyZj9EBpuyogEXOEYExEbgmBQPgmeQUDbKWFqKGWIIc1BvnobXteHIxcclfYFZyy8hLiv0ETE9NV40a/Y3CcOtxQNbZWHnD3WU4k9t73ez+EdPD0xg55l4ehji3vr5w7ug6/CDolJ/GdIh8WtGNSrda9p4x8Mx5Tmgg3Tz5uVxGCHljPyt28UTKL1onbjCQ8InyiwNC/R5BrOgg9yYSfkvPjuL/YRBG8cYLpC9+jB2FtG/2oW+rtoc9WeviBlcUq04Rcq4h2JzCfM+GVn+dCxafpZxPmXEjrYNxIFC4W+j7R/D6nxDXFEgAp0QZSr9So4V2wnuZlcCQit/dtwLjebPxoumXiZ/+P59/hRXzRz0SvqOtlBSjq6meFawpoiA4/IrmvhAUAj6yOMmHSuxjnTtQT02rAK2gI5XPsf+desvx/V+XzmyatrHMbNU6wiRToFbzAt9qBQG09u6hl8Pv1QigTcKR6VP/BvKnx39Pcg== X-Microsoft-Exchange-Diagnostics: 1; HE1PR0802MB2555; 5:rEFPq7xrv9Qot2h+lanlm1/wSo5gLHd0T6dNR0J3xkIk+ZFmpaXV3F3czNAXPg4opnniGoW611HKWmOJnidE62VIuTa3vjItQq7CFgLub+lAlSva/RgzP+hcekJZ2T2MJVAkLBGoUTY2iQiSlS+NBAHyM5WmoDRxHJu6wgE+JeoQf+Jni2Zzv39VsmxbexnfX4lXqagNQDJ+b0HoU5CIYYuYDPeXX3KHi/bTcA6jNggSz8Nadwjp6IdbY36yBoK/liAR7FTcsxz/I79vVKQh4K3QKTjYIVJG5sDA35CBJ6qb+v7fNb8kuBOO236J+O9AHwbQ67IBqx+giSZ77YmrKK+xWzWbhMB8qwUPGTAb+hL8k+DD/EqTMTkN72XMwaIPHbDzYv3+qlzTfz2wZu7hEE90EIAip6/Y8E6sJtFTsgIhxZBiqzzXL3P8+hvPhXsZq74f4cN12RiQ9v2J0YE91NIFWqCK7riCMVt66B5Qb7sWmNnlf9ECOjT9U9VxDgDU; 24:NWvCgIrNmAzWbfVXdYPYuAoP0zkgw1PxK3gfaB86qEzldhEnpGMHA7bejMUqrPkYQsvOs+S+bHCnODTqW6lQd4A9A7N3ogedkrisPYhJPag= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; HE1PR0802MB2555; 7:Skiw9xiC//CQ61y+W24k2Nt2hmia8z3VCaMkBc0GC+oQ9i+te8YQHQs1o3NYbJSq+sLb9av+53nWjeDZgHLlTejgMfNKgj0fZYMoWzO2YLbq6Thca1H1bjbDtQLI4C+04F2DnPcQIJBkyN9BCjtbZ8OoINBJB/nthxlLJSTNdwFtPpJ11UlkQmcDHiM1gAWIoArDhkTuXIdcZLCKk+B9K84qoGtvcR/XukjicRCnZ1na61DaDTicCy68auXyLHuRxLZYgiIGgkCcvxztAB0HTV3XZMLsmD/Nid1j6yQyF371EPZXtb+dCX4onsQ9Odo4EhrHtbD/L1SU287/NdXBYg==; 20:+xyE46NA8Wpn5QaPMOXp3bEGCsD/skkw0SkF2KNC5S/dwoFpLlz85rat9zCTO/NSWiB7QRFyT87q52cSrZza5omjD1SkXEDYTq3xDR17xnEsU5KM67Gf0hhS5Gg/bFQEMPzahw1t6POB69jFq0ZCi3QyM0ho5JeF4T2yiJqKP/s= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jun 2017 12:18:01.5513 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0802MB2555 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 104.47.0.121 Subject: [Qemu-devel] [PATCH v2 1/4] qemu-img: add --shrink flag for resize 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, den@openvz.org 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" The flag as additional precaution of data loss. Perhaps in the future the operation shrink without this flag will be banned, but while we need to maintain compatibility. Signed-off-by: Pavel Butsykin --- qemu-img-cmds.hx | 4 ++-- qemu-img.c | 15 +++++++++++++++ qemu-img.texi | 5 ++++- tests/qemu-iotests/102 | 4 ++-- 4 files changed, 23 insertions(+), 5 deletions(-) diff --git a/qemu-img-cmds.hx b/qemu-img-cmds.hx index a39fcdba71..3b2eab9d20 100644 --- a/qemu-img-cmds.hx +++ b/qemu-img-cmds.hx @@ -76,9 +76,9 @@ STEXI ETEXI =20 DEF("resize", img_resize, - "resize [--object objectdef] [--image-opts] [-q] filename [+ | -]size") + "resize [--object objectdef] [--image-opts] [-q] [--shrink] filename [= + | -]size") STEXI -@item resize [--object @var{objectdef}] [--image-opts] [-q] @var{filename}= [+ | -]@var{size} +@item resize [--object @var{objectdef}] [--image-opts] [-q] [--shrink] @va= r{filename} [+ | -]@var{size} ETEXI =20 DEF("amend", img_amend, diff --git a/qemu-img.c b/qemu-img.c index 0ad698d7f1..bfe5f61b0b 100644 --- a/qemu-img.c +++ b/qemu-img.c @@ -61,6 +61,7 @@ enum { OPTION_FLUSH_INTERVAL =3D 261, OPTION_NO_DRAIN =3D 262, OPTION_TARGET_IMAGE_OPTS =3D 263, + OPTION_SHRINK =3D 264, }; =20 typedef enum OutputFormat { @@ -3452,6 +3453,7 @@ static int img_resize(int argc, char **argv) }, }; bool image_opts =3D false; + bool shrink =3D false; =20 /* Remove size from argv manually so that negative numbers are not tre= ated * as options by getopt. */ @@ -3469,6 +3471,7 @@ static int img_resize(int argc, char **argv) {"help", no_argument, 0, 'h'}, {"object", required_argument, 0, OPTION_OBJECT}, {"image-opts", no_argument, 0, OPTION_IMAGE_OPTS}, + {"shrink", no_argument, 0, OPTION_SHRINK}, {0, 0, 0, 0} }; c =3D getopt_long(argc, argv, ":f:hq", @@ -3503,6 +3506,9 @@ static int img_resize(int argc, char **argv) case OPTION_IMAGE_OPTS: image_opts =3D true; break; + case OPTION_SHRINK: + shrink =3D true; + break; } } if (optind !=3D argc - 1) { @@ -3562,6 +3568,15 @@ static int img_resize(int argc, char **argv) goto out; } =20 + if (total_size < blk_getlength(blk) && !shrink) { + qprintf(quiet, "Warning: shrinking of the image can lead to data l= oss. " + "Before performing shrink operation you must make s= ure " + "that the shrink part of image doesn't contain impo= rtant" + " data.\n"); + qprintf(quiet, + "If you don't want to see this message use --shrink option= .\n"); + } + ret =3D blk_truncate(blk, total_size, &err); if (!ret) { qprintf(quiet, "Image resized.\n"); diff --git a/qemu-img.texi b/qemu-img.texi index 5b925ecf41..c2b694cd00 100644 --- a/qemu-img.texi +++ b/qemu-img.texi @@ -499,7 +499,7 @@ qemu-img rebase -b base.img diff.qcow2 At this point, @code{modified.img} can be discarded, since @code{base.img + diff.qcow2} contains the same information. =20 -@item resize @var{filename} [+ | -]@var{size} +@item resize [--shrink] @var{filename} [+ | -]@var{size} =20 Change the disk image as if it had been created with @var{size}. =20 @@ -507,6 +507,9 @@ Before using this command to shrink a disk image, you M= UST use file system and partitioning tools inside the VM to reduce allocated file systems and part= ition sizes accordingly. Failure to do so will result in data loss! =20 +If @code{--shrink} is specified, warning about data loss doesn't print for +the shrink operation. + After using this command to grow a disk image, you must use file system and partitioning tools inside the VM to actually begin using the new space on = the device. diff --git a/tests/qemu-iotests/102 b/tests/qemu-iotests/102 index 87db1bb1bf..d7ad8d9840 100755 --- a/tests/qemu-iotests/102 +++ b/tests/qemu-iotests/102 @@ -54,7 +54,7 @@ _make_test_img $IMG_SIZE $QEMU_IO -c 'write 0 64k' "$TEST_IMG" | _filter_qemu_io # Remove data cluster from image (first cluster: image header, second: ref= table, # third: refblock, fourth: L1 table, fifth: L2 table) -$QEMU_IMG resize -f raw "$TEST_IMG" $((5 * 64 * 1024)) +$QEMU_IMG resize -f raw --shrink "$TEST_IMG" $((5 * 64 * 1024)) =20 $QEMU_IO -c map "$TEST_IMG" $QEMU_IMG map "$TEST_IMG" @@ -69,7 +69,7 @@ $QEMU_IO -c 'write 0 64k' "$TEST_IMG" | _filter_qemu_io =20 qemu_comm_method=3Dmonitor _launch_qemu -drive if=3Dnone,file=3D"$TEST_IMG= ",id=3Ddrv0 =20 -$QEMU_IMG resize -f raw "$TEST_IMG" $((5 * 64 * 1024)) +$QEMU_IMG resize -f raw --shrink "$TEST_IMG" $((5 * 64 * 1024)) =20 _send_qemu_cmd $QEMU_HANDLE 'qemu-io drv0 map' 'allocated' \ | sed -e 's/^(qemu).*qemu-io drv0 map...$/(qemu) qemu-io drv0 map/' --=20 2.13.0 From nobody Wed Nov 5 13:42:54 2025 Delivered-To: importer@patchew.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 1497356398438424.8837495449826; Tue, 13 Jun 2017 05:19:58 -0700 (PDT) Received: from localhost ([::1]:42998 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dKknc-0001eP-UB for importer@patchew.org; Tue, 13 Jun 2017 08:19:56 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60620) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dKkm8-0000r7-D5 for qemu-devel@nongnu.org; Tue, 13 Jun 2017 08:18:25 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dKkm7-00075Z-FJ for qemu-devel@nongnu.org; Tue, 13 Jun 2017 08:18:24 -0400 Received: from mail-he1eur01on0093.outbound.protection.outlook.com ([104.47.0.93]:54165 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 1dKkm1-000711-31; Tue, 13 Jun 2017 08:18:17 -0400 Received: from pavelb-Z68P-DS3.sw.ru (195.214.232.6) by HE1PR0802MB2555.eurprd08.prod.outlook.com (2603:10a6:3:e1::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1157.12; Tue, 13 Jun 2017 12:18:07 +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=1S+031VUPpVSl0octMNR9g5LUc9jiRuTezxALPCcrKw=; b=Lw2YkPrVRu5agoMTNZFBWPZbU2FNmDPayCn5uoIRmuRdQfyHTf2mOwWmLfp8Z4RjKRyGYt6gxH8PYIGBii6pDKUuMEsGKGT4FjOSCvqRiNOQtVw2rlsvPJ6R/6gEalRRRnLdKo8sHEoFVqieHexlb6qHtBBzG8Xu3cmbcHTZFIs= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=pbutsykin@virtuozzo.com; From: Pavel Butsykin To: qemu-block@nongnu.org, qemu-devel@nongnu.org Date: Tue, 13 Jun 2017 15:16:37 +0300 Message-Id: <20170613121639.17853-3-pbutsykin@virtuozzo.com> X-Mailer: git-send-email 2.13.0 In-Reply-To: <20170613121639.17853-1-pbutsykin@virtuozzo.com> References: <20170613121639.17853-1-pbutsykin@virtuozzo.com> MIME-Version: 1.0 X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: HK2PR02CA0136.apcprd02.prod.outlook.com (2603:1096:202:16::20) To HE1PR0802MB2555.eurprd08.prod.outlook.com (2603:10a6:3:e1::20) X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: HE1PR0802MB2555: X-MS-Office365-Filtering-Correlation-Id: 91648fc3-6786-4bf3-70ec-08d4b2564335 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(201703131423075)(201703031133081); SRVR:HE1PR0802MB2555; X-Microsoft-Exchange-Diagnostics: 1; HE1PR0802MB2555; 3:gK5KKQvwElKSEFG9t9Nb4JMjUtbWSA3wxMF7fkgtAV64a11LuLYsvWPbwxRVpWVkvsmsdWSZJuS/jJTDcaOe2SK99bJRJJnizaZD7QzRdBMjcdgcZmz1AHS/xlXt7B0qj4aSs+rb4BHb6LL3urppW4lKCe15uBvtcNjxZVPTwnbP13piN7NZjSkpOrnz07K14M/OurJMwI+TtEK3G0P5SBln0r69xFOVTv7NiUA50hbYofcAoRTAhFGcIsPBkN5njVO5LtFd3tya4/aaLvYm7IBi/TOY50i58y8KtFwdQNmf8pPos6EEdE136El9MMnt7N487RJHmf8DzJ2INYik+Q==; 25:ePbUpWv19RJhld1qk30ryNOLThUkEympvkX0HeSexNIaV5PdS8Y6X8sUQgokCatMONfXTj8oa4ls44qkVZM1kR4kjZyoV5WRe2Ey6CYuau322HU9hxrEWlwgkgIIGZWINtS9E/dySmVIj97nG6ZG2PuUdy2aLtSYrEq6Wpl2R6282fTAT+6xRzXN0wqcUWPUaUvkwvbfTVtbD0jJ908pew7JqWGWTxYfTSaJ39tSDStsKEE+i+kabwum51ToDuU0S2QQyAMgL4i13rIYty2D7i9OPQ902KR+mc//XoNdpCApZMe0Gv8VM8/3FfNONC6YlqVCdHR11weYtTnGXD7oeO0nvWjeqCOWERMNpCrvlgR9vcgT3GFr7V9RyWaF4hOyV+ESOFEBKZRm7gAH8VNSQSJuyFgzGD4k8HeMlzN5USjTVhPKg2NiIRdRceW+ssqrZIYD0c2TKHt1Q+a0/vcpqmJBY/Gvrn+RoVJdQq/oSvM= X-Microsoft-Exchange-Diagnostics: 1; HE1PR0802MB2555; 31:9G6L2HrSZ7U9kkBsZvC1oxtjGwDQge+Su06vEfUyizYn491cMdFIwZ+tLmNiYDt/nay54Quk7TMbIq99rd8d18LGtKthixL/mm2jsYQNvokDfUG2D7Tn3pBD4QsV+dq7uhZEsgEGBjRuwa+AMa7JcHukH6+TMi+W0BhubucebtmlI26QYNlEfd3l3aowr5gVXq/DHvOmOrlamIa2jGZqrj9OuflwenngWBDD1XSK0zU=; 20:qJE2Jnlx00Txk2W1jgFNEy3G90EhN+rwNkXXr4/xGD3ptKsVNc2N2aOw6eHGnoitzYAjx6C4wqwBBbwmiNBvZAadV+CEAfF6577I2eGmQJLFT1G0G2I7mU7MxGiMmR0fXUg9Af9WRwB92R3GhlLINLu/hyTL2A7RTNsESlQDzKbpk/wgXIZAdQU4ktGM8WW69jEK2StiRNSYfSRWGPmJVjptVw0biVACF5TequwsIpwmnZrse7siWTCRcHS7GOPo+lDqDbPhHEHYg0IxQalt43kKDl0ATPvUVMD3HoEKf05PVoCgilKz30JA8huP+VQRS/xoHKVVyOv+f4oDlSRONw5hsBXb3q1t4ON4h2lhlYUDmZ5De+5I8AyLqQOy2tXH8AFK4EjheZG96jnL18o5d6pdIzXBlX5ujSotXPTTVCQ= 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)(601004)(2401047)(8121501046)(5005006)(93006095)(93001095)(3002001)(10201501046)(100000703101)(100105400095)(6041248)(20161123560025)(20161123562025)(20161123564025)(20161123555025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123558100)(6072148)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:HE1PR0802MB2555; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:HE1PR0802MB2555; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HE1PR0802MB2555; 4:hwVrRXgYT2CcgTbG1vyORxp4pSpUT9GIOrjyEoZ9?= =?us-ascii?Q?evoqlnlNhhjQfSm2XcJt5aRcfC3SHAxQbH7iqxU8YZ3zjjRBtGYIF73GKM6s?= =?us-ascii?Q?/7VJiUXS+xac9AJRnBZzOkVgR3UD2F+5g7EDimUUk+jZPSKTZsYVUlVJBoXJ?= =?us-ascii?Q?weMTRk3BGZRlZcM2p1Die5h/PR19iYCasakK9q/mrqerv0hJ/mMRi0tNlp5h?= =?us-ascii?Q?VkkP2b76Gq3urS+3ap+arK+YoxokkupH592mlPlFtKOuFV+rjXSX4BIAvuPc?= =?us-ascii?Q?wgRwQMhlyBDUY6hxRH0xie6RyFcqFsffnxF2yL2EhceXOultvKjV7SzfK10h?= =?us-ascii?Q?x7A4AnnolSwWl+8oU4kAEKkGjGHlfaFmXIQAWyJ+x9PL2wlNnBMl/HmOg/Dh?= =?us-ascii?Q?hEgQeUnZ4Hb07YZXBwWSfu1LUK58SzeRnZmfkXr9TO514loF923d3oM1IKwh?= =?us-ascii?Q?DqIRO9So1rsDMqkG/C0BaIGnMOJM5lqZBYN9nKtA3ctiGGaGVV5JYZKseP0f?= =?us-ascii?Q?GL1WtaZ8k5JdjhJB1ZXPxwpAtZu/szgeOXQuDc3HKDY1bEYLZlpm48DoAvUV?= =?us-ascii?Q?iiXTJmO0DfheZFMlyj3wFDZfDOP3SwM9iZwjGjeGMoYMeUGnd686QOXj/7c+?= =?us-ascii?Q?C+pfa+3xckW/K9rDISV86+TNNRYzIXb7/sc+6P4xsiBx/Q5fDzkqRxFqZUa4?= =?us-ascii?Q?nkn9xXVuy8w3pq11fltaKj+8bIq1h1E9GKereLgvDRG1FoX2/P+oG3Y/w3xW?= =?us-ascii?Q?asl1GMPz0MGS0143n8w4IzSDONaKZ3ibypfPtImjtvVWip515zh6Az4N1cz9?= =?us-ascii?Q?qLWFooS4TS/w5GLkuMBUnyQiTc/jCy5mzb/q6tWDp7GUDRYonAuEJAvbEw0w?= =?us-ascii?Q?851zv9jRAkZZsSSGhwYmIGgO2drO5Bn2SVX0N8jRRPgqo9eOKCc3kCTVSybN?= =?us-ascii?Q?nHeSonFY0/I3DFdcAx8cZEP/BESwbl49fsLJ/+ez7lpSkVdAMgwSsiGH4OgL?= =?us-ascii?Q?y6F4nZ8lsq3aqUOjsCJzwb+2PWxtwdDDZ3FDJotI8BRs3P7mSidmlbqfbTYD?= =?us-ascii?Q?MXOH0E7K7FKcKnav+b4jwE8VDEDmE0Y5pxYldsPxCayAnx0FfJgCgE9oYHQe?= =?us-ascii?Q?AUN8fLSEQa//qVme8kjlIZliGISTlJJh?= X-Forefront-PRVS: 0337AFFE9A X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(4630300001)(6009001)(39450400003)(39400400002)(39410400002)(39830400002)(189002)(199003)(6506006)(25786009)(53936002)(50226002)(107886003)(110136004)(4326008)(53416004)(42186005)(6512007)(33646002)(6486002)(106356001)(38730400002)(5660300001)(105586002)(50466002)(5003940100001)(101416001)(305945005)(48376002)(69596002)(81156014)(189998001)(47776003)(66066001)(8676002)(81166006)(6116002)(36756003)(3846002)(97736004)(6666003)(68736007)(86362001)(1076002)(50986999)(76176999)(2950100002)(478600001)(2906002)(7736002)(15760500002); DIR:OUT; SFP:1102; SCL:1; SRVR:HE1PR0802MB2555; H:pavelb-Z68P-DS3.sw.ru; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: None (protection.outlook.com: virtuozzo.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HE1PR0802MB2555; 23:eQfxo3PqLJcT1Hsw+YpUuYWgB10GIqx1RriBb3h?= =?us-ascii?Q?Cq+NK529wnT6w8Y9nGhcmeb5dhKecVXhzianLYCj+1j98o5kbgU1hnoOKdoJ?= =?us-ascii?Q?XNKe7x+M3Jw+Z7RClybBiTZ8SSMK+aGxzWBzq3ZPqJStthWE2MI2/zZqtZg6?= =?us-ascii?Q?AlXTxv0pk+yJvFuZq8vDOtvPFf052hZRlIk4PUxPmG1TcepW1aXWkYYBm1yL?= =?us-ascii?Q?Cs7itLV1Tf/RLms1n1cBBU9whNK5YcAfQAHrMQa+z/WaPg6Zuv8VE2dKTIw3?= =?us-ascii?Q?Zvc/sS4GBwgGAX5a77lIwWvhlmJ18uCq0+N8Bs2KnAC33ZhJ8BfJ6iHCTdYe?= =?us-ascii?Q?mhZtabMuPsA2gGngLxbnfJvmFdep4HuN8E7/sO/zDxTWQWfaOEfAFGlyHkdt?= =?us-ascii?Q?jJipLYcAA345wzc9K8Sx3SkvUBJHLnWT7q0+Z3PgudZaV3xLWfk1STcYpfOA?= =?us-ascii?Q?cJdWapL7ne1y6Imskxk6REb8GSilVg6/FFcOnLVv9K+gADMJE+aJi3Xr0PpC?= =?us-ascii?Q?rD5ZLOnT2dD4q3NsarPZvwbSZ6p+IqYPBL1JgCkw0lTHgmrDPNd8Y+KnsbK8?= =?us-ascii?Q?e/XPHhTOaHIwV4BVMnxCXVogwi7b2vNNXjNFDTVtsy9613hGYg9jtSAb82P1?= =?us-ascii?Q?UztEkieSVKIKDumf2J5bJJn+M0JwRdcyU3URDPKClJnRICq39Xn0XQQlW2T/?= =?us-ascii?Q?yhxqaZKaa4JFv843DaXYkfCI7hedkjz7dfciyjBuoNkQGRpkPi0SW3JMNSh7?= =?us-ascii?Q?ZtVkQESAMeiKVoAmXqMqu/40dxtpKHK2TWNr7zPjx5mA1iTQ5Kzp55B5a5O4?= =?us-ascii?Q?bBK3Kqe3ZSLp6NAu5QQ5YN5TBxGBaebsZE25KEFaciSh/3ODhLJT8dwG+Lyh?= =?us-ascii?Q?aco54LXyY+84DjfSqsDKyVP5gGE3WJ4nxIQsjeWkufd0+PT0L2Kw7+n6vr+D?= =?us-ascii?Q?2bZhwPQzV8LqBNyasDfMxz9Q71k7JEqyGdlUsb4teZKtXpmXn9O6FaRmgr4o?= =?us-ascii?Q?7RrBVvAGm5mJLZTzqdsWTPHmMKDtisa7/HpOBjXxeJO6Xit3+Owy46Cx71zm?= =?us-ascii?Q?GzXHaCuuHOMTZRkFlxHxlok9M75QTkXBmhsZCye8EL4ZY4NA5MR+/g7gMhkA?= =?us-ascii?Q?E8YKCfzkrQrLe+H6X2Qb0oGh7i/hU3OYNNEbeDpnb/hIh2J2knGZ4r3oxjB1?= =?us-ascii?Q?qeiluzoSBVzkemDvoglgtZrvQB9sr2SpmdO6BopgsJ9wUS6Hxecz4lMEzsFJ?= =?us-ascii?Q?xbh81FSv96FyuZFIx710=3D?= X-Microsoft-Exchange-Diagnostics: 1; HE1PR0802MB2555; 6:y6TqNs5muYFbIL7scX/yOCT8td0L+2NSLeQjl91lO/wovOqOJ/zUxMN5XRyfDJ8pOfg4Po/rwVoZQO7ECrj+iQrOlUwCVWff05NbC+nxh/2R7m9w8+Wx+MEuI6pxSKfj2v1Ano9+pojX/TboC3MN9l5t3LNTyUtKZXRv6rYNEqxpXhpZ9TZd0A2mV0emi+N3WhwXQyyjZIhGeTi/OLAkhe/nkl0/8yKWQM6/bmW5RuFlXGG1sReINHrhoKa1z/Mr5EKr0SF8kWA3x7KhTey/V/W6PAzLJjuGvPGRy4GLOd+yOgP0FDeOUkFjdUvqUxJLA98tGa0DIInrDdy+FtprJ0sNDQRqHq8k/6iXByYrDkweikPKnmpMmgkgjoRqCUcVNLOQ2fytbaioC7mZCyRg8ykk380bF1eyR2OoIqyyGrVwpa8A6dIsQ1KWOboXiDa1CodmveFByha1eSyykYvCKnphEAvgaSlEK/Rt8M1Y59J4umVwLXb0hEt7R0068j7W15bvoAQhek3tDLNvcc04CQ== X-Microsoft-Exchange-Diagnostics: 1; HE1PR0802MB2555; 5:KEcRVlkivvPoVnsz6DxXMkpszcnYvveNv479jw9Dke1WY1+GC6Wub5TdGBmIN8s0P+GvF4U3T/Qtk0cFNZBpPqH7rbwnCWwdo+IdLDMEc9liRZtw2lWfatuJ3V2ojvbBGJlW73J2+ixLMYsdhNelfO89ajcIRCR/RsS13BRNRAlGUQ2FrnLWdYGGuiNwvM8o3TaYYm7x6FTRKrL+8N7HHIsXm+28XS5e7XeS3kOcjwbcw7s5m0n7ehEOvhLTooW1RVs7EXz+DIXfIcujeUZWAs8Fn9luOBG67F+9O6ABWqF/QL3TbI3xVic0JtdODwB9exQbM/9XfuSN83TFU8miCrlk9wXAcxLAstWO2QUQ9bDVibfoTK23BJnIZDktknlktT/u+ujNfkBxJd8JVPjbHrDs8BQ+glT7csgFw+2h8YOKqSgf/uUirHpelEVUOp2HDRIOSQpYaePnLEvWlU+GvAz5vA7v4QPC5yV1WSl8CLPEPIHFob/twhsaIEvX97xf; 24:7gTVIDr2+4fAbbcGUVbGHO893rXHwtlTDMnDbcB6spiT9qNyItIwSd9a7LwVsch0iZG+N+G6gNw+6jpKvKodSy30wjrufS0LUJ9B4lMsBv8= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; HE1PR0802MB2555; 7:JEBcQWhwxB9EortzEXnK9T8U7wIA5I2S4VImCj0sVpLOcX9NpOWwNG/ClOIaNZx7YL0rXYN08uK5V4475fkcermV4BQOMe+/zCnXw2wkOdCIEsfFuxPNlCUNoeTrgTjaBGttfaclroEgCz/WFKXEo+9I5Gz/U2Gu8+jCo/kMmgeX2ST8jRNXVx6nGi4GW0PnsN7Fwb6G/1E8ayCl2eOB9dcTjFqejyHyylEyxTSOUwuXmnJGdQo9q9NgPgFTvYkbteAKgH+jak+YRmQaw9yhPGJIeKOpU2sZ/0rJjCQi5ZvfWnSysZSyvukPkg6HMu86v0vbY5d6HRR+yMb27vjj+w==; 20:n17m0hfIqOJ+HQnZGnn8XhmVBZWD4KB1rRl3VpZCNABB49/mNZGD9gsjr8XQVwiZfhxXbd2fXMgPyJ4rp1SaAGZ7pdTD7BfBbQNv8o8FijJOi55VeXyQwqhSRJYwm+FAcoZUw/+202hGrbrCaf0e1ZZdvGUGEbV6JiK2kuPzk8E= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jun 2017 12:18:07.8296 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0802MB2555 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 104.47.0.93 Subject: [Qemu-devel] [PATCH v2 2/4] qcow2: add qcow2_cache_discard 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, den@openvz.org 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" Whenever l2/refcount table clusters are discarded from the file we can automatically drop unnecessary content of the cache tables. This reduces the chance of eviction useful cache data and eliminates inconsistent data in thecache with the data in the file. Signed-off-by: Pavel Butsykin --- block/qcow2-cache.c | 21 +++++++++++++++++++++ block/qcow2-refcount.c | 5 +++++ block/qcow2.h | 1 + 3 files changed, 27 insertions(+) diff --git a/block/qcow2-cache.c b/block/qcow2-cache.c index 1d25147392..7931edf237 100644 --- a/block/qcow2-cache.c +++ b/block/qcow2-cache.c @@ -411,3 +411,24 @@ 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_discard(BlockDriverState *bs, Qcow2Cache *c, uint64_t off= set) +{ + int i; + + for (i =3D 0; i < c->size; i++) { + if (c->entries[i].offset =3D=3D offset) { + goto found; /* table offset */ + } + } + return; + +found: + assert(c->entries[i].ref =3D=3D 0); + + c->entries[i].offset =3D 0; + c->entries[i].lru_counter =3D 0; + c->entries[i].dirty =3D false; + + qcow2_cache_table_release(bs, c, i, 1); +} diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c index 7c06061aae..576ab551d6 100644 --- a/block/qcow2-refcount.c +++ b/block/qcow2-refcount.c @@ -767,6 +767,11 @@ static int QEMU_WARN_UNUSED_RESULT update_refcount(Blo= ckDriverState *bs, s->set_refcount(refcount_block, block_index, refcount); =20 if (refcount =3D=3D 0 && s->discard_passthrough[type]) { + qcow2_cache_put(bs, s->refcount_block_cache, &refcount_block); + qcow2_cache_discard(bs, s->refcount_block_cache, offset); + + qcow2_cache_discard(bs, s->l2_table_cache, offset); + update_refcount_discard(bs, cluster_offset, s->cluster_size); } } diff --git a/block/qcow2.h b/block/qcow2.h index 1801dc30dc..07faa6dc78 100644 --- a/block/qcow2.h +++ b/block/qcow2.h @@ -597,5 +597,6 @@ int qcow2_cache_get(BlockDriverState *bs, Qcow2Cache *c= , uint64_t offset, int qcow2_cache_get_empty(BlockDriverState *bs, Qcow2Cache *c, uint64_t of= fset, void **table); void qcow2_cache_put(BlockDriverState *bs, Qcow2Cache *c, void **table); +void qcow2_cache_discard(BlockDriverState *bs, Qcow2Cache *c, uint64_t off= set); =20 #endif --=20 2.13.0 From nobody Wed Nov 5 13:42:54 2025 Delivered-To: importer@patchew.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 1497356569703298.9532871443379; Tue, 13 Jun 2017 05:22:49 -0700 (PDT) Received: from localhost ([::1]:43018 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dKkqL-0003jc-Af for importer@patchew.org; Tue, 13 Jun 2017 08:22:45 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60688) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dKkmO-0000zV-93 for qemu-devel@nongnu.org; Tue, 13 Jun 2017 08:18:41 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dKkmK-0007Cb-8Q for qemu-devel@nongnu.org; Tue, 13 Jun 2017 08:18:40 -0400 Received: from mail-db5eur01on0128.outbound.protection.outlook.com ([104.47.2.128]:54338 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 1dKkm6-00073l-UX; Tue, 13 Jun 2017 08:18:23 -0400 Received: from pavelb-Z68P-DS3.sw.ru (195.214.232.6) by HE1PR0802MB2555.eurprd08.prod.outlook.com (2603:10a6:3:e1::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1157.12; Tue, 13 Jun 2017 12:18:14 +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=XH7mxg1eRQlhEkEq6QRWWZCDv8hbvYgictuipS26TTw=; b=I9VDTZ7DTc5tXN9PzR8sPWaFzUecIxq/ybOmiRvWy3sErCW1ME1Lj0zTy4zd/nEKfWtJAXIzmw9UxDU/SGgyO6jgO/cXYcd5eWeisK0UnpWegwxvuBrW2mzHOE1cR4T7vhpyntPa2lSxFeGH6NuEO4gOYnbAofkH4RIPOoqT1HY= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=pbutsykin@virtuozzo.com; From: Pavel Butsykin To: qemu-block@nongnu.org, qemu-devel@nongnu.org Date: Tue, 13 Jun 2017 15:16:38 +0300 Message-Id: <20170613121639.17853-4-pbutsykin@virtuozzo.com> X-Mailer: git-send-email 2.13.0 In-Reply-To: <20170613121639.17853-1-pbutsykin@virtuozzo.com> References: <20170613121639.17853-1-pbutsykin@virtuozzo.com> MIME-Version: 1.0 X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: HK2PR02CA0136.apcprd02.prod.outlook.com (2603:1096:202:16::20) To HE1PR0802MB2555.eurprd08.prod.outlook.com (2603:10a6:3:e1::20) X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: HE1PR0802MB2555: X-MS-Office365-Filtering-Correlation-Id: 6dffc150-002a-4996-3236-08d4b2564727 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(201703131423075)(201703031133081); SRVR:HE1PR0802MB2555; X-Microsoft-Exchange-Diagnostics: 1; HE1PR0802MB2555; 3:gcqyhEBUChcO54MMLYliRlzn0FuU9dazpI0sGj04eqeVXoRqkcq4vUSI5Ngr4Otl3Y+rAYPfZ0XNFf1imY0bBYiPVl6rVUvlWUKNcgRcD2Eya8YRBtf7F5GFLfz6vyWzz3+hoqG1cyj13V8N2+bdmO4mMtxYaLZ5lovjwhBORRd4rSwuc9Q/6/rVxH2YOt++WafE+fENf282dUs6oQX/mn0Is0bxs5PAbNlHu+UPTssNI5E8BWqr4mI60/OqGs01psFgQVGZa4sQK05Y5w6iorsSOr5tof6xCeloHMy0of7R+y6wx2Sx+JKLl2UnZpCiTPSEbJnQMddA1Sk06rFtKg==; 25:jeFBFjIiA7IFo7OWb+rjy6f0mqkpHX3PJOgwbJIQRZVtdESLMFWJxfEAoyPMMWUteLFdAu2raxJTEq5oi2JU2savpXqJCpBHtAwTeFVbp9BABQuoFqS2OOdwa6JtMPphXTIH+YZXWw6c0cyNcdVLzHsbxUw3W7adFewTBpLrnK5tJ/0fJArWXYpB24kHf9MDrXRhCEzCFFcBzajKWT48vR9R9n4aCYVJJqHn0n+oVZ15iMgbKXNYzWlAlPCjbTd2AiN7dwWmOhuU+nbTMkfWDOno3taT+M/i0v16+dyKJN6U9jL0qfUKqMioqZhTxZAevCrXd+w43vBFH87tVre750utulGHso6bBQYEG00hq0HUolyTLlAMjIMT64CYfgvkneHMhL/ntPqozABxFOB+lntAoMFNaTT4iZPd3kKaxSsn/7qHdu2yHT1kbmNATm0AlVlXdSNCblul+lwoA72tQ2YliAVDTwbbpbaLavrgURg= X-Microsoft-Exchange-Diagnostics: 1; HE1PR0802MB2555; 31:ZXIDbx9FmHSZfjYANC2EiOyIlV4NDgtkXHxJeaIsSBcNoG9/wNfXzwtMIfP8M+qHU775oecDhoanljjewlLDLxiINOedsEGx83zIM2MnLDq0QCbIccMYYngt9F68P0dZGCywX9iOI+umQYFCuyDHf/kZj4YILx0i0jzodi6Wk9jeIACW4ECEqODPYCV+cUvSwirVARv7ei/03tJs51Wb54NshojDmDR9h4a6Scmx4XA=; 20:L68NEW2d0c9EWrujYkG1m1snvHcup/UI5JoHsUim1MUQtmSerXaeC54Hch4A7YtEwk11g8WVRxQce7C2k6BFUgtoF+qY7wzYIPj0JU2Iv+4vJxA7DYhBE8hrEiK9oy7eywkcoTNRNn5MayworDVSc8tsh87PATmw2fwBsoAg0uR47O+Qfp9pLS5YufxQSep3QQqu2XxQcIzKQ9Oe8iKysPL1iwYw1lmYVBG7qQ0O7LNSFVXBuhHcKaGE8U5zALGkmI7OK5vMYCsztT+FyoGkd3hzrM2QIpPtTzGaeE+k4Fg1wJjcngK+5ZzIXTr0EG12mUn+dMr1ZWISxKEENnM0TE0/RXNhtm9yLhL6ZygDXG2UCpaWK44EbtBYBMafETTMx1nu4vLU8riDT260zU51bMam7ch5+CxN2X2X4Gl/slk= 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)(601004)(2401047)(8121501046)(5005006)(93006095)(93001095)(3002001)(10201501046)(100000703101)(100105400095)(6041248)(20161123560025)(20161123562025)(20161123564025)(20161123555025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123558100)(6072148)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:HE1PR0802MB2555; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:HE1PR0802MB2555; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HE1PR0802MB2555; 4:nXsvU2g1Lg9ImTvLVk374awhVx/AiAYw5BAk4gOA?= =?us-ascii?Q?WVLaa52kjER5yoODKj7j9Yg1p00hqmH0beNwQsmL13Wn9PjHnxUo6MT9Rd+9?= =?us-ascii?Q?fxGAHH60CNpxooFck5IgwK2Gsu+vhohl4cfSCS7mwR91I2Gp3ba4SUbeTbgH?= =?us-ascii?Q?9Hr0c3D8HLviEze4RBa420ocKVon1ezL0/MK9n1LD4oHjMSw5/C6isC61CS1?= =?us-ascii?Q?++nUvyWfkljGT9HbrHwMnRZ9wUhGF93nwyu1Dw+8rALG01NWCLfJH2TRevKw?= =?us-ascii?Q?v3lP7UCEb0Wy9lSPpeUXnVNnIPkv1D1G0gm6xGyYxeNUlwwMPb8t85xyZoMk?= =?us-ascii?Q?wdXovxv9822b+Eh/qwGXO7vjJc9flMJWC49aI5cWOtnwgVI15DrLxfubOAqj?= =?us-ascii?Q?VganxEwoI978jGb2oZoM9vQ9czaDkaskUfLeKzmNCWoSVrrzLsh+9gqfOBqy?= =?us-ascii?Q?xqOA+qfRpbDWgGE59Az5bgyFJCBAs3+ZgOz7TUhAZNCDlI7g+356rB9ZeAvj?= =?us-ascii?Q?Zf/eD+K/j8i+SFyZo4vpVYRF1u5y7pkbF6BS/+oInVxhy7rmSSa8g8yRjuJ3?= =?us-ascii?Q?ZCma+WNsxlqhMs5boDsWYyiA5MuG3wG7y0qhSBu/j+PGinwIFmfcvjQADJpz?= =?us-ascii?Q?MBKNy4qM/ogJ46SO7uaT1vyV/XvyB9SGBt1OSezDOau4YTsAiFn0SPZkzy5I?= =?us-ascii?Q?V2pmUZa5HZnPNeiAN91MogT/ej+KyPnOARHJ/g7QSK0fMCbTKcT7r07wC24w?= =?us-ascii?Q?nj9NDNXQpq4zVXmrBVfI184vOPjbMDN8Ts9FXlAlSAdGzOWp7VtZRsBKvlGn?= =?us-ascii?Q?+HHn/wB+ZgEyUYNi0BB0rjDcHRm6GbBfW1w595Fl/OzKSsFvHfuV7nYPUsPI?= =?us-ascii?Q?a0tOhpjyl/nHNHEnJJjMUVxJHYlBWyEjilr8NzUJLAYHIgydbZ6eapr6NO6i?= =?us-ascii?Q?LLLs4Yyg3nDOrXPO8PKkl/QvPbk+MJ4M8gjyswpFJvM7uAiLgh0Etr93IOef?= =?us-ascii?Q?9q9cWyqv+X+EBeBmiNFUyCpOQgkwsLOxSM7K0gD6XiojYfiBozMw7wZypHGn?= =?us-ascii?Q?Q1iEqAkv8le6Tr3EBaMcdtnCIQwZ0Y2ZMEaVfcbaF8fJv6QvHyQh/F6YpycG?= =?us-ascii?Q?YFxnhQYQ8eN3Ig/yJW85EokGdQKhmOXU?= X-Forefront-PRVS: 0337AFFE9A X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(4630300001)(6009001)(39450400003)(39400400002)(39410400002)(39830400002)(189002)(199003)(6506006)(25786009)(53936002)(50226002)(107886003)(110136004)(4326008)(53416004)(42186005)(6512007)(33646002)(6486002)(106356001)(38730400002)(5660300001)(105586002)(50466002)(5003940100001)(101416001)(305945005)(48376002)(69596002)(81156014)(189998001)(47776003)(66066001)(8676002)(81166006)(6116002)(36756003)(3846002)(97736004)(6666003)(68736007)(86362001)(1076002)(50986999)(76176999)(2950100002)(478600001)(2906002)(7736002); DIR:OUT; SFP:1102; SCL:1; SRVR:HE1PR0802MB2555; H:pavelb-Z68P-DS3.sw.ru; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: None (protection.outlook.com: virtuozzo.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HE1PR0802MB2555; 23:z973VQqVFawEVHMTLXMXL0YfwgAyKj0FN4XPs9z?= =?us-ascii?Q?FgVobXmvXcq/CDrIVatjijTjyCvvG9DXm8ECbFYGBGIKSMkByrwD+3DJ3nxs?= =?us-ascii?Q?UN4rbu8vfWzeNDnEFaUPCKydCgKLMuF2At9BEj9tE0QuRRA1e9eB7R0pOph3?= =?us-ascii?Q?9A9RmY1uPF/NGuFROACmxgBzJSBDv28lhjdnSm2xRzaeWmOEKIEDHaL96Mdz?= =?us-ascii?Q?JHBBP1nY+XLoB4ISRwgdDZPQaRRVHN5MZkR5f6UOxcjQLd9nb+xJwCBcZycj?= =?us-ascii?Q?LKxnBDBeL7F9oCDLWjjWUUehXn+7XuQmCWRvQhpdeLaYyA8GqFVaIubNUKjF?= =?us-ascii?Q?40g+nL/zyr5LBA28WXYogm8BzxUYXXmeCXsoQUefYomvQXHQMSHK9b8Cdpe/?= =?us-ascii?Q?nhqCoi65C8Wzg/4JZQLcCl/VerGezral52Fl02r0efBmPbdWQvFFXX/VEcpU?= =?us-ascii?Q?x/UBNhYz9azWyrxTuUhqL2ezVWZEM4R4K27FSsDLb7NaG3w/dFIYzSosTPn/?= =?us-ascii?Q?hySjYaUba5Vs4p6WjYpt4oMW/Dv96xweW44c0Eea6VhPZmkkhOxJw5V/nKML?= =?us-ascii?Q?w32OEAkRYwsJDqi+stkU6412C7u2V3QJQDfaoLIhF5jQ11lX09q2OfjHC6yo?= =?us-ascii?Q?6c7tYwLrAeVCJL/TJo9dEblQLDTFSE/t8RpJPo1QGQEEncxZ28jlJUgWusQx?= =?us-ascii?Q?vEkODMCa6v8GkHYyMVmsj8I5hpjJQGqO5qmVNGTT45z4v1+TZNgbsP1KyaKv?= =?us-ascii?Q?EPsqC/k9Z18AJIRrRm9j5vlctZTNU7rh8Zf+UbZkzSLhQXqzu99VXF/SEgQI?= =?us-ascii?Q?rMbJIO5uDlQAu2HekRrKs263PqoHzOApyfpEjreuLijYmslrY4irmIUXD8wu?= =?us-ascii?Q?FNt56C8GjPVi0WTAoL2usz4Nh2rW6nUcHTfpiEeSF+uVuP1VXkuKUTEjOAn6?= =?us-ascii?Q?jtPnk44b+0JZ/pCquywAS6xaV+yFRAAC1fHUDEaCyspibTXY/bSbsqXMjuYd?= =?us-ascii?Q?QQnLhAk4MbuQNjGk2yG8QBKsE7alcvlyazBjlLCYKlIQ4ZML7KdSBdQUeeW1?= =?us-ascii?Q?nx9QOibqA5t/GdxEKBmNOparAUjNpYwov1GZXlBOFc7ugfa/rAjEKkY3zWSV?= =?us-ascii?Q?26bpny2Mn67IZWCJT0S91sA61nBcFPH7g3zL5AS63qkD/+ohYJbIT3BiyvZC?= =?us-ascii?Q?YscBEESn43OXUtcReeRIEYZT9LXNQuAL5x+9bC0a58UzrAbEhmHhJvmNELQ?= =?us-ascii?Q?=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; HE1PR0802MB2555; 6:ZgJQY+BNjqxf+3vxemiQ9UgYo2FqIK0FpgTWmVo8Sgr7FIiWIiH3eQlBYYbFzQZ2IMZKNkm7+YTke4pPJZv+n/+nj5YH/7wVHt1DklEqLjM/2eyyTHtZSniXcwQocdY2DhbejUIsn1e6614zfZuAuqaRZcv3TXrue2gd5iL1ZpM2/2vXy7RhJrfoAcuIucQNKh2eECnX71wZixQuiAZPcMcA7ANSRLkyX0XTJDa5HXgEZBJpL/PclZEUJD65toNfcaSj4uxlsH/A+t9KtM6wOHZ5WZ2M1aLuwxS47RnVDltj06Mae68qvMkbnIY2AOE+rQ0hAB3C3KB9o9Ca4TGe65gUck4R7qzcYct/89qbO3Vttl01TYwgZimQjXhoxYOr6YnjziLqQK7j2cHwUvE/pkWN66cACl+r5cZ2ZDDhssgdC3TeH9tm9p4YHTVvNoijxffRYX0vvOJqaiW8p0ucu4D3qLu2eahHIfKPFeF/YTWnQNvUgXTv0s8pbHSgVYSWKNGRlIIvqOFxzX1pMLx6kQ== X-Microsoft-Exchange-Diagnostics: 1; HE1PR0802MB2555; 5:6lJ2sZg+iXB5mPCc4X9/JTkN4SsPqvO0Cm8UQYyALFpYPCiGSWJ5Gwii9haB2FJv5t32znr5m4o1/Fc1TECXyQjSCOk/XHjOpZ9SUBbalY9cSd7ywLR9iR0cByiryLz5HkxZ++8t9Jv82pL3P3tXpc9KgG5Ae1CGGaEsGAqo6TgcyQXxSjvajmPY9SNgUa4ipJy7qGoqJlKj2KvAjifnLYry4F2TFlKIWLaNq524PEpUKpLsqnuzuPFQEw2GN5Xf1dbi8DG0DAgDpx5cjDTGgZJgUkMDAIEJEAZpKn0XJ7DHSZuvi1z5NogW9DyIWmqYlK81go2s8Rx7380D7Pm4BG/NzlcOXWwqpJFfMhWczXfpfAEktoF4D2+ccJCY+2ghBHfYchRkrh5RDQGNo25X7fYLE/S+zSeisVHVeRPIkyri6aCSJPAj4kvFJ6VzQNfn3yNK0MHSkYoAmzIFBO1AG7CjbPzOAjyUwRBGdQNRh/cp8y2rFyV9fLIZXhVy/GI4; 24:8Od1kTpwakKqwobLBZe5JmBB4wSSCGic4LvQCdjzhfLfjQo8JERzncRV/A7vKWitoWWPSPC6QJYPQMFvEvCCpkcDhUSJJ2NvQIB0TrLYP+M= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; HE1PR0802MB2555; 7:XaFaRMomIaWv1aOw2yvxlbCUK6naVJ3OYJqhIJGGMFOEsa4JCZ0CMn4cOV6SgVVH1bLdMKzIIqdj9wXuUra4DXTBkwWdTGjl240QM9GFz+Y8D7K7hELMufGXMXHmpC6oQST/7UdgjRTPo2zBxo1x2bIBX3ZWmP+/GoyoEAbmBYQ1OedyoGHy/mN+k3JNARjGTdoPFKsvm1U7nvEYLgAyPpSaeNzGW3dubD3zhgFwSkdm/S17xTOVL/Q/gVfXYN+pE00fXKNSCQXu7VPUO8gIewIB7JYVvmNFq28XRLoC+r+do8FaC6ZogQAPaRZjHps5v/E1iCof1vzf653JLK6hoQ==; 20:1thCj0+eaaUdgHQOVVpwzWMwImDoD67PXo9izCeFAeFwfd76IdP3ptoHAV67nD+/va7hB8rmUNzIs3xLsyWUbPyWqwQyx31Mt4LjtSlfGHvuBlwN/VJav87u+FXn7ZgP4yXX3r0f+6w65gJ8sLgkjo1eQ+umo7N0V8zhZbFCYaI= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jun 2017 12:18:14.4461 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0802MB2555 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 104.47.2.128 Subject: [Qemu-devel] [PATCH v2 3/4] qcow2: add shrink 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, den@openvz.org 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 add shrinking of the image file for qcow2. As a result, this all= ows us to reduce the virtual image size and free up space on the disk without copying the image. Image can be fragmented and shrink is done by punching h= oles in the image file. Signed-off-by: Pavel Butsykin --- block/qcow2-cluster.c | 42 ++++++++++++++++++++++++++++++++ block/qcow2-refcount.c | 65 ++++++++++++++++++++++++++++++++++++++++++++++= ++++ block/qcow2.c | 40 +++++++++++++++++++++++-------- block/qcow2.h | 2 ++ qapi/block-core.json | 3 ++- 5 files changed, 141 insertions(+), 11 deletions(-) diff --git a/block/qcow2-cluster.c b/block/qcow2-cluster.c index d779ea19cf..a84b7e607e 100644 --- a/block/qcow2-cluster.c +++ b/block/qcow2-cluster.c @@ -32,6 +32,48 @@ #include "qemu/bswap.h" #include "trace.h" =20 +int qcow2_shrink_l1_table(BlockDriverState *bs, uint64_t max_size) +{ + BDRVQcow2State *s =3D bs->opaque; + 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, "shrink l1_table from %d to %" PRId64 "\n", + s->l1_size, new_l1_size); +#endif + + BLKDBG_EVENT(bs->file, BLKDBG_L1_SHRINK_WRITE_TABLE); + ret =3D bdrv_pwrite_zeroes(bs->file, s->l1_table_offset + + sizeof(uint64_t) * new_l1_size, + (s->l1_size - new_l1_size) * sizeof(uint64_t)= , 0); + if (ret < 0) { + return ret; + } + + ret =3D bdrv_flush(bs->file->bs); + if (ret < 0) { + return ret; + } + + BLKDBG_EVENT(bs->file, BLKDBG_L1_SHRINK_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); + s->l1_table[i] =3D 0; + } + 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 576ab551d6..e98306acd8 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, @@ -2936,3 +2937,67 @@ done: qemu_vfree(new_refblock); return ret; } + +int qcow2_shrink_reftable(BlockDriverState *bs) +{ + BDRVQcow2State *s =3D bs->opaque; + uint64_t *reftable_tmp =3D + g_try_malloc(sizeof(uint64_t) * s->refcount_table_size); + int i, ret; + + if (s->refcount_table_size && reftable_tmp =3D=3D NULL) { + return -ENOMEM; + } + + 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) { + reftable_tmp[i] =3D 0; + continue; + } + ret =3D qcow2_cache_get(bs, s->refcount_block_cache, refblock_offs, + &refblock); + if (ret < 0) { + goto out; + } + + /* 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); + } + qcow2_cache_put(bs, s->refcount_block_cache, &refblock); + + reftable_tmp[i] =3D unused_block ? 0 : cpu_to_be64(s->refcount_tab= le[i]); + } + + ret =3D bdrv_pwrite_sync(bs->file, s->refcount_table_offset, reftable_= tmp, + sizeof(uint64_t) * s->refcount_table_size); + if (ret < 0) { + goto out; + } + + for (i =3D 0; i < s->refcount_table_size; i++) { + if (s->refcount_table[i] && !reftable_tmp[i]) { + qcow2_free_clusters(bs, s->refcount_table[i] & REFT_OFFSET_MAS= K, + s->cluster_size, QCOW2_DISCARD_ALWAYS); + s->refcount_table[i] =3D 0; + } + } + +out: + g_free(reftable_tmp); + return ret; +} diff --git a/block/qcow2.c b/block/qcow2.c index b3ba5daa93..0ad46d2776 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_shrink_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_shrink_reftable(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 07faa6dc78..600463bf8e 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_shrink_reftable(BlockDriverState *bs); =20 /* qcow2-cluster.c functions */ int qcow2_grow_l1_table(BlockDriverState *bs, uint64_t min_size, bool exact_size); +int qcow2_shrink_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, diff --git a/qapi/block-core.json b/qapi/block-core.json index f85c2235c7..bcbffa3339 100644 --- a/qapi/block-core.json +++ b/qapi/block-core.json @@ -2372,7 +2372,8 @@ '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_shrink_write_table', 'l1_shrink_free_l2_clusters' ] } =20 ## # @BlkdebugInjectErrorOptions: --=20 2.13.0 From nobody Wed Nov 5 13:42:54 2025 Delivered-To: importer@patchew.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 1497356637231889.9461224913783; Tue, 13 Jun 2017 05:23:57 -0700 (PDT) Received: from localhost ([::1]:43024 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dKkrR-0004Ve-UD for importer@patchew.org; Tue, 13 Jun 2017 08:23:53 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60695) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dKkmP-00011u-QU for qemu-devel@nongnu.org; Tue, 13 Jun 2017 08:18:45 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dKkmL-0007Fg-Pp for qemu-devel@nongnu.org; Tue, 13 Jun 2017 08:18:41 -0400 Received: from mail-db5eur01on0116.outbound.protection.outlook.com ([104.47.2.116]:28736 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 1dKkmD-00077Y-2k; Tue, 13 Jun 2017 08:18:29 -0400 Received: from pavelb-Z68P-DS3.sw.ru (195.214.232.6) by HE1PR0802MB2555.eurprd08.prod.outlook.com (2603:10a6:3:e1::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1157.12; Tue, 13 Jun 2017 12:18:20 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=jc5juBKW4wtPWnhD+WO5jwVaF90yS/gbHm8mFmNxUlE=; b=WWeeQQ41hWAP4EBBZjenqxk0ftVdzmg0GEmeuVaIscehGPVX49uwl8uyFYMFT3AuyeSXm0lMDmBKysi4lgXonegoPqCj4yQdUQMH6lYb6u2NOmLGmV4VXOI87G5Bzt1fghyXOjFWLcDa0qTj8yDWS4KAyojaIlepwyjK8GWYXxg= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=pbutsykin@virtuozzo.com; From: Pavel Butsykin To: qemu-block@nongnu.org, qemu-devel@nongnu.org Date: Tue, 13 Jun 2017 15:16:39 +0300 Message-Id: <20170613121639.17853-5-pbutsykin@virtuozzo.com> X-Mailer: git-send-email 2.13.0 In-Reply-To: <20170613121639.17853-1-pbutsykin@virtuozzo.com> References: <20170613121639.17853-1-pbutsykin@virtuozzo.com> MIME-Version: 1.0 X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: HK2PR02CA0136.apcprd02.prod.outlook.com (2603:1096:202:16::20) To HE1PR0802MB2555.eurprd08.prod.outlook.com (2603:10a6:3:e1::20) X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: HE1PR0802MB2555: X-MS-Office365-Filtering-Correlation-Id: 7364990b-1b03-4618-df38-08d4b2564b0e X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(201703131423075)(201703031133081); SRVR:HE1PR0802MB2555; X-Microsoft-Exchange-Diagnostics: 1; HE1PR0802MB2555; 3:lMWIUDAU9gGVPXpmF/TsJ8wPK/wk2gFwoeV7UluNZZIPiDKaz3xM7JH88begDKkkJNbYA51xzeKQQe5oyu34TBKq7zNlp8Q61FvWUP/FkHQmt6BW6m6SzgRRCR1cCu5+BtaOc7/LDt7LBxVuj8q3mCMUXqVUJf5Xk+RZrDzSAVWh61IqQo7eDqRcuKisDMGjwvY8srhRDA8WLCby+15KC7WYlsZfzY5nTJXWiSkkReK17zLlte71NeNHxSBagy99JuZlJwEqod8UrgXB1eR6DHGHfyFYTYCB0Ef8XNfFG7eNq1FhOTjL9jSo04ckddDYDWfD/m7/ejH9vsuBM3NDFQ==; 25:nNvgQx3WtA/bqBQjyKCJsEe1tXN7RP5f41uOqRhLaMJQcZrmd9rc6V8Q/4ocyGfgwuAWbiTYiPbIrCkTWEHZvRmDeGL7mCuedNu06sbz3IQXo+Hl0QwrqWP4K5uEKItWe/gdDqawwTC0dBTX0Ks3SYffy7HXXc5pzp6hqa4ln/M2m+j3tgIYtfpChvfOhq7YWHMG0r5nqFJMHfqPVNbGuUbQOpubSguN3g4vwDBlJ5EOYp7QBcYFusFlcV8fAn6mwT1RCazc3kLdK2LhylMNcjfvqWFyh4g/v5BH58X2No/lVf60ihR42jWvLodiwM4x7TTIMvNXgcgi1YjygncrxkiCJ74ZbENEHc8P2cK2aJV8FhAV2EgxvY/eJPpO/4S4x7ivhz1+R8Gss5NC7rlfwy4oKNY4LiXF7CWC3ghSLgs7GGhf3nOC+QlAGZOb5k6HRcR7ez9Jl99Vv1ZYO2oilrhzVzJMNK6HaAEsELyX3gQ= X-Microsoft-Exchange-Diagnostics: 1; HE1PR0802MB2555; 31:/1iQ3Qt2vqHV5Zj6erZyisN4DYSqsFBr4xmgPHtBFFzugdXb7056u+23lLYBG/vDqL7vaJlfEC4KxILPOiseKmJV07J/UGWjFBKmRvRYFlBsyFIvte6wi+jLvBrDDeXEN/Z+3q1xKY53HfiTIAYSfJfgxwjIvlFi5CijKBfZBhtGtYc5PFMOmhavhKLH7vKdfYiPNSri7TM3P6mLUDWBaA9yJ9LIZ89lR/uEixrrf8A=; 20:ZNjNcuTUpDyPwoRJdJvnf9NPTo+1ge4TwvTTxmj+Fcf6UCTIdHv4LOxuAfrFu/ToY1//sATGEWzOq1tLYcTdApOWuyYzOcV2FdQ7cbpdm5saUdAk219F0d82bKRgtMCtpNK4PoUUVuxpnZgw4M0aKvKHIJIeowkwY+66W0f7lwmjVp81NS6a0RVWySP2wEPq2vApLtz619qStkl0I1G3EgAK+veA/zzA3yN7mcBIaV4FijPZk8kbTsRkCB6uJeRSLo/4Yvt9EwhI2vhX7rcVmIg4Yxw1EThnCd3SIVrB0ogMnPc9+5vLdRKj3YRw6n+3177aAdrvSlYBgUwFPduLcnwS/VLVTO+sMnrVg10ZVEIE018fq/7gETuMW2g0yiV7/NtQ9qhVpNRN+VNkWo8ArbI/AxJwquMz0JQJff+9hYk= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(250305191791016)(22074186197030); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(8121501046)(5005006)(93006095)(93001095)(3002001)(10201501046)(100000703101)(100105400095)(6041248)(20161123560025)(20161123562025)(20161123564025)(20161123555025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123558100)(6072148)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:HE1PR0802MB2555; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:HE1PR0802MB2555; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HE1PR0802MB2555; 4:P9rRW/EWvjY36aa55E1CSQuF37yZgbTUdkGCKRrf?= =?us-ascii?Q?kyKreH+Ye/Ht4bvt8onhm6M+Wlg2CWH4bF8PjVic56PjAmRXEOMXN8PN0CKd?= =?us-ascii?Q?gzi2pgRNkfjOXera2nGi/TmMVQq4jo6dS0MTmZghI8kTm4IMMuEziYqELZU8?= =?us-ascii?Q?ypfj7hA/7MMtcKLPrwtgRx/wU5Dbzfw+TLa+4ipOCBjlisqqe3tC51P92L5I?= =?us-ascii?Q?Bd2cON4OpnhPEqze1BW/z4QxM/M4+G5VtwwVblj7zvtCvRaUOQN2dYJ/zyzr?= =?us-ascii?Q?dAceHIUQ9W/CSNY4FyGYBlG3eY54qk21xRp0q1Wv7QzMEZpsXmatlnL0e+5L?= =?us-ascii?Q?v8bzERfc7IJmzkAzJoY0VRzbOsMQap93FKvjewwrhhwK4Q3PKOvg4v9Wv61G?= =?us-ascii?Q?vwl6ZAlxvxo0j2bYmSuUIADmmPS1vq3BPjCL6my+Ugsy7gyGqITbcHO9X4YE?= =?us-ascii?Q?PG/astKCpCBVpc8MYJP9X8aGIBA7q1FXfCrPFTdiks2CREf4ckt2dWWwhJoe?= =?us-ascii?Q?o2HcROsIkeWesifEQJGNGWyNSb+Mrvu3SX0OtM1DWMgV+y8KyVxhAiJPERbx?= =?us-ascii?Q?KI9QlKHglYpbWqixuxKeshfmrH65P7GcBagKN2EO4PE0mTxxDAphNedmRwkD?= =?us-ascii?Q?9+QggW7uMZ9W2VbjmBM3xlor+P8kftIC6AcDxdF7xysgBySH/DP+DZFC5lVv?= =?us-ascii?Q?mBSc6RtGzvu16QxfahdvMgWom5vW8VGN9T3bijzsBRry4kf2GZj6RId3Qk8E?= =?us-ascii?Q?V2/ewZ37mRmAr07JBh0+dLpyxYGOUGr3lIKPEr41FhpRLcd197QmU8sZW4EU?= =?us-ascii?Q?i4EtloNiIxljhCgFVpITfOezIEgE7flW0J0DshFR6eqXvNEAZM02bsbswyAr?= =?us-ascii?Q?WmhQoim/Glfbox028aFGzfq/D95k4c239DgiDK0K0sdWfiB5YChqEI3YFcAG?= =?us-ascii?Q?m3IDAhMIlkt1ddnvDGf+gNiOkspRZYGtV1bQGje9o+QBdS09z/W02Ov6OO2U?= =?us-ascii?Q?NTzkx1xUlEc0PAudJfugUKzG3dfraUIuYA/5wV3j27v0LkI+Ht4og5HzOa+0?= =?us-ascii?Q?qUdzdTEP4uz2Y0S1J7HY2KTZXskP7MYZ0Zyk6GK8c1NFmqPj9f4IO/Kti/7T?= =?us-ascii?Q?ciPxYhVw4Vu+AHxP2jn8pMRhmmaokcSciVBDOv/fJxTvAAuFGP3c1iQWPM2G?= =?us-ascii?Q?mQ9Yj/EkC6wmeoJQqGpSr0ThgE9LXf8TsDR6X3de3mkLuhYrAiy9+AporA?= =?us-ascii?Q?=3D=3D?= X-Forefront-PRVS: 0337AFFE9A X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(4630300001)(6009001)(39450400003)(39400400002)(39410400002)(39830400002)(189002)(199003)(6506006)(25786009)(53936002)(50226002)(107886003)(110136004)(4326008)(53416004)(42186005)(6512007)(33646002)(6486002)(106356001)(38730400002)(5660300001)(105586002)(50466002)(5003940100001)(101416001)(305945005)(6306002)(48376002)(69596002)(81156014)(189998001)(47776003)(66066001)(8676002)(81166006)(6116002)(36756003)(3846002)(97736004)(6666003)(68736007)(575784001)(86362001)(1076002)(50986999)(76176999)(2950100002)(478600001)(2906002)(7736002)(2004002); DIR:OUT; SFP:1102; SCL:1; SRVR:HE1PR0802MB2555; H:pavelb-Z68P-DS3.sw.ru; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: None (protection.outlook.com: virtuozzo.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HE1PR0802MB2555; 23:y8rfcgtc/4AfWiVT9n8Uem5L97RJowWbsXS+LdI?= =?us-ascii?Q?dMXlar5Cwf0Fs7okoalR+o337zAi+VqBQPlg4y3vteP0j3Y/8PJoqliCtC4v?= =?us-ascii?Q?34AXC6TjYQyi6soXfVwNM5mBSe42QRuuE07Fil+sNqZgSCX7pPLk/4QtkGRw?= =?us-ascii?Q?85TkBIM/CwZWQKNPijXgrNQ46nkWapl0NagvAqegPcwmHoYPCct1JUpAWoUe?= =?us-ascii?Q?In7bgpUmr0KrTdBKF9g/DWm22jDgBBznrj7WqEAhRcdPChcRQ7KbTgKkdpZC?= =?us-ascii?Q?hnBdIPWeEhvkPtzZ7pLyKx4FIJLG/fx03EubPnMMCRtFkVY8Piu5mHijvRbv?= =?us-ascii?Q?5Pva+IkQ99pFMbmOdAXq2tsQJl0nToEcPH7UJZEjrmIyfMeFto8bV+47HZ8I?= =?us-ascii?Q?XDmJ1wn3zNiJbM39uEqylaaWLuWT9UK4r7BXeHYMtvHa1lrGf24tktAia1Y5?= =?us-ascii?Q?YJywGpjiNMgErxLJ7ZvG01C2yN56NvClHMOeNeKceYvs59qrdtNPyLBrRfjs?= =?us-ascii?Q?urZJmAT4rfBi/6cUn6J/13T9Xq4kcGl4IMpJt8SBLqqhgtPdTSW8OkeomXQJ?= =?us-ascii?Q?dEbXFkWlWJ8QVqglkQM4F6SJVs3LcolyxTABF51+xz1XFe0W7/EQzd1egwpU?= =?us-ascii?Q?FgLS8uztCk5ypqUsP2ljPeJ3mc6W16df/BRJRptjr/q1LAnmgm2cYMcj9lv3?= =?us-ascii?Q?gCVgctqoDb91N8HAJxoZgXZClz4nSJVUwdNBg0p+gz99GBVhv40G1V4MiZDV?= =?us-ascii?Q?aAme3mcWcgQrDy9wvIvpXLB3Gv7xTIPCaU/5ENzEpE6HdMgUy/aauAIWbRx8?= =?us-ascii?Q?cGaWvj7jiXnOUTg4Zulr0jCjMTyZmSgh02xhcP6uCenWxrNRT71Sf+KL3E9X?= =?us-ascii?Q?G/603rKCIabJuiZUN2bqkVvNmpwEjUtOeAiE8c1gtwO51uVeU1dbOQxjnF3F?= =?us-ascii?Q?+nArMgr8wS8R4LGFLfDmrwVR83Rjy1dixnTiAHQNRmvDlevJ9vbBKDOHqBI2?= =?us-ascii?Q?LdOiKq0sHYVubv3v9ZXY/ZcG17vvGx6ICMSf6dx6nHf1aYefD1hfHydkq7yd?= =?us-ascii?Q?9kqC8WycBVBQOLt9+Oc76oZOFHHBOmbheVSWXsIV8/qMu03lMvXASv7Yrwgd?= =?us-ascii?Q?VLaFd+fYKfRsRpitVmXjVyVq/j8cjFeuT8Gi5z2dP/H682n7B3mbNdbTykBb?= =?us-ascii?Q?Q05pkpRhluHsDpmfQOaP8VyKwWmtZjNfLdci4bkh8/GOPCu7SDXEjsISFPkA?= =?us-ascii?Q?sTjo+LiDuRXoPKbqbgnyV3qL7pFaiBr18FGl39AeY4koR4jYKRK9BcBCRHHP?= =?us-ascii?Q?NYw=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; HE1PR0802MB2555; 6:XS30z07x6iaduH0CoshlIVUqkIeeDD9OHItrQXh0qFKmmKKqurgnVJXPcZh4tlZ5GSGFMp+Sjmf+0cFvRuHX/IX6W4ONPN6hThb/PdT0Xp+FJPERdKRFK2lW3nRNLz3KS9GqYMzIXXsrBNssMBd7Lr5vYtqSoz9dWoRLwf7oISlaS3jZ4Ph/hoNJuJz5WaPGIaGy0PNxppUToSAky6A0qsiCXPXpNwOYwOpNAwtS09ZqKl4NXNFryxQzViGn2AoRQZbAUzBQ4FnXLVybQyV9OkzvA/jKhdjFYDoUoNYe0KwwaGcLlz68roKFEDQxjWmavDsnsL7NmP2EExPO9NUHEGxvhKrxlCoC6pREMVJnFS+jqnY/rumyMnqsDmpi0Qnbm0sX7utsWn9pqCn0gLvbqasgtufkdoeVgNcd4tUpJI/ApJR4+IoTN73+hEbQUop7wRZSI7JxEZHEy6rzrnUiF6qgCf4BdccYHRT1Jq/b782Cr0Q69CyhucoqcTPyqO7q6iFlCoG4TMaLeLi1NpubKg== X-Microsoft-Exchange-Diagnostics: 1; HE1PR0802MB2555; 5:uhiDdiBLCdI80g7Mf6brHjZKLP/hDWuJLS95/QJgOc+UiQ+sKZTnCS/XO2unMVvQ1rqi79a51IK2RvGQfOHDVUh9oSvkNnRfsnkvGcffTTGWfRydOzXDnsgfGz7RANKkK1ujrPiefbHX67ujysrLPv/nd5X0l5d3QLYjEzAcMHfU1TpzfzXLYVlCaJuGi87IrZ9Qh6CMR2pYOmYZGhzN9JlgYBKOI9RutRh8cmHCrrIE6cKKE5dO4mVOikh+DCAjc1QgsPpNRKUHkd0uIZ14rb5vgcL0LHGIf4bKnZv63YwkZvxIvJUBXWs04A13q/y9RgW6fKNFyKQ/J3Hk/TxIbwdPh2zeXpZEIH3u73mn88omGlL8oZ4eMwNIwRNuaxfGB98TGS/zbsBedX7WaDAFhJbFGhqjcqX3R+mzqL2zCOEx59wmVI2ObGZtSBxCTrTIRWd4noert8zDBC5YygSgHRS9Vrmn/crA4XW3gHyJYOI2IMOcLlp4xbmchehbpoLc; 24:JU/Qlz3wxmpZorVGPUC5tNoB+H9qRgorobQziiFub6sn93T4zyLhZ4OR4eTattoLFTaiACeBirAsoLiV8unUR7vSRqHTt0rMYBBUGL1u6WY= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; HE1PR0802MB2555; 7:Lm7+4bnri9GxHVklrb9OKIpWYBG+DhDlbJefCHXoA/GmHb/vUSOjA5Kr8sd789lXZqUa3ic0N6YutZYVGtcenVJv0Zl5Nrpi9s91NK/VWlfUtSNOpn8WKs3iTNfVn1oJS1pKns6D7g/C6nSIXsak6GJlDD8fBNBpuIDlpFJ4A7X6/zRgzx/bgM0Vhv7UbuTJuOicuwL8w5TYvxOiMJFGSY/JeXLguGw7Ci+Y/mAFdY+n5aPia4vuTdgg1SPQcQ3W0xI1T06JjgYv9wDuxYKbVPcN01Xv4p+j9IZ9FFzNsVlQp0Yr5a8rOE34W1jWJPPWJuO5Z3shLe0qYmlAZ0apsA==; 20:lr12tmPzwAPbAQtVGYJfy/iO1kdglpor/toa43CsB7l7/B4nfp2/4ACOO20q0hTY1DF53NkdkWbXnflKm4BPFzAToZ/blT8TfhjSXL/QbFPqD61knINKsxFLVyfn5kAW07YqwELMUK8ERCowCF/IGunqEFLBs/v/i49rXiRAZyY= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jun 2017 12:18:20.9966 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0802MB2555 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 104.47.2.116 Subject: [Qemu-devel] [PATCH v2 4/4] qemu-iotests: add shrinking image 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, pbutsykin@virtuozzo.com, armbru@redhat.com, mreitz@redhat.com, den@openvz.org 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/163 | 113 +++++++++++++++++++++++++++++++++++++++++= ++++ tests/qemu-iotests/163.out | 5 ++ tests/qemu-iotests/group | 1 + 3 files changed, 119 insertions(+) create mode 100644 tests/qemu-iotests/163 create mode 100644 tests/qemu-iotests/163.out diff --git a/tests/qemu-iotests/163 b/tests/qemu-iotests/163 new file mode 100644 index 0000000000..2cb0116173 --- /dev/null +++ b/tests/qemu-iotests/163 @@ -0,0 +1,113 @@ +#!/usr/bin/env python +# +# Tests for shrinking images +# +# Copyright (c) 2016-2017 Parallels International GmbH +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# + +import os, random, iotests +from iotests import qemu_img, qemu_io, image_size + +test_img =3D os.path.join(iotests.test_dir, 'test.img') +check_img =3D os.path.join(iotests.test_dir, 'check.img') + +def size_to_int(str): + suff =3D ['B', 'K', 'M', 'G', 'T'] + return int(str[:-1]) * 1024**suff.index(str[-1:]) + +class TestShrink(iotests.QMPTestCase): + image_len =3D '1G' + shrink_size =3D '128M' + chank_size =3D '256M' + + def setUp(self): + qemu_img('create', '-f', iotests.imgfmt, test_img, TestShrink.imag= e_len) + qemu_img('create', '-f', iotests.imgfmt, check_img, + TestShrink.shrink_size) + + def tearDown(self): + os.remove(test_img) + os.remove(check_img) + + def image_verify(self): + self.assertEqual(image_size(test_img), image_size(check_img), + "Verifying image size") + + if iotests.imgfmt =3D=3D 'raw': + return + + self.assertEqual(qemu_img('check', test_img), + qemu_img('check', check_img), + "Verifying image corruption") + + def test_empty_image(self): + qemu_img('resize', '-f', iotests.imgfmt, '--shrink', test_img, + TestShrink.shrink_size) + + self.assertEqual( + qemu_io('-c', 'read -P 0x00 %s'%TestShrink.shrink_size, test_i= mg), + qemu_io('-c', 'read -P 0x00 %s'%TestShrink.shrink_size, check_= img), + "Verifying image content") + + TestShrink.image_verify(self) + + def test_sequential_write(self): + for offs in range(0, size_to_int(TestShrink.image_len), + size_to_int(TestShrink.chank_size)): + qemu_io('-c', 'write -P 0xff %d %s' % (offs, TestShrink.chank_= size), + test_img) + + qemu_img('resize', '-f', iotests.imgfmt, '--shrink', test_img, + TestShrink.shrink_size) + + self.assertEqual( + qemu_io('-c', 'read -P 0xff %s'%TestShrink.image_len, test_img= ), + qemu_io('-c', 'read -P 0xff %s'%TestShrink.image_len, check_im= g), + "Verifying image content") + + self.assertEqual( + qemu_io('-c', 'read -P 0xff %s'%TestShrink.shrink_size, test_i= mg), + qemu_io('-c', 'read -P 0xff %s'%TestShrink.shrink_size, check_= img), + "Verifying image content") + + TestShrink.image_verify(self) + + def test_random_write(self): + offs_list =3D range(0, size_to_int(TestShrink.image_len), + size_to_int(TestShrink.chank_size)) + random.shuffle(offs_list) + for offs in offs_list: + qemu_io('-c', 'write -P 0xff %d %s' % (offs, TestShrink.chank_= size), + test_img) + + qemu_img('resize', '-f', iotests.imgfmt, '--shrink', test_img, + TestShrink.shrink_size) + + self.assertEqual( + qemu_io('-c', 'read -P 0xff %s'%TestShrink.image_len, test_img= ), + qemu_io('-c', 'read -P 0xff %s'%TestShrink.image_len, check_im= g), + "Verifying image content") + + self.assertEqual( + qemu_io('-c', 'read -P 0xff %s'%TestShrink.shrink_size, test_i= mg), + qemu_io('-c', 'read -P 0xff %s'%TestShrink.shrink_size, check_= img), + "Verifying image content") + + TestShrink.image_verify(self) + + +if __name__ =3D=3D '__main__': + iotests.main(supported_fmts=3D['raw', 'qcow2']) diff --git a/tests/qemu-iotests/163.out b/tests/qemu-iotests/163.out new file mode 100644 index 0000000000..8d7e996700 --- /dev/null +++ b/tests/qemu-iotests/163.out @@ -0,0 +1,5 @@ +... +---------------------------------------------------------------------- +Ran 3 tests + +OK diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group index 5c8ea0f95c..a2f42e7165 100644 --- a/tests/qemu-iotests/group +++ b/tests/qemu-iotests/group @@ -163,6 +163,7 @@ 159 rw auto quick 160 rw auto quick 162 auto quick +163 rw auto quick 170 rw auto quick 171 rw auto quick 172 auto --=20 2.13.0