[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 11/11] tools/libvchan: libxenvchan_client_init: use ENOENT for no server
On Thu, Nov 08, 2018 at 05:08:05PM +0000, Ian Jackson wrote: > * Promise that we will set errno to ENOENT if the server is not > yet set up. > * Arrange that all ENOENT returns other than from the read of ring-ref > are turned into EIO, logging when we do so. > > Signed-off-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx> > CC: Marek Marczykowski-Górecki <marmarek@xxxxxxxxxxxxxxxxxxxxxx> Since xtl_log now accepts NULL, it should be fine. Thanks! Reviewed-by: Marek Marczykowski-Górecki <marmarek@xxxxxxxxxxxxxxxxxxxxxx> > --- > tools/libvchan/init.c | 11 ++++++++++- > tools/libvchan/libxenvchan.h | 4 ++++ > 2 files changed, 14 insertions(+), 1 deletion(-) > > diff --git a/tools/libvchan/init.c b/tools/libvchan/init.c > index d987acd338..e58f6bf9ac 100644 > --- a/tools/libvchan/init.c > +++ b/tools/libvchan/init.c > @@ -45,6 +45,7 @@ > #include <xen/sys/gntalloc.h> > #include <xen/sys/gntdev.h> > #include <libxenvchan.h> > +#include <xentoollog.h> > > #ifndef PAGE_SHIFT > #define PAGE_SHIFT 12 > @@ -419,7 +420,7 @@ struct libxenvchan *libxenvchan_client_init(struct > xentoollog_logger *logger, > snprintf(buf, sizeof buf, "%s/ring-ref", xs_path); > ref = xs_read(xs, 0, buf, &len); > if (!ref) > - goto fail; > + goto fail_allow_enoent; > ring_ref = atoi(ref); > free(ref); > if (!ring_ref) > @@ -452,7 +453,15 @@ struct libxenvchan *libxenvchan_client_init(struct > xentoollog_logger *logger, > if (xs) > xs_daemon_close(xs); > return ctrl; > + > fail: > + if (errno == ENOENT) { > + xtl_log(logger, XTL_ERROR, errno, "vchan", > + "error talking to server `%s', returning EIO", > + xs_path); > + errno = EIO; > + } > + fail_allow_enoent: > libxenvchan_close(ctrl); > ctrl = NULL; > goto out; > diff --git a/tools/libvchan/libxenvchan.h b/tools/libvchan/libxenvchan.h > index e4ccca1ff0..8a4ec2ce4c 100644 > --- a/tools/libvchan/libxenvchan.h > +++ b/tools/libvchan/libxenvchan.h > @@ -105,6 +105,10 @@ struct libxenvchan *libxenvchan_server_init(struct > xentoollog_logger *logger, > * safely, however no locking is performed, so you must prevent multiple > clients > * from connecting to a single server. > * > + * Failing with ENOENT means the server has not yet called > + * libxenvchan_server_init, You may wait for a server to appear by > + * setting a xenstore watch on xs_path. > + * > * @param logger Logger for libxc errors > * @param domain The peer domain to connect to > * @param xs_path Base xenstore path for storing ring/event data -- Best Regards, Marek Marczykowski-Górecki Invisible Things Lab A: Because it messes up the order in which people normally read text. Q: Why is top-posting such a bad thing? Attachment:
signature.asc _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |