[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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |