From nobody Sat Apr 20 02:56:23 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.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1500046970287760.2421875310314; Fri, 14 Jul 2017 08:42:50 -0700 (PDT) Received: from localhost ([::1]:38611 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dW2jv-0008SH-12 for importer@patchew.org; Fri, 14 Jul 2017 11:42:47 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:40402) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dW2fw-0004ss-I1 for qemu-devel@nongnu.org; Fri, 14 Jul 2017 11:38:42 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dW2fv-0004x9-6x for qemu-devel@nongnu.org; Fri, 14 Jul 2017 11:38:40 -0400 Received: from mail-eopbgr20115.outbound.protection.outlook.com ([40.107.2.115]:63125 helo=EUR02-VE1-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 1dW2fo-0004sQ-Ia; Fri, 14 Jul 2017 11:38:32 -0400 Received: from pavelb-Z68P-DS3.sw.ru (195.214.232.6) by HE1PR0802MB2556.eurprd08.prod.outlook.com (2603:10a6:3:e1::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1240.13; Fri, 14 Jul 2017 15:38:27 +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=V++ZVojLnuwQnK+vSoOVMKvXFE+PPJAT1AyBcIMx3Z4=; b=X1WZBrdwHSdjrZPJmSwZXB54yt90b1WBRuf6C2uiTvyhOdzg4oZOglNYlo2zkHaK9kj5MQrfh/lJUrGlYnOdsuaTU5iiYuAFUi+ZD0easMwiyBCkd2/N92JfdbkoPGlqoPH3uk12vbZi6MxFd8ObiSB7BS/8qgK/lFyg0jGyXYc= 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: qemu-block@nongnu.org, qemu-devel@nongnu.org Date: Fri, 14 Jul 2017 18:37:46 +0300 Message-Id: <20170714153749.25132-2-pbutsykin@virtuozzo.com> X-Mailer: git-send-email 2.13.0 In-Reply-To: <20170714153749.25132-1-pbutsykin@virtuozzo.com> References: <20170714153749.25132-1-pbutsykin@virtuozzo.com> MIME-Version: 1.0 X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: DB6PR1001CA0027.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:4:55::13) To HE1PR0802MB2556.eurprd08.prod.outlook.com (2603:10a6:3:e1::21) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: b7d50f3a-4018-4c19-2d0d-08d4cace601f X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(300000503095)(300135400095)(201703131423075)(201703031133081)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095); SRVR:HE1PR0802MB2556; X-Microsoft-Exchange-Diagnostics: 1; HE1PR0802MB2556; 3:LPx4y2yWbI6HvOBehKO+F7JVMEdI2ri2435Ru5rajz2YdNHl/jJLBH2EV/Tsu7ESExEHnaX9WKUrW020yf6HnUi3HcojO7cGeUG21wQrd1Uc/wfhWaGIYHtz6Sr+F9OWIkwjmwK+Rk5yFdM2BxIl6Rz4snlcvqucp7I9Up/KzW0sWlV5a827rXZMZLGN5ZhM+Doqa2yPq9YmfMuFUY0o0VJIiJuY9elQTFXX0CwPtDn4E6DV/nQYgtm3ZfK9Om4kpNaWfd6b2lITdv1HG91v3ZQNdB7mCZMtfUkP12B1sF7GXEiulqOMaU/pz4xrSXkDZWErol/d8xU7d9qXRqR5WkConVHinSh/9tWQ/9Hj0dKjz5iddPM8GazLV/6qRXsXVkt1O53ZqO3sYKBi9Y8LWuO2FSKs26nWOAfN8ZVcfRZMtP2VsNgowdbKhLnOHoakMEdWsXuvHxAPaH2snjDIq7ACVM8RZnzD3koJANt0s/s67OkoAxPFedDVgUHAjvEWDNppf/9r7KGMhFnpqJCXFGNpzrjetaPKuApiAP1liPj7ut71xthinA6BPlrnLn39YT1eBPsQlgB2SFGPKCYxzXn1satcDge1M2IqLWGjk6S0wNh2jfOCmOQcJG22ZFfsIGlYHigxFI2Z1XrBYQSNgID6tzsKVsPOH3E33pJM7vETViDConTy4mBFAQRjO4vuZi6ZSvwYgkbAyI1ZNpGozgGMrATLaEu6HwC0xgsU6T4= X-MS-TrafficTypeDiagnostic: HE1PR0802MB2556: X-Microsoft-Exchange-Diagnostics: 1; HE1PR0802MB2556; 25:EdImpmeOZiNvRPE3xYo3hKPQX6F+Imsnj7cGxvEE/ZSK3hyLIP80EqZNUid9UqKQJGNs6J3u0UESOqc6Vy07wUD+HiF18Yhl6gZyaPB7erwluFa7QS3No3hmMD+aFAqUgNdDvmxGLvq9chqWbXfCiZNPmFXstd0Iv+qQuGnaVql8HAUzlWCjurd1PvqaeV4Yjp/h5qGNX8CiJPdcd8jtu9n+gBI7r4W0olGs3y7oKLJkImrVYtgFUV5OH7BFhfYIsG3u7I+8tYE2M3ADIr0LKpveBwRjbypzn1UL0NEcKpJCqMaYBUmeXj3RUVm0jixO06WqgmVJSRHfPPfGtbhC66O3fI8kHvqbyzDsmuyTro5bRdGIUJL1xyfKlM0lriu7GWL++L6RNJ0WwSkiegDQEuj9YtqNk7I09T/eJji8lGingPifWAMDBTn9gFbcw3ZS8dA28p9MNYGo+REdiczQrJuCIBhgxOHmvoQderSyJDXFhVCD2FzE/NV1+liHwxuUGXHoiKKmoy7DZ7oW1mrMPTmBFi1ySr4E44aa9hpQsL530W38V2MXiQXA6vi5Lx5fX0RJH2GcCCk+Sv9bcKc0C3STZ19sjR4msctptk76gb3CZtFTWABDa9/SMPAMSN0Es5jaUXNAl2It9vPp9gXlPfmwxNIU7NkhFzbxwUYJno6YiVKHJu7CtkaCtViz20bPf9+hp1MCQVo3EbqnxJu3zuZpUH/ly1PjHSStQhYNBTtKkvqsj9LUpija4Xt+5pCnLR9Wiw1cX69oxIbQHaPL1+YhHP8QMXnw+S2R/mF2W5TxydmwwiK6yInp3H4i+eaMiaXScLDWNrPkZp7JcYQUwHUhckEd7LHWmDyfDUbOLlJQ/IuIBFw0inpzi6WaRC0mvUxMT93H/zbIEvs/H6Z++4bbjnB7Uy1vSwnOiU/Z5c8= X-Microsoft-Exchange-Diagnostics: 1; HE1PR0802MB2556; 31:ZGveyvtLPRNt6esqOayN/ausE2Ha5YuJAunlBu8AMDZ2kRyUMjOUnMt93/O7Ee6h1ZmBwa+Y8tyVtSC1Ldp9Q4/+2TYTxXbAXtvOkgqv0hsOUq87oahvxFOcnh7k3CeTRHXb9TmngOri8w+pBFRvPWqcwTZBTITX+yrf4ux+VAMwpSgR3ATP/Tq06/ExaWBqt5sbMqWBJnmVCRmGHQKz3lYnUMN/yW3n3t+zcX68nL35rMT19IF6+cIWPChFzzRfUGT/Tn33HTB1dMj48EFL0jt9ZicRyLfzPSm0H+YpOzjIyF9MQI10UZFsFi/B4aV7VMjNrT4bXGWnlWex4dR4O3AkJDC2+5TS8mX0ZE3VrgdDuM3b+sPKevlDIr3/qfgUmltpVlA4HXMgjO1ShFphTptmz4yp9ju574ft2fuTMchH4q3HUBh0OH9iNuBhj5NTvNS3kC4XlPb4LbxYU63Qvovo1i1yHFgVYcsVSfgXKuA/9ugx4PeEqTSW1D98wcBCmzWc4PkPvBYQTWV8JVTdtNuL8uhrPASOHYY8tiR4xOFJwv00BSdQrDejOf/zoE3DQK/reT686oSTtS2RBogLA3km3kiqxxShnpfRsx44j5io1gUHDzuZRMraj0tZA8SGWB6/jvOEaZm4skLNJS/fX1P11mWN8+s9pn+JAM0Rn7A= X-Microsoft-Exchange-Diagnostics: 1; HE1PR0802MB2556; 20:QIkKKpxNXNLiggfscCHyE2DCSM2+8O8V8szRMof5f7nV28o5g+XQjx03v8QdY5bEIA8D5LvFSZ27O1FtSF/NTZRCDebswEEuaN76k226u/iaMHH+WILrMmvFJn9YHyYd/zoN4SBfQqMCm5eVkPT7i4XwdttUvaNUp2NzkvRnY2/cmSlThhKvxSFnzsU6dILVLOa/aL0HIvsKEpFqmiTWTLHYTAKuUkxhHSxcV6SQIEGI6QcZpYMF8kKrjDzLTBIDTWTa0nTr5oP/wqUsip7KcpsgCHn/90ORyMpNvtJ06R8Swd9LThlkI+1f5a4s+w3dh4/DTV44LDNQpzkIInau7rzIU8VJd/l9LwvyP/65R/1YGIJXoEOiIOsxq5kNeacJ+f0+HRwQiHB467vPdpVk/yR0Mv7S3NHtYPzgP5EPa+s= X-Exchange-Antispam-Report-Test: UriScan:(236129657087228)(148574349560750)(17755550239193); X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(2017060910075)(5005006)(8121501046)(3002001)(100000703101)(100105400095)(10201501046)(93006095)(93001095)(6041248)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123558100)(20161123562025)(20161123560025)(20161123555025)(20161123564025)(6072148)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:HE1PR0802MB2556; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:HE1PR0802MB2556; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HE1PR0802MB2556; 4:FLuoUQBp0w9LuGnfnPhNik4etWO+046DqxayYOhF?= =?us-ascii?Q?Zk4XY5CL2HusLcgF5nYaNKmScHyHt5GyGHYyc/zIFBQ2hDfz75Igzv9D+7od?= =?us-ascii?Q?n4oYefDpW8hxkcd1VqK36lGPiIqjlJV8Gdq0O0uXTqpc76juuWRWab1k9r0A?= =?us-ascii?Q?0OSLSCHjqGQWfQnOQyoxfFDOOwoLUIdhuNA4fpbwmKsDCD63qBvajAS2hNG8?= =?us-ascii?Q?t8kjrjtr3kA3Xk8gWMM3gSk1oCoW4aycADarMJ+mK+xCNrI3VQyanwhNujjF?= =?us-ascii?Q?Sy93tYldZ2WgUO9b6n6H/zWZDh0L9lDg9MvwmvmvnWY0gft2cjxC3BRQFRg9?= =?us-ascii?Q?+vJFFfv7uQ53G2qoW5bjv0l/DzCIrXcpqQPl+O3S9+IHfrWXOdoxUOKdnxg1?= =?us-ascii?Q?IDrRamzdvBMeIFNiNktWaoGhCi4Lw7R37kHtrYz5NRbD9A+os690s7nSsEqN?= =?us-ascii?Q?7jTntUH1AbsqKUSKRWS9wFwHDMA9cIif4yTYcEnkDGadrRMZr95YpsmBZwcs?= =?us-ascii?Q?bhvGsNEtzWfCNczzfM25X+MVxY7UezYLWwtGZU9yrdpGxXkWaar0yJ1z6hWw?= =?us-ascii?Q?5VwBoNKhlJ1lVSTuopDoBEp7OAyfm6ABbGbKJ2ZKrIKjWZLXch/dEwLj3nJG?= =?us-ascii?Q?L+cXpKqPNHO5TPgItrUsuosZUPVRYSk/no7RZRvMo5y1KweD9e97oYBLbHig?= =?us-ascii?Q?BiuXLep/AOt++XE1IBN3ygv6y+r0Vqphcpka17ZQ8bUjPmzzWYIhQlehj/sM?= =?us-ascii?Q?j0PkA9ZmhNGdDeoXqsg+t/eeIt5gglEqsl2qVG0drJJeIrLgot6JZw+zyoNX?= =?us-ascii?Q?DpclaQh0HE0Mw8yUt2mOTeB1OXbWfvgEe8O5BTzX/z3kGlxuTpSwtBmfDl77?= =?us-ascii?Q?CgfSxN37eVfo8Vv1Ee1tDdRTnA0FlPWlEa4z9kClKURBob6Cr7DMZpD5Zyhr?= =?us-ascii?Q?kkTFoEAawth8G2MGkjFfZ9OuBXZhXBtF+CP0C2dlttHpedjKorgg41z4Sn2w?= =?us-ascii?Q?ve0iO9qpptv96V1T/2HJXTX2KoEE44VQBgiwZoIUcNX5cSUb0/cUrDGVnOTv?= =?us-ascii?Q?f6ltw4Qfy5AygSDkpZDR1eUZClU0xZLMcoRRJAwWa8hE+xTrcvXLKdAEl0Em?= =?us-ascii?Q?W4t94Jva+oLBN1BAQ2qHKYGcLLlH6TyKNPFYfJA2JQCwLTKbvJZUU9zcbH1S?= =?us-ascii?Q?sibTMOj8R/LVPf8fQfIhiB/hFK/vhuaqpIWmMqHWM/LowOb8vYq0ppLOHGuY?= =?us-ascii?Q?/iNUQCd/geiRzt4ZIJbEsV8cCll51XjGSXfLdRJ8ODD6rh0apAplRmcKA3cR?= =?us-ascii?Q?4g=3D=3D?= X-Forefront-PRVS: 0368E78B5B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(7370300001)(4630300001)(6009001)(39400400002)(39410400002)(39840400002)(39450400003)(6666003)(478600001)(6486002)(5003940100001)(3846002)(38730400002)(50466002)(6506006)(110136004)(53416004)(6116002)(107886003)(33646002)(48376002)(2950100002)(6512007)(4326008)(53936002)(7350300001)(189998001)(8676002)(47776003)(66066001)(5660300001)(1076002)(50986999)(76176999)(305945005)(42186005)(7736002)(81166006)(86362001)(25786009)(50226002)(2906002)(10056002)(36756003); DIR:OUT; SFP:1102; SCL:1; SRVR:HE1PR0802MB2556; H:pavelb-Z68P-DS3.sw.ru; FPR:; SPF:None; MLV:sfv; LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HE1PR0802MB2556; 23:4T12hPOyZBZg8xA419zl239BJKGRYYHNCQLXTRQ?= =?us-ascii?Q?kSPLbfIP5+h23HR22qkc6FpR052vn533DQzfRwOgncX0OL1D3QI6lPISLeOi?= =?us-ascii?Q?wsvd98zEm1assHdtM3+Cz1tlORX3PRVaOXA/ob27Owu4KcDcYmacL62ijlPP?= =?us-ascii?Q?XpZQdlRHmE43U/+Te68f9Q+Nwlx/YF7VqAmLbZbYOCAfF76/vzHtG/f4p/Kc?= =?us-ascii?Q?lJftthHCbbD1Z2d8eBMhBhv8A6sLL0kXPI3zyRTcVVyjlgriGeGa1zBFVf4x?= =?us-ascii?Q?fAwbUMSPc/XS4fX0z8ICQkWN6ti08cW+D9hJ9XT+nxa3ICrNYlONkrPVTwXx?= =?us-ascii?Q?6BzT9IVZPeqdjW9BnPd/fFvY5ck2cXb9/H841x+myksfqTrwPxu8jrp6NU5/?= =?us-ascii?Q?my72FpU1XJIapaaayFQl94m9vXx0xhYfb8mkjS85eUM91tzH0T3i/HYIn93a?= =?us-ascii?Q?Vx8mmdNMEB3mEtr1Ros57x7BjrKT3VEciK0dJwG9pIrbd0rlBNs++UPqHEz7?= =?us-ascii?Q?1UWVOcBeyEhPqM5G0pP7Hnaxv9tByvyJp2RXqEOI2VmWyxZuQIEeIrnTTuPB?= =?us-ascii?Q?PDbvlXxtHCroJsVxUeBtPVjCfb3xnh68L56p1b6+cPG8+y/mhZclOP7iJ52i?= =?us-ascii?Q?+eeicI3J4KB2iOv4ToQMAnPFckZFk0tEN1bWJW0d3CKxVr1MUnrIXRgQsv+F?= =?us-ascii?Q?JIF3gc2gEnycSiV8xW9JDIQ2nAoCYBZRB1rorpBLoj5Ikn5Fn9e2D34qbPpg?= =?us-ascii?Q?vDSz4B4+/4A0r4tHqznLr7QL8hBSKqpcY7O4hVM54SyAy2n2R189wwOAesZh?= =?us-ascii?Q?QyQkrj6H1l27iBX5BPLnNagAI8av3476AgXPoL2AvHkNYeU+ZI2gYkmYgPCF?= =?us-ascii?Q?iClnQG8JjlrVB5ooUYJu3S3Qe5WoKuIDk7vRUwFWRya5mf8M/o3pEBU0f54O?= =?us-ascii?Q?tFURUGYryRoTCprRkLunvlIJMEz8BKU5RGIpUS9X7WRukkJq0C//6tYBPkWB?= =?us-ascii?Q?9K328HLmszoUPPclbYchgJg8HMyxs1hI7qp4hSooWUSNd7jlGZ9mFLXhFUtS?= =?us-ascii?Q?F5aONqQK6fOMf2J1ZbfoP32j7G8MuA/gV8RigZyspb11tdn594uSOS6buTEm?= =?us-ascii?Q?8uS6rXGja948=3D?= X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HE1PR0802MB2556; 6:pfvuXzZzvP/BT/V/EPudXS2C+R1GnmEbdiOUGCFW?= =?us-ascii?Q?kRT0Y6/l9thUvBv4toBjgZqO2tynfvgnR/zG+ri4FLv1MP5uT8gZB7hFDfWA?= =?us-ascii?Q?HEz3Z6PPaqAqx1nm6lP2JoKFJYPDP7yJxpoeP52fsrK+jakP5QKsmW29G7Ni?= =?us-ascii?Q?n5rmmm82P6E+yLHvpI96DZ4fzC+P8EKLvWDbSdnanD92zSsLVwSPo5a377wo?= =?us-ascii?Q?KYK0PCDXW9RXZW6StTXxTkZe1ePuCKM78C5dOfgPdu9rHl+A5c4ryXQoLWqI?= =?us-ascii?Q?nmBz+QXn3/OGyLcK5gjy42R6C7lLDnXw+4MGcRhAT0mXMGIBdiPpEjVe7Xlb?= =?us-ascii?Q?y8gxHpaxM4UzdfZ867CotsDnPbwvFq0XLR/6mlG8T0oy4VZWjUXAryzaC7fc?= =?us-ascii?Q?mG/v33SVEy+Yl33oBu1Mms9rxdJVFrGKwGm6kK0G3jBQZ+yhzGNnRYrZzn5L?= =?us-ascii?Q?J4RIGyGk4+jzBNrOpD8E8fphdcJT5teEdsm7YMWiPMFDC7Q4PMiZo5dknZMB?= =?us-ascii?Q?Wc8Jt1yfglMexqZVGdNewHAjv5WupbYpVnIseUAzuKQiXWSB68bqgzpmnEIB?= =?us-ascii?Q?skV4JvwJzKFHQ6BSZ/nAwR8MPqg45gefF5x/dInBxwZ1Fq2Q+/Rr+tNzb77M?= =?us-ascii?Q?jdd9l0afpspHfa8Kk6Jjiq7dNvdBHDHRo4+FMsAXcOdo5fV0KYPG5NYVaxrZ?= =?us-ascii?Q?UZSahfKX6WO5s/rVByPwat0MjlMhOcdRV1TfQAzZjQLhlyxQhjGTqJdTk4HT?= =?us-ascii?Q?HUSMVS7suiIBB0ZLUkrUzDte3g6ggZU/uh2buWJwCyl/O3dVCkZFuivC2p1b?= =?us-ascii?Q?Msm9SudYD5k2Wl+L/lMoCrxzfS1Ndab2LTegAd/+XWQ/IzlRqUIUH3waAFRu?= =?us-ascii?Q?ETzxwv1P11dxBK+mC6nHB3FMmczWTIyDlq5JxoRuktshT7+Dzrj9B5MZ6Jgi?= =?us-ascii?Q?YI0qYwnjBFzmPABuDgeh6Ri6AH4S7DES61vOCfG5XdWRjF+d4oMrjKkwcsme?= =?us-ascii?Q?4mg=3D?= X-Microsoft-Exchange-Diagnostics: 1; HE1PR0802MB2556; 5:MXwoRxzH0BCXDlU3DoT4RpPCIo14eUqSiO/mOGAfmFeQ5UsLR3xgE+MRL97v+D7QYk5wWXySJ2SwDPvCNSr8UH/22OH01y1rlDZZthi4i2iVrey9oFK2QnK8bmZ6dY7w7rjYGK7lx2B9JeglDwTCzgTVUmMBXFMGPMFyyXAx1q+w9YqznENmMTiL6ruC4JYJH7f7clnmq4XI82y/Aiqbvkuh47VjTkokIpYmGWH6fyxoQfuQbXxtN2ovqYK4hJ2DIsJ4PJd4675Qdm8dsP0zkJv20mf962vN/rD4bNPTFDdspYacSdER8hFVbDwZUzghUw3kgqrVDrwp8jE1Y7BIQWniejhn+MDjM7THIwYHYMtDvpPRPbTwI/6k1j4HCOaY6kAeSI95w6CgeNhBeKGMC9GzZ+WkZtASj88hBwt+9/AF44Ag3B/ZV+ToG1nXIxuypACiP8SsLsw4sLHa1EvtwyLQTLLO7VI4nCZSP+H9EZWg2jo11FQqWBEKsO3mwpoo; 24:ChGt3uoGtTaho+oLC8GxU5lxD0kUliJ/I8U+7//jbx6IeM21SrVk0CQ9peBDWl+Ro2kEikuxlk9YQK+NdJpfgDUsvuur6+WnqrwHrICiRng= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; HE1PR0802MB2556; 7:1S+q8V73BRxdt1suixS/9yTTKxx6fKHbVMqDTNyEnBIE7vtcKpGIp3uSZfJxo8iPfbaVNpMNOlivCk+QO8dDrLLUFbal1LiIlqhDf5wXeuSOW/zDZEfJNbcpmJWmKAChM/OfznRbu887drARrt9Wcd9TsjHl91xnjB5BQMGOUu43OPDGsl+tf1MVP4/I0sgIB87kF02rrHc9HrADPgWll9edJZbN2izW752fHyFHncVoLQnpLlJVVBWTjKCi+jsT6ENneF3Ah4fwItapkUy9Pafzy59OFtw3icJLcg/5CQb0saulMJc5e/7uC8dqXimpopIrMMfAKX9yh2OodplYe5/zh4iXdTRQGMi55FT/fz/gkvjJv0jaUxVcgVq0Mt3itabh7BQwlEaJSge8qBN1o/2LGWLL/9SvC1x0ltrl84JRv11Sb03jhweak4L6KZrFBUM/lWo7o9FTAJYkIRcg6k6icyku4L1dJ1icNQaPukmL2IwoQkiZXM0UB8zqpkVCtL/jVavc9M/CTQlO3eUgTzdyo1qa/MErbnOIUNT47vaJiw5g6VlglRsP2fLFt8GRtV2xdD3dzlR81b6FnNgEbIPx8SKSQw5xD4glrQtouVDDlw6dqOd2+owtsenciQOMX7oPtErbmUPuzpwwieH+ZMpdGVNsww82DV3aQciHq2fPmI06lmcLtLeT67ggC+Th7fguTmO4b1W9wml4JBvA0CNAxnvg+h5dvF1sZ+2mjq5l0aQKETjABf7o5KsrCKrfILz7koxIeg8h4SPM+bGcZE8wHFu3gVpAH4xi56TKRR4= X-Microsoft-Exchange-Diagnostics: 1; HE1PR0802MB2556; 20:3gX96Drnd7lFb73dGauSaht4qdYiOi+a9YhpPkpnfAVg+lRFsszVERK5bYd59mtoznaMWItRSyxLdt2/lGaAPziZ44JzToyRlAcrFMtPniibqNVH8qjYHvw/W7djiWKMuIrLOLBsty77fF1DvIPQTX0jlF/YpHU6xWzvvXGixM8= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Jul 2017 15:38:27.9552 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0802MB2556 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.2.115 Subject: [Qemu-devel] [PATCH v6 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 is additional precaution against data loss. Perhaps in the future = the operation shrink without this flag will be blocked for all formats, but for= now we need to maintain compatibility with raw. Signed-off-by: Pavel Butsykin Reviewed-by: Max Reitz --- qemu-img-cmds.hx | 4 ++-- qemu-img.c | 23 +++++++++++++++++++++++ qemu-img.texi | 6 +++++- tests/qemu-iotests/102 | 4 ++-- 4 files changed, 32 insertions(+), 5 deletions(-) diff --git a/qemu-img-cmds.hx b/qemu-img-cmds.hx index ac5946bc4f..e36957a2ca 100644 --- a/qemu-img-cmds.hx +++ b/qemu-img-cmds.hx @@ -82,9 +82,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 28022145d5..b4dc4bb5c4 100644 --- a/qemu-img.c +++ b/qemu-img.c @@ -64,6 +64,7 @@ enum { OPTION_TARGET_IMAGE_OPTS =3D 263, OPTION_SIZE =3D 264, OPTION_PREALLOCATION =3D 265, + OPTION_SHRINK =3D 266, }; =20 typedef enum OutputFormat { @@ -3430,6 +3431,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. */ @@ -3448,6 +3450,7 @@ static int img_resize(int argc, char **argv) {"object", required_argument, 0, OPTION_OBJECT}, {"image-opts", no_argument, 0, OPTION_IMAGE_OPTS}, {"preallocation", required_argument, 0, OPTION_PREALLOCATION}, + {"shrink", no_argument, 0, OPTION_SHRINK}, {0, 0, 0, 0} }; c =3D getopt_long(argc, argv, ":f:hq", @@ -3491,6 +3494,9 @@ static int img_resize(int argc, char **argv) return 1; } break; + case OPTION_SHRINK: + shrink =3D true; + break; } } if (optind !=3D argc - 1) { @@ -3564,6 +3570,23 @@ static int img_resize(int argc, char **argv) goto out; } =20 + if (total_size < current_size && !shrink) { + warn_report("Shrinking an image will delete all data beyond the " + "shrunken image's end. Before performing such an " + "operation, make sure there is no important data there= ."); + + if (g_strcmp0(bdrv_get_format_name(blk_bs(blk)), "raw") !=3D 0) { + error_report( + "Use the --shrink option to perform a shrink operation."); + ret =3D -1; + goto out; + } else { + warn_report("Using the --shrink option will suppress this mess= age." + "Note that future versions of qemu-img may refuse = to " + "shrink images without this option."); + } + } + ret =3D blk_truncate(blk, total_size, prealloc, &err); if (!ret) { qprintf(quiet, "Image resized.\n"); diff --git a/qemu-img.texi b/qemu-img.texi index f11f6036ad..9a930f5e6d 100644 --- a/qemu-img.texi +++ b/qemu-img.texi @@ -529,7 +529,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 [--preallocation=3D@var{prealloc}] @var{filename} [+ | -]@var= {size} +@item resize [--shrink] [--preallocation=3D@var{prealloc}] @var{filename} = [+ | -]@var{size} =20 Change the disk image as if it had been created with @var{size}. =20 @@ -537,6 +537,10 @@ Before using this command to shrink a disk image, you = MUST 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 +When shrinking images, the @code{--shrink} option must be given. This info= rms +qemu-img that the user acknowledges all loss of data beyond the truncated +image's end. + 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 Sat Apr 20 02:56:23 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.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1500046851285774.0987737720064; Fri, 14 Jul 2017 08:40:51 -0700 (PDT) Received: from localhost ([::1]:38601 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dW2hy-0006zp-CG for importer@patchew.org; Fri, 14 Jul 2017 11:40:46 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:40386) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dW2fv-0004ru-IV for qemu-devel@nongnu.org; Fri, 14 Jul 2017 11:38:42 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dW2fu-0004w0-GN for qemu-devel@nongnu.org; Fri, 14 Jul 2017 11:38:39 -0400 Received: from mail-eopbgr20115.outbound.protection.outlook.com ([40.107.2.115]:63125 helo=EUR02-VE1-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 1dW2fp-0004sQ-5P; Fri, 14 Jul 2017 11:38:33 -0400 Received: from pavelb-Z68P-DS3.sw.ru (195.214.232.6) by HE1PR0802MB2556.eurprd08.prod.outlook.com (2603:10a6:3:e1::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1240.13; Fri, 14 Jul 2017 15:38:29 +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=E1onaJRSkgGj5RH1i1CQp0ajop/jhN+uXUbIRNzXai4=; b=EnI0wRqkh6ALMZ+9CMsWcz9ZlH5mqPcrWMW+WTeZxgsdv2xu/SgE9mHNn7bptuB5qwbSYp/fbaEc92tz/VyrEu8tPa5aN89a5XgPlm6r+aPQdHGvuKA8Btx8aT5CpTBuvM3UnrR7wEO3tcWk49K6HixMArUf7T+jWnlBaZv18U4= 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: qemu-block@nongnu.org, qemu-devel@nongnu.org Date: Fri, 14 Jul 2017 18:37:47 +0300 Message-Id: <20170714153749.25132-3-pbutsykin@virtuozzo.com> X-Mailer: git-send-email 2.13.0 In-Reply-To: <20170714153749.25132-1-pbutsykin@virtuozzo.com> References: <20170714153749.25132-1-pbutsykin@virtuozzo.com> MIME-Version: 1.0 X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: DB6PR1001CA0027.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:4:55::13) To HE1PR0802MB2556.eurprd08.prod.outlook.com (2603:10a6:3:e1::21) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 0f70ed4a-c38c-4a97-5494-08d4cace6103 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(300000503095)(300135400095)(201703131423075)(201703031133081)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095); SRVR:HE1PR0802MB2556; X-Microsoft-Exchange-Diagnostics: 1; HE1PR0802MB2556; 3:5K1rZYpVnpxmZkmG66vTuKQFs1fI/VKpQFm+uOXjTHmQoH+TskVG0W5QwYi7bdBXmWgHhn3TSoSHRXB8qOXgV733HU53TgwT2RjIfBUWn41V73mcsTjf+raDOwdwAJM2PBBmZn3gi+W6upX6AuvPtKL9muyzWH9erz23cldFKH6a80zyRSomTFCiuz/O1eg8OqMlWiB5EFemqiox5RjATn0zfMcbIjyHceAa0gIuGE5b7PMArb5i/YRp0PWQlXSClfc0pXZpnelwPC4TDWtFXvv/y5Sf83LL0MMySqJu1NYRus9JnqqBnUVdPnzbXb7+fStiz1ya7n6GJgUqp0zrNMJdOrM8spgmLoK590oRhHvYv8lQybx5tCL5g1elxe4gWYK3cgD38dL9eQ5sfes2pzGrbV/7hw8jAP0594Wl0OrzcsBSw/fX4UncR6bnokSzYLgk4CyjI8xvjLpyYL3efI0utG0GTxieFho2r6WIpDroSQYPJDSI74iaWnVBzm4ZTUfsZf+a0cFoosuZqJJhSBrRG+0Gkb9AtbMsMpeWlHkWQjlbrSvMqRBsafgYtJBj2wSJyUhLgAnT+uDOnWfjA6yfPGAM5zLJz+RTjCjmUd1zti/MvGB6VekRw1xfivnh0pCO9VVxaB6b7LqFrB5WurBEJDDUIUEfgEIDoK2+sAMwvuEcZ4Y5RXjjbUc82Pi/wBaPbMOszl7mxjMK8bOFhQfNDtj9eplVb9kH3XDgGQg= X-MS-TrafficTypeDiagnostic: HE1PR0802MB2556: X-Microsoft-Exchange-Diagnostics: 1; HE1PR0802MB2556; 25:1RcqKI0fe860PyvimFpdZbF/feEf6qgwyGI4rxNFpn/IzLntLy+ZF8xmJBe+/58Ogyl0AF6uN5DAMwMM/kNDvk3hKNnlJ0fnFyPOW3pJ/dL4/jm2jz+p5YrkuqYYMEjvzjQ23lC6hxBXRFYc7f+YQRJglTao6bKkJGCT/Milf6daI+G/NqFGReI3BhE/Y7/ZqjHM41tWDAX55hteDBH8kRCo4416JN0cacL9mGqOF5qh3Y1p/clGN5Ff92pkIsr5j8Lk8x7an78tcHUGT3WIxBFwXFv8oMfP3UQcJANnLjl6/kZGlMspbp4J8AJM+6JaLFCxc5lqVFkv8IA1dnRvBaGSN84qgQphHfQQUjSO7qH3AyL3vl7lK/onViuIrl/nl4RRBALS3OcSXzjQA5XFeTJXTksTLXD0ckAeNrNAsdAPmobB92sfAyPJPS/apYjsMS2cT4ADxs2oU5BPCnvtnpJSn4mt1l/kwFLjCjGGV88iF6CS59mJc0d6KHAWgK29enaDRSQwj/i+JDzi+mjpLfConM5I9aVvNp6am8XKF07R+8kn/GxUdTf4QTKp0AawydZ5pzqSUPxHOJdqlo+ptnPZ6DWi+XC1ALK2o1KqpnWNQM+4E6d8KaslFFFqO6KT0zRxn/8St921C4lNXM21q6gmrQfdpboae1/d8JxLbAMU32m+HqTWtRyVJpw/Md4h07mNm/sWMxY1j0hqRONG3h0pH1XQqZvenXUyCemrBvRbajurmuLYBoU7U6imMwgB75b7VfB7r8dSzXiEYAbGBriU1CUfv9JB6VNtdNGyYnaSDHjlulMzZVzjNpB8ywDWli3MZnA85RVnCYJ6hHy1uDgjGc16CLIYCHbRReDNKyw9vNdbBc5+izPYIVt9rHQRyEnbVnvyEfFRkripdsVzalbSuZh0cc0oMdEDTqRNph8= X-Microsoft-Exchange-Diagnostics: 1; HE1PR0802MB2556; 31:d5BO1lKvB4znHEjoJSwrgbF1tvJsrF8crqG0eRuWZDebRme+qTcTsPOKyIqLw1py2Il86OJSi38iH+rmiYC3lRfrCQI+h7xG/NzbDEae9Aug0u7Ya8bjSDSYbIbA82mK9KZ65ghHoA77yg25JQ9mbEDZBZfB80wsqDc3JExUV1W4YPDXeZ0s9ty91JZZzY2W7yOozFOZBQxEtdW7tFl8Ic1edLMUuNV73eHmPa/I9NN9Xor9kMSMOn0mzpvGBP5DNEqFcBQ+l5tXyLEjKeNzvXKE44QCPCTc4TUkd+u99iVxhJFZCuqy/XaWFtcSZgYeD0ecUDpcRr11vsypgQ3XZyQjEu5HmFvHjW0RDMCVAlT3w6jgGEO7YYPIaF8motapg1MrUZnh1XaqJEz31dCYOHosorqR5E/0WrtKRd5Q58YYBeHiYOafL4pbyGPAiuVkCncMAzd8JTuQjp6JQw1YQ51j+CuJ+LPd6SR207yxcjV1+dimBe1vDV74RubXbGUydvW4FV8WJ0hVrkSTjMlsCA2gp34xJ4rN0imPt+FAy6zlvRj5JVn7aIF+uGEn+fdZFDJRyVrZJaHm75p6rAhHdNcgUj276Y1fBShs1g2pecRrCJvKW0Tv0Awycvs/DQyhjPwNzd2W35I/oMviUwvfKYMLdvQ+lk/oKkMteYDa/f4= X-Microsoft-Exchange-Diagnostics: 1; HE1PR0802MB2556; 20:TLw3r3olPNFZWMsQtMl4bDgnS5A67B7U1RKB5Up3j4ra7DP+pEtHVIw1kk2H/ZjNw02zEQmJexeEYx1Ap4GBG9bhG8soSyeIb/AHXNMUJtNPKK3kQevpFGSrnaycnLsS+G5ypjHfTUkspwChcSrp3AAcNr/l9t1AfylZ3to822C1512vTRJIDU48pUDg5IgTLnYtqJWg4kMoCzfLWS2GDQQCLfT636lTm3xa85ekWDWM24KvcQimu5k9Nfzkms80scUikSR4Dtdqz8I4zUtTkq+IfvmihQsj/cidx+v1xsUCHK4PpKbOi8XrDFcc+76Z+f9coUVpTKhUg1i9MTkOrzs6BfPrXYhts7aYTZNkojLQhuH9CbgvWrUCeRXGLGYoHYgWMKyc8SGwH0iDoidsJTSrFP+Ep5EwncyoJ9tffeM= X-Exchange-Antispam-Report-Test: UriScan:(236129657087228)(167848164394848); X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(2017060910075)(5005006)(8121501046)(3002001)(100000703101)(100105400095)(10201501046)(93006095)(93001095)(6041248)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123558100)(20161123562025)(20161123560025)(20161123555025)(20161123564025)(6072148)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:HE1PR0802MB2556; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:HE1PR0802MB2556; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HE1PR0802MB2556; 4:Ty0N22FRIqtQNq7OpGoNgkJyGG1NBqwdDKQSUwnb?= =?us-ascii?Q?wdPMGRT2MsppFOU3dUhJA+UQo2W8SeLmL8aQax9beDySdxB8L0DPd3bAooH8?= =?us-ascii?Q?mTcS5NnMBxJz7Y/yuARP78n0DvUvngLZp77jDDlIe1U7Th4GTqDmHew85sYr?= =?us-ascii?Q?n8r+Oj+Q3eUUX/luMCtEUORk1dSSzoifweUBluNWG+tu81PNuJW7EMdnZOG/?= =?us-ascii?Q?rC1ZfvauByjtMZ9snvLHNanIS3RiXPYVhulG+WfHuWVvJ1Gr3m7psarvqcJd?= =?us-ascii?Q?DsW2RO6J5Q0IqojZK5Vq2BaeTEiRMkcmEUzMCDJU6pFgSywhshIs5RaXHpHK?= =?us-ascii?Q?n1mC4OsWFH4CstX584vrF7vaFD+ykpe+0kfk8xJ8Swf65dykFZk0fJp6DagM?= =?us-ascii?Q?IKqqk61+JnVmaqWmY7tL0Mw8cGa8kahR+LlVdZbEztuakGJgQdk4e5f7ZrTl?= =?us-ascii?Q?5NpxUcXsaKJLkFdGebDR/Yb1IPbIFOcNPrIfUJ+Il6v/i/G5TcYnLxaQznhK?= =?us-ascii?Q?BO0RDeNfUlwYjQu2pqja3M+36FKp7kdfyu0VZr0tXM5GJ8VE0ahl9jW73EpN?= =?us-ascii?Q?UO1TMuqA/pRq+IfPoicfSrzpvaj8AyIxwKTxw0rr6KdM76JNsWFVqg18xZNR?= =?us-ascii?Q?IZSIBaPjwK/9KxQODKOac70Zyi7bkiVGc1zASrFSg2hh0HT/vqT7HrN2wDc0?= =?us-ascii?Q?ZjARJD6EKC7WPUB4dNFhFKX+g6lWyDC5TWDWpppp0z098kU/H1pt5GfrMcT8?= =?us-ascii?Q?t1lexwLmURW15THPulJlcudKCMV1RToh5ObohOb6TNUzrel+vjXxHumQKs2Z?= =?us-ascii?Q?+Tz1T6CZyCzBV73bDMNqvUIXRJSz0ul5a/Vu6u3gpX6OgkCph7WO/0V+6Urg?= =?us-ascii?Q?etpSdmmcUn5ydFpm7QjTciZu8zC9uoWhrA2smp9KFjA4ekvajQcvbORBiZoq?= =?us-ascii?Q?UP4gP6trSjh0bxreWamd/QaPHRUnjEPLxOPF54VNGA6TXQwchd+3us2dZLjH?= =?us-ascii?Q?cUbr/1iKZXlO6H9ySJvdn5ESbu1y669ctQUzOqdrBLHAtTmcBwEAvB+x4v+a?= =?us-ascii?Q?tqux0RpZjK6aaRLOmkbBejvEWnp+nMIwoWO19xagv7QvxB6M4OaGPyWgGaer?= =?us-ascii?Q?Pgry31mRs5srvzDnKGL3tJiGjbBwes8/sP5musDnfRPOHDWLcDn7tD9P7u86?= =?us-ascii?Q?QKzDdfiq0586UY4615efCwQtBnlPP+JnM+kd3aDjKJtUaxs7gV5DCNCL+qU8?= =?us-ascii?Q?NSq0V+NFXQtVtf+cF6M=3D?= X-Forefront-PRVS: 0368E78B5B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(7370300001)(4630300001)(6009001)(39400400002)(39410400002)(39840400002)(39450400003)(6666003)(478600001)(6486002)(5003940100001)(3846002)(38730400002)(50466002)(6506006)(110136004)(53416004)(6116002)(107886003)(33646002)(48376002)(2950100002)(6512007)(4326008)(53936002)(7350300001)(189998001)(8676002)(47776003)(66066001)(5660300001)(1076002)(50986999)(76176999)(305945005)(42186005)(7736002)(81166006)(86362001)(25786009)(575784001)(50226002)(2906002)(36756003)(15760500002); DIR:OUT; SFP:1102; SCL:1; SRVR:HE1PR0802MB2556; H:pavelb-Z68P-DS3.sw.ru; FPR:; SPF:None; MLV:sfv; LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HE1PR0802MB2556; 23:KLImkieWrnpCPL/B75ZkE2KcSB2vrVRrMLXuNqw?= =?us-ascii?Q?vyFEGwmWL7suv9SlZuvGU4yqKpNUIrSaZFVnSVyE2GeR4AajmCzceJBU8GfT?= =?us-ascii?Q?Nv80cM1W1d9+zfcr/Swlpuzo7GUlZu4lgCkFH8kKxLQX5wZJhdOgkOkeqlVq?= =?us-ascii?Q?dbq5ah9V7KzMSH9mq47xd4dwUbDwer5di4G4RdIhp81x+g+sRMNt6P+V0A+w?= =?us-ascii?Q?up82OeHYvqizs5FfHE/Dqwj7ME4NnR1rdewTeau70ohr7vbRv1PQFvfutNWV?= =?us-ascii?Q?owrZYJBByfwRHr+fwFBz3pB5qjg7RgJw8iz+AO6WIWKGixxCuRc/WSxBZrV3?= =?us-ascii?Q?B6vmQDlgvM0aGjYnUYUxDRXYuvx+g8Qk7H489TTclhjNJyy2/4Zllyq9JfwT?= =?us-ascii?Q?kE5otdhOyq2JRmODX/2nDALWlTMbXYDBPkVbuGKhtsIBsdXgMlcaDbZco5vq?= =?us-ascii?Q?wXrC75fXU9yCDkDZH6NrNmgoHfRmcY1q9n3JklPVJ3yUvZMJ/ZNTOIwmqOQ7?= =?us-ascii?Q?pjEArvGgd4FlzYkM+jyQ/joYme9gM6kg/X9I5txYJFVn4+TzmfsdY9e3k9HA?= =?us-ascii?Q?rSC7Hfm3nISHdWZfLKLCw1RChkP9HxRSFcBjV1HMrgUCZeWoL3Xkr/3saeiC?= =?us-ascii?Q?G92ujcGb33GEw19fPxd8PvDSZA7FpgOBuxpbX0CWUxvNLOAWzE7AYG2kGidc?= =?us-ascii?Q?0uJ6yD3AReUTdRP84AKrjXG76IHsrTFKETvG5dCOhRGaZFAF/YrvMXHfkAFg?= =?us-ascii?Q?UxAIy6ODywpChDrfGt+1PHtx9xeR1WuAIU7jJWP0lhZd35Xwtxdmhf1G1p7w?= =?us-ascii?Q?cHKO6jxqSrYDuR6zE48LroU5vDiUWQacODi1CbiqbYd/X7w/Ve1s8WNrqcDd?= =?us-ascii?Q?Y650NzGe1DPf8Tt+O5ERrSmztvr6Wir1jaQxt2MIhxY+82ePXs4BCG/PxJ0d?= =?us-ascii?Q?dIgu1wrrn2Z3m88467/fNg6Hx0/dliJNPW9iHv5iRfN4YlkzCeoDGxopNmst?= =?us-ascii?Q?8TCazU/b87+zKc5RwP2es1Ht3R0aoE2JcgzsmLzLVzr+t75zbJ80xbUR9uvP?= =?us-ascii?Q?1DcZf53i7CRNkE37sWQnFKnJHWA3tU2IEPKsc9Y2PbxDFPouYW5wV6wfkbsh?= =?us-ascii?Q?xDLu5AZ3oZIUlogcdO8734HrLMOKq7gSH?= X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HE1PR0802MB2556; 6:u6MVQLlkVWf8iXREyVhM7Bx4jc/p1/RDqFCpydD0?= =?us-ascii?Q?GcV9KaBTObh7mPgkovlkZ2m1D11lRtAFs3xE0CgAO23kcyosO54xLnxvQuMw?= =?us-ascii?Q?LpMcPK37/4IGeSSz+P6ChggtJmBnFGjuWofrjSwjvncd7jRggDRj0v6JMbKH?= =?us-ascii?Q?DPubRztrAj+yGSagN6pWwWmhquDrOM2Tj59sGGvwGVwiwWZgRPk8qfM85svW?= =?us-ascii?Q?mM9I4voTEQqMMYglH055iFy+YEG9NMybnEhpBxx969GbkQ31aUdeAkEFawec?= =?us-ascii?Q?o8cOucxEGP5gbJYroxS1q/bk4PV75nKSsXgartGYbuBrZ/FiGICoaQheQNXd?= =?us-ascii?Q?UYWwqjoKnlVmfWZpQFTuNiLBmxrwX0HSg6tjvfB/hAZb8kDLW5rZ8dUQJtHE?= =?us-ascii?Q?O+QxbQLnkVOldwxvAbgkeeA+KgMuRocofOfeb18gRORfVLF4GJ+rq1EhARD1?= =?us-ascii?Q?bI0zLYnU+G3+5Kk6BM/hMhaR01iGvON7QFhZBY+tITHX+zuuLgvR4TlCUxeX?= =?us-ascii?Q?8Ld48Bq7VQxbQcaMVv7pr6yNYE4ODgMMVa5YACnAV3Z5fc8LvMAuXomvdJR1?= =?us-ascii?Q?JPAycocQlrvp61b9mNgd+Bkda7hlWn0Y6iqQCVPBaSAoD+clv+KUBxRvJHYF?= =?us-ascii?Q?FvuJTjQwdqVhgBsCWDt5qx6fQhBg+OJuOzCkyS8fBIAxoHtJq7O0wINAppW2?= =?us-ascii?Q?yOum385vrY8dIJ+4NWDCsR6fbKy9IdpXncsPqr23XaQQeixn0wUbYpEwdYdn?= =?us-ascii?Q?jaOc3D12XFhPVBcwvdOKB6e1NRGlIjgrnxwA5rFYiBiXh1kxIrfOOa8RhrN3?= =?us-ascii?Q?g/HdnKz6/lGpQYyRt6Qjn9ASiugJsqDOHuOMF8pBd9ZN0EQu6A5FCr75tPJi?= =?us-ascii?Q?n+z6AWkQr9AFMz/TDiqUgBUABgk3If2JTJtDUTxTPqZPocAx10VuQl+3pEJq?= =?us-ascii?Q?KX0PX7/klnH4fVjiEYBuJIXq5GiBB+LhnlMzxcbsaZHb/bw46UwqFbbB1ejY?= =?us-ascii?Q?5xQ=3D?= X-Microsoft-Exchange-Diagnostics: 1; HE1PR0802MB2556; 5:JqFAfGrf5KVVXO2d41JNzEn+qIHwKYq1Tyc6LOfA+sQZ1vCKvSDBzOD5ltiss2VcnAGZaRyrw9HC0zezH5NOmImDZCxtWqWVreTy1eP2PJDcgtk6PdZQPVEFKT0OoXcPnEXQ+voEg0VfEi46cYWJr74ileXZGFRKKMok8soiH5Zvvt8d7hWTL4dg/iF+BlrBunVid85iYsdJWBFIXJqcquAq7r/bzlaJVDpCJhUy8/vobv7y45YPPcOVEQUsWyTy9g2Bnrcx+/a7SDtc+uyU174ry9RINAk3CtCxhuHVEYQnSfUYkp+0Tfw/o3O/msN3j6YKXx3SNmkgyLihRzMAIf9zKn6ygfJhrjIF4+kkwS/dp6A1zvUW1gVAdOM8uPyJUKy5KgNjufa4J4KJwRKLzLtxeIlFyZUAtj6OxQNRy8V0YQzn1wOvcY669fzoRkNN4etOXzOAP89I8GkjUE1LPFCK9sFIKcZkvBf8SxVu5T+y2nHkyF2ybq6QwdB/XSSB; 24:kIitdy1SMVrdR2+OZQctCUOXIXNzteWhxXjBh6LrvfdSxLNjwmskAqCPObWR58IIHcNJpLKIOnTO2jZFNTOOlGG5C6pDu/XL0+FQjVjaM6k= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; HE1PR0802MB2556; 7:GbuMPnrocWTMoCYsFD16hMQlBpN1wuecBtyQME6e5NE+HGbemMvXvpnVDso3gNeZz/dcygPHcXVo5WUtZz5iSst+WcJLqz9m8V1anhwf0DpabKJ4qCiZEjQAPGrZbKvNr+LsIgTAA8bhJo/W1CfKz3NGBd/hGt721kZyASeAfLPAgYrIvrJoR4S0I1z36O81EcJ7n8GVU98ZZkLo0VaSEu/AjrdjfEdkhzlIPqJfXvXhrzEtzGm7UG/4ggC6zdYbzHB1hTzltXFd4icbwsKHFCqZgfuNQqlzFVbQDj3UQQC0XGiknurWJvS/wFD0N1LiaD/FOmxqs+HL60ERIwFsfoVs9pD0Q+nA+6A38GX2RgjYgZHnPr8lFjvIa4wn9OV1+87ia+unlWeTNTVX1RdV8GqNKUHvPgyJjNFzh9ZEUVKYlD30aiNBIIj6j9wwRY88XMOs2fOlZjiP4GJvVHmRM0TtRR9rS7Sjy0nil9pw1UToCr1cXofWtL9/DrOII3l4adiuU5VC1R+i8GfDmTXl8KMRb1b08DfYnVnh7HYGVlZHUZRvv+OLshcBRrNQuRLcbOl6iSB/eqd60HqABdWBborjculhw9YsSu0IzCrPMgGANQfq+0DRG8VYQ6I0UvtdAcPn8LBbrmPKoTbglBQOEVAMKKYAILWOopHCEO4zavZ/1MQoHhS4zifT9rJTnYYi9MfBa58B5vbxylom7xOAOM77XRyAEGgJ6XpVWeUsSPuSprS0bhwEvdlb22nVsb62rdcJmZlVj2lyNTEe32ZMe+BDv/G5RaO6IMiGsIqlm1w= X-Microsoft-Exchange-Diagnostics: 1; HE1PR0802MB2556; 20:/D7XIH0u/NcOMqvZUega0ftlwdWjJdkseUVcpyKO6fnHrPWqA3slUNEzvWVwERD9U+bAVR7dgStZTjldw3XnuUUr69IdHYpoullnJf/rXDSoialk3CbtoJWHYv1yWmkaP37UNfVUAzeiYZyNN2Gp7sLrLOOAAM6FmKJ8Mk2tvMg= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Jul 2017 15:38:29.4565 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0802MB2556 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.2.115 Subject: [Qemu-devel] [PATCH v6 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 the cache with the data in the file. Signed-off-by: Pavel Butsykin Reviewed-by: Max Reitz --- block/qcow2-cache.c | 26 ++++++++++++++++++++++++++ block/qcow2-refcount.c | 20 ++++++++++++++++++-- block/qcow2.h | 3 +++ 3 files changed, 47 insertions(+), 2 deletions(-) diff --git a/block/qcow2-cache.c b/block/qcow2-cache.c index 1d25147392..75746a7f43 100644 --- a/block/qcow2-cache.c +++ b/block/qcow2-cache.c @@ -411,3 +411,29 @@ 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_is_table_offset(BlockDriverState *bs, Qcow2Cache *c, + uint64_t offset) +{ + int i; + + for (i =3D 0; i < c->size; i++) { + if (c->entries[i].offset =3D=3D offset) { + return qcow2_cache_get_table_addr(bs, c, i); + } + } + return NULL; +} + +void qcow2_cache_discard(BlockDriverState *bs, Qcow2Cache *c, void *table) +{ + int i =3D qcow2_cache_get_table_idx(bs, c, table); + + 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 c9b0dcb4f3..bbe5a2b2cc 100644 --- a/block/qcow2-refcount.c +++ b/block/qcow2-refcount.c @@ -861,8 +861,24 @@ 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]) { - update_refcount_discard(bs, cluster_offset, s->cluster_size); + if (refcount =3D=3D 0) { + void *table; + + table =3D qcow2_cache_is_table_offset(bs, s->refcount_block_ca= che, + offset); + if (table !=3D NULL) { + qcow2_cache_put(bs, s->refcount_block_cache, &refcount_blo= ck); + qcow2_cache_discard(bs, s->refcount_block_cache, table); + } + + table =3D qcow2_cache_is_table_offset(bs, s->l2_table_cache, o= ffset); + if (table !=3D NULL) { + qcow2_cache_discard(bs, s->l2_table_cache, table); + } + + if (s->discard_passthrough[type]) { + update_refcount_discard(bs, cluster_offset, s->cluster_siz= e); + } } } =20 diff --git a/block/qcow2.h b/block/qcow2.h index 96a8d43c17..52c374e9ed 100644 --- a/block/qcow2.h +++ b/block/qcow2.h @@ -649,6 +649,9 @@ 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_is_table_offset(BlockDriverState *bs, Qcow2Cache *c, + uint64_t offset); +void qcow2_cache_discard(BlockDriverState *bs, Qcow2Cache *c, void *table); =20 /* qcow2-bitmap.c functions */ int qcow2_check_bitmaps_refcounts(BlockDriverState *bs, BdrvCheckResult *r= es, --=20 2.13.0 From nobody Sat Apr 20 02:56:23 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.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 15000468684613.4198402894820674; Fri, 14 Jul 2017 08:41:08 -0700 (PDT) Received: from localhost ([::1]:38605 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dW2iD-0007Ce-T5 for importer@patchew.org; Fri, 14 Jul 2017 11:41:01 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:40409) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dW2fx-0004sw-2Q for qemu-devel@nongnu.org; Fri, 14 Jul 2017 11:38:42 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dW2fv-0004xL-ED for qemu-devel@nongnu.org; Fri, 14 Jul 2017 11:38:41 -0400 Received: from mail-eopbgr20115.outbound.protection.outlook.com ([40.107.2.115]:63125 helo=EUR02-VE1-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 1dW2fp-0004sQ-Os; Fri, 14 Jul 2017 11:38:34 -0400 Received: from pavelb-Z68P-DS3.sw.ru (195.214.232.6) by HE1PR0802MB2556.eurprd08.prod.outlook.com (2603:10a6:3:e1::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1240.13; Fri, 14 Jul 2017 15:38:31 +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=21U+9Q6lvnlVtrsGdI5lJiowqqzv59NIcNkbaKIG8e8=; b=TqY5DkQ/WTeDKJHzgXbtuvD43E2lOhg4ejCQaYBOQrFZQksywH+EQ/gaTkv7lNcQR5Rd4oKHVW8T36us1bWNRrOIxclu8c/Yi7hg5VojfZgHJq003V00j6AbNFBt4yAcQDRJZ6IcMpKWRT2lMP3ZqiTMzKvrPJ9+m9Ts4A5+FRw= 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: qemu-block@nongnu.org, qemu-devel@nongnu.org Date: Fri, 14 Jul 2017 18:37:48 +0300 Message-Id: <20170714153749.25132-4-pbutsykin@virtuozzo.com> X-Mailer: git-send-email 2.13.0 In-Reply-To: <20170714153749.25132-1-pbutsykin@virtuozzo.com> References: <20170714153749.25132-1-pbutsykin@virtuozzo.com> MIME-Version: 1.0 X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: DB6PR1001CA0027.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:4:55::13) To HE1PR0802MB2556.eurprd08.prod.outlook.com (2603:10a6:3:e1::21) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 26d048bb-91d6-41d6-1381-08d4cace61f5 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(300000503095)(300135400095)(201703131423075)(201703031133081)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095); SRVR:HE1PR0802MB2556; X-Microsoft-Exchange-Diagnostics: 1; HE1PR0802MB2556; 3:8KLafy8aXpsUCpu59blbfRo0XKWVEwvmu/Aywnrl0t9nDBnnk65Ig9A1xx8rf/sSi5Ec/e4P+keS+RHUtqyXIHQMeabaNLqj7zj8ALS7QPn1fIKjhuWVRNng1NZrtRNcooNh/oV+i1ncWPy3pX3l876Z81U6Qp3BOjnty3Be1C1ftAdiI4NrmFGOdIkdXp6LtUn8XBUpGYfcvBKLbF5EwbRWBNeWjNQ78ye3RCnmsYGxHUYiY4GMFh615c5ZQVNZkC/rm2XR64D+TifeLLFjEzR0lngCMhsvmB8xVQDocrDJbN+BqS0sWq1qJXI4k2XQXumVQ4PSaJvXhcj1Do88QsFUIbS1TU0DUG0Nbo2GziSD2bxvXPyf/h38nhGL3LYdnKGTkJFxp5N4KOFLoh4lXi+sXpVh4kK0pig40eYP1nyPYtTHprLCoWKNuJIto8Q/ZTq6674duE+lLJpoj8oG5sUtx+LGqMwfHUWMIaEfm5XvDsDRAXWWUNaiCVfmqDI252Zdt1QFooj9XUAGIz7PGGyzWlxJrsA2TMsvQdra2iaPuTUbRv11NmO6+8CiXg4wsMVfjIdd5GXDeV+d7qn1p1VGsnwfzRKRYOr7n7/Dgk64OvF3zcNVDqMtCxoy0umJzBAbalkpR0VXjE1PYipeR+D6CoIbSkv3hximNzy/VnLbkfIEsVI3pdUsKzeYBWqT6zExipjpb6UbHMSptM+s8w/2B8NVVTCFJLA/9jE9EII= X-MS-TrafficTypeDiagnostic: HE1PR0802MB2556: X-Microsoft-Exchange-Diagnostics: 1; HE1PR0802MB2556; 25:HcTOsXBvaeHO3gHLsAvwqJ8hyllBJ/dwvbkejiTmN0dYPfp+T6Aajoc4HxwgH9RNhjGxXSKNq1jLJvWxM7G9Zk8Bv1bAeclUMyjf7mRTOO0l56nhabLh/RDBv5sODkFbsae5HLVbY+t9qeFr0cfj3VM/BUIIlnv1I1rxFEY5Zik5qQXSlFTxVKaVxbukWz6VgFgoeOhKB+hlmR0zcDRJPYVOHxh3KtS9aOTUbZeV+PRyE++aPMzbEth+TeW5dnhw6YExn2n3jh/DnB1KFTmbp2x7plfWFIVduO4afgC3w0YJBcQY7NPOQdgfd6fz2cuTUbWCX2BCxCohfqQaPDegbXA7EbIDo3+WzQ88PDez9/npS5xFkOrd4Wf5SiAJPMcM0L9tg0GRTfC+H6yncRQrgJNDd6Wsbc9/C9jnZyK6rWapwVhyjtHtBIIEJ1F26XeN78S3NiSWgm3XGsxi9IWM/FRKTG2wcep+BeVKsuDXba3FzmhiinYnDI6RJTkfK0g9K3VMw9JWRvkvggJ1/5tHx+zPrw6ZMvLMa9VZVpxH54PrnL4fATuv6bfIZZTmvi+NfgkyR5+VnbBXLQpAejF+hUXqY8rGrNJjRIQo8II16hP06vEU5b5CDecz2IIlO3SOE4DhJa5hVmpOhUOEzUMM7AV2bbYxszx337InVWw3qezutL4Q7JsUScETgc7WmuwgUP/rV0OG/QsIFtGlCeYEhbFnqjTkb9wCwbsdHUEJE6Lav+z9ogEwQe1N4OJOPTl2Qr1WSKPh0trvIqdRFrnrHhO2z8bwmckXNGyR3IQEQEXzwkywxFVnxwfC/TXQkkN9YKm824GBHgEYRkuUqNHtRG8W0Q4jndjEvGBMCxHwzW9VaaHffZzrzlgOcwx/espZ1JYvbrdwDO/5WM2ybdLQZZNEFCc++VtORhiQRJ4Q7lM= X-Microsoft-Exchange-Diagnostics: 1; HE1PR0802MB2556; 31:BgkcccOXvzxWoAtZYjCgcuX9Y5HdeFVL3HOcWKTu3j5SrCR65z8wPHMXC10bV8IoZG8agclqHG309vasfghZr8MWqjAn1xMJXYpLeMpQ0EzBzUaV+z5L55oSYxqtDGopSAsnhdPL6hWwEP088rYGMZ+79EbFXH99e3zK/RM/eFcE53scBMrxtkrzxdSLOdnj4jrkJkGu7FHXAyz9h/oNGlkXCslsXPyS0ieGD03KUSbve18UQcG7zoEmLnAY5dN57qrgYUCC63aLvlvBKOVUOzZ2g+IQLTEOIjGbWIoqBEO6N1gJxPqDsHfMVjIgBn6j2eOn79dSdip76D+mtPoqugczxVmthA2cXUeEvb/Ncitzelshs5YaHfxdBzsHErwYdUKDMUU/QJx0IlQC1uplodUXxKgZPzv2VkyNeRxTnMOhYU3r1DhNjJydYtnJeO59kBhhiTyZQG7ROxbU4O97eflGu3XNVcmMvLgm6Bl4pRuWMOuhqRO3eD2DZiZ1yjUfikegL+BlgBdSVjM62eYRVs4Wymctf5jUEmkMpLoZtdGGTbdO3YQsZglZBXMRnrusJlMboOaMF6PFggd2fKG9WoyerJegl7QWD9iSgGKzvHjwgsd20bYAklHEqkpRN/ki00DlLgTxh3B9fbUChrQGXr5YymvZkJHpYVp6ADtUkmE= X-Microsoft-Exchange-Diagnostics: 1; HE1PR0802MB2556; 20:yamf6bFslhiJdZIwe6MZMkRWB8HJ/s9DdbO47CSkEz3/4U1AgCJRIrACwDctqYprhV+73RqB0izDSHZs1E1atKzhZ2RyGL5Qgcg3oBJnJjCXYMpehiau9dHyde4i3/c99BWfF9zBzOvIzAAeHzYutHk2V77lFVwkDwGM0jXAPnVi3N36eRi3mNHjPs0dN5gwlUlNWJDESRopT2/Ff2yhtKshZcmPsUlyM4agY4wWuzPcTD8iWMUgq7ZbyEmWsHyJ2/tesZYUu0rEmLnu2LGOhwSdq2lW53rp1RD6ODtuoUUyqhAz1b2mHK0hCTNllTfpOLDyU04eJkS/Z2Q5NIL2tgHtvEIa0xOHvJXSjlSmBN9V95CuDU0ewc1K2ZfXrN+kOB2wE1zIIK5xJqSsD2OUptVeiGZqQSBv27lVwjbQhCU= X-Exchange-Antispam-Report-Test: UriScan:(133145235818549)(236129657087228)(148574349560750)(167848164394848); X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(2017060910075)(5005006)(8121501046)(3002001)(100000703101)(100105400095)(10201501046)(93006095)(93001095)(6041248)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123558100)(20161123562025)(20161123560025)(20161123555025)(20161123564025)(6072148)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:HE1PR0802MB2556; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:HE1PR0802MB2556; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HE1PR0802MB2556; 4:5C972EVfmKb5+/jUil+lg5wcGBtLvOJmeiY4qtQw?= =?us-ascii?Q?/2KhM1Edu1Vk2Rh6siUJ6ZaoifyXpFgwi+gxZTNkbcF6PMvZ5iLQVVF5Vvlb?= =?us-ascii?Q?I6nDSrou406PNWi5Lw8eVBQZUGqL3k2lhT2ZPyTs0wefbJnAb+N+syeYdmX0?= =?us-ascii?Q?p0cjJIJZ1mR3avxTIQ9oTjiwTNLzTWKuz1uM7zpoVbrurgF1FOsYy8mNx+zV?= =?us-ascii?Q?9km26vnrto3oLMk0WAa47HPfWCr6s1rwvuVJV+EiCYo7bK2ByvAwcKUkuYTt?= =?us-ascii?Q?0uMmM9CnA2CZKHLQ6bvmtjkyYrIdpQjPsX4jHaZ7FbtfB3QKHQQBMy+YVYlV?= =?us-ascii?Q?VWaYpQA7S+wwh3kg9I0TFCUher//oJ7iYPIsNTcmsebsM3b+lT8SRuFexPY2?= =?us-ascii?Q?FZCGE9E0LMJ6wXBmGVIJ3jrq+jPQzAUXzhLOtycDiuOpvmRqiwuWCjqQClnY?= =?us-ascii?Q?pSkbrevzJi0dZ55jiLLFQMhAdks9/2M35qVbyFtEVt90pv//y45E7lUZRCVw?= =?us-ascii?Q?HKTgj+XQigCPzl/fIPplH0TquW1c9ugVqLzxA1zv3t8LsGbFLaCYZloy+XYT?= =?us-ascii?Q?uGqdsbOHzZWbYrury0XXnIGGZCgef2El/IkHVHt0xZHa9ZPxG+LhAaGMos94?= =?us-ascii?Q?5LihJ37FKqpK4cd0B2lhxkUgk1eSodDyI5Y1j+aDrbdXlWXSCa61ReInj+6l?= =?us-ascii?Q?Hte/LikuptqS6YKCeda0znreX+szV65kCN0D6jE5EO1wsVqtPQvGjev80eeI?= =?us-ascii?Q?BAKktosEr5o1ZasSOwCqPgIut6BKWtgFS6qQsfznOGKlwTFhZtKSNjanXqlA?= =?us-ascii?Q?ZjVqazjJjC+v59oBxcxRHZYmE23udD2gdnhQ9Az4I+n5BLXeSFu6CO0J7riS?= =?us-ascii?Q?BQ+QgAyklITz5CR4AXBYqbKTsabKiaNEL73rnazlOwOBHoPh1ING3oLYxPrQ?= =?us-ascii?Q?/zDCfThAz7sXCoMPbirZZUdmfkuuc6mUv7sfAK+QuAK++fWWNd8hO30ne5yP?= =?us-ascii?Q?r4KQmwC50gSPJWoZBfka2+AK52JKsHnZOXEWLvjz+rgtd4XsHYTCVcw+DYr+?= =?us-ascii?Q?KFJ6mCRbt8SMjCddMY/ujKrDWdr1jmgOYuU9nRIdrHn12L8xAs/wd505xeL+?= =?us-ascii?Q?TAUiwjDqODljQqiEZA+TL67IV2pqDfSvHxpHTLa9fRFK/+ASbu/sbLvGGjlG?= =?us-ascii?Q?gWi0LlI/Da20Jhh1upYR9aj+/hm1ys7Bv91U1B+82GRqNv1FrDTV/gTaFlD9?= =?us-ascii?Q?iJHst8Anx8vUz9eZYc9M+MwAOOcf8I5xvAAIfjzbKfM7r9XEDmAjC/JR89Ok?= =?us-ascii?Q?3t7JJfKKc0PBdivO/6HJzwvq5pnY0bM/9h7ri0CVyDCg?= X-Forefront-PRVS: 0368E78B5B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(7370300001)(4630300001)(6009001)(39400400002)(39410400002)(39840400002)(39450400003)(6666003)(478600001)(6486002)(5003940100001)(3846002)(38730400002)(50466002)(6506006)(110136004)(53416004)(6116002)(107886003)(33646002)(48376002)(2950100002)(6512007)(4326008)(53936002)(7350300001)(189998001)(8676002)(47776003)(66066001)(5660300001)(1076002)(50986999)(76176999)(305945005)(42186005)(7736002)(81166006)(86362001)(25786009)(50226002)(2906002)(36756003); DIR:OUT; SFP:1102; SCL:1; SRVR:HE1PR0802MB2556; H:pavelb-Z68P-DS3.sw.ru; FPR:; SPF:None; MLV:sfv; LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HE1PR0802MB2556; 23:MJ3OgFFDqKNbGW3lesfuntxpu/nhObj46t05aAz?= =?us-ascii?Q?hkE9vvn96YjXDqnmTQn1hJuzyahqKHypmEFgJuyQDQHRVW9mUcBGQFyNdlPC?= =?us-ascii?Q?2mg3LLcnFVktuXtE1dhac4gcw9ThR/+l9kyvCA8C6GVuyIxbIpDOWqidiLUA?= =?us-ascii?Q?cUZ/i9tAAO+Acsb3GIWQUtTFXEnde+7dwxW5J4jSEwi5g1aluNNo+Vjg26Hr?= =?us-ascii?Q?M0fZKfccL8vL6vzp9SaOrh+4vuu46Wd7/itmmjIhFjkiw84jalcTcFAWljIo?= =?us-ascii?Q?7KV19+TGDO4UoUuPQslL5nX7/LpRa6Oj35vSq5QjLHYb2Q0hZSGcPYZ3cwGE?= =?us-ascii?Q?v+snWIkKc87ZDW4LqzMxulg3x00B4WgDZDlvJ8V1Emx0671nQ/6RunBV7se3?= =?us-ascii?Q?5KXxlDl/YEKKsnPBBpyPrvXbdH5a8+wKqroxRozN5Ij2i2Z7rBzPg9R0yTe8?= =?us-ascii?Q?FgAP/kMp8dVw9y4DmfXZqfKIzoxnPRnv7qi5V/Owxiy8qBaIcHMv16eH13oh?= =?us-ascii?Q?WRjFjsBDVbZiy/V0g+9BkTzyuPSaLfvGPT6k6NO/XLGmSmltwp8M89GXrlDL?= =?us-ascii?Q?agl1deJzYrDiCExfpk8W9Q7ujVn7egJu1FAjne2RLfHfnUZNEg/Z3M0VRyZr?= =?us-ascii?Q?ck63o0QqcM1eTr1SImMhbNNnanhMAQE436bM50EVrECyoLdG16OmOgNIQQIG?= =?us-ascii?Q?1vfwQTPU/lMp2qVprt6ylZHP4QeIA1YQz2XbpaDShqKWf1ldGeoMf/1+lFwc?= =?us-ascii?Q?uOQb1a+qU0zTK0EhNyWGy0Whg0wP2YdoTuHSm7lpcXlN2ISA5Dh7FQAJDoSW?= =?us-ascii?Q?bs9VDp//lEMD9lI9i8ODBf+MujtyhJvmoUVrLLr3L1Nwice5/yu79zAJaXLW?= =?us-ascii?Q?VXrY+sPKran1GEnfhWj951QaJyAfTl0s+5jkbDiI33vHNq01lhOfn7ViT5+l?= =?us-ascii?Q?2Ahx7a14az3q7c5A9br9K8Qbo1K8WR3Fn2z21rjM/0iQTc64Trc0O1autyhm?= =?us-ascii?Q?r+5Wpn3XhvJ0fOsgaEo5RtGkMW4HjtVp+HNfT5Ok7WarQrlYle78/LzVbkB8?= =?us-ascii?Q?g/tww+IryLZ4wIlYGWwMRDyMeOar9L6fi0VYEfWp3JXvA8yosZQ=3D=3D?= X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HE1PR0802MB2556; 6:lafqR6lZOPxfv/fjIs1TBtH0gQPJFoOxCg8ifIza?= =?us-ascii?Q?1AA2VW1yGAt50pHxpLOohDUVC1S9THhPJ3ud9yFRpPXFIrXg2FT5h4gh20dx?= =?us-ascii?Q?x28pTTpQdRZXx/Js7a1CW5cRX0X32BTv2Jw506w775yGMffWm5EFonWu7ybi?= =?us-ascii?Q?d3vHfksVAaGjJ18OB0p1qnrYaCiMIEj1Z5LX2XYz7ufMlNz9V0rw2TYbCc/E?= =?us-ascii?Q?LF472/bJyGqrzdUs8gbC2iqcWMewSkJ+ZjwpW5YWQ2DeT36NwQ+eESHzCjh1?= =?us-ascii?Q?j8z9HEyt4z0K89ZO93/pvZ15Rr7PfDQQ9Zls/E33fnKIx6o5MSwFlwyHtcRR?= =?us-ascii?Q?nl+8we3Cwmona+CyVbBm8mqPHCZilwGVz+oyEe6hmqh6Kaj/XvPel1SSDkYc?= =?us-ascii?Q?mMyfiO6PolELxnvs8rF/GElw9cZWki6jdBhl10UexqcVStObopREAsiEw/a2?= =?us-ascii?Q?LoilKds/WpDOuKkGqBLYKQBMABnP+1j2Di/5HqX7kJKP/eysId8zc3MxImir?= =?us-ascii?Q?R20QDCPJeqTrMjVDXWVvkH1VAh9dJgUUuStl7h3r+w704MHM9sifkdH0XdQ8?= =?us-ascii?Q?9/B5t/sSEzviI+/msQbGFsMub8JyqzgWA2t1dSsjdzBC5cSG/Lm0iMy7flKi?= =?us-ascii?Q?Wi36lOwKoBobFcmoSQmfoGdrqcgRcs1z+/LB4XkBKRkWjP+k8Tqox056UFp+?= =?us-ascii?Q?UGJPQkrIGtI/JnXJzDAmsJlFJaZ3er6o5YpLfO4Kok7YK5j/fZ1LafAbP/fd?= =?us-ascii?Q?5pMYLfkphsNdKMogOOigBz9ECYcy5ZHkXCMA4UpXtZPRZZr/gEqidAYeQq6D?= =?us-ascii?Q?9JUbxOQDizT7NnjmT6eyMFXSpd3ATtpwV5kY0fVvouUmvKz7oR343SjozfQh?= =?us-ascii?Q?pewTzrLUliB/nNhNZNUfu0dz4hC9agadm5f/TXgNKHa6UX8VEkVXL/m5o8/C?= =?us-ascii?Q?ymAurgYpIfqoy+3sRZsr1mYpvqbxZExm5EG7AG7mWhRUfd+tIUV27UNTZMl6?= =?us-ascii?Q?K1A=3D?= X-Microsoft-Exchange-Diagnostics: 1; HE1PR0802MB2556; 5:Fd7+FuwLDWdysoLxhDE4YuKzIVeq4qO4xc7rpsiFXUAH/aCT/D8nzzHi4FNgaznpLl5tAZVsXKSWCEO2ormgL+OkigQGj8WmSiBQWDaCcQ1y4lxJnXth5siE4ypmVCdE7O1FX5Drdaty8ma2xhmV3pJUPVeDkOfHlvfRdkaiMLPXnxMQrfrK3aa9QJva9NiomgAYR8UsjskmaaJf0mbWANjcSDnDkLMUO7vurdfYirk7SADUw0OVes8h9C0AZMQU0mWF0QnnOaIlSIHEvN+ExnszKwBDRACkfDerJjW7pJRGC+6yRwbngg5+d12pMSajoqcehX1iqo9Ju8L9iUtlBhjxRqCBDzzpixrs5WJadE9PZUKDfpau8mtCHmihu6MOIGC95nGWmPdhF7AdyPZGw4Kw/TJBaOCRO5zPqXmvxYSuBvyNZbl/FX/tljmdFR6Ra2BqldMNQf99vZ96b8yIFilDqRQ0fqWCYZQfrLUCjn8oStAsoWz5cwa7V/Nt/xoY; 24:zUiBtAeDzcbVdZN52BoehxOUu4rSHrOF0FWMxE1YGpsD0y2p03SJQcmtyq+XnxvOwhl9rUPOzBgL538TDtSEN/HnIWCBKVeKw0VoH1e3HhI= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; HE1PR0802MB2556; 7:Fr0qhtxW8f7dqC0LKNrce1TivX4d1OCHdcaBzkVbnISNvUARx88H8zseC0LmBrBQzVj1tden/PiX8vQf7hZYBzOWmqWrnD5lrWEflTCLKat/LpY0JRnjrXn5s+e839X1LWQNjovsJpEAubFil2RnUc2PxClxW4MPpFIk+PUBglKNWTto92gI6t0R/E1W0N20S3ijZ8dPzc0yYIbHmC47tVwkP+bDajvskqhZDyVdR6gihkALXKnWKykPiygDHT/YI2IHue50Yvak4sUXh7NBwiUOv9pZIXPUEqYgg3193GEs4SKkAzbDo2yzli9pb6UMQcTAW2dUSC1RbRQa/xA+car5jbWDXg3cB2EoAW3naPSFjnhrhTDAI4gX2a7pqBYQEPG/NgCPRpL7LF0Pv3RCeVUoXrZNJsEoVJ0p1I5Bur83+cT8NyX9W7bA8qXnLhnPlYaHcJqEH/b1FT7EOL5yp55ArKLGl3538DM1uO2Es3A+stC5wrPfx+e6jhrmOUsnl1pbNGJyqywh3HOuhqLlGP3md4IQnLEe814bTHBpecKUIuDoo6bXVLdrkUw7/TpFxOtUfoYZSpCxf1BEEV5ZU6KKz/we/9zxNv2Lwhrd9KSymQJ2MhpoeS84khunTzhet/mYlJgQWmETYhoHXogOEqqX5jkZjg575vq5OqHEMutgFA0PjBhyErsUEaQh5st4nxbX8vokdZj5ehAg+9WPIT+scpwS9b9B1rlYwYlienGOcKhdpUC4lPYFg3W+7fKHtlMxNemSi6++OKUcNpRNMZuurTpaWKeTcFSqPOwJgrQ= X-Microsoft-Exchange-Diagnostics: 1; HE1PR0802MB2556; 20:4kpBFOiQFoPjr/3iE2Z1va6AeISDvrsX2OC/SDLICTmtkFHcc4/k6b5oCrn6XMSm9YOOV64ffufXYjqyxSI90skx/+eNmbXSR+I8YNIzwzUuu094xzVWuT6bm/s+yWq31XzGH5whKbm15C6uI08N82B7StSd34xsMj5PNAimfK4= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Jul 2017 15:38:31.0368 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0802MB2556 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.2.115 Subject: [Qemu-devel] [PATCH v6 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 Reviewed-by: Max Reitz --- block/qcow2-cluster.c | 50 +++++++++++++++++++++ block/qcow2-refcount.c | 120 +++++++++++++++++++++++++++++++++++++++++++++= ++++ block/qcow2.c | 43 ++++++++++++++---- block/qcow2.h | 14 ++++++ qapi/block-core.json | 3 +- 5 files changed, 220 insertions(+), 10 deletions(-) diff --git a/block/qcow2-cluster.c b/block/qcow2-cluster.c index f06c08f64c..405bc2e7af 100644 --- a/block/qcow2-cluster.c +++ b/block/qcow2-cluster.c @@ -32,6 +32,56 @@ #include "qemu/bswap.h" #include "trace.h" =20 +int qcow2_shrink_l1_table(BlockDriverState *bs, uint64_t exact_size) +{ + BDRVQcow2State *s =3D bs->opaque; + int new_l1_size, i, ret; + + if (exact_size >=3D s->l1_size) { + return 0; + } + + new_l1_size =3D exact_size; + +#ifdef DEBUG_ALLOC2 + fprintf(stderr, "shrink l1_table from %d to %d\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 + + new_l1_size * sizeof(uint64_t), + (s->l1_size - new_l1_size) * sizeof(uint64_t)= , 0); + if (ret < 0) { + goto fail; + } + + ret =3D bdrv_flush(bs->file->bs); + if (ret < 0) { + goto fail; + } + + 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->cluster_size, QCOW2_DISCARD_ALWAYS); + s->l1_table[i] =3D 0; + } + return 0; + +fail: + /* + * If the write in the l1_table failed the image may contain partially + * overwritten the l1_table. In this case would be better to clear the + * l1_table in memory to avoid possible image corruption. + */ + memset(s->l1_table + exact_size, 0, + (s->l1_size - new_l1_size) * sizeof(uint64_t)); + return ret; +} + 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 bbe5a2b2cc..6f7c3132c6 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, @@ -3061,3 +3062,122 @@ done: qemu_vfree(new_refblock); return ret; } + +static int qcow2_discard_refcount_block(BlockDriverState *bs, + uint64_t discard_block_offs) +{ + BDRVQcow2State *s =3D bs->opaque; + uint64_t refblock_offs =3D get_refblock_offset(s, discard_block_offs); + uint64_t cluster_index =3D discard_block_offs >> s->cluster_bits; + uint32_t block_index =3D cluster_index & (s->refcount_block_size - 1); + void *refblock; + int ret; + + assert(discard_block_offs !=3D 0); + + ret =3D qcow2_cache_get(bs, s->refcount_block_cache, refblock_offs, + &refblock); + if (ret < 0) { + return ret; + } + + if (s->get_refcount(refblock, block_index) !=3D 1) { + qcow2_signal_corruption(bs, true, -1, -1, "Invalid refcount:" + " refblock offset %#" PRIx64 + ", reftable index %u" + ", block offset %#" PRIx64 + ", refcount %#" PRIx64, + refblock_offs, + offset_to_reftable_index(s, discard_block_= offs), + discard_block_offs, + s->get_refcount(refblock, block_index)); + qcow2_cache_put(bs, s->refcount_block_cache, &refblock); + return -EINVAL; + } + s->set_refcount(refblock, block_index, 0); + + qcow2_cache_entry_mark_dirty(bs, s->refcount_block_cache, refblock); + + qcow2_cache_put(bs, s->refcount_block_cache, &refblock); + + if (cluster_index < s->free_cluster_index) { + s->free_cluster_index =3D cluster_index; + } + + refblock =3D qcow2_cache_is_table_offset(bs, s->refcount_block_cache, + discard_block_offs); + if (refblock) { + /* discard refblock from the cache if refblock is cached */ + qcow2_cache_discard(bs, s->refcount_block_cache, refblock); + } + update_refcount_discard(bs, discard_block_offs, s->cluster_size); + + return 0; +} + +int qcow2_shrink_reftable(BlockDriverState *bs) +{ + BDRVQcow2State *s =3D bs->opaque; + uint64_t *reftable_tmp =3D + g_malloc(s->refcount_table_size * sizeof(uint64_t)); + int i, 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) { + 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 offset_to_reftable_index(s, refblock_offs)) { + uint64_t block_index =3D (refblock_offs >> s->cluster_bits) & + (s->refcount_block_size - 1); + uint64_t refcount =3D s->get_refcount(refblock, block_index); + + s->set_refcount(refblock, block_index, 0); + + unused_block =3D buffer_is_zero(refblock, s->cluster_size); + + s->set_refcount(refblock, block_index, refcount); + } else { + unused_block =3D buffer_is_zero(refblock, s->cluster_size); + } + 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, + s->refcount_table_size * sizeof(uint64_t)); + /* + * If the write in the reftable failed the image may contain partially + * overwritten the reftable. In this case would be better to clear the + * reftable in memory to avoid possible image corruption. + */ + for (i =3D 0; i < s->refcount_table_size; i++) { + if (s->refcount_table[i] && !reftable_tmp[i]) { + if (ret =3D=3D 0) { + ret =3D qcow2_discard_refcount_block(bs, s->refcount_table= [i] & + REFT_OFFSET_MASK); + } + s->refcount_table[i] =3D 0; + } + } + + if (!s->cache_discards) { + qcow2_process_discards(bs, ret); + } + +out: + g_free(reftable_tmp); + return ret; +} diff --git a/block/qcow2.c b/block/qcow2.c index c144ea5620..bd281fdd04 100644 --- a/block/qcow2.c +++ b/block/qcow2.c @@ -3120,18 +3120,43 @@ static int qcow2_truncate(BlockDriverState *bs, int= 64_t offset, } =20 old_length =3D bs->total_sectors * 512; + new_l1_size =3D size_to_l1(s, offset); =20 - /* shrinking is currently not supported */ if (offset < old_length) { - error_setg(errp, "qcow2 doesn't support shrinking images yet"); - return -ENOTSUP; - } + if (prealloc !=3D PREALLOC_MODE_OFF) { + error_setg(errp, + "Preallocation can't be used for shrinking an image= "); + return -EINVAL; + } =20 - 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; + ret =3D qcow2_cluster_discard(bs, ROUND_UP(offset, s->cluster_size= ), + old_length - ROUND_UP(offset, + s->cluster_size), + QCOW2_DISCARD_ALWAYS, true); + if (ret < 0) { + error_setg_errno(errp, -ret, "Failed to discard cropped cluste= 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 number of L2 tables"); + return ret; + } + + ret =3D qcow2_shrink_reftable(bs); + if (ret < 0) { + error_setg_errno(errp, -ret, + "Failed to discard unused refblocks"); + 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 switch (prealloc) { diff --git a/block/qcow2.h b/block/qcow2.h index 52c374e9ed..5a289a81e2 100644 --- a/block/qcow2.h +++ b/block/qcow2.h @@ -521,6 +521,18 @@ static inline uint64_t refcount_diff(uint64_t r1, uint= 64_t r2) return r1 > r2 ? r1 - r2 : r2 - r1; } =20 +static inline +uint32_t offset_to_reftable_index(BDRVQcow2State *s, uint64_t offset) +{ + return offset >> (s->refcount_block_bits + s->cluster_bits); +} + +static inline uint64_t get_refblock_offset(BDRVQcow2State *s, uint64_t off= set) +{ + uint32_t index =3D offset_to_reftable_index(s, offset); + return s->refcount_table[index] & REFT_OFFSET_MASK; +} + /* qcow2.c functions */ int qcow2_backing_read1(BlockDriverState *bs, QEMUIOVector *qiov, int64_t sector_num, int nb_sectors); @@ -584,10 +596,12 @@ int qcow2_inc_refcounts_imrt(BlockDriverState *bs, Bd= rvCheckResult *res, 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 c437aa50ef..99cef55b7c 100644 --- a/qapi/block-core.json +++ b/qapi/block-core.json @@ -2487,7 +2487,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 Sat Apr 20 02:56:23 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.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 15000468588001022.3083654517903; Fri, 14 Jul 2017 08:40:58 -0700 (PDT) Received: from localhost ([::1]:38602 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dW2i7-000778-5c for importer@patchew.org; Fri, 14 Jul 2017 11:40:55 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:40431) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dW2g0-0004xE-AW for qemu-devel@nongnu.org; Fri, 14 Jul 2017 11:38:48 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dW2fy-0004yK-Qu for qemu-devel@nongnu.org; Fri, 14 Jul 2017 11:38:44 -0400 Received: from mail-eopbgr20101.outbound.protection.outlook.com ([40.107.2.101]:45280 helo=EUR02-VE1-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 1dW2fs-0004uM-69; Fri, 14 Jul 2017 11:38:36 -0400 Received: from pavelb-Z68P-DS3.sw.ru (195.214.232.6) by HE1PR0802MB2556.eurprd08.prod.outlook.com (2603:10a6:3:e1::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1240.13; Fri, 14 Jul 2017 15:38:32 +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=jyFG92OcmOvWxy4PpTI9MHL9ksqhuWCF0+NfTUweUXI=; b=UmA4LyiKIyqwXLx4z8TheyNveMB1r4pJGoRwiNoAOYGW1rOWhFGWQrTiYWqg5ks8KkmW0ytMTyqdbsJIy9m1Lh2wuHUTUNREYTbCOk0LZYOimDY3SLaAg93mUP+/NfCsKVJ4wt7PHX6+y/0wfWBCOhdTNX4/kiEGH0vsR7Ut8oc= 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: qemu-block@nongnu.org, qemu-devel@nongnu.org Date: Fri, 14 Jul 2017 18:37:49 +0300 Message-Id: <20170714153749.25132-5-pbutsykin@virtuozzo.com> X-Mailer: git-send-email 2.13.0 In-Reply-To: <20170714153749.25132-1-pbutsykin@virtuozzo.com> References: <20170714153749.25132-1-pbutsykin@virtuozzo.com> MIME-Version: 1.0 X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: DB6PR1001CA0027.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:4:55::13) To HE1PR0802MB2556.eurprd08.prod.outlook.com (2603:10a6:3:e1::21) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 0979edbb-912d-4880-12c2-08d4cace62e4 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(300000503095)(300135400095)(201703131423075)(201703031133081)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095); SRVR:HE1PR0802MB2556; X-Microsoft-Exchange-Diagnostics: 1; HE1PR0802MB2556; 3:Yw/tr/+puL+P+32e2pOYAEXEqwF7qXL58iZrDTE4dRAHpcPfuP5Ec2Qos0EpIJoGEMl5GU4IEuwHeW59eGhLsJqN0V3yEP1UQ+KiPAU6oKppLVxjBACcrOoxSz03f/pDf4MvHs297EY8SEzWHZOfG0jDPNnv/87BRv9/21o9gGrL8JYTXJaqVUJ2YweEEsRdzGaUz1ScxNXSYy0K5eJU9e9k2JJzICZ+vYiGIvPmSK7KEmz3c3SIOVb9otcG5XbbMR1SfIOFPDwX43VNfOS5QsCROjBnTBe9FqOYJl1wpUeDc99s7slKKeXALXOq0MDUo8Cpp6lcOsleuwJTD+Wi5gytqhddOJSg6wnw3qDLKftgmv1cZEMEeYQtKQaK+jvT6MOptkK62kceimKXiqimR19bjrqm7aIY6JZO534RMZRNVTW1b251FmLUhRvCgZMmoCUPcNZ8ozgZUaehJ6KYmHVruKiV6FNP89QHQVyM4+vLUldOsQKfgTNgpMt9Z8rEe65IdRmrcZa7OQmVQk2tYZAjovTUmZGAQQ6TSwzULasT4FK/KFMOfFLupplIBscEJ6Si91ILdAuVA2Fe4Q053ql8AReby3i49IrV7OhrHO/ogtZ/yaIvLEN6bjaK8XssMWP+qZXzNXJJlrnWH7bw2qDwEqKqn3WuTEFcuwMG0G++hWh1T8tH6hNE13YTNuhL6SoSdxWBZU5I1HM/eGkY2imYY56dVVgXiUSOA7RS3gQ= X-MS-TrafficTypeDiagnostic: HE1PR0802MB2556: X-Microsoft-Exchange-Diagnostics: 1; HE1PR0802MB2556; 25:4lLxPedHF5i14/Fb6zA0u9HoKifeBzjPz0wYsIOSp2I2DI2cjpm8aqK+W9621u+Rc8wUpAkkiLShdqUrY9uXjM9agge6Ne3rsy/GkcmVTwqDIbSLFsRhtGsAuF3H9f0n3Qn2TzDDmJq/gm4JayUF9K4J9jnWco2/NoeWa/heSjmEmJT0Ld/knB7BHb73uViHDc7Xgg9Si4ZRru/3mcf3H80NKPQcvEiyj2Ot3yYBWXRu/VG3hK5OIrRcD+XnqIgujOsCUecrrGQBwP9O2Sj7a6A3+0+4W1MmQelzdgru2cYaT+631mCg9QIKWOM6YUem+FksxZcVGOw8H0s5tfzXTiHMd+cabaQRWIZFXbUV47j2KpM2Cy/9fMKMggQMVUkiEfsNpG2RkHIFMtamMxqYOvxjamfH0pSNdhFxjI421Cw4Lhgkcp0Cwpzsb3hsWUIRwIejmyM9iINcULYm5UVOGqBfUzNx2ArdRAl0GEK8bc3EEbSe2iuYQ4+ovaRy4V+yoA7yBjQCZG41uUrSyuIQfq6xlFNdxTIK+ZBayJDaKnygQEXS1DijEC2BG9iBdnvSo0pgFRQh8Ik27Xs/pp1VLwox+iVjBfCdtYa4D9kBX5Bgv2GY7cexa2QN60LJNOV0cpuYJhQZUDWBIabfo10AvCVocWHe3Fu2lhFedI1wd1nuadoG2dBju+fVrw+84BkZux81q5Rwq5hW1k2MXTd38sh8cH63uQ4/Oz+KysharkVUuJ+czmfGhCamRkz2w4iXhslN+CHVDuE9gyJRHb7VEqOFRiGHQGGbA9tw4dsKA1p5G2iFe8UoVkUuBNOGdyNz1uRm4cG3XNapKDHUNkSCjo5XDbsZ0y+uVmJamLfLFDAPcOnM5xw7ZNriu+tH+TI3gVCqnBQoVx0sVcbu81Uz7yJYEhdc6RmNhtMF3PYsXfs= X-Microsoft-Exchange-Diagnostics: 1; HE1PR0802MB2556; 31:5bSVkHmLZA3eN+jJw7evn4lBhufRPcCdwnlR9QK4I5AAcj6JzW/AQdkXkTW7oTQefs2xYKJ3tyvZCvqOrVmj3TaaB2ylKo7P0LmXfw/lo3UceKWwKPVA0RsryLb+WE1RSQ4whOCgUHL5J+x/9wCX+8gWkZpD9e8mL1BG4SypdsBeyoxpvGvbS2K9bIwNnnrQqU0CuMFiPz6fnUk6qPZHPfoi9ERDhJZ/0qjiVuybWViTdn9SIWzKrRql1uglLhLbn/3ILeidKf52cjXSzJei+K7NCD0wjI+tW18fIA0Odamw4NRkRRA3eEW2aXuo92+z3J+ZgJsgIyuMC7kIRQl8cCHHOGzJNqYTcpv9MbilPnDpUUooLABOMmtfOv7bA+gPdxAlZ8s0XVUobVnKJptpSJyg1Gly+Yly/B5jHfi39R2cgeOF5xdWyNU8RQztHql3Mz/zE2FwGZv0kKKzEb/OM48S8IRrftRH6ktu+Bf02S9bJitoDAb2JAez88SF60scn0zB+eQEGfpw9kEP5UgHfG+Yl/X/V5zF/5K1Cvuu4JDuuRk6glT8S1Kqh+rliWHFtOGNMLZEXVLRC2k31WWyP0Eu89h8w9wV6JceCz3FDe6q3WiInfZi3D3IZ1p/t+HyOHgh1cODIU5XFVR4ffi9yQPCfOcLb76/ZZyjDahw2aw= X-Microsoft-Exchange-Diagnostics: 1; HE1PR0802MB2556; 20:d3VQ+ZrxYhYl4gQSBfWzoUAQBDyn7YWLlaoXYuzgFr+kTx6DaS0dkiJxJGGT1q5D28kDTgJmzFhv2hm7h8FS/cKMIjpxMCehyeZGjhbgMwnZUMo18vcjOuZXiI3GpJdka0Gu0MgP2cStlpw83OOsSeDvrzs3hVnNZ5BwVTsSztIURO1WiE2eXjjIpdenYu/RHEoOWKoY/D20WZs/Zp1DpRewgmlSlr7ANAD8laydLO9tnBjcvS8L0dbNosG2iRDIMm/860LVdAY06MZjFxQC1q/9QVMv6CRXUC8v74U2W53vCgYdFd0f8LBMnH50F5cdewGKMfTNJohomcaRHu7lty5EGXkLHjS6pglY3BoOlKPDYxNrLadAJe/XbURNcGh+8yzHm7tTgZ3k4/uzmSMkQTO7CX1zOppWikwqZu90zSM= X-Exchange-Antispam-Report-Test: UriScan:(250305191791016)(22074186197030)(236129657087228)(48057245064654)(148574349560750)(50300203121483); X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(2017060910075)(5005006)(8121501046)(3002001)(100000703101)(100105400095)(10201501046)(93006095)(93001095)(6041248)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123558100)(20161123562025)(20161123560025)(20161123555025)(20161123564025)(6072148)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:HE1PR0802MB2556; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:HE1PR0802MB2556; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HE1PR0802MB2556; 4:HAy7weye8/mxZsBWFU+nnJVXOaUgc1Jemlnl3QHO?= =?us-ascii?Q?5UjtB5I9WKUywSGqNlxWFWQ8G84pDi3YzY2atNS06ZO3sA7g4/oWkIihgILI?= =?us-ascii?Q?FwJuegEBvMhN/ys5PXzGWAUZ5GIrLvcHn1Wuc3s/Ch3ivMJXQmHWoGsg8hqm?= =?us-ascii?Q?zt0hoT9KIjiy5Efsu2/hrjxFrc0bdTA3Is14vNA5VPluV2Vn/ObihRMu5K7c?= =?us-ascii?Q?1kiWdhKuyqFyfTusc2KrkVhp88CaucoDgVcHWIrcdDfblF7BzodBhoECcqGf?= =?us-ascii?Q?IN+Q7J6YqmpdGdAS94iNvuDd4EBkt6HCINtqMuNMnXMFstGFPK6Jn15POCzs?= =?us-ascii?Q?5hhms9e+2bEJPy4B5TxJvwbMmRklS+rNBJ78IRuEMgu/e3UEnpZUoe/rlE3u?= =?us-ascii?Q?W7siZEw8n03igBoK6zjbce8eM6u1AVocYSYnkkNXQVxSykGLoLLvCDhq7ggG?= =?us-ascii?Q?YdZScFZcHHhMaHzmCOUNkrnerOBXpTnzyzagsB2PczvB/klRktP0T92Ap7t2?= =?us-ascii?Q?0TCHgC62vyMqUV3LCOMwu69s6BbsGFXgFr37I5eV6/DEc10QXbxdPfjgYDFB?= =?us-ascii?Q?0LFU3BBkK0kANNx13GVaWL1RhJhkpeC2yvpoA5aaKhZhtPnhHMwTWlTXxbSw?= =?us-ascii?Q?V8RJD4lwnOPJy198vvmP/+nrNdBEVBCf4EMFIoaWQz3HLvBa64LhkqM4cVmc?= =?us-ascii?Q?51W/72GFGO5URS5mQC12120k47N4Kys+gpKYlsy6+s0YDcyXbvs5HLznpTx/?= =?us-ascii?Q?Z39CyKgZyqGKzgJYd2UoY7W0/WjOMi3ggbLcPLigvxov2Gliz/bIBxVJy4vx?= =?us-ascii?Q?eb8f0jNWW61NJLDPFAGx/CiXj8vcgYA8naC5MmVOqs4jzzFUbb/M4jNGuMtv?= =?us-ascii?Q?LAw21cRhWbone8w8+6x34DJXu/wpDDgomM5I0vmukptozV2eUCSHXLgiK7a7?= =?us-ascii?Q?w5Txl7PXpJoyTm6PJ6Y4wphIUPDO74YyQ3xvyLszlgEauwXyZ/GKXOBJRV3M?= =?us-ascii?Q?dj/Pz+nb9iYCFFVCTVN6r54NdlJFn9hO5a3C/hJJGNULv/2F4p1gplhIXUsz?= =?us-ascii?Q?CU7y0GshEyNz1E66YFE5o+/tg+T6Dx9tQ/DKj5yrAkGPdxhb7aFxkVf0ob4B?= =?us-ascii?Q?ZYVJPM3KyS32kMETfqtDjy66ELw0LNFa87Lcu/JxPQ8E4gNU/0sU6wEqJHI7?= =?us-ascii?Q?d/LNMl6u/H8bJg3JaCCDInRV1y+C7h5Ufq5XJ8UwDY0ypC/UeusBJYRz9rMK?= =?us-ascii?Q?R0f1RDA58DLliHnBY0e5YAwsSKTiKKfqXBVHnNvW2oaKehpM42vi9nMkrmzd?= =?us-ascii?Q?+vwWKoCHRIAQduNB5chCw9B6rZ9vHG+yoDlF+dL4+7hfkxJsFnCoHbjm+FDA?= =?us-ascii?Q?PHl/cyRoX27yAF0JEAgve41eZ0ikVPnZoGlp2Z13tWaKbevE?= X-Forefront-PRVS: 0368E78B5B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(7370300001)(4630300001)(6009001)(39400400002)(39410400002)(39840400002)(39450400003)(6666003)(478600001)(6486002)(5003940100001)(3846002)(38730400002)(50466002)(6506006)(110136004)(53416004)(6116002)(107886003)(33646002)(48376002)(2950100002)(6512007)(4326008)(53936002)(6306002)(7350300001)(189998001)(8676002)(47776003)(66066001)(5660300001)(1076002)(50986999)(76176999)(305945005)(42186005)(7736002)(81166006)(86362001)(25786009)(50226002)(2906002)(36756003); DIR:OUT; SFP:1102; SCL:1; SRVR:HE1PR0802MB2556; H:pavelb-Z68P-DS3.sw.ru; FPR:; SPF:None; MLV:sfv; LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HE1PR0802MB2556; 23:+KH/PyAqq4t4OtjfzQQGbkgo6hZizTvSYL4NEH3?= =?us-ascii?Q?OHi+vYBmowrkwszb4owkuM0o+WwOs3TgM2G40xMrzOoDwaGBl0EKy0icoIq4?= =?us-ascii?Q?MQG2kIUmXCY0ufEaOAQNusV6HlUimaKMtMSyGdG9g9gxddyzAE9vDinWdZbb?= =?us-ascii?Q?5jaHEoHofdl0pFQbVhG4AMNClBHteVa4/Danae+0eJcoZgAcZmCBjXakK4s0?= =?us-ascii?Q?w175qb7D8SK+lvEAKKOSRb9ZoXGVE82i7v9CtDXyxbzRsrP4EFAmtYb3rcGF?= =?us-ascii?Q?zfO69MpWD8ZhNm9Ns1SMUAeCW+15VACC10LxPOeHzhkGmCRJl6Nk/e1kWtSP?= =?us-ascii?Q?pWHcPBX3BBiDPaZ3cNRTat/JTWa1jIGn2x4wk4pKthoB0FHiYnrNMwe2epMj?= =?us-ascii?Q?ykCMuzS/yk9Domp30IqYta1WVhMC3Z0BsdQyZrtn8XGrubTfNUpADMSdZQx8?= =?us-ascii?Q?hsR6+zQmxESCS9YvyibVJ5+AclWbWcWiXltFHg/WCkwQgKfXt4+wpHasx2l3?= =?us-ascii?Q?Fq1VmgDQsCjkeLlItxFRWNg5PzluAK8vx9oV+LeOWLvqk1OjCZKU1uxo1MH2?= =?us-ascii?Q?Q5ufopaWR4LQyMgi6nv3H7xQL/sNWT0DJovR1V8mstm1JoIwTj6f2N9XoyDi?= =?us-ascii?Q?zJyfaUsHH8ScyKhmJ+2SHaJ5YOAH4oRu8WHplKih/sJZTvDhrnfcFlVVGzOJ?= =?us-ascii?Q?gqpK+6mTklnlqJXefJrPMnzrKgBaRFTWagk7J4fccWdTbsDQ+pIn/bbSvneL?= =?us-ascii?Q?dr8nHkz97We+pEAM1OA1KBCZY6uH18xpi71//nNnHsfdmoyyrDjMGSSNXUVI?= =?us-ascii?Q?fEqaSQ0jeYxsiEl3EkQWv4N2wATopgQkBzhPeSnvqR+A81xgDB5llyRoq4eH?= =?us-ascii?Q?grY2vA/0T4UUbR7zzshluz7jkTsqiZlIKJ6JnJWCqPEoRkh7bbNlvn045zcX?= =?us-ascii?Q?5BtmqwUReDg8D9l5U2e4Ga+QKMwPYXebjcJM3csoPg53sF4TZ5QEAI844KHJ?= =?us-ascii?Q?oKJEreCsF8VEwdCKhi65tToWpxR1AGk02+aYDCtVzXwPWAqt9WQ/z5vCVEpP?= =?us-ascii?Q?EdnN055TOuaZXK2zZuf161dNSpQzjmEftl6qtTTFe2XpTpG1sGbxUiMzA5mY?= =?us-ascii?Q?07GhDwx4kK8s=3D?= X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HE1PR0802MB2556; 6:CoNPB1ugS3vzQLAqxRwAy3lcApoK4Ahs8fFDCQq6?= =?us-ascii?Q?e/m4K1rptbtlbbcwiMBW9JFNWjN1aaAKcj/7vxzNX5zNbBMtQ9InGqzsEy9K?= =?us-ascii?Q?sOBGdt2pmhvnJI86dRwGoVoa8UFB5quvBZDWLfWuSf1nkqXqLxpYpDnKGELy?= =?us-ascii?Q?zS7d7DFt34d1HSBImEEXXM4QRF0KfYKPinH/sEx4g2RphDC38PSGtUb0gudG?= =?us-ascii?Q?JS/Tu3akVPacMbPgtMYRk17ZJZSffBXq0sObd2iN0GPyWY5c2dIQ9bwnga4d?= =?us-ascii?Q?WfBt1O2wgXpm4wiWQ8c8YSz5qOy2LXqjsHsVqRzQdY6AqPTil/OCIb0efsQn?= =?us-ascii?Q?nUsiwd6U/xG0QAS+O4j3uM3fepsT7eFcY0Vemx46OOxYawxGuu9cci/ZU4yK?= =?us-ascii?Q?xZPU9M+Zf+LpbgoILD8FjX97hDQ6xjhfPJ8bqlf8VLDabdDWLG2e4HD87yXq?= =?us-ascii?Q?1fEDVWLhHVd+riFoBA9a4gaxN+UIlbSKe6eV4xBzJJiU25Ul0YWAsnFtpONJ?= =?us-ascii?Q?wn7tOizyEFxuboauHc6M+TgCG2egVT6GZvz8dvYf34roqeoNA8oy4LCSR5B+?= =?us-ascii?Q?3xDgnh3CCbJs7IvMoy3kn/xrnigT3HxhdItxPRCHgUPwshmp/FJRkIpTEz9q?= =?us-ascii?Q?y+KDSbeq0r5nIOsXAt5De0EkA3vkptXDX/2vJEPSLahQQF8BewB+uPSnnjpX?= =?us-ascii?Q?tYBfGelvrg8GUZX46oa9BRgRu0COndl0S6DevkhXOJS4T1PumcgiVHYdpqe6?= =?us-ascii?Q?IVJKPp5CppwdK3e7jd1CuSDFIxRv+PuC+iL2b6I4CrdXrjsRdE4qd06TmjCu?= =?us-ascii?Q?ohoORKE4x15Ode2DVdLGutFKQvv3+kC9Pn5QbSNJEkct1RYmy2d/PSbIllb5?= =?us-ascii?Q?42KAatJcZRx4DDcgTuTWmHcIj5rzS7KzJTIXdKctdGSS4ihMhAkLLLtJit9X?= =?us-ascii?Q?cuAbj+9C3T2YRXFvyGSeGgwsm6pbFERC7AObqasjrKQhQ658cyiahjBth5Sb?= =?us-ascii?Q?h3E=3D?= X-Microsoft-Exchange-Diagnostics: 1; HE1PR0802MB2556; 5:FO/fa5qBDDTFcwTh4qSHucNiuhshSBTA49GkZhPMGsvHj+W96oUeuQFajHFXxfvx9PrYa0JpnP92TDZJCcVACnLpdtFqw2LntLT1ynGSRssWea0qYedAsJ+/mSgk14AZ1PFbonvctUXVh+hPRY/Uu0AvuTC3f2/lIOm/qsYKnHeQoGhayTlHv7VzPLGfd71CZboFuuVDS4d2izRrvmYcRAOfsLWCqvjOdx6jlKkCVNibT69hE9EtD8Us7oCLLnMfJOPCDSsDbxzsbXp6C7i7VfAzNWdDvh1idH7SGRX64B8rRrIUo3lO5/U2k0XXkudPLkqVgEBaTsZDW/6/kv4xikjwROg0Z5rkSoKkSc3JRKpbPfBFZNBXafaP2Fep81N+M6EZQdOx3MO7sTNaIjBoll2Izd1a1cr5aqLXG1mShawj7xcsDMoYYavqUBTx2L8URTB6/BLGQRtXAY7TW1S3MRfGxxEBstCVN/EGUjVf66jep6/FjDuVUOREU5GqnSO2; 24:Mwrlr+0NuPxF097R3JdqKxwOlJm0LYkuVd//BdVkHN3sjsJ17wD/C81upYqFniJpgz8HTfuJseqz02Ugv4X+MhFqZUiItzDYaXv9DqBae9E= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; HE1PR0802MB2556; 7:tMc+PI/IC4ieV7er6osA8nhlwMN+28ONMwTZ7OMJRGp4xZLSHu7fIC/x0LE7MwdOWzznQoBduZJerxFot4/mQsoiX40RrWPQ9VowvelbhuThpuNBMgSu+bxoeIDE1WT0/l0bRSONTCHmXK1J6kaOJtWMUeQ50sEuXIZoTsLxGq74hP0ozvsezAjqc+C9Sih6WwRJo5SWWMTjyC0FFAehNLLx3Orht/Nm8j2qW8WLsOoEUOD1ZIgJh0j33SNVdD++Z7hsrVsKGeqS9PngP6KZVRmi2SirOBuQELmFBkgV1sBGkHCgUU7dZc6AmWYN9nF2H6sT3ym9zeRuuS49MHMsPjpwFjk9j7nedEQWJpr+Fk1QhRNWu1Xka2GKP5vVNfpzOzjgFDCyePjeBAQq0F3PtCgZvm0nWqRTpa3vqAzMf3IKI+tKZLqCtHVHbBXWEhlUAuP7vVggrJEZ5Yo0oIcK9cvEGcOF5u6kC5PPM7uzBNWVXz00OQeOzDL3UAE77iPjq7O77quAJWWkmH/GHwvv23VOYiX3tYg49reUUgxmCo1GmzUZl7EsZ4MEic67oLrNE/S0wfHEAMNW35l3OlD8phEFKLVe6PAUfTu4jrgIYVChYxxWzP6fsC0qKvIunPTBObp7DV99uTnot6FCuHxK844nwKuHEyEl0f3WDSm0Y6qVsEAUGPFVEi1hB6qzYl7O/sVjGUlznDaJ9OsviP78f1FJsOD42kpp6KXkHLWyR7wCrtn5Kp8dJZah6avqHeG+Z+U5JeADigngk18yRjKA7JWThJa5wLkrFQmGtb+zSmI= X-Microsoft-Exchange-Diagnostics: 1; HE1PR0802MB2556; 20:/StNMsKJlmpE2jvlSOwEERUBwYrIj7PJR0jZCAu4tWQ2YYT+ZzEK3TnpTNVuS0DdPoDThncoxG3BkdaXYalPHmS5m4YjvZYYyptdr/zECTpNd0LtM+rd+ZL/gmo+N0/oNNdrCRSgWTrupOZ5hTsgyJ3n3aDEakHetYnxX7vjVj0= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Jul 2017 15:38:32.6051 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0802MB2556 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.2.101 Subject: [Qemu-devel] [PATCH v6 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 Reviewed-by: Max Reitz --- tests/qemu-iotests/163 | 170 +++++++++++++++++++++++++++++++++++++++++= ++++ tests/qemu-iotests/163.out | 5 ++ tests/qemu-iotests/group | 1 + 3 files changed, 176 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..403842354e --- /dev/null +++ b/tests/qemu-iotests/163 @@ -0,0 +1,170 @@ +#!/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, struct, qcow2 +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 ShrinkBaseClass(iotests.QMPTestCase): + image_len =3D '128M' + shrink_size =3D '10M' + chunk_size =3D '16M' + refcount_bits =3D '16' + + def __qcow2_check(self, filename): + entry_bits =3D 3 + entry_size =3D 1 << entry_bits + l1_mask =3D 0x00fffffffffffe00 + div_roundup =3D lambda n, d: (n + d - 1) / d + + def split_by_n(data, n): + for x in xrange(0, len(data), n): + yield struct.unpack('>Q', data[x:x + n])[0] & l1_mask + + def check_l1_table(h, l1_data): + l1_list =3D list(split_by_n(l1_data, entry_size)) + real_l1_size =3D div_roundup(h.size, + 1 << (h.cluster_bits*2 - entry_size= )) + used, unused =3D l1_list[:real_l1_size], l1_list[real_l1_size:] + + self.assertTrue(len(used) !=3D 0, "Verifying l1 table content") + self.assertFalse(any(unused), "Verifying l1 table content") + + def check_reftable(fd, h, reftable): + for offset in split_by_n(reftable, entry_size): + if offset !=3D 0: + fd.seek(offset) + cluster =3D fd.read(1 << h.cluster_bits) + self.assertTrue(any(cluster), "Verifying reftable cont= ent") + + with open(filename, "rb") as fd: + h =3D qcow2.QcowHeader(fd) + + fd.seek(h.l1_table_offset) + l1_table =3D fd.read(h.l1_size << entry_bits) + + fd.seek(h.refcount_table_offset) + reftable =3D fd.read(h.refcount_table_clusters << h.cluster_bi= ts) + + check_l1_table(h, l1_table) + check_reftable(fd, h, reftable) + + def __raw_check(self, filename): + pass + + image_check =3D { + 'qcow2' : __qcow2_check, + 'raw' : __raw_check + } + + def setUp(self): + if iotests.imgfmt =3D=3D 'raw': + qemu_img('create', '-f', iotests.imgfmt, test_img, self.image_= len) + qemu_img('create', '-f', iotests.imgfmt, check_img, + self.shrink_size) + else: + qemu_img('create', '-f', iotests.imgfmt, + '-o', 'cluster_size=3D' + self.cluster_size + + ',refcount_bits=3D' + self.refcount_bits, + test_img, self.image_len) + qemu_img('create', '-f', iotests.imgfmt, + '-o', 'cluster_size=3D%s'% self.cluster_size, + check_img, self.shrink_size) + qemu_io('-c', 'write -P 0xff 0 ' + self.shrink_size, check_img) + + 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") + self.image_check[iotests.imgfmt](self, test_img) + + if iotests.imgfmt =3D=3D 'raw': + return + self.assertEqual(qemu_img('check', test_img), 0, + "Verifying image corruption") + + def test_empty_image(self): + qemu_img('resize', '-f', iotests.imgfmt, '--shrink', test_img, + self.shrink_size) + + self.assertEqual( + qemu_io('-c', 'read -P 0x00 %s'%self.shrink_size, test_img), + qemu_io('-c', 'read -P 0x00 %s'%self.shrink_size, check_img), + "Verifying image content") + + self.image_verify() + + def test_sequential_write(self): + for offs in range(0, size_to_int(self.image_len), + size_to_int(self.chunk_size)): + qemu_io('-c', 'write -P 0xff %d %s' % (offs, self.chunk_size), + test_img) + + qemu_img('resize', '-f', iotests.imgfmt, '--shrink', test_img, + self.shrink_size) + + self.assertEqual(qemu_img("compare", test_img, check_img), 0, + "Verifying image content") + + self.image_verify() + + def test_random_write(self): + offs_list =3D range(0, size_to_int(self.image_len), + size_to_int(self.chunk_size)) + random.shuffle(offs_list) + for offs in offs_list: + qemu_io('-c', 'write -P 0xff %d %s' % (offs, self.chunk_size), + test_img) + + qemu_img('resize', '-f', iotests.imgfmt, '--shrink', test_img, + self.shrink_size) + + self.assertEqual(qemu_img("compare", test_img, check_img), 0, + "Verifying image content") + + self.image_verify() + +class TestShrink512(ShrinkBaseClass): + image_len =3D '3M' + shrink_size =3D '1M' + chunk_size =3D '256K' + cluster_size =3D '512' + refcount_bits =3D '64' + +class TestShrink64K(ShrinkBaseClass): + cluster_size =3D '64K' + +class TestShrink1M(ShrinkBaseClass): + cluster_size =3D '1M' + refcount_bits =3D '1' + +ShrinkBaseClass =3D None + +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..dae404e278 --- /dev/null +++ b/tests/qemu-iotests/163.out @@ -0,0 +1,5 @@ +......... +---------------------------------------------------------------------- +Ran 9 tests + +OK diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group index 2aba585287..1d985c3b45 100644 --- a/tests/qemu-iotests/group +++ b/tests/qemu-iotests/group @@ -166,6 +166,7 @@ 159 rw auto quick 160 rw auto quick 162 auto quick +163 rw auto quick 165 rw auto quick 170 rw auto quick 171 rw auto quick --=20 2.13.0