{"id":1307027,"url":"http://patchwork.ozlabs.org/api/patches/1307027/?format=json","web_url":"http://patchwork.ozlabs.org/project/qemu-devel/patch/42651a32704f79337daa357aba4840ec9219b3f2.1591801197.git.berto@igalia.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":"<42651a32704f79337daa357aba4840ec9219b3f2.1591801197.git.berto@igalia.com>","list_archive_url":null,"date":"2020-06-10T15:03:05","name":"[v8,27/34] qcow2: Add subcluster support to handle_alloc_space()","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"fd7a8032b4a36393ff8d719ad5970e7b25e216ae","submitter":{"id":65704,"url":"http://patchwork.ozlabs.org/api/people/65704/?format=json","name":"Alberto Garcia","email":"berto@igalia.com"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/qemu-devel/patch/42651a32704f79337daa357aba4840ec9219b3f2.1591801197.git.berto@igalia.com/mbox/","series":[{"id":182563,"url":"http://patchwork.ozlabs.org/api/series/182563/?format=json","web_url":"http://patchwork.ozlabs.org/project/qemu-devel/list/?series=182563","date":"2020-06-10T15:02:49","name":"Add subcluster allocation to qcow2","version":8,"mbox":"http://patchwork.ozlabs.org/series/182563/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/1307027/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/1307027/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 spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=<UNKNOWN>)","ozlabs.org;\n dmarc=none (p=none dis=none) header.from=igalia.com","ozlabs.org;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n unprotected) header.d=igalia.com header.i=@igalia.com header.a=rsa-sha256\n header.s=20170329 header.b=SefJlcnh;\n\tdkim-atps=neutral"],"Received":["from lists.gnu.org (lists.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 49hrN16gsGz9sQx\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 11 Jun 2020 01:22:57 +1000 (AEST)","from localhost ([::1]:50254 helo=lists1p.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>)\n\tid 1jj2Z5-0003v4-KF\n\tfor incoming@patchwork.ozlabs.org; Wed, 10 Jun 2020 11:22:55 -0400","from eggs.gnu.org ([2001:470:142:3::10]:36154)\n by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <berto@igalia.com>)\n id 1jj2Gx-0002jk-Fb; Wed, 10 Jun 2020 11:04:11 -0400","from fanzine.igalia.com ([178.60.130.6]:58256)\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)\n (Exim 4.90_1) (envelope-from <berto@igalia.com>)\n id 1jj2Gr-0006wh-OV; Wed, 10 Jun 2020 11:04:11 -0400","from [81.0.38.199] (helo=perseus.local)\n by fanzine.igalia.com with esmtpsa\n (Cipher TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim)\n id 1jj2GR-0007hD-Qg; Wed, 10 Jun 2020 17:03:39 +0200","from berto by perseus.local with local (Exim 4.92)\n (envelope-from <berto@igalia.com>)\n id 1jj2GC-0007Ng-FW; Wed, 10 Jun 2020 17:03:24 +0200"],"DKIM-Signature":"v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com;\n s=20170329;\n h=Content-Transfer-Encoding:MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From;\n bh=4RyZy5V804lVKxA8KqkjTU8F4A+oI5KX0VxrhskdhLk=;\n b=SefJlcnhxfqNWH7mxpS/YYV7ICFQUa8mps1f6+vA2x1R2BE77qhnAmKv4Y3h8Bj/EJRCDfiU6v73fJ1DRcGSJIHJ6BiNzesK8Hp4qFSH/PqLTy0uZUgqhzg6iKZaBkN1LkV4ECLP91p2MbVS7ZEmd8oJ7ETs0TVpT3SXpe8FY0SOfn4HhEVQAyenT9XHlgxziB6X34PxBAFy5+a2ktA63W1X6zZaPLC0dCnoW26N7wMnZbEwiYUIw48Mb7LWmj7ZHC9jjhoAmGttfWynaTO4Xo/j7Sbir1k13kgpHqWb/9powBsJZixNYUzaltb3iBuVugd8NTzXftblvBOKNQx/bw==;","From":"Alberto Garcia <berto@igalia.com>","To":"qemu-devel@nongnu.org","Subject":"[PATCH v8 27/34] qcow2: Add subcluster support to\n handle_alloc_space()","Date":"Wed, 10 Jun 2020 17:03:05 +0200","Message-Id":"\n <42651a32704f79337daa357aba4840ec9219b3f2.1591801197.git.berto@igalia.com>","X-Mailer":"git-send-email 2.20.1","In-Reply-To":"<cover.1591801197.git.berto@igalia.com>","References":"<cover.1591801197.git.berto@igalia.com>","MIME-Version":"1.0","Content-Transfer-Encoding":"8bit","Received-SPF":"pass client-ip=178.60.130.6; envelope-from=berto@igalia.com;\n helo=fanzine.igalia.com","X-detected-operating-system":"by eggs.gnu.org: First seen = 2020/06/10 11:03:39","X-ACL-Warn":"Detected OS   = Linux 2.2.x-3.x (no timestamps) [generic] [fuzzy]","X-Spam_score_int":"-20","X-Spam_score":"-2.1","X-Spam_bar":"--","X-Spam_report":"(-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,\n DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001,\n SPF_PASS=-0.001 autolearn=_AUTOLEARN","X-Spam_action":"no action","X-BeenThere":"qemu-devel@nongnu.org","X-Mailman-Version":"2.1.23","Precedence":"list","List-Id":"<qemu-devel.nongnu.org>","List-Unsubscribe":"<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>","List-Archive":"<https://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 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>","Cc":"Kevin Wolf <kwolf@redhat.com>,\n Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>,\n Alberto Garcia <berto@igalia.com>, qemu-block@nongnu.org,\n Derek Su <dereksu@qnap.com>, Max Reitz <mreitz@redhat.com>","Errors-To":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org","Sender":"\"Qemu-devel\"\n <qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>"},"content":"The bdrv_co_pwrite_zeroes() call here fills complete clusters with\nzeroes, but it can happen that some subclusters are not part of the\nwrite request or the copy-on-write. This patch makes sure that only\nthe affected subclusters are overwritten.\n\nA potential improvement would be to also fill with zeroes the other\nsubclusters if we can guarantee that we are not overwriting existing\ndata. However this would waste more disk space, so we should first\nevaluate if it's really worth doing.\n\nSigned-off-by: Alberto Garcia <berto@igalia.com>\nReviewed-by: Max Reitz <mreitz@redhat.com>\nReviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>\n---\n block/qcow2.c | 9 +++++----\n 1 file changed, 5 insertions(+), 4 deletions(-)","diff":"diff --git a/block/qcow2.c b/block/qcow2.c\nindex a3481cd85b..86258fbc22 100644\n--- a/block/qcow2.c\n+++ b/block/qcow2.c\n@@ -2411,6 +2411,9 @@ static int handle_alloc_space(BlockDriverState *bs, QCowL2Meta *l2meta)\n \n     for (m = l2meta; m != NULL; m = m->next) {\n         int ret;\n+        uint64_t start_offset = m->alloc_offset + m->cow_start.offset;\n+        unsigned nb_bytes = m->cow_end.offset + m->cow_end.nb_bytes -\n+            m->cow_start.offset;\n \n         if (!m->cow_start.nb_bytes && !m->cow_end.nb_bytes) {\n             continue;\n@@ -2425,16 +2428,14 @@ static int handle_alloc_space(BlockDriverState *bs, QCowL2Meta *l2meta)\n          * efficiently zero out the whole clusters\n          */\n \n-        ret = qcow2_pre_write_overlap_check(bs, 0, m->alloc_offset,\n-                                            m->nb_clusters * s->cluster_size,\n+        ret = qcow2_pre_write_overlap_check(bs, 0, start_offset, nb_bytes,\n                                             true);\n         if (ret < 0) {\n             return ret;\n         }\n \n         BLKDBG_EVENT(bs->file, BLKDBG_CLUSTER_ALLOC_SPACE);\n-        ret = bdrv_co_pwrite_zeroes(s->data_file, m->alloc_offset,\n-                                    m->nb_clusters * s->cluster_size,\n+        ret = bdrv_co_pwrite_zeroes(s->data_file, start_offset, nb_bytes,\n                                     BDRV_REQ_NO_FALLBACK);\n         if (ret < 0) {\n             if (ret != -ENOTSUP && ret != -EAGAIN) {\n","prefixes":["v8","27/34"]}