From: Demi Marie Obenour <demi@invisiblethingslab.com>
To: "Roger Pau Monné" <roger.pau@citrix.com>
Cc: "Jens Axboe" <axboe@kernel.dk>,
"Mike Snitzer" <snitzer@kernel.org>,
"Marek Marczykowski-Górecki" <marmarek@invisiblethingslab.com>,
linux-kernel@vger.kernel.org, linux-block@vger.kernel.org,
dm-devel@redhat.com, xen-devel@lists.xenproject.org,
"Alasdair Kergon" <agk@redhat.com>
Subject: Re: [dm-devel] [PATCH v2 16/16] xen-blkback: Inform userspace that device has been opened
Date: Thu, 8 Jun 2023 11:23:07 -0400 [thread overview]
Message-ID: <ZIHyXrAj5+DXAblD@itl-email> (raw)
In-Reply-To: <ZIGbUDpqjwbR5zmz@Air-de-Roger>
[-- Attachment #1.1: Type: text/plain, Size: 4967 bytes --]
On Thu, Jun 08, 2023 at 11:11:44AM +0200, Roger Pau Monné wrote:
> On Wed, Jun 07, 2023 at 12:29:26PM -0400, Demi Marie Obenour wrote:
> > On Wed, Jun 07, 2023 at 10:44:48AM +0200, Roger Pau Monné wrote:
> > > On Tue, Jun 06, 2023 at 01:31:25PM -0400, Demi Marie Obenour wrote:
> > > > On Tue, Jun 06, 2023 at 11:15:37AM +0200, Roger Pau Monné wrote:
> > > > > On Tue, May 30, 2023 at 04:31:16PM -0400, Demi Marie Obenour wrote:
> > > > > > Set "opened" to "0" before the hotplug script is called. Once the
> > > > > > device node has been opened, set "opened" to "1".
> > > > > >
> > > > > > "opened" is used exclusively by userspace. It serves two purposes:
> > > > > >
> > > > > > 1. It tells userspace that the diskseq Xenstore entry is supported.
> > > > > >
> > > > > > 2. It tells userspace that it can wait for "opened" to be set to 1.
> > > > > > Once "opened" is 1, blkback has a reference to the device, so
> > > > > > userspace doesn't need to keep one.
> > > > > >
> > > > > > Together, these changes allow userspace to use block devices with
> > > > > > delete-on-close behavior, such as loop devices with the autoclear flag
> > > > > > set or device-mapper devices with the deferred-remove flag set.
> > > > >
> > > > > There was some work in the past to allow reloading blkback as a
> > > > > module, it's clear that using delete-on-close won't work if attempting
> > > > > to reload blkback.
> > > >
> > > > Should blkback stop itself from being unloaded if delete-on-close is in
> > > > use?
> > >
> > > Hm, maybe. I guess that's the best we can do right now.
> >
> > I’ll implement this.
>
> Let's make this a separate patch.
Good idea.
> > > > > Isn't there some existing way to check whether a device is opened?
> > > > > (stat syscall maybe?).
> > > >
> > > > Knowing that the device has been opened isn’t enough. The block script
> > > > needs to be able to wait for blkback (and not something else) to open
> > > > the device. Otherwise it will be confused if the device is opened by
> > > > e.g. udev.
> > >
> > > Urg, no, the block script cannot wait indefinitely for blkback to open
> > > the device, as it has an execution timeout. blkback is free to only
> > > open the device upon guest frontend connection, and that (when using
> > > libxl) requires the hotplug scripts execution to be finished so the
> > > guest can be started.
> >
> > I’m a bit confused here. My understanding is that blkdev_get_by_dev()
> > already opens the device, and that happens in the xenstore watch
> > handler. I have tested this with delete-on-close device-mapper devices,
> > and it does work.
>
> Right, but on a very contended system there's no guarantee of when
> blkback will pick up the update to "physical-device" and open the
> device, so far the block script only writes the physical-device node
> and exits. With the proposed change the block script will also wait
> for blkback to react to the physcal-device write, hence making VM
> creation slower.
Only block scripts that choose to wait for device open suffer
this performance penalty. My current plan is to only do so for
delete-on-close devices which are managed by the block script
itself. Other devices will not suffer a performance hit.
In the long term, I would like to solve this problem entirely by using
an ioctl to configure blkback. The ioctl would take a file descriptor
argument, avoiding the need for a round-trip through xenstore. This
also solves a security annoyance with the current design, which is that
the device is opened by a kernel thread and so the security context of
whoever requested the device to be opened is lost.
> > > > > I would like to avoid adding more xenstore blkback state if such
> > > > > information can be fetched from other methods.
> > > >
> > > > I don’t think it can be, unless the information is passed via a
> > > > completely different method. Maybe netlink(7) or ioctl(2)? Arguably
> > > > this information should not be stored in Xenstore at all, as it exposes
> > > > backend implementation details to the frontend.
> > >
> > > Could you maybe use sysfs for this information?
> >
> > Probably? This would involve adding a new file in sysfs.
> >
> > > We have all sorts of crap in xenstore, but it would be best if we can
> > > see of placing stuff like this in another interface.
> >
> > Fair.
>
> Let's see if that's a suitable approach, and we can avoid having to
> add an extra node to xenstore.
I thought about this some more and realized that in Qubes OS, we might
want to include the diskseq in the information dom0 gets about each
exported block device. This would allow dom0 to write the xenstore node
itself, but it would require some way for dom0 to be informed about
blkback having this feature.
--
Sincerely,
Demi Marie Obenour (she/her/hers)
Invisible Things Lab
[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
[-- Attachment #2: Type: text/plain, Size: 98 bytes --]
--
dm-devel mailing list
dm-devel@redhat.com
https://listman.redhat.com/mailman/listinfo/dm-devel
next prev parent reply other threads:[~2023-06-08 15:24 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-30 20:31 [dm-devel] [PATCH v2 00/16] Diskseq support in loop, device-mapper, and blkback Demi Marie Obenour
2023-05-30 20:31 ` [dm-devel] [PATCH v2 01/16] device-mapper: Check that target specs are sufficiently aligned Demi Marie Obenour
2023-05-30 20:31 ` [dm-devel] [PATCH v2 02/16] device-mapper: Avoid pointer arithmetic overflow Demi Marie Obenour
2023-05-30 20:31 ` [dm-devel] [PATCH v2 03/16] device-mapper: do not allow targets to overlap 'struct dm_ioctl' Demi Marie Obenour
2023-05-30 20:31 ` [dm-devel] [PATCH v2 04/16] device-mapper: Better error message for too-short target spec Demi Marie Obenour
2023-05-30 20:31 ` [dm-devel] [PATCH v2 05/16] device-mapper: Target parameters must not overlap next " Demi Marie Obenour
2023-05-30 20:31 ` [dm-devel] [PATCH v2 06/16] device-mapper: Avoid double-fetch of version Demi Marie Obenour
2023-05-30 20:31 ` [dm-devel] [PATCH v2 07/16] device-mapper: Allow userspace to opt-in to strict parameter checks Demi Marie Obenour
2023-05-30 20:31 ` [dm-devel] [PATCH v2 08/16] device-mapper: Allow userspace to provide expected diskseq Demi Marie Obenour
2023-05-30 20:31 ` [dm-devel] [PATCH v2 09/16] device-mapper: Allow userspace to suppress uevent generation Demi Marie Obenour
2023-05-30 20:31 ` [dm-devel] [PATCH v2 10/16] device-mapper: Refuse to create device named "control" Demi Marie Obenour
2023-05-30 20:31 ` [dm-devel] [PATCH v2 11/16] device-mapper: "." and ".." are not valid symlink names Demi Marie Obenour
2023-05-30 20:31 ` [dm-devel] [PATCH v2 12/16] device-mapper: inform caller about already-existing device Demi Marie Obenour
2023-05-30 20:31 ` [dm-devel] [PATCH v2 13/16] xen-blkback: Implement diskseq checks Demi Marie Obenour
2023-06-06 8:25 ` Roger Pau Monné
2023-06-06 17:01 ` Demi Marie Obenour
2023-06-07 8:20 ` Roger Pau Monné
2023-06-07 16:14 ` Demi Marie Obenour
2023-06-08 8:29 ` Roger Pau Monné
2023-06-08 15:33 ` Demi Marie Obenour
2023-06-09 15:13 ` Roger Pau Monné
2023-06-09 16:55 ` Demi Marie Obenour
2023-06-12 8:09 ` Roger Pau Monné
2023-06-21 1:14 ` Demi Marie Obenour
2023-06-21 10:07 ` Roger Pau Monné
2023-05-30 20:31 ` [dm-devel] [PATCH v2 14/16] block, loop: Increment diskseq when releasing a loop device Demi Marie Obenour
2023-05-30 20:31 ` [dm-devel] [PATCH v2 15/16] xen-blkback: Minor cleanups Demi Marie Obenour
2023-06-06 8:36 ` Roger Pau Monné
2023-05-30 20:31 ` [dm-devel] [PATCH v2 16/16] xen-blkback: Inform userspace that device has been opened Demi Marie Obenour
2023-06-06 9:15 ` Roger Pau Monné
2023-06-06 17:31 ` Demi Marie Obenour
2023-06-07 8:44 ` Roger Pau Monné
2023-06-07 16:29 ` Demi Marie Obenour
2023-06-08 9:11 ` Roger Pau Monné
2023-06-08 15:23 ` Demi Marie Obenour [this message]
2023-06-08 10:08 ` Roger Pau Monné
2023-06-08 15:24 ` Demi Marie Obenour
2023-05-31 13:06 ` [dm-devel] [PATCH v2 00/16] Diskseq support in loop, device-mapper, and blkback Christoph Hellwig
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=ZIHyXrAj5+DXAblD@itl-email \
--to=demi@invisiblethingslab.com \
--cc=agk@redhat.com \
--cc=axboe@kernel.dk \
--cc=dm-devel@redhat.com \
--cc=linux-block@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=marmarek@invisiblethingslab.com \
--cc=roger.pau@citrix.com \
--cc=snitzer@kernel.org \
--cc=xen-devel@lists.xenproject.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).