get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/816285/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 816285,
    "url": "http://patchwork.ozlabs.org/api/patches/816285/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20170920135833.20472-3-pbutsykin@virtuozzo.com/",
    "project": {
        "id": 14,
        "url": "http://patchwork.ozlabs.org/api/projects/14/?format=api",
        "name": "QEMU Development",
        "link_name": "qemu-devel",
        "list_id": "qemu-devel.nongnu.org",
        "list_email": "qemu-devel@nongnu.org",
        "web_url": "",
        "scm_url": "",
        "webscm_url": "",
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<20170920135833.20472-3-pbutsykin@virtuozzo.com>",
    "list_archive_url": null,
    "date": "2017-09-20T13:58:33",
    "name": "[2/2] qcow2: truncate the tail of the image file after shrinking the image",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "b96e49c71b3b9769263059e209fa6a137dec58b2",
    "submitter": {
        "id": 67271,
        "url": "http://patchwork.ozlabs.org/api/people/67271/?format=api",
        "name": "Pavel Butsykin",
        "email": "pbutsykin@virtuozzo.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20170920135833.20472-3-pbutsykin@virtuozzo.com/mbox/",
    "series": [
        {
            "id": 4142,
            "url": "http://patchwork.ozlabs.org/api/series/4142/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=4142",
            "date": "2017-09-20T13:58:33",
            "name": "Truncate the tail of the image file in qcow2 shrinking",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/4142/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/816285/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/816285/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>",
        "X-Original-To": "incoming@patchwork.ozlabs.org",
        "Delivered-To": "patchwork-incoming@bilbo.ozlabs.org",
        "Authentication-Results": [
            "ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=nongnu.org\n\t(client-ip=2001:4830:134:3::11; helo=lists.gnu.org;\n\tenvelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n\treceiver=<UNKNOWN>)",
            "ozlabs.org;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=virtuozzo.com header.i=@virtuozzo.com\n\theader.b=\"SEu8HMTp\"; dkim-atps=neutral",
            "spf=none (sender IP is )\n\tsmtp.mailfrom=pbutsykin@virtuozzo.com; "
        ],
        "Received": [
            "from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11])\n\t(using TLSv1 with cipher AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xy2wR61WCz9sNr\n\tfor <incoming@patchwork.ozlabs.org>;\n\tThu, 21 Sep 2017 01:00:07 +1000 (AEST)",
            "from localhost ([::1]:48665 helo=lists.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.71) (envelope-from\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>)\n\tid 1dugTt-0005EN-Tl\n\tfor incoming@patchwork.ozlabs.org; Wed, 20 Sep 2017 11:00:05 -0400",
            "from eggs.gnu.org ([2001:4830:134:3::10]:51252)\n\tby lists.gnu.org with esmtp (Exim 4.71)\n\t(envelope-from <pbutsykin@virtuozzo.com>) id 1dufWh-000594-LN\n\tfor qemu-devel@nongnu.org; Wed, 20 Sep 2017 09:58:58 -0400",
            "from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)\n\t(envelope-from <pbutsykin@virtuozzo.com>) id 1dufWg-0006xN-MC\n\tfor qemu-devel@nongnu.org; Wed, 20 Sep 2017 09:58:55 -0400",
            "from mail-db5eur01on0090.outbound.protection.outlook.com\n\t([104.47.2.90]:29273\n\thelo=EUR01-DB5-obe.outbound.protection.outlook.com)\n\tby eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32)\n\t(Exim 4.71) (envelope-from <pbutsykin@virtuozzo.com>)\n\tid 1dufWZ-0006uU-6G; Wed, 20 Sep 2017 09:58:47 -0400",
            "from pavelb-Z68P-DS3.sw.ru (195.214.232.6) by\n\tHE1PR0802MB2554.eurprd08.prod.outlook.com (2603:10a6:3:e1::19) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.56.11;\n\tWed, 20 Sep 2017 13:58:44 +0000"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com;\n\ts=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version;\n\tbh=g+FfzxMgFUiuABl+HO38zfwUzJ4JtG7iuAwtJ2VD1sY=;\n\tb=SEu8HMTpEf/eAj05s6TcEJl8gc1nfGeCQV/ITIqH1nhv7CZRn+XlWvZMHEXaOODgLZc0Bo4lb819T+vGqajnoFN2sE/PDGXThSxd7G3F8AuU+hAT1zxndY0FdbouRxLUjuv6Qgq+MothV9cz02PTVoyCORJsk2q05k2MxNsPHvY=",
        "From": "Pavel Butsykin <pbutsykin@virtuozzo.com>",
        "To": "qemu-block@nongnu.org,\n\tqemu-devel@nongnu.org",
        "Date": "Wed, 20 Sep 2017 16:58:33 +0300",
        "Message-Id": "<20170920135833.20472-3-pbutsykin@virtuozzo.com>",
        "X-Mailer": "git-send-email 2.14.1",
        "In-Reply-To": "<20170920135833.20472-1-pbutsykin@virtuozzo.com>",
        "References": "<20170920135833.20472-1-pbutsykin@virtuozzo.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain",
        "X-Originating-IP": "[195.214.232.6]",
        "X-ClientProxiedBy": "AM5PR0602CA0024.eurprd06.prod.outlook.com\n\t(2603:10a6:203:a3::34) To HE1PR0802MB2554.eurprd08.prod.outlook.com\n\t(2603:10a6:3:e1::19)",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-Office365-Filtering-Correlation-Id": "3a0d491b-5265-47c0-5fca-08d5002fb567",
        "X-Microsoft-Antispam": "UriScan:; BCL:0; PCL:0;\n\tRULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(2017030254152)(300000503095)(300135400095)(201703131423075)(201703031133081)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095);\n\tSRVR:HE1PR0802MB2554; ",
        "X-Microsoft-Exchange-Diagnostics": [
            "1; HE1PR0802MB2554;\n\t3:W7oIfzRurbONOjhplviH8w7qM9CNa5ROLAPT7i3TuzfEiOmznQlPzo+Vg7gfK7Ul6PLSDGyhPq6ldOrEcxd19oskl83ClL9OOS9ZSlgv3e+n+14s5JSIaTUsyWNvNvhBu5z5EGTrINUNxjh3ULKNKdhRSmL1NCgJipm0HmAr5fVSNEW0QzGQembJzRtJqJMOancPGdiqFzqfFRSpw9ErojZ2MZ104AaNygDwCH+zc8gksi1lPW9NA38CRfnJYup0;\n\t25:RhmczFxi3HvQGPmvp9FOZV5i6C5slP/bNS6xz4ZleL5mDmyISR8zXaDMlL+EmqxOK0Ry9q3jNpiKa+Fqo5vy6VaFvVcDcg2u0YLagKwieS3w48X9iP2fwI27zDH/uqZLosXEFR3nLsk5NXXWbQ7OKkkBsvkOIjmcFNdls7tDyqDNVsBkMs4PZjmG2HtX+DsUVilf+lM4s2ZCY/vHSA8t+ooFhn+67h2eJBU8zboWTH4JWJJ1Q/DYVow6WQh4vAyGaYKcfrw1xzGAgW94LT3eQuR85j9l9114z0G8rivO53+1xTZbn+UyLd4GBOskos36PBb4P185EWUyOd4i7JQLtg==;\n\t31:aGRyAxIG0uyt23yYWtHJh78AxOZ9Nsuz4cRD+z9M024W9yNyuiC36w/GcnfaGsY1vYO2JHMiRi7hxwDD3olZTeol6qoGRB+2iajnBdUXXTP43W0MOaXa8rbQRmkcCMK580dkl269IcgOGH9D3eob/zJUYtpgrr3gC5VBte2HHECMyPuxkgT+BAuZfCN9TQ/eOhgW4kPkPZn7k/Pqz2r0L5Q//TQ0CIf4WJTIUr2Cn1Y=",
            "1; HE1PR0802MB2554;\n\t20:z6DmKrKXPB88PUR6omg1WSCZurHkrCKAa7AxquBr2GJcCttcZihxlanlY80Zs6/5wWsLIKONjdjIKOwNWwKwNxcXyYrJeJ9543oY41DodtDeCk+8FT+EaHmhV0QHnqWMNrZk7MWshtvCKIBfdYuDvN45UVyjVFejuc/wKe5YqP/lc1dkgDHEQv2oq0nuzOnmwF8C8qcyk/uanKcYGQ7jeawpOBkVKDDr/W+CrXH6MYTjnhhmU6ph92ZvvYjx8AxEZELSN+7sKnPU0cadyXdUi1Jgm5QoOvOAAhWNeYtZnOh9J4BF/GL+TaC3pPzKnqIz4NXMrAqEaon6NYMUIWNu+NYeinrUZ4V3yYcUd+8uy9UiFu/Yo2e33bERjvXiq5NclmdRX6btfMSiRpt7j2Qmd7HztzKDuhhvu+J0mVOqbVs=;\n\t4:RDayVjHNJwtJvf2msGh7A1Dw3Wz9yNQR0Vl5uFzpdT87jvq08IXNIZofGqNBlgouEQgFyIu6076i2m722Le9+uPfZT9rZ39UW3q29XbgkD/kHdZ2+7EQN7SlWtdT/NqHCPJcnNdP8gjXBYqom1bK4tynt77VbArQ9P0bafvA0Kx+19JtN4iyZcyxFh+Bm9HP1kFToilqkCckvjWfYBPh4FEJBX5AGJCSjs98J1DIvZMmTSoki/IbfO1Y9HY2GrR3",
            "=?us-ascii?Q?1; HE1PR0802MB2554;\n\t23:2oZ9fu1lncYf2h0aUX/MNxd1V10MKEwbTCNCCZN?=\n\tJtg+DbO81v7xq7/XRtr9NJnrWMszLF2Hg7Js3/BHEYQQzzXdMxIpyXA2oo9Pu9mTbY0Ba/M1T1ic0pPEwClA1fyK1pK+hKol5flxdbPGyQ56TqIyTN+TLwnK2dN+YC6pDQtriFPqO0zwidVrIVsHqOojr0FlF7ofokBUsT20kjNXfkB+89b2IUdqwn1XlLSq2MuXJzomdDo9Y5BKWgg+c6GbrpUnoNl5KLlNNrUEclUmGMexx8FQXFEg+kR6FRWXW/eNCQl8MvcPfjvMEOqQat3Psv30r+xWdkAdfzQZ5VHyWE/legHkAao+ZgqOEWV9NS3zxjVPFsqRtxU6wwM216BGlQMmQpfiTxqieKGW/xapmDQsb/FCnaSaQQGOwj/V4DKXs3y6wBEteFU0u9CJaoq0gUE8OoDZw3agjxWd+Pe5szaPM6vorD/Zy0WOZfzjhpV6L+r4bW6NjDIfpKZG+uUI4Zf88/5ljsQ29c8jMt2EbUNX1C9nvuqwBlkp8vCKM4dQGSx2bd1TR4jNjexzUYdRQ3YFE/m80jTElSYOG5i+zMrMxkTc604AOyt8Qjnbx6RiO+TznWRTPyK52D+1Z3NyvUcCEAlsRwNk7R5VbVvdI0s1g4jfPKyZStrZM8aafJg0NNo8P8d8g6is3MrhvTp7wp8l+J2sh/yXyfX0ARiXuSmohVSn+7x1mq1H3Uw+PFC0aWeJL6kLC2Eg/O8iGFzyVD+t8SH85S5IyAZASU+Jv29dTFaTXRTIy2sjpCn4TFCNyoLYp1uKF8DG87v/pVl7MqmUW4JG4k/yavpXBnKbo/hn82rDnBiV1XT3Kip9oJkw+qlMCmaMreZpsyq+Q7fhTSGquHeWa/OcwjOmonJV99j07tvHyCAbpCP4XEzZkMxh8lgT3Mca/cr9nkChvEJbxWvisQjWy8pFMyRABKbLkZZ+eZlzCKAznwbcTH6rxLQ5XdBN1r/IDpnoVNUcuKp880kRPMVJhO9kPTlnwlKGJ4ypzNIgn3p2bgi5cFaPBFj7lWYeQK2L1+b5lA7WeO3talopZV/WcV7uaPtlCyhD+XpZ7giXYZlVhT4DVl1GPg0N/bkGZci9TGtrzbWr37x31R8xlXuSsv++Y+w9cCtPru3RrzMC0AdzbXJqqoqYDzuQ=",
            "1; HE1PR0802MB2554;\n\t6:nqCjF8Mm6RSFQPa9MDEF6f5Fdr8idETrhhK63HuMLymGRv7cW7XkhWp2yVgUi0dmvmCAVPTFj/YdQ014rg47m99eEoOl0pUSZQOWPOm/VeFwt0yO++Rr8BLsyOaYInCj1SE+GQcEVW0UbWz4rZBqGViIFan2An+by423uvbPkwpa7b4qipAbekoYoXwO8kFCxTKF+3N3kBpi2VNtKl4Kq8DjetTQcp3o9wcQPWcJpi+qrZjYZXKxrdOA2iPkIrGOfwmK5KG0c9h0DqDms3UJ+T7A239N+tP/Wv+DpY/9BgcKuh9ynaUWLvelaegbkf1FHH0jY+OoZ9hM6j4Ox0Vx4A==;\n\t5:Gj5UVD8Sh2gRAwCbRT02h2SWJZ6Pe6dQ54CozLCKXQaQw0T6KwDAPwYoyYuKNouZEzCbZiVCD/9QwrNd2+UzPquEfikWsZuAYuLRkTkShivUYG5NY5266MtH7PxoFbOnYWgttdVGo8WF7S+k422h6g==;\n\t24:dtaGPZFTrA8aBvBOuaf7UAGuZsa8Rz4frN78j1AV+vR5QouKE5oylOpczG+604jmc110WXYCAsSwFInsKfG8rW+agjrMlZhh+iGgRU2tgmA=;\n\t7:+ZydSyguNE66l+Y1PRaxYa4OJf7J0FmwCP0BqDQELPY2ecYcw3TnowK+E0AB7/7uBlSDXrNILlz5gM1+/iVoSe+sXwbD9C1nDcaUWwVhpFQ4HAu4Y1K0UYCEeEYiNBNSy1u+utsafqVDk4O764o+uIvfOYZuzNuelQ5pv5rzCxEokNmNbIOHO+mEAro+Qy08wH75QsVH7M0UrZw18Z3/8JIKgTHI8GejME97nr0UKko=",
            "1; HE1PR0802MB2554;\n\t20:hR0Lp5kqOE/21N9EapT72BD/IBajcE4D4JatNR13jlcyoX23V3RkhM7pXArN2ShxyqzVGBWz1FKKEmxWk5WMm9vx9YWBsS1aJvcfyjX78oa5ZpH7GVKjJ2cig69VNq4q01+8crM1z2qlaxvOWecJjLn9s7rlb5KBQdjIxDAR+/g="
        ],
        "X-MS-TrafficTypeDiagnostic": "HE1PR0802MB2554:",
        "X-Exchange-Antispam-Report-Test": "UriScan:;",
        "X-Microsoft-Antispam-PRVS": "<HE1PR0802MB255422E5010DA42A5CCBB68AAC610@HE1PR0802MB2554.eurprd08.prod.outlook.com>",
        "X-Exchange-Antispam-Report-CFA-Test": "BCL:0; PCL:0;\n\tRULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(5005006)(8121501046)(10201501046)(100000703101)(100105400095)(3002001)(93006095)(93001095)(6041248)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123558100)(20161123555025)(20161123560025)(20161123564025)(20161123562025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);\n\tSRVR:HE1PR0802MB2554; BCL:0; PCL:0;\n\tRULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);\n\tSRVR:HE1PR0802MB2554; ",
        "X-Forefront-PRVS": "04362AC73B",
        "X-Forefront-Antispam-Report": "SFV:NSPM;\n\tSFS:(10019020)(7370300001)(4630300001)(6009001)(346002)(376002)(199003)(189002)(4326008)(2906002)(5003940100001)(33646002)(81156014)(16526017)(50986999)(8676002)(86362001)(76176999)(81166006)(101416001)(50226002)(97736004)(53936002)(68736007)(189998001)(16586007)(107886003)(6512007)(305945005)(7736002)(316002)(478600001)(25786009)(36756003)(5660300001)(69596002)(47776003)(50466002)(66066001)(48376002)(7350300001)(6116002)(3846002)(105586002)(1076002)(53416004)(2950100002)(6486002)(6666003)(106356001)(6506006);\n\tDIR:OUT; SFP:1102; SCL:1; SRVR:HE1PR0802MB2554;\n\tH:pavelb-Z68P-DS3.sw.ru; FPR:; SPF:None; PTR:InfoNoRecords; A:1;\n\tMX:1; LANG:en; ",
        "Received-SPF": "None (protection.outlook.com: virtuozzo.com does not designate\n\tpermitted sender hosts)",
        "SpamDiagnosticOutput": "1:99",
        "SpamDiagnosticMetadata": "NSPM",
        "X-OriginatorOrg": "virtuozzo.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "20 Sep 2017 13:58:44.2832\n\t(UTC)",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "Hosted",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "HE1PR0802MB2554",
        "X-detected-operating-system": "by eggs.gnu.org: Windows 7 or 8 [fuzzy]",
        "X-Received-From": "104.47.2.90",
        "Subject": "[Qemu-devel] [PATCH 2/2] qcow2: truncate the tail of the image file\n\tafter shrinking the image",
        "X-BeenThere": "qemu-devel@nongnu.org",
        "X-Mailman-Version": "2.1.21",
        "Precedence": "list",
        "List-Id": "<qemu-devel.nongnu.org>",
        "List-Unsubscribe": "<https://lists.nongnu.org/mailman/options/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>",
        "List-Archive": "<http://lists.nongnu.org/archive/html/qemu-devel/>",
        "List-Post": "<mailto:qemu-devel@nongnu.org>",
        "List-Help": "<mailto:qemu-devel-request@nongnu.org?subject=help>",
        "List-Subscribe": "<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=subscribe>",
        "Cc": "kwolf@redhat.com, den@openvz.org, mreitz@redhat.com,\n\tpbutsykin@virtuozzo.com",
        "Errors-To": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org",
        "Sender": "\"Qemu-devel\"\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>"
    },
    "content": "Now after shrinking the image, at the end of the image file, there might be a\ntail that probably will never be used. So we can find the last used cluster and\ncut the tail.\n\nSigned-off-by: Pavel Butsykin <pbutsykin@virtuozzo.com>\n---\n block/qcow2-refcount.c | 21 +++++++++++++++++++++\n block/qcow2.c          | 19 +++++++++++++++++++\n block/qcow2.h          |  1 +\n 3 files changed, 41 insertions(+)",
    "diff": "diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c\nindex 88d5a3f1ad..5e221a166c 100644\n--- a/block/qcow2-refcount.c\n+++ b/block/qcow2-refcount.c\n@@ -3181,3 +3181,24 @@ out:\n     g_free(reftable_tmp);\n     return ret;\n }\n+\n+int64_t qcow2_get_last_cluster(BlockDriverState *bs, int64_t size)\n+{\n+    BDRVQcow2State *s = bs->opaque;\n+    int64_t i, last_cluster, nb_clusters = size_to_clusters(s, size);\n+    uint64_t refcount;\n+\n+    for (i = 0, last_cluster = 0; i < nb_clusters; i++) {\n+        int ret = qcow2_get_refcount(bs, i, &refcount);\n+        if (ret < 0) {\n+            fprintf(stderr, \"Can't get refcount for cluster %\" PRId64 \": %s\\n\",\n+                    i, strerror(-ret));\n+            continue;\n+        }\n+\n+        if (refcount > 0) {\n+            last_cluster = i;\n+        }\n+    }\n+    return last_cluster;\n+}\ndiff --git a/block/qcow2.c b/block/qcow2.c\nindex 8a4311d338..c3b6dd44c4 100644\n--- a/block/qcow2.c\n+++ b/block/qcow2.c\n@@ -3106,6 +3106,7 @@ static int qcow2_truncate(BlockDriverState *bs, int64_t offset,\n     new_l1_size = size_to_l1(s, offset);\n \n     if (offset < old_length) {\n+        int64_t image_end_offset, old_file_size;\n         if (prealloc != PREALLOC_MODE_OFF) {\n             error_setg(errp,\n                        \"Preallocation can't be used for shrinking an image\");\n@@ -3134,6 +3135,24 @@ static int qcow2_truncate(BlockDriverState *bs, int64_t offset,\n                              \"Failed to discard unused refblocks\");\n             return ret;\n         }\n+\n+        old_file_size = bdrv_getlength(bs->file->bs);\n+        if (old_file_size < 0) {\n+            error_setg_errno(errp, -old_file_size,\n+                             \"Failed to inquire current file length\");\n+            return old_file_size;\n+        }\n+        image_end_offset = (qcow2_get_last_cluster(bs, old_file_size) + 1) *\n+                           s->cluster_size;\n+        if (image_end_offset < old_file_size) {\n+            ret = bdrv_truncate(bs->file, image_end_offset,\n+                                PREALLOC_MODE_OFF, NULL);\n+            if (ret < 0) {\n+                error_setg_errno(errp, -ret,\n+                                 \"Failed to truncate the tail of the image\");\n+                return ret;\n+            }\n+        }\n     } else {\n         ret = qcow2_grow_l1_table(bs, new_l1_size, true);\n         if (ret < 0) {\ndiff --git a/block/qcow2.h b/block/qcow2.h\nindex 5a289a81e2..782a206ecb 100644\n--- a/block/qcow2.h\n+++ b/block/qcow2.h\n@@ -597,6 +597,7 @@ int qcow2_change_refcount_order(BlockDriverState *bs, int refcount_order,\n                                 BlockDriverAmendStatusCB *status_cb,\n                                 void *cb_opaque, Error **errp);\n int qcow2_shrink_reftable(BlockDriverState *bs);\n+int64_t qcow2_get_last_cluster(BlockDriverState *bs, int64_t size);\n \n /* qcow2-cluster.c functions */\n int qcow2_grow_l1_table(BlockDriverState *bs, uint64_t min_size,\n",
    "prefixes": [
        "2/2"
    ]
}