From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alex Zeffertt Subject: [PATCH 9/24] [xen-unstable.hg] make xs_domain_open fallback to /proc/xen/xenbus if unix domain socket fails because xenstore is in a stubdomain Date: Mon, 23 Mar 2009 15:20:57 +0000 Message-ID: <49C7A8D9.50308@eu.citrix.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------090706050204000702070301" Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: "xen-devel@lists.xensource.com" List-Id: xen-devel@lists.xenproject.org This is a multi-part message in MIME format. --------------090706050204000702070301 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit --------------090706050204000702070301 Content-Type: text/plain; name="libxs_fallback_domain_open" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="libxs_fallback_domain_open" If xenstored is running in a stub domain clients won't be able to open a unix domain socket to it, but will be able to access it via xenbus. To handle this situation this patch makes xs_daemon_open() fall back to xs_domain_open() - which tries to open a connection via xenbus - if it cannot open a unix domain socket. Depends on linux xenbus commands whitelist patch. Enhanced by linux xenbus aborting read/write if not ready, part of my big linux xenbus patch. I wasn't so sure what to do about the read-only connection, but I made it fall back to the non-read-only socket/device if the read-only socket isn't available. Signed-off-by: Diego Ongaro Signed-off-by: Alex Zeffertt --- diff -r 5308892be11a tools/xenstore/xs.c --- a/tools/xenstore/xs.c Thu Mar 19 12:47:06 2009 +0000 +++ b/tools/xenstore/xs.c Thu Mar 19 16:10:07 2009 +0000 @@ -210,12 +210,25 @@ struct xs_handle *xs_daemon_open(void) { - return get_handle(xs_daemon_socket()); + struct xs_handle *xsh; + + xsh = get_handle(xs_daemon_socket()); + if (xsh != NULL) + return xsh; + + return xs_domain_open(); } struct xs_handle *xs_daemon_open_readonly(void) { - return get_handle(xs_daemon_socket_ro()); + struct xs_handle *xsh; + + xsh = get_handle(xs_daemon_socket_ro()); + if (xsh != NULL) + return xsh; + + /* fall back to a read-write connection */ + return xs_daemon_open(); } struct xs_handle *xs_domain_open(void) diff -r 5308892be11a tools/xenstore/xs.h --- a/tools/xenstore/xs.h Thu Mar 19 12:47:06 2009 +0000 +++ b/tools/xenstore/xs.h Thu Mar 19 16:10:07 2009 +0000 @@ -37,6 +37,7 @@ /* Connect to the xs daemon (readonly for non-root clients). * Returns a handle or NULL. + * Note: this may fall back to a read/write connection. */ struct xs_handle *xs_daemon_open_readonly(void); --------------090706050204000702070301 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --------------090706050204000702070301--