qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Stefan Hajnoczi <stefanha@redhat.com>
To: Kevin Wolf <kwolf@redhat.com>
Cc: qemu-block@nongnu.org, hreitz@redhat.com, pkrempa@redhat.com,
	peterx@redhat.com, farosas@suse.de, qemu-devel@nongnu.org
Subject: Re: [PATCH v2 12/15] nbd/server: Support inactive nodes
Date: Mon, 3 Feb 2025 14:19:25 -0500	[thread overview]
Message-ID: <20250203191925.GN268514@fedora> (raw)
In-Reply-To: <20250131095051.49708-3-kwolf@redhat.com>

[-- Attachment #1: Type: text/plain, Size: 2064 bytes --]

On Fri, Jan 31, 2025 at 10:50:48AM +0100, Kevin Wolf wrote:
> In order to support running an NBD export on inactive nodes, we must
> make sure to return errors for any operations that aren't allowed on
> inactive nodes. Reads are the only operation we know we need for
> inactive images, so to err on the side of caution, return errors for
> everything else, even if some operations could possibly be okay.
> 
> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
> ---
>  nbd/server.c | 17 +++++++++++++++++
>  1 file changed, 17 insertions(+)
> 
> diff --git a/nbd/server.c b/nbd/server.c
> index f64e47270c..2076fb2666 100644
> --- a/nbd/server.c
> +++ b/nbd/server.c
> @@ -2026,6 +2026,7 @@ static void nbd_export_delete(BlockExport *blk_exp)
>  const BlockExportDriver blk_exp_nbd = {
>      .type               = BLOCK_EXPORT_TYPE_NBD,
>      .instance_size      = sizeof(NBDExport),
> +    .supports_inactive  = true,
>      .create             = nbd_export_create,
>      .delete             = nbd_export_delete,
>      .request_shutdown   = nbd_export_request_shutdown,
> @@ -2920,6 +2921,22 @@ static coroutine_fn int nbd_handle_request(NBDClient *client,
>      NBDExport *exp = client->exp;
>      char *msg;
>      size_t i;
> +    bool inactive;
> +
> +    WITH_GRAPH_RDLOCK_GUARD() {
> +        inactive = bdrv_is_inactive(blk_bs(exp->common.blk));
> +        if (inactive) {
> +            switch (request->type) {
> +            case NBD_CMD_READ:
> +                /* These commands are allowed on inactive nodes */
> +                break;
> +            default:
> +                /* Return an error for the rest */
> +                return nbd_send_generic_reply(client, request, -EPERM,
> +                                              "export is inactive", errp);
> +            }
> +        }
> +    }

Hmm...end of lock guard. What prevents the race where inactive changes
before the request is performed?

>  
>      switch (request->type) {
>      case NBD_CMD_CACHE:
> -- 
> 2.48.1
> 

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

  parent reply	other threads:[~2025-02-03 19:20 UTC|newest]

Thread overview: 51+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-01-30 17:12 [PATCH v2 00/15] block: Managing inactive nodes (QSD migration) Kevin Wolf
2025-01-30 17:12 ` [PATCH v2 01/15] block: Add 'active' field to BlockDeviceInfo Kevin Wolf
2025-01-30 19:30   ` Eric Blake
2025-02-03 18:47   ` Stefan Hajnoczi
2025-01-30 17:12 ` [PATCH v2 02/15] block: Inactivate external snapshot overlays when necessary Kevin Wolf
2025-01-30 19:46   ` Eric Blake
2025-02-03 18:48   ` Stefan Hajnoczi
2025-01-30 17:12 ` [PATCH v2 03/15] migration/block-active: Remove global active flag Kevin Wolf
2025-01-30 19:50   ` Eric Blake
2025-02-04 15:50     ` Kevin Wolf
2025-02-03 18:49   ` Stefan Hajnoczi
2025-01-30 17:12 ` [PATCH v2 04/15] block: Don't attach inactive child to active node Kevin Wolf
2025-01-30 20:08   ` Eric Blake
2025-02-03 18:50   ` Stefan Hajnoczi
2025-01-30 17:12 ` [PATCH v2 05/15] block: Allow inactivating already inactive nodes Kevin Wolf
2025-01-30 20:09   ` Eric Blake
2025-02-03 18:51   ` Stefan Hajnoczi
2025-01-30 17:12 ` [PATCH v2 06/15] block: Fix crash on block_resize on inactive node Kevin Wolf
2025-01-30 20:11   ` Eric Blake
2025-02-03 18:52   ` Stefan Hajnoczi
2025-01-30 17:12 ` [PATCH v2 07/15] block: Add option to create inactive nodes Kevin Wolf
2025-01-30 20:17   ` Eric Blake
2025-02-03 18:53   ` Stefan Hajnoczi
2025-01-30 17:12 ` [PATCH v2 08/15] block: Add blockdev-set-active QMP command Kevin Wolf
2025-01-30 20:22   ` Eric Blake
2025-02-03 18:54   ` Stefan Hajnoczi
2025-01-30 17:12 ` [PATCH v2 09/15] block: Support inactive nodes in blk_insert_bs() Kevin Wolf
2025-01-30 20:26   ` Eric Blake
2025-02-03 18:55   ` Stefan Hajnoczi
2025-01-31  9:50 ` [PATCH v2 10/15] block/export: Don't ignore image activation error in blk_exp_add() Kevin Wolf
2025-02-03 16:30   ` Eric Blake
2025-02-03 18:58   ` Stefan Hajnoczi
2025-02-04 15:54     ` Kevin Wolf
2025-01-31  9:50 ` [PATCH v2 11/15] block/export: Add option to allow export of inactive nodes Kevin Wolf
2025-01-31 13:41   ` Fabiano Rosas
2025-02-04 15:44     ` Kevin Wolf
2025-02-03 19:12   ` Eric Blake
2025-02-03 19:17   ` Stefan Hajnoczi
2025-01-31  9:50 ` [PATCH v2 12/15] nbd/server: Support " Kevin Wolf
2025-02-03 19:17   ` Eric Blake
2025-02-03 19:19   ` Stefan Hajnoczi [this message]
2025-02-04 17:10     ` Kevin Wolf
2025-01-31  9:50 ` [PATCH v2 13/15] iotests: Add filter_qtest() Kevin Wolf
2025-02-03 19:19   ` Eric Blake
2025-01-31  9:50 ` [PATCH v2 14/15] iotests: Add qsd-migrate case Kevin Wolf
2025-02-03 19:35   ` Eric Blake
2025-02-03 21:09     ` Kevin Wolf
2025-01-31  9:50 ` [PATCH v2 15/15] iotests: Add (NBD-based) tests for inactive nodes Kevin Wolf
2025-02-03 19:49   ` Eric Blake
2025-02-04 16:30     ` Kevin Wolf
2025-01-31 13:53 ` [PATCH v2 00/15] block: Managing inactive nodes (QSD migration) Fabiano Rosas

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20250203191925.GN268514@fedora \
    --to=stefanha@redhat.com \
    --cc=farosas@suse.de \
    --cc=hreitz@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=peterx@redhat.com \
    --cc=pkrempa@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).