From: Stefan Hajnoczi <stefanha@redhat.com>
To: Markus Armbruster <armbru@redhat.com>
Cc: Jonathon Jongsma <jjongsma@redhat.com>,
qemu-devel@nongnu.org, Kevin Wolf <kwolf@redhat.com>,
qemu-block@nongnu.org, Hanna Reitz <hreitz@redhat.com>,
sgarzare@redhat.com
Subject: Re: [PATCH v3 1/1] block/blkio: use qemu_open() to support fd passing for virtio-blk
Date: Wed, 17 May 2023 10:30:23 -0400 [thread overview]
Message-ID: <20230517143023.GA65838@fedora> (raw)
In-Reply-To: <vcinivshe3tf4iod7ys236fq5ovzhyhei5zvo2uf636fpb2vtr@swcn25px5h5z>
[-- Attachment #1: Type: text/plain, Size: 4429 bytes --]
On Wed, May 17, 2023 at 09:19:26AM +0200, Stefano Garzarella wrote:
> CCing Markus for some advice.
>
> On Tue, May 16, 2023 at 11:04:21AM -0500, Jonathon Jongsma wrote:
> > On 5/15/23 5:10 AM, Stefano Garzarella wrote:
> > > On Thu, May 11, 2023 at 11:03:22AM -0500, Jonathon Jongsma wrote:
> > > > On 5/11/23 4:15 AM, Stefano Garzarella wrote:
> > > > > The virtio-blk-vhost-vdpa driver in libblkio 1.3.0 supports the new
> > > > > 'fd' property. Let's expose this to the user, so the management layer
> > > > > can pass the file descriptor of an already opened vhost-vdpa character
> > > > > device. This is useful especially when the device can only be accessed
> > > > > with certain privileges.
> > > > >
> > > > > If the libblkio virtio-blk driver supports fd passing, let's always
> > > > > use qemu_open() to open the `path`, so we can handle fd passing
> > > > > from the management layer through the "/dev/fdset/N" special path.
> > > > >
> > > > > Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
> > > > > ---
> > > > >
> > > > > Notes:
> > > > > v3:
> > > > > - use qemu_open() on `path` to simplify libvirt code [Jonathon]
> > > >
> > > >
> > > > Thanks
> > > >
> > > > The one drawback now is that it doesn't seem possible for
> > > > libvirt to introspect whether or not qemu supports passing an fd
> > > > to the driver or not.
> > >
> > > Yep, this was because the libblkio library did not support this new way.
> > >
> > > > When I was writing my initial patch (before I realized that it
> > > > was missing fd-passing), I just checked for the existence of the
> > > > virtio-blk-vhost-vdpa device. But we actually need to know both
> > > > that this device exists and supports fd passing.
> > >
> > > Yep, this was one of the advantages of using the new `fd` parameter.
> > > Can't libvirt handle the later failure?
> >
> > Not very well. libvirt tries to provide useful errors to the user. So
> > for example if the qemu executable doesn't support a device, we would
> > want to provide an error indicating that the device is not supported
> > rather than a possibly-inscrutable qemu error.
> >
> > For example, in this scenario, we would want an error such as:
> >
> > error: unsupported configuration: vhostvdpa disk is not supported with
> > this QEMU binary
> >
> > Instead of:
> >
> > error: internal error: qemu unexpectedly closed the monitor:
> > 2023-05-16T15:17:36.666129Z qemu-system-x86_64: -blockdev {"driver":"virtio-blk-vhost-vdpa","path":"/dev/fdset/0","node-name":"libvirt-1-storage","cache":{"direct":true,"no-flush":false},"auto-read-only":true,"discard":"unmap"}:
> > blkio_connect failed: Failed to connect to vDPA device: Input/output
> > error
> >
> > And we can only do that if we can determine that the binary has the
> > proper support for fds.
>
> I see the problem, thanks for explaining this!
>
> >
> > >
> > > > As far as I can tell, versions 7.2.0 and 8.0.0 include this
> > > > device but won't accept fds.
> > >
> > > Right.
> > >
> > > How do you suggest to proceed?
> >
> > I need some way to determine that the particular qemu binary can accept
> > a /dev/fdset/ path for vdpa block devices. libvirt uses a variety of
> > methods to determine capabilities for a given qemu binary, including
> > querying the qmp schema, commands, object types, specific device/object
> > properties, etc. For example, right now I can determine (via querying
> > the qmp schema) whether virtio-blk-vhost-vdpa is a valid type for the
> > blockdev-add command by querying the qmp schema. I need something more
> > than that but I'm not sure how to do it without introducing a separate
> > 'fd' parameter. Any ideas?
>
> The only thing I can think of is to make a mix between v2 and v3. I mean add
> both the new `fd` parameter, and support qemu_open() on `path`.
>
> That way libvirt (or other users) can check that fd passing is supported and
> use `fd` or fdset with `path`.
>
> Obviously I would have liked to implement only one of the two methods, but
> if this helps, maybe it makes sense to support both.
>
> What do you think?
Markus: Is a preferred way to make this new path handling behavior
introspectable? I vaguely remember a way for QMP clients to query
strings that describe QMP behavior that's not otherwise
introspectable...
Stefan
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
next prev parent reply other threads:[~2023-05-17 14:30 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-11 9:15 [PATCH v3 0/1] block/blkio: support 'fd' option for virtio-blk-vhost-vdpa driver Stefano Garzarella
2023-05-11 9:15 ` [PATCH v3 1/1] block/blkio: use qemu_open() to support fd passing for virtio-blk Stefano Garzarella
2023-05-11 16:03 ` Jonathon Jongsma
2023-05-15 10:10 ` Stefano Garzarella
2023-05-16 16:04 ` Jonathon Jongsma
2023-05-17 7:19 ` Stefano Garzarella
2023-05-17 14:30 ` Stefan Hajnoczi [this message]
2023-05-24 9:05 ` Stefano Garzarella
2023-05-24 19:16 ` Stefan Hajnoczi
2023-05-25 18:30 ` Markus Armbruster
2023-05-25 18:59 ` Jonathon Jongsma
2023-05-26 14:25 ` Stefano Garzarella
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=20230517143023.GA65838@fedora \
--to=stefanha@redhat.com \
--cc=armbru@redhat.com \
--cc=hreitz@redhat.com \
--cc=jjongsma@redhat.com \
--cc=kwolf@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=sgarzare@redhat.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.