From nobody Wed Nov 5 16:41:00 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; dkim=fail; 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 1535292813695178.0086144628882; Sun, 26 Aug 2018 07:13:33 -0700 (PDT) Received: from localhost ([::1]:49224 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ftvn7-0000h0-48 for importer@patchew.org; Sun, 26 Aug 2018 10:13:21 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60105) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ftvl9-00082l-FW for qemu-devel@nongnu.org; Sun, 26 Aug 2018 10:11:20 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ftvl6-0006yM-3T for qemu-devel@nongnu.org; Sun, 26 Aug 2018 10:11:19 -0400 Received: from fanzine.igalia.com ([91.117.99.155]:59596) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1ftvl4-0006UA-0A; Sun, 26 Aug 2018 10:11:15 -0400 Received: from 85-76-74-234-nat.elisa-mobile.fi ([85.76.74.234] helo=perseus.local) by fanzine.igalia.com with esmtpsa (Cipher TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim) id 1ftvkQ-0004AS-Kb; Sun, 26 Aug 2018 16:10:34 +0200 Received: from berto by perseus.local with local (Exim 4.89) (envelope-from ) id 1ftvkB-0004mW-C3; Sun, 26 Aug 2018 17:10:19 +0300 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com; s=20170329; h=References:In-Reply-To:References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From; bh=TGNaiaoBdXdCSoIcgMu7gk5Lk8ZOT6RZvdmUAvoX68w=; b=cM/p4TowSfSmw7jchRDHaSHBhxCCj7+ilX7LpCajwqyMcgDtRlaItPHyQO847N95c8W0gRTY4BWH1qM5jpB81xnPgG68+Or8j4jtdEx+Ucg+9To11lNuAVj0uz9pL+wDFw/Go93sMnVXdvJ9NJewmS5J5lDrRQHyyRetcbFbji0X/qhEW24rhNVzLmQ/uJjX3A1iqkCjnQDPcUVZrFrhpUTS+fsB6h1TpH10phxITNMXlb4s7t25xtHdfLVOZdmUo/wtm5567VoD2NcvHaQGU6CAbxQ+QxAmhxyE+aDenKWQbAAMqfx+d61HYzUSlLxgA+Idg499qNmQtZeN/gix0Q==; From: Alberto Garcia To: qemu-devel@nongnu.org Date: Sun, 26 Aug 2018 17:09:40 +0300 Message-Id: X-Mailer: git-send-email 2.11.0 In-Reply-To: References: In-Reply-To: References: X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x (no timestamps) [generic] [fuzzy] X-Received-From: 91.117.99.155 Subject: [Qemu-devel] [PATCH 9/9] block: Allow changing 'force-share' on reopen 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@nongnu.org, Max Reitz Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 'force-share' is one of the basic BlockdevOptions available for all drivers, but it's silently ignored by bdrv_reopen_prepare/commit(), so the user cannot change it and doesn't get an error explaining that it can't be changed. One example of how this option is being ignored is that on a read-write image this should produce an error: (qemu) qemu-io virtio0 "reopen -o force-share=3Don" force-share=3Don can only be used with read-only images Since there's no reason why we shouldn't allow changing it and the implementation is simple let's just do it. Signed-off-by: Alberto Garcia Reviewed-by: Max Reitz --- block.c | 30 ++++++++++++++++++++++++------ include/block/block.h | 1 + 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/block.c b/block.c index 9aed5c19f4..b6e495b716 100644 --- a/block.c +++ b/block.c @@ -788,6 +788,18 @@ static BlockdevDetectZeroesOptions bdrv_parse_detect_z= eroes(QemuOpts *opts, return detect_zeroes; } =20 +static bool bdrv_parse_force_share(QemuOpts *opts, int flags, Error **errp) +{ + bool value =3D qemu_opt_get_bool(opts, BDRV_OPT_FORCE_SHARE, false); + + if (value && (flags & BDRV_O_RDWR)) { + error_setg(errp, BDRV_OPT_FORCE_SHARE + "=3Don can only be used with read-only images"); + } + + return value; +} + /** * Set open flags for a given discard mode * @@ -1373,12 +1385,9 @@ static int bdrv_open_common(BlockDriverState *bs, Bl= ockBackend *file, drv =3D bdrv_find_format(driver_name); assert(drv !=3D NULL); =20 - bs->force_share =3D qemu_opt_get_bool(opts, BDRV_OPT_FORCE_SHARE, fals= e); - - if (bs->force_share && (bs->open_flags & BDRV_O_RDWR)) { - error_setg(errp, - BDRV_OPT_FORCE_SHARE - "=3Don can only be used with read-only images"); + bs->force_share =3D bdrv_parse_force_share(opts, bs->open_flags, &loca= l_err); + if (local_err) { + error_propagate(errp, local_err); ret =3D -EINVAL; goto fail_opts; } @@ -3201,6 +3210,14 @@ int bdrv_reopen_prepare(BDRVReopenState *reopen_stat= e, BlockReopenQueue *queue, goto error; } =20 + reopen_state->force_share =3D + bdrv_parse_force_share(opts, reopen_state->flags, &local_err); + if (local_err) { + error_propagate(errp, local_err); + ret =3D -EINVAL; + goto error; + } + /* node-name and driver must be unchanged. Put them back into the QDic= t, so * that they are checked at the end of this function. */ value =3D qemu_opt_get(opts, "node-name"); @@ -3359,6 +3376,7 @@ void bdrv_reopen_commit(BDRVReopenState *reopen_state) bs->open_flags =3D reopen_state->flags; bs->read_only =3D !(reopen_state->flags & BDRV_O_RDWR); bs->detect_zeroes =3D reopen_state->detect_zeroes; + bs->force_share =3D reopen_state->force_share; =20 /* Remove child references from bs->options and bs->explicit_options */ QLIST_FOREACH(child, &bs->children, next) { diff --git a/include/block/block.h b/include/block/block.h index f71fa5a1c4..a49a027c54 100644 --- a/include/block/block.h +++ b/include/block/block.h @@ -185,6 +185,7 @@ typedef struct BDRVReopenState { BlockDriverState *bs; int flags; BlockdevDetectZeroesOptions detect_zeroes; + bool force_share; uint64_t perm, shared_perm; QDict *options; QDict *explicit_options; --=20 2.11.0