From nobody Tue Feb 10 04:29:39 2026 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; 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 1515700938441193.04177071153265; Thu, 11 Jan 2018 12:02:18 -0800 (PST) Received: from localhost ([::1]:38139 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eZj3J-00051B-Gq for importer@patchew.org; Thu, 11 Jan 2018 15:02:17 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58073) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eZiuz-0005fW-Rs for qemu-devel@nongnu.org; Thu, 11 Jan 2018 14:53:42 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eZiuw-0000nN-0O for qemu-devel@nongnu.org; Thu, 11 Jan 2018 14:53:41 -0500 Received: from mx1.redhat.com ([209.132.183.28]:50434) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1eZiut-0000ij-N0; Thu, 11 Jan 2018 14:53:35 -0500 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id A60D42D0FDB; Thu, 11 Jan 2018 19:53:34 +0000 (UTC) Received: from localhost.localdomain.com (unknown [10.36.118.59]) by smtp.corp.redhat.com (Postfix) with ESMTP id E4D6C7FD21; Thu, 11 Jan 2018 19:53:29 +0000 (UTC) From: Kevin Wolf To: qemu-block@nongnu.org Date: Thu, 11 Jan 2018 20:52:22 +0100 Message-Id: <20180111195225.4226-8-kwolf@redhat.com> In-Reply-To: <20180111195225.4226-1-kwolf@redhat.com> References: <20180111195225.4226-1-kwolf@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Thu, 11 Jan 2018 19:53:34 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [RFC PATCH 07/10] qcow2: Handle full/falloc preallocation in qcow2_create2() 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, pkrempa@redhat.com, qemu-devel@nongnu.org, mreitz@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Once qcow2_create2() can be called directly on an already existing node, we must provide the 'full' and 'falloc' preallocation modes outside of creating the image on the protocol layer. Fortunately, we have preallocated truncate now which can provide this functionality. Signed-off-by: Kevin Wolf Reviewed-by: Eric Blake --- block/qcow2.c | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/block/qcow2.c b/block/qcow2.c index 686b765c06..868e0e8a62 100644 --- a/block/qcow2.c +++ b/block/qcow2.c @@ -2832,6 +2832,25 @@ static int qcow2_create2(BlockdevCreateOptions *crea= te_options, Error **errp) } blk_set_allow_write_beyond_eof(blk, true); =20 + /* Clear the protocol layer and preallocate it if necessary */ + ret =3D blk_truncate(blk, 0, PREALLOC_MODE_OFF, errp); + if (ret < 0) { + goto out; + } + + if (qcow2_opts->preallocation =3D=3D PREALLOC_MODE_FULL || + qcow2_opts->preallocation =3D=3D PREALLOC_MODE_FALLOC) + { + int64_t prealloc_size =3D + qcow2_calc_prealloc_size(qcow2_opts->size, cluster_size, + refcount_order); + + ret =3D blk_truncate(blk, prealloc_size, qcow2_opts->preallocation= , errp); + if (ret < 0) { + goto out; + } + } + /* Write the header */ QEMU_BUILD_BUG_ON((1 << MIN_CLUSTER_BITS) < sizeof(*header)); header =3D g_malloc0(cluster_size); @@ -3068,15 +3087,6 @@ static int qcow2_create(const char *filename, QemuOp= ts *opts, Error **errp) =20 =20 /* Create and open the file (protocol layer */ - if (prealloc =3D=3D PREALLOC_MODE_FULL || prealloc =3D=3D PREALLOC_MOD= E_FALLOC) { - int refcount_order =3D ctz32(refcount_bits); - int64_t prealloc_size =3D - qcow2_calc_prealloc_size(size, cluster_size, refcount_order); - qemu_opt_set_number(opts, BLOCK_OPT_SIZE, prealloc_size, &error_ab= ort); - qemu_opt_set(opts, BLOCK_OPT_PREALLOC, PreallocMode_str(prealloc), - &error_abort); - } - ret =3D bdrv_create_file(filename, opts, errp); if (ret < 0) { goto finish; --=20 2.13.6