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

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



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.

> +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?

> +=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.

> +    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.

> +{
> +    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?

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

Wei.

_______________________________________________
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®.