[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v2 11/11] tools/libvchan: libxenvchan_client_init: use ENOENT for no server
* 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> --- 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 -- 2.11.0 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |