From patchwork Tue Aug 1 13:49:05 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Manos Pitsidianakis X-Patchwork-Id: 9874663 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id D837A6038F for ; Tue, 1 Aug 2017 13:53:38 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C5E3D27F8E for ; Tue, 1 Aug 2017 13:53:38 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id BA2F0285D1; Tue, 1 Aug 2017 13:53:38 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 28B3D27F8E for ; Tue, 1 Aug 2017 13:53:37 +0000 (UTC) Received: from localhost ([::1]:42664 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dcXbx-0007Oo-CK for patchwork-qemu-devel@patchwork.kernel.org; Tue, 01 Aug 2017 09:53:25 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60400) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dcXZ1-0005lo-Uv for qemu-devel@nongnu.org; Tue, 01 Aug 2017 09:50:25 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dcXYx-0005Je-6S for qemu-devel@nongnu.org; Tue, 01 Aug 2017 09:50:24 -0400 Received: from smtp1.ntua.gr ([2001:648:2000:de::183]:48064) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dcXYu-000587-8H; Tue, 01 Aug 2017 09:50:16 -0400 Received: from mail.ntua.gr ([IPv6:2a02:587:8020:2800:cd94:9845:8007:a6e4]) (authenticated bits=0) by smtp1.ntua.gr (8.15.2/8.15.2) with ESMTPSA id v71Dnar6012811 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 1 Aug 2017 16:49:36 +0300 (EEST) (envelope-from el13635@mail.ntua.gr) X-Authentication-Warning: smtp1.ntua.gr: Host [IPv6:2a02:587:8020:2800:cd94:9845:8007:a6e4] claimed to be mail.ntua.gr From: Manos Pitsidianakis To: qemu-devel Date: Tue, 1 Aug 2017 16:49:05 +0300 Message-Id: <20170801134907.31253-2-el13635@mail.ntua.gr> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170801134907.31253-1-el13635@mail.ntua.gr> References: <20170801134907.31253-1-el13635@mail.ntua.gr> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2001:648:2000:de::183 Subject: [Qemu-devel] [PATCH 1/3] block: add options parameter to bdrv_new_open_driver() 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: Kevin Wolf , Alberto Garcia , qemu-block , Stefan Hajnoczi Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Allow passing a QDict *options parameter to bdrv_new_open_driver() so that it can be used if a driver needs it upon creation. The previous behaviour (empty bs->options and bs->explicit_options) remains when options is NULL. Signed-off-by: Manos Pitsidianakis --- block.c | 16 +++++++++++++--- block/commit.c | 4 ++-- block/mirror.c | 2 +- block/vvfat.c | 2 +- include/block/block.h | 2 +- 5 files changed, 18 insertions(+), 8 deletions(-) diff --git a/block.c b/block.c index 37e72b7a96..886a457ab0 100644 --- a/block.c +++ b/block.c @@ -1149,16 +1149,26 @@ free_and_fail: return ret; } +/* + * If options is not NULL it is cloned (which adds another reference to the + * option entries). If the call to bdrv_new_open_driver() is successful, the + * caller should unref options to pass ownership. + * */ BlockDriverState *bdrv_new_open_driver(BlockDriver *drv, const char *node_name, - int flags, Error **errp) + int flags, QDict *options, Error **errp) { BlockDriverState *bs; int ret; bs = bdrv_new(); bs->open_flags = flags; - bs->explicit_options = qdict_new(); - bs->options = qdict_new(); + if (options) { + bs->explicit_options = qdict_clone_shallow(options); + bs->options = qdict_clone_shallow(options); + } else { + bs->explicit_options = qdict_new(); + bs->options = qdict_new(); + } bs->opaque = NULL; update_options_from_flags(bs->options, flags); diff --git a/block/commit.c b/block/commit.c index c7857c3321..539e23c3f8 100644 --- a/block/commit.c +++ b/block/commit.c @@ -342,7 +342,7 @@ void commit_start(const char *job_id, BlockDriverState *bs, /* Insert commit_top block node above top, so we can block consistent read * on the backing chain below it */ commit_top_bs = bdrv_new_open_driver(&bdrv_commit_top, filter_node_name, 0, - errp); + NULL, errp); if (commit_top_bs == NULL) { goto fail; } @@ -494,7 +494,7 @@ int bdrv_commit(BlockDriverState *bs) backing_file_bs = backing_bs(bs); commit_top_bs = bdrv_new_open_driver(&bdrv_commit_top, NULL, BDRV_O_RDWR, - &local_err); + NULL, &local_err); if (commit_top_bs == NULL) { error_report_err(local_err); goto ro_cleanup; diff --git a/block/mirror.c b/block/mirror.c index c9a6a3ca86..e1a160e6ea 100644 --- a/block/mirror.c +++ b/block/mirror.c @@ -1164,7 +1164,7 @@ static void mirror_start_job(const char *job_id, BlockDriverState *bs, * reads on the top, while disabling it in the intermediate nodes, and make * the backing chain writable. */ mirror_top_bs = bdrv_new_open_driver(&bdrv_mirror_top, filter_node_name, - BDRV_O_RDWR, errp); + BDRV_O_RDWR, NULL, errp); if (mirror_top_bs == NULL) { return; } diff --git a/block/vvfat.c b/block/vvfat.c index a9e207f7f0..6c59473baf 100644 --- a/block/vvfat.c +++ b/block/vvfat.c @@ -3194,7 +3194,7 @@ static int enable_write_target(BlockDriverState *bs, Error **errp) #endif backing = bdrv_new_open_driver(&vvfat_write_target, NULL, BDRV_O_ALLOW_RDWR, - &error_abort); + NULL, &error_abort); *(void**) backing->opaque = s; bdrv_set_backing_hd(s->bs, backing, &error_abort); diff --git a/include/block/block.h b/include/block/block.h index 34770bb33a..020289a37d 100644 --- a/include/block/block.h +++ b/include/block/block.h @@ -263,7 +263,7 @@ int bdrv_open_backing_file(BlockDriverState *bs, QDict *parent_options, BlockDriverState *bdrv_open(const char *filename, const char *reference, QDict *options, int flags, Error **errp); BlockDriverState *bdrv_new_open_driver(BlockDriver *drv, const char *node_name, - int flags, Error **errp); + int flags, QDict *options, Error **errp); BlockReopenQueue *bdrv_reopen_queue(BlockReopenQueue *bs_queue, BlockDriverState *bs, QDict *options, int flags);