From nobody Wed Dec 17 21:46:20 2025 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; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 152096052273676.71210801411496; Tue, 13 Mar 2018 10:02:02 -0700 (PDT) Received: from localhost ([::1]:41279 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1evnJJ-0005fc-Sb for importer@patchew.org; Tue, 13 Mar 2018 13:02:01 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59540) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1evmdI-0001W3-6Q for qemu-devel@nongnu.org; Tue, 13 Mar 2018 12:18:40 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1evmdG-0004gV-So for qemu-devel@nongnu.org; Tue, 13 Mar 2018 12:18:36 -0400 Received: from mx3-rdu2.redhat.com ([66.187.233.73]:52410 helo=mx1.redhat.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1evmdE-0004eU-Dc; Tue, 13 Mar 2018 12:18:32 -0400 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 0722E76FB9; Tue, 13 Mar 2018 16:18:32 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-117-214.ams2.redhat.com [10.36.117.214]) by smtp.corp.redhat.com (Postfix) with ESMTP id 37566215CDAF; Tue, 13 Mar 2018 16:18:31 +0000 (UTC) From: Kevin Wolf To: qemu-block@nongnu.org Date: Tue, 13 Mar 2018 17:17:45 +0100 Message-Id: <20180313161803.1814-24-kwolf@redhat.com> In-Reply-To: <20180313161803.1814-1-kwolf@redhat.com> References: <20180313161803.1814-1-kwolf@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.1]); Tue, 13 Mar 2018 16:18:32 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.1]); Tue, 13 Mar 2018 16:18:32 +0000 (UTC) for IP:'10.11.54.6' DOMAIN:'int-mx06.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'kwolf@redhat.com' RCPT:'' Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 66.187.233.73 Subject: [Qemu-devel] [PULL 23/41] luks: Create block_crypto_co_create_generic() 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, peter.maydell@linaro.org, qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Everything that refers to the protocol layer or QemuOpts is moved out of block_crypto_create_generic(), so that the remaining function is suitable to be called by a .bdrv_co_create implementation. LUKS is the only driver that actually implements the old interface, and we don't intend to use it in any new drivers, so put the moved out code directly into a LUKS function rather than creating a generic intermediate one. Signed-off-by: Kevin Wolf Reviewed-by: Daniel P. Berrang=C3=A9 Reviewed-by: Eric Blake --- block/crypto.c | 95 +++++++++++++++++++++++++++++++++++++-----------------= ---- 1 file changed, 61 insertions(+), 34 deletions(-) diff --git a/block/crypto.c b/block/crypto.c index 77871640cc..b0a4cb3388 100644 --- a/block/crypto.c +++ b/block/crypto.c @@ -306,43 +306,29 @@ static int block_crypto_open_generic(QCryptoBlockForm= at format, } =20 =20 -static int block_crypto_create_generic(QCryptoBlockFormat format, - const char *filename, - QemuOpts *opts, - Error **errp) +static int block_crypto_co_create_generic(BlockDriverState *bs, + int64_t size, + QCryptoBlockCreateOptions *opts, + Error **errp) { - int ret =3D -EINVAL; - QCryptoBlockCreateOptions *create_opts =3D NULL; + int ret; + BlockBackend *blk; QCryptoBlock *crypto =3D NULL; - struct BlockCryptoCreateData data =3D { - .size =3D ROUND_UP(qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0), - BDRV_SECTOR_SIZE), - }; - QDict *cryptoopts; - - /* Parse options */ - cryptoopts =3D qemu_opts_to_qdict(opts, NULL); + struct BlockCryptoCreateData data; =20 - create_opts =3D block_crypto_create_opts_init(format, cryptoopts, errp= ); - if (!create_opts) { - return -1; - } + blk =3D blk_new(BLK_PERM_WRITE | BLK_PERM_RESIZE, BLK_PERM_ALL); =20 - /* Create protocol layer */ - ret =3D bdrv_create_file(filename, opts, errp); + ret =3D blk_insert_bs(blk, bs, errp); if (ret < 0) { - return ret; + goto cleanup; } =20 - data.blk =3D blk_new_open(filename, NULL, NULL, - BDRV_O_RDWR | BDRV_O_RESIZE | BDRV_O_PROTOCOL, - errp); - if (!data.blk) { - return -EINVAL; - } + data =3D (struct BlockCryptoCreateData) { + .blk =3D blk, + .size =3D size, + }; =20 - /* Create format layer */ - crypto =3D qcrypto_block_create(create_opts, NULL, + crypto =3D qcrypto_block_create(opts, NULL, block_crypto_init_func, block_crypto_write_func, &data, @@ -355,10 +341,8 @@ static int block_crypto_create_generic(QCryptoBlockFor= mat format, =20 ret =3D 0; cleanup: - QDECREF(cryptoopts); qcrypto_block_free(crypto); - blk_unref(data.blk); - qapi_free_QCryptoBlockCreateOptions(create_opts); + blk_unref(blk); return ret; } =20 @@ -563,8 +547,51 @@ static int coroutine_fn block_crypto_co_create_opts_lu= ks(const char *filename, QemuOpts *opts, Error **errp) { - return block_crypto_create_generic(Q_CRYPTO_BLOCK_FORMAT_LUKS, - filename, opts, errp); + QCryptoBlockCreateOptions *create_opts =3D NULL; + BlockDriverState *bs =3D NULL; + QDict *cryptoopts; + int64_t size; + int ret; + + /* Parse options */ + size =3D qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0); + + cryptoopts =3D qemu_opts_to_qdict_filtered(opts, NULL, + &block_crypto_create_opts_luk= s, + true); + + create_opts =3D block_crypto_create_opts_init(Q_CRYPTO_BLOCK_FORMAT_LU= KS, + cryptoopts, errp); + if (!create_opts) { + ret =3D -EINVAL; + goto fail; + } + + /* Create protocol layer */ + ret =3D bdrv_create_file(filename, opts, errp); + if (ret < 0) { + return ret; + } + + bs =3D bdrv_open(filename, NULL, NULL, + BDRV_O_RDWR | BDRV_O_RESIZE | BDRV_O_PROTOCOL, errp); + if (!bs) { + ret =3D -EINVAL; + goto fail; + } + + /* Create format layer */ + ret =3D block_crypto_co_create_generic(bs, size, create_opts, errp); + if (ret < 0) { + goto fail; + } + + ret =3D 0; +fail: + bdrv_unref(bs); + qapi_free_QCryptoBlockCreateOptions(create_opts); + QDECREF(cryptoopts); + return ret; } =20 static int block_crypto_get_info_luks(BlockDriverState *bs, --=20 2.13.6