[libvirt PATCHv3 10/12] qemu: add code for handling virtiofsd

Masayoshi Mizuma msys.mizuma at gmail.com
Tue Feb 4 19:35:44 UTC 2020


On Tue, Feb 04, 2020 at 05:36:23PM +0100, Ján Tomko wrote:
> On Mon, Feb 03, 2020 at 10:16:29PM -0500, Masayoshi Mizuma wrote:
> > On Thu, Jan 30, 2020 at 06:06:26PM +0100, Ján Tomko wrote:
> > > Start virtiofsd for each <filesystem> device using it.
> > > 
> > > Pre-create the socket for communication with QEMU and pass it
> > > to virtiofsd.
> > > 
> > > Note that virtiofsd needs to run as root.
> > > 
> > > https://bugzilla.redhat.com/show_bug.cgi?id=1694166
> > > 
> > > Introduced by QEMU commit a43efa34c7d7b628cbf1ec0fe60043e5c91043ea
> > > 
> > > Signed-off-by: Ján Tomko <jtomko at redhat.com>
> > > ---
> > >  po/POTFILES.in            |   1 +
> > >  src/qemu/Makefile.inc.am  |   2 +
> > >  src/qemu/qemu_domain.c    |   5 +-
> > >  src/qemu/qemu_domain.h    |   2 +-
> > >  src/qemu/qemu_extdevice.c |  20 ++-
> > >  src/qemu/qemu_virtiofs.c  | 290 ++++++++++++++++++++++++++++++++++++++
> > >  src/qemu/qemu_virtiofs.h  |  38 +++++
> > >  tests/qemuxml2argvtest.c  |  11 ++
> > >  8 files changed, 366 insertions(+), 3 deletions(-)
> > >  create mode 100644 src/qemu/qemu_virtiofs.c
> > >  create mode 100644 src/qemu/qemu_virtiofs.h
> > > 
> > > diff --git a/po/POTFILES.in b/po/POTFILES.in
> > > index c18e21615f..813fb24199 100644
> > > --- a/po/POTFILES.in
> > > +++ b/po/POTFILES.in
> > > @@ -168,6 +168,7 @@
> > >  @SRCDIR@/src/qemu/qemu_tpm.c
> > >  @SRCDIR@/src/qemu/qemu_vhost_user.c
> > >  @SRCDIR@/src/qemu/qemu_vhost_user_gpu.c
> > > + at SRCDIR@/src/qemu/qemu_virtiofs.c
> > >  @SRCDIR@/src/remote/remote_daemon.c
> > >  @SRCDIR@/src/remote/remote_daemon_config.c
> > >  @SRCDIR@/src/remote/remote_daemon_dispatch.c
> > > diff --git a/src/qemu/Makefile.inc.am b/src/qemu/Makefile.inc.am
> > > index d04a87e659..7a205b4da6 100644
> > > --- a/src/qemu/Makefile.inc.am
> > > +++ b/src/qemu/Makefile.inc.am
> > > @@ -67,6 +67,8 @@ QEMU_DRIVER_SOURCES = \
> > >  	qemu/qemu_vhost_user.h \
> > >  	qemu/qemu_vhost_user_gpu.c \
> > >  	qemu/qemu_vhost_user_gpu.h \
> > > +	qemu/qemu_virtiofs.c \
> > > +	qemu/qemu_virtiofs.h \
> > >  	qemu/qemu_checkpoint.c \
> > >  	qemu/qemu_checkpoint.h \
> > >  	qemu/qemu_backup.c \
> > > diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
> > > index b5d5812ff8..3064c33ca8 100644
> > > --- a/src/qemu/qemu_domain.c
> > > +++ b/src/qemu/qemu_domain.c
> > > @@ -1440,8 +1440,11 @@ qemuDomainFSPrivateNew(void)
> > > 
> > > 
> > >  static void
> > > -qemuDomainFSPrivateDispose(void *obj G_GNUC_UNUSED)
> > > +qemuDomainFSPrivateDispose(void *obj)
> > >  {
> > > +    qemuDomainFSPrivatePtr priv = obj;
> > > +
> > > +    g_free(priv->vhostuser_fs_sock);
> > >  }
> > 
> > How about adding close the logfile fd here?
> > That is because virtlogd keeps opening the fd even after the guest is
> 
> Thanks for catching that.
> 
> Currently libvirtd does not access the log after starting up the
> virtiofsd so all that is needed is to close it in this function:
> 
> diff --git a/src/qemu/qemu_virtiofs.c b/src/qemu/qemu_virtiofs.c
> index e0683d6468..067cef7e22 100644
> --- a/src/qemu/qemu_virtiofs.c
> +++ b/src/qemu/qemu_virtiofs.c
> @@ -217,7 +217,6 @@ qemuVirtioFSStart(virLogManagerPtr logManager,
>          goto cleanup;
> 
>      rc = virCommandRun(cmd, NULL);
> -    logfd = -1;
> 
>      if (rc < 0) {
>          virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> 
> (and the VIR_AUTOCLOSE attribute will take care of closing it when it
> goes out of scope)

Great, it works!

- Masa





More information about the libvir-list mailing list