|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 3 of 5 RFC] blktap3: Introduce xenio.c, core xenio daemon functionality
> -----Original Message-----
> From: Ian Campbell
> Sent: 29 November 2012 15:26
> To: Thanos Makatos
> Cc: xen-devel@xxxxxxxxxxxxxxxxxxx
> Subject: Re: [Xen-devel] [PATCH 3 of 5 RFC] blktap3: Introduce xenio.c,
> core xenio daemon functionality
>
> On Wed, 2012-11-28 at 14:20 +0000, Thanos Makatos wrote:
>
> > +/*
> > + * XenStore path components.
> > + *
> > + * TODO "xenio" is defined in the IDL, take it from there instead of
> > + * hard-coding it here
>
> Is there an IDL somewhere that I've failed to find?
Libxl uses LIBXL__DEVICE_KIND_XENIO instead of LIBXL__DEVICE_KIND_VBD to avoid
confusion, and this is defined in tools/libxl/libxl_types_internal.idl. This
will be introduced by the very latest patch that will add blktap3 support in
libxl. I'll extended the comment to clarify this.
>
> > + */
> > +#define XENIO_BACKEND_NAME "xenio"
> > +#define XENIO_BACKEND_PATH "backend/"XENIO_BACKEND_NAME
> > +#define XENIO_BACKEND_TOKEN "backend-"XENIO_BACKEND_NAME
> > +
> [...]
> > +/**
> > + * Reads the specified XenStore path. The caller must free the
> returned buffer.
> > + *
> > + * @param xs handle to XenStore
> > + * @param xst XenStore transaction (TODO Maybe NULL?)
> > + * @param fmt TODO
> > + * @param ap TODO
> > + * @returns TODO
> > + *
> > + * TODO Why don't we return the data pointer?
> > + */
> > +static char *
> > +xenio_xs_vread(struct xs_handle * const xs, xs_transaction_t xst,
> > + const char * const fmt, va_list ap) {
> > + char *path, *data, *s = NULL;
> > + unsigned int len;
> > +
> > + assert(xs);
> > +
> > + path = vmprintf(fmt, ap);
> > + data = xs_read(xs, xst, path, &len);
> > + DBG("XS read %s -> %s \n", path, data);
> > + free(path);
> > +
> > + if (data) {
> > + s = strndup(data, len);
> > + free(data);
>
> Is this a rather complicated way of ensuring the string is NULL
> terminated?
Probably, I see no other logical explanation -- I'll simplify it.
>
> I suppose given the xs protocol and/or libxenstore doesn't necessarily
> NULL terminate the data or leave enough room in the allocated buffer to
> add a NULL this might actually be required, yuk!
>
> > + }
> > +
> > + return s;
> > +}
> > +
> [...]
> > + /*
> > + * Set a watch on the back-end path using a token.
> > + *
> > + * TODO Do we really need to supply a token, given that this is
> the _only_
> > + * watch on this specific path by this process?
>
> xenio_backend_read_watch appears to use the token to distinguish the
> two cases of watch which you have?
>
> > + */
> > + nerr = xs_watch(backend.xs, XENIO_BACKEND_PATH,
> XENIO_BACKEND_TOKEN);
> > + if (!nerr) {
> > + err = -errno;
> > + goto fail;
> > + }
> > +
> > + backend.ops = ops;
> > +
> > + return 0;
> > +
> > +fail:
> > + xenio_backend_destroy();
> > +
> > + return -err;
> > +}
>
> There's obviously a lot of code here, I'm not going to pretend I read
> it all, but I did have a skim and commented on what leapt out.
I was actually thinking of splitting this file into smaller ones as it appears
too big to review.
>
> If there are any areas which you think could benefit from closer
> review, e.g. bits which are security sensitive or where you are unsure
> about the compatibility requirements for various guests or something
> like that then please do highlight them and I can take a closer look.
>
> Some of your TODOs ask more general questions about Xen PV protocols
> etc which I suspect could be pretty quickly by someone on this list who
> is already familiar with that niche if you posted them as questions
> rather than part of the patch -- please don't feel you have to reverse
> engineer the whole thing yourself ;-)
Many of these TODOs are questions to me where I need to understand that
particular bit in order to gain a wider understanding of what that piece of
code does so I can document it. I'll try to separate these TODOs from the ones
for which I need a reviewer's help.
>
> Ian.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |