[Libguestfs] [nbdkit PATCH 5/5] ext2: Support parallel requests and connections
Richard W.M. Jones
rjones at redhat.com
Tue May 11 14:34:00 UTC 2021
On Thu, May 06, 2021 at 08:59:40PM -0500, Eric Blake wrote:
> Instead of serializing connections (which in turn serializes requests)
> because it is unsafe to open more than one handle into the filesystem
> at the same time, use the recently-added APIs to open the filesystem
> during .after_fork, then use the fact that ext2 code then supports
> parallel access to files within the single system handle.
...
> +/* Opening more than one instance of the filesystem in parallel is a
> + * recipe for disaster, so instead we open a single instance during
> + * after_fork to share among all client connections. If the
> + * underlying plugin supports parallel requests, then we do too since
> + * ext2 code is re-entrant through our one open handle.
> + */
> +static int
> +ext2_after_fork (nbdkit_backend *nxdata)
> +{
> + CLEANUP_FREE char *name = NULL;
> + int fs_flags;
> + int64_t r;
> + errcode_t err;
> +
> + /* It would be desirable for ‘nbdkit -r’ to behave the same way as
> + * ‘mount -o ro’. But we don't know the state of the readonly flag
> + * until ext2_open is called, so for now we can't do that. We could
> + * add a knob during .config if desired; but until then, we blindly
> + * request write access to the underlying plugin, for journal
> + * replay.
> + *
> + * Similarly, there is no sane way to pass the client's exportname
> + * through to the plugin (whether or not .config was set to serve a
> + * single file or to let the client choose by exportname), so
> + * blindly ask for "" and rely on the plugin's default.
> + */
I feel we ought to try to fix this before applying this patch.
Since it's a filter, could we not pass the global readonly flag as a
parameter to after_fork? (Or allow filters to read the global flag I
suppose, but ... yuck ...)
Or we should add the extra ext2readonly=true|false parameter. Which
might be the easiest and most predictable way to fix this. There's
even a case where you might use -r + writable ext2 with some kind of
implausible reverse cow filter.
Rich.
--
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-builder quickly builds VMs from scratch
http://libguestfs.org/virt-builder.1.html
More information about the Libguestfs
mailing list