{"id":814901,"url":"http://patchwork.ozlabs.org/api/patches/814901/?format=json","web_url":"http://patchwork.ozlabs.org/project/qemu-devel/patch/20170918124230.8152-3-pbutsykin@virtuozzo.com/","project":{"id":14,"url":"http://patchwork.ozlabs.org/api/projects/14/?format=json","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":"<20170918124230.8152-3-pbutsykin@virtuozzo.com>","list_archive_url":null,"date":"2017-09-18T12:42:28","name":"[v8,2/4] qcow2: add qcow2_cache_discard","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"26b637912bb0eb1db3da514ae9067916fd60b20f","submitter":{"id":67271,"url":"http://patchwork.ozlabs.org/api/people/67271/?format=json","name":"Pavel Butsykin","email":"pbutsykin@virtuozzo.com"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/qemu-devel/patch/20170918124230.8152-3-pbutsykin@virtuozzo.com/mbox/","series":[{"id":3635,"url":"http://patchwork.ozlabs.org/api/series/3635/?format=json","web_url":"http://patchwork.ozlabs.org/project/qemu-devel/list/?series=3635","date":"2017-09-18T12:42:28","name":"Add shrink image for qcow2","version":8,"mbox":"http://patchwork.ozlabs.org/series/3635/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/814901/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/814901/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=\"L0GGjtl+\"; 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 3xwm046twbz9s78\n\tfor <incoming@patchwork.ozlabs.org>;\n\tMon, 18 Sep 2017 22:43:48 +1000 (AEST)","from localhost ([::1]:36362 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 1dtvOt-0003OC-2M\n\tfor incoming@patchwork.ozlabs.org; Mon, 18 Sep 2017 08:43:47 -0400","from eggs.gnu.org ([2001:4830:134:3::10]:33407)\n\tby lists.gnu.org with esmtp (Exim 4.71)\n\t(envelope-from <pbutsykin@virtuozzo.com>) id 1dtvO8-0003LI-1f\n\tfor qemu-devel@nongnu.org; Mon, 18 Sep 2017 08:43:01 -0400","from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)\n\t(envelope-from <pbutsykin@virtuozzo.com>) id 1dtvO6-0003Qq-Tt\n\tfor qemu-devel@nongnu.org; Mon, 18 Sep 2017 08:43:00 -0400","from mail-eopbgr00136.outbound.protection.outlook.com\n\t([40.107.0.136]:6071\n\thelo=EUR02-AM5-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 1dtvO0-0003Gr-Cd; Mon, 18 Sep 2017 08:42:52 -0400","from pavelb-Z68P-DS3.sw.ru (195.214.232.6) by\n\tDB6PR0802MB2549.eurprd08.prod.outlook.com (2603:10a6:4:a1::19) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.35.12;\n\tMon, 18 Sep 2017 12:42:48 +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=Ie7ql0Ylerv1TzEr+zgaZKWcGsL3YlQ2nmLOFHqfB7I=;\n\tb=L0GGjtl+zs8hzsIdeYcQbVN5T9bkI+32X9iVEt3w6TS+dgsiofEFuz7rPVtuU1datGYfOCLnOMELHkiahHWbktjnSw0hLnqhyFnBMKI4QxbPEAMU1HMAbASTqj+JB8cczlLSqo6YoBB4K0hGNJhKtIemcW+7aeNTlzsE3Y6UEFA=","From":"Pavel Butsykin <pbutsykin@virtuozzo.com>","To":"qemu-block@nongnu.org,\n\tqemu-devel@nongnu.org","Date":"Mon, 18 Sep 2017 15:42:28 +0300","Message-Id":"<20170918124230.8152-3-pbutsykin@virtuozzo.com>","X-Mailer":"git-send-email 2.14.1","In-Reply-To":"<20170918124230.8152-1-pbutsykin@virtuozzo.com>","References":"<20170918124230.8152-1-pbutsykin@virtuozzo.com>","MIME-Version":"1.0","Content-Type":"text/plain","X-Originating-IP":"[195.214.232.6]","X-ClientProxiedBy":"DB6PR0202CA0006.eurprd02.prod.outlook.com\n\t(2603:10a6:4:29::16) To DB6PR0802MB2549.eurprd08.prod.outlook.com\n\t(2603:10a6:4:a1::19)","X-MS-PublicTrafficType":"Email","X-MS-Office365-Filtering-Correlation-Id":"117771ff-b346-4931-c6db-08d4fe92c537","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:DB6PR0802MB2549; ","X-Microsoft-Exchange-Diagnostics":["1; DB6PR0802MB2549;\n\t3:0miuyEXvGDo5ypYLX53lW3igWu54I+wSw2dHUTbe+qaiXyDmFFeBWcv34fQaC48gXwCfDSn7WBfQJlDHRb+UqaINKX0G9v8Ie9xCRwR5lazaCWx6goQ4l8FeznB49wjSxj7x7Q5eTRJXXTUIPf+btpX7leGYjR+Kbyg5NqlOtf/E93gS5fZhzDdH2n+UfhnyuxiLJW7wqt5ne49ysMpgBdLl6r9uEjZWpH7MVt/ET7quQN2z2lg8aFQoK6jwPN+Q;\n\t25:H4n+KUbU07p+Uo4UBfLveCKyynjVL6LmiF2afWVYK4i1wXMH4rTKWo+osqKNLdRVJX9rw+JV5HEsZ1syjIF6k4N3ejGdwIXb/vBSMMCr/u/8B9/sOi6IPB5naHTmwDm5QwAEd5hgmkAPm0whXUrmMNM86Ehh/AVh1m12HCreQzB2+or+FRYj6g/EMlsItucHrrQW+1twll0nOzidxIFYuzhMaWxNyRvJjunq/f/5I9gso5HbfMBBGYraS1mXSquzL7QbNnsiQzbfSDUGBEa0+Ni7bdDVDuAoNihZt30QzCjenuFLDvDTzPxJS6jWgT65Yyyy38WqSDUBnCtYDZJS4Q==;\n\t31:hqXGIVRVsjv61uAWKCIKBca7rb14o0oKrH0HRWpvlPz9O1vEBG3WdDABxuPU8MswtP17c6zuLsOMlkaCHyFTGHd//zKYuX1ogSGBQmLe6CZ5Ckoya2SbncY/UMhfGhOlIw+D8imtWr7PdQldtebwIpVEi++H5pOLQHvgn8VYvBPcSd1RJtZYYZZ6x+Aj/7pWC4SwrH98eoekxdkgkFiY+0Mf1Bcgs+98upBpIDn1yj0=","1; DB6PR0802MB2549;\n\t20:jteR/OeK4GuamU8ggzRfim82ek7Nz2+XqVK3Ak+HTKM5hAQRYWTSyBNdgP83K7kLd3Z3xpDl+ZbyOHKX4G9TcKV3olnoXHSAaEDzVUx7VIVXfCmY5Ndv9s3u5CkLb6ZFRFmRcIotC3F0KNXHB3ynIEf5rDH3i6C6Vgt/pcWpgcStY56IpNfsj5EYiJlmgxEGjmbTg08kOw4IAgXqiPi4IqJPHBVuVolxU1ZYIuj5dhRDEDF82W/hKZyDrqxWUU0UowiNmbtE5NLknwZ5FzFx4vFawBCuI9NXAstm/8l4CzYSNI1/JJOzZPaLizoHGavIcjvGvq5LO96Jj3Udcc7KZLrlOANAgl4TNtnhA43U0gOnzOknkJ0LlbtHZlkttyL20PueT/5ZYAC26im3hLql6U/jAyxhhy0bQ02jF0ksV4s=;\n\t4:ewViljmMN/Dvte5g0gfMDtf1YyV+t4EX0EE8oMQOIVwvkMa0DkoBYI1xzSd9ZMPB1sQmHr70nsTiNJycs8KSiG8xxe5iJIW32WqvT61Z/7LyD3wGpkYFco33SK5sblvy4on0Qdvrw28MqZHiS7OyQFd9TA7O+5kLviKuK/0LdL7nUYj21uyGmVMQpOuPgZEOGSeR6dxx1bb/IUp89wIFvV3RLOMUujW8btNitsWvVDODbExo46Q6Kgbe4dG7lZc4","=?us-ascii?Q?1; DB6PR0802MB2549;\n\t23:molDBwm8C/9AvKDkgzdwkrHbboxnXpdyaBXRNLS?=\n\tXly/VnTbeVaJRTrti7dfK5hrfTLvl9oWkQEDvTRRrBNMQAC5OuLmOhk2DqXxOfDANC5LP+Sq1yqxM03j1JfN3YLqPWchUSZdXwoCFkxuGFHthFixWre+91JxRD/qbsoxlUynwX9pMOAQiwk8YUqUHOFqyN3ldZaVeiKDZrTrLTt2pOlGhKBoLBz4Fg1CDVunyX5N/Sua/tO+Li7TzaDQvVUMF7CA9QkMxtUbqIuYrqQy52kG/yAzpRuD6rGMw4iaOMjkz+PDaxUb2W0euPHwLKfrjY86yzZtr7xCjKri/Fh5bNa1Y68L/w60M14EgWJm2sLqOQ5SV0NRYVytWXU2fDWHrWlV3v4nnk2dfJ2zqN4UvYoXHDCfQt8Je9p30jKZJ2iH5golve3J9Pn+7dreG6F8fni/bm7qkvL56dJe8iPbUl6mouq9pjl0vTalA0gt8a8nm2S2cgEN7Uhzsa5y42XQYdkRRA3QBv5ZpWLpKqT8paKZ2TXcuumrOZ/SnaPQnnVUGGty0CLtsPCMnTDPbpmSYeSqdrglG1xJG+RfrizW8jhnGxcCIKiQAfSzHZAgRnYuU7P81i/1flnsZeJmeUFJsXwo+dHug5ucch1P7n0p13KqXgpWJiSOB2JLc1yez9TwFi6JwVHH0nNQ2TWQ+8zl28Ojpv5LUIyTJKFIiqr4iKHH1H3NVOio53cEQTXohpXGRJQpSR0KOjkNiF8BgnSiMGa496r0OR2VRMzh4YZJ5oVtpCFNlulHTtzEjkEdPW4bon+eXhN0Qw+FFDk4XVQfPLUEpg0JMnA8AioucBB1qx5bCGdxlyebzLKvKViOWBbU/nghaP0AA/HNkf7L+1qp2QgaF73uct1yg/U2ZEF21TKIgrxdh4alZY/19zEK3/YvjvxbNgu/+vVqfd9a6cReR+H4Y+FQqj61KByonte1OkCY0N2tUJQj53Lq9bjkfDjPk7+5/UZ9BkyXQ2D0hParvO+yS207IxJydC2KXKWjq11JVibqnO6Npd9C+z13LTpyvP5aveXiAtUtxNUO330pTVPjoF/rmsGJENvWtyA1Uy4ckUBHEegL0TAfqBsxYJN/1dGxPFgfn8xs7k6NOvgg52iZbPAk9GzwZwgW59k9rLr1eWQuYs0ogTM0WwudbersaSyaFXvnabSe2GPr8bD7XyYFLGio1ju+w6fqedAqbz57FvXPoWE+NKvzx+hwJ6aKeC78EfkWbCy/4mVPudfsb7HLQ4rw7L6xWQQSOIVD1fQ==","1; DB6PR0802MB2549;\n\t6:/6B7XcrNpW+VMSqXdNk0/x7XYXWqbC210MyzQ3go20lhDKf3irzkAmjkfDWbTon7PmmOWTIGfIwJnuVU3RMXoKpOFGCgLg5oPXgxfO9xIGCKh/iyXwPMwwwtfZlVfqgvANuvhr5j1Ii1cwGUxBJ/vjb94HBMSgze3sMRrqpwmGUmsRdfDtC4p/wVTk6uh7EaA82WtQeJ8PkzbKTADJR2oXNlAfgIBETdwUHOyM2JmkwxNlaYkpukW73YaeRvQ0TSj3o1TRf4eaLmaJTj4QT/ApSUXXBpAExb8IaY+/pf28nMbSEdrwxRha8cTo3RgGM8Hkdpy+YKO4J65FsKgMcDOQ==;\n\t5:WxqOII826x9svhHMKpT7hEysoJ8CKe2tHrao89aCVsCgmIKVd312l+aTMfCUu+VeymVSLnhP/jxxFBynr40LTEX8lScDaDA9sQzd95ays2kUtFLP8z0/3Ikxoj4hDjZXKkwBu/SeOpBWMgplrlshQQ==;\n\t24:AdevsPc8yXbe6IKMGRTaOw0yG3rSIsqWBKPpJVvILProvCkdCYwHdanwh1C4iaQFHBFF7KpM4X38VFiymdgo/HrFs2U5j0OOUUFJMO+Nj48=;\n\t7:osCuYQhKqj2tftruUHWrWRTNkW4DqLM+RFq9mFvouKIgdHI9s9obBotLaJ0tgHXN9SM1CPafBZaJHB09xPX8qcMvYDzMgwUxOK5hpSbynIgd4YnwLGr0OMjKSTgbgJmFP904Mcs0gsP0leza6Xd/IVsxKMhuX+nNLKB2sraVS6NxtMJiQ51wpILMOwYgybQ0XeBXv8kltqhoAlv+TTdsPndMF8F88jTF62iWPzZhYjs=","1; DB6PR0802MB2549;\n\t20:r1xJ3RrfvqrY+cZRBFxK0GVjPbvtR4v+mRwcqAhN/r72lCySGxu5MzsZ8l7MuNdobXtCtPGZUJoMmQAU7fIFFNCbsZembTtgOm4ZUnRtowhvMY1lXFVw71HqksEbBSN8bfYuY4XgqMVkSBxT7xmjk0b4y8XYrffKwpW3TglLRFY="],"X-MS-TrafficTypeDiagnostic":"DB6PR0802MB2549:","X-Exchange-Antispam-Report-Test":"UriScan:;","X-Microsoft-Antispam-PRVS":"<DB6PR0802MB2549A7F2BDE90E3A516CE775AC630@DB6PR0802MB2549.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)(3002001)(10201501046)(93006095)(93001095)(100000703101)(100105400095)(6041248)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123562025)(20161123558100)(20161123564025)(20161123555025)(20161123560025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);\n\tSRVR:DB6PR0802MB2549; BCL:0; PCL:0;\n\tRULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);\n\tSRVR:DB6PR0802MB2549; ","X-Forefront-PRVS":"04347F8039","X-Forefront-Antispam-Report":"SFV:NSPM;\n\tSFS:(10019020)(7370300001)(4630300001)(6009001)(346002)(376002)(39830400002)(199003)(189002)(36756003)(48376002)(105586002)(50466002)(107886003)(101416001)(110136004)(53416004)(50226002)(25786009)(305945005)(7736002)(53936002)(81156014)(4326008)(81166006)(6666003)(5003940100001)(68736007)(2906002)(8676002)(6506006)(3846002)(86362001)(478600001)(6486002)(6512007)(1076002)(6116002)(50986999)(76176999)(47776003)(2950100002)(33646002)(575784001)(16586007)(7350300001)(97736004)(16526017)(106356001)(316002)(5660300001)(66066001)(69596002)(189998001)(15760500002);\n\tDIR:OUT; SFP:1102; SCL:1; SRVR:DB6PR0802MB2549;\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":"18 Sep 2017 12:42:48.5873\n\t(UTC)","X-MS-Exchange-CrossTenant-FromEntityHeader":"Hosted","X-MS-Exchange-Transport-CrossTenantHeadersStamped":"DB6PR0802MB2549","X-detected-operating-system":"by eggs.gnu.org: Windows 7 or 8 [fuzzy]","X-Received-From":"40.107.0.136","Subject":"[Qemu-devel] [PATCH v8 2/4] qcow2: add qcow2_cache_discard","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, pbutsykin@virtuozzo.com, jsnow@redhat.com,\n\tarmbru@redhat.com, mreitz@redhat.com, den@openvz.org","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":"Whenever l2/refcount table clusters are discarded from the file we can\nautomatically drop unnecessary content of the cache tables. This reduces\nthe chance of eviction useful cache data and eliminates inconsistent data\nin the cache with the data in the file.\n\nSigned-off-by: Pavel Butsykin <pbutsykin@virtuozzo.com>\nReviewed-by: Max Reitz <mreitz@redhat.com>\nReviewed-by: John Snow <jsnow@redhat.com>\n---\n block/qcow2-cache.c    | 26 ++++++++++++++++++++++++++\n block/qcow2-refcount.c | 20 ++++++++++++++++++--\n block/qcow2.h          |  3 +++\n 3 files changed, 47 insertions(+), 2 deletions(-)","diff":"diff --git a/block/qcow2-cache.c b/block/qcow2-cache.c\nindex 1d25147392..75746a7f43 100644\n--- a/block/qcow2-cache.c\n+++ b/block/qcow2-cache.c\n@@ -411,3 +411,29 @@ void qcow2_cache_entry_mark_dirty(BlockDriverState *bs, Qcow2Cache *c,\n     assert(c->entries[i].offset != 0);\n     c->entries[i].dirty = true;\n }\n+\n+void *qcow2_cache_is_table_offset(BlockDriverState *bs, Qcow2Cache *c,\n+                                  uint64_t offset)\n+{\n+    int i;\n+\n+    for (i = 0; i < c->size; i++) {\n+        if (c->entries[i].offset == offset) {\n+            return qcow2_cache_get_table_addr(bs, c, i);\n+        }\n+    }\n+    return NULL;\n+}\n+\n+void qcow2_cache_discard(BlockDriverState *bs, Qcow2Cache *c, void *table)\n+{\n+    int i = qcow2_cache_get_table_idx(bs, c, table);\n+\n+    assert(c->entries[i].ref == 0);\n+\n+    c->entries[i].offset = 0;\n+    c->entries[i].lru_counter = 0;\n+    c->entries[i].dirty = false;\n+\n+    qcow2_cache_table_release(bs, c, i, 1);\n+}\ndiff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c\nindex 168fc32e7b..8c17c0e3aa 100644\n--- a/block/qcow2-refcount.c\n+++ b/block/qcow2-refcount.c\n@@ -861,8 +861,24 @@ static int QEMU_WARN_UNUSED_RESULT update_refcount(BlockDriverState *bs,\n         }\n         s->set_refcount(refcount_block, block_index, refcount);\n \n-        if (refcount == 0 && s->discard_passthrough[type]) {\n-            update_refcount_discard(bs, cluster_offset, s->cluster_size);\n+        if (refcount == 0) {\n+            void *table;\n+\n+            table = qcow2_cache_is_table_offset(bs, s->refcount_block_cache,\n+                                                offset);\n+            if (table != NULL) {\n+                qcow2_cache_put(bs, s->refcount_block_cache, &refcount_block);\n+                qcow2_cache_discard(bs, s->refcount_block_cache, table);\n+            }\n+\n+            table = qcow2_cache_is_table_offset(bs, s->l2_table_cache, offset);\n+            if (table != NULL) {\n+                qcow2_cache_discard(bs, s->l2_table_cache, table);\n+            }\n+\n+            if (s->discard_passthrough[type]) {\n+                update_refcount_discard(bs, cluster_offset, s->cluster_size);\n+            }\n         }\n     }\n \ndiff --git a/block/qcow2.h b/block/qcow2.h\nindex 96a8d43c17..52c374e9ed 100644\n--- a/block/qcow2.h\n+++ b/block/qcow2.h\n@@ -649,6 +649,9 @@ int qcow2_cache_get(BlockDriverState *bs, Qcow2Cache *c, uint64_t offset,\n int qcow2_cache_get_empty(BlockDriverState *bs, Qcow2Cache *c, uint64_t offset,\n     void **table);\n void qcow2_cache_put(BlockDriverState *bs, Qcow2Cache *c, void **table);\n+void *qcow2_cache_is_table_offset(BlockDriverState *bs, Qcow2Cache *c,\n+                                  uint64_t offset);\n+void qcow2_cache_discard(BlockDriverState *bs, Qcow2Cache *c, void *table);\n \n /* qcow2-bitmap.c functions */\n int qcow2_check_bitmaps_refcounts(BlockDriverState *bs, BdrvCheckResult *res,\n","prefixes":["v8","2/4"]}