[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] libxl/xl: add support for Xen 9pfs



On Mon, 27 Mar 2017, Wei Liu wrote:
> On Thu, Mar 23, 2017 at 04:36:19PM -0700, Stefano Stabellini wrote:
> >  docs/man/xl.cfg.pod.5.in             | 31 +++++++++++++
> >  tools/libxl/Makefile                 |  2 +-
> >  tools/libxl/libxl.h                  | 10 +++++
> >  tools/libxl/libxl_9pfs.c             | 87 
> > ++++++++++++++++++++++++++++++++++++
> >  tools/libxl/libxl_create.c           |  3 ++
> >  tools/libxl/libxl_internal.h         |  6 +++
> >  tools/libxl/libxl_types.idl          | 10 +++++
> >  tools/libxl/libxl_types_internal.idl |  1 +
> >  tools/xl/xl_parse.c                  | 55 ++++++++++++++++++++++-
> >  9 files changed, 203 insertions(+), 2 deletions(-)
> >  create mode 100644 tools/libxl/libxl_9pfs.c
> > 
> > diff --git a/docs/man/xl.cfg.pod.5.in b/docs/man/xl.cfg.pod.5.in
> > index 505c111..699a644 100644
> > --- a/docs/man/xl.cfg.pod.5.in
> > +++ b/docs/man/xl.cfg.pod.5.in
> > @@ -516,6 +516,37 @@ value is optional if this is a guest domain.
> >  
> >  =back
> >  
> > +=item B<xen_9pfs=[ "XEN_9PFS_SPEC_STRING", "XEN_9PFS_SPEC_STRING", ...]>
> > +
> 
> Let me guess, the reason for xen_ prefix is 9pfs isn't really a valid
> identifier in C.
> 
> Can we get rid of the xen_ prefix by naming everything p9* ? I think
> that's how QEMU does it.

OK. I'll rename the VM config option to 9pfs, and all the internal
functions and variables to 9p.


> > +Creates a Xen 9pfs connection to share a filesystem from backend to
> > +frontend.
> > +
> > +Each B<XEN_9PFS_SPEC_STRING> is a comma-separated list of C<KEY=VALUE>
> > +settings, from the following list:
> > +
> > +=over 4
> > +
> > +=item C<tag=STRING>
> > +
> > +9pfs tag to identify the filesystem share. The tag is needed on the
> > +guest side to mount it.
> > +
> > +=item C<security_model="none">
> > +
> > +Only "none" is supported today, which means that files are stored using
> > +the same credentials as they are created on the guest (no user ownership
> > +squash or remap).
> > +
> 
> What is the difficulty for supporting other modes as well?
> 
> I think it is just passing through the string to QEMU, right?

It is also testing and validation. Also, the current version of the
protocol only supports "none".


> > +=item C<path=STRING>
> > +
> > +Filesystem path on the backend to export.
> > +
> > +=item C<backend=DOMAIN>
> > +
> > +Specify the backend domain name or id, defaults to dom0.
> > +
> > +=back
> > +
> >  =item B<vfb=[ "VFB_SPEC_STRING", "VFB_SPEC_STRING", ...]>
> >  
> [...]
> > diff --git a/tools/libxl/libxl_9pfs.c b/tools/libxl/libxl_9pfs.c
> > new file mode 100644
> > index 0000000..8cb0772
> > --- /dev/null
> > +++ b/tools/libxl/libxl_9pfs.c
> > @@ -0,0 +1,87 @@
> > +/*
> > + * Copyright (C) 2017      Aporeto
> > + * Author Stefano Stabellini <stefano@xxxxxxxxxxx>
> > + *
> > + * This program is free software; you can redistribute it and/or modify
> > + * it under the terms of the GNU Lesser General Public License as published
> > + * by the Free Software Foundation; version 2.1 only. with the special
> > + * exception on linking described in file LICENSE.
> > + *
> > + * This program is distributed in the hope that it will be useful,
> > + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> > + * GNU Lesser General Public License for more details.
> > + */
> > +
> > +#include "libxl_osdeps.h"
> > +
> > +#include "libxl_internal.h"
> > +
> > +int libxl__device_xen_9pfs_setdefault(libxl__gc *gc, libxl_device_xen_9pfs 
> > *xen_9pfs)
> > +{
> > +    int rc;
> > +
> > +    rc = libxl__resolve_domid(gc, xen_9pfs->backend_domname, 
> > &xen_9pfs->backend_domid);
> 
> These lines are too long.

I'll fix


> > +    return rc;
> > +}
> > +
> > +static int libxl__device_from_xen_9pfs(libxl__gc *gc, uint32_t domid,
> > +                                   libxl_device_xen_9pfs *xen_9pfs,
> > +                                   libxl__device *device)
> > +{
> > +   device->backend_devid   = xen_9pfs->devid;
> > +   device->backend_domid   = xen_9pfs->backend_domid;
> > +   device->backend_kind    = LIBXL__DEVICE_KIND_9PFS;
> > +   device->devid           = xen_9pfs->devid;
> > +   device->domid           = domid;
> > +   device->kind            = LIBXL__DEVICE_KIND_9PFS;
> > +
> > +   return 0;
> > +}
> > +
> > +
> > +int libxl__device_xen_9pfs_add(libxl__gc *gc, uint32_t domid,
> > +                           libxl_device_xen_9pfs *xen_9pfs)
> 
> Indentation.

I'll fix


> > +{
> > +    flexarray_t *front;
> > +    flexarray_t *back;
> > +    libxl__device device;
> > +    int rc;
> > +
> > +    rc = libxl__device_xen_9pfs_setdefault(gc, xen_9pfs);
> > +    if (rc) goto out;
> > +
> > +    front = flexarray_make(gc, 16, 1);
> > +    back = flexarray_make(gc, 16, 1);
> > +
> > +    if (xen_9pfs->devid == -1) {
> > +        if ((xen_9pfs->devid = libxl__device_nextid(gc, domid, "9pfs")) < 
> > 0) {
> > +            rc = ERROR_FAIL;
> > +            goto out;
> > +        }
> > +    }
> > +
> > +    rc = libxl__device_from_xen_9pfs(gc, domid, xen_9pfs, &device);
> > +    if (rc != 0) goto out;
> > +
> > +    flexarray_append_pair(back, "frontend-id", libxl__sprintf(gc, "%d", 
> > domid));
> > +    flexarray_append_pair(back, "online", "1");
> > +    flexarray_append_pair(back, "state", GCSPRINTF("%d", 
> > XenbusStateInitialising));
> > +    flexarray_append_pair(front, "backend-id",
> > +                          libxl__sprintf(gc, "%d", 
> > xen_9pfs->backend_domid));
> > +    flexarray_append_pair(front, "state", GCSPRINTF("%d", 
> > XenbusStateInitialising));
> > +    flexarray_append_pair(front, "tag", xen_9pfs->tag);
> > +    flexarray_append_pair(back, "path", xen_9pfs->path);
> > +    flexarray_append_pair(back, "security_model", 
> > xen_9pfs->security_model);
> > +
> > +    libxl__device_generic_add(gc, XBT_NULL, &device,
> > +                              libxl__xs_kvs_of_flexarray(gc, back),
> > +                              libxl__xs_kvs_of_flexarray(gc, front),
> > +                              NULL);
> > +    rc = 0;
> > +out:
> > +    return rc;
> > +}
> > +
> > +LIBXL_DEFINE_DEVICE_REMOVE(xen_9pfs)
> > +
> [...]
> >  libxl__console_backend = Enumeration("console_backend", [
> > diff --git a/tools/xl/xl_parse.c b/tools/xl/xl_parse.c
> > index 1ef0c27..275b72f 100644
> > --- a/tools/xl/xl_parse.c
> > +++ b/tools/xl/xl_parse.c
> > @@ -716,7 +716,7 @@ void parse_config_data(const char *config_source,
> >      long l, vcpus = 0;
> >      XLU_Config *config;
> >      XLU_ConfigList *cpus, *vbds, *nics, *pcis, *cvfbs, *cpuids, *vtpms,
> > -                   *usbctrls, *usbdevs;
> > +                   *usbctrls, *usbdevs, *xen_9pfs_opts;
> 
> Maybe make the name more like the others?

I'll do


> Other than these superficial issues, the code looks correct to me.

OK, thanks

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.