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

[Xen-changelog] [xen-unstable] xenstore: new XS_OPEN_SOCKETONLY flag; honour "-s" on tools' cmdline



# HG changeset patch
# User Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx>
# Date 1292345814 0
# Node ID f46d49257da5b0d6c7042c9539d40372c0ddf1a3
# Parent  618ba64260faf45e6ec391582099d7388f013e81
xenstore: new XS_OPEN_SOCKETONLY flag; honour "-s" on tools' cmdline

The "-s" option to xenstore-ls is used by the xencommons startup
script to check whether xenstored is already running, before starting
it.

Since 22498:a40455ae9ad3, "-s" has been a no-op, and libxenstore will
always fall back to using xenbus.  The combined effect is that the
xencommons script deadlocks: xenstore-ls hangs waiting for xenstored,
which isn't started by xencommons because xencommons is waiting for
xenstore-ls.

In this patch, we:
 * Introduce a new XS_OPEN_SOCKETONLY flag which disables the
   fallback behaviour;
 * Make the xenstore command line tools use the new xs_open call
   rather than the old, deprecated xs_open_* calls (which are
   now identical).
 * Plumb the xenstore command line tools "-s" option to set the
   XS_OPEN_SOCKETONLY flag.
 * Change the type of the XS_OPEN_* flags so that they naturally have
   type unsigned long.

The "-s" option to xenstore-ls et al, and the XS_OPEN_SOCKETONLY flag,
are intended for use by toolstack infrastructure and should not
normally be used by higher-level code.

Signed-off-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
---
 tools/xenstore/xenstore_client.c |    5 ++---
 tools/xenstore/xs.c              |    2 +-
 tools/xenstore/xs.h              |    3 ++-
 3 files changed, 5 insertions(+), 5 deletions(-)

diff -r 618ba64260fa -r f46d49257da5 tools/xenstore/xenstore_client.c
--- a/tools/xenstore/xenstore_client.c  Tue Dec 14 09:54:10 2010 +0000
+++ b/tools/xenstore/xenstore_client.c  Tue Dec 14 16:56:54 2010 +0000
@@ -633,9 +633,8 @@ main(int argc, char **argv)
            max_width = ws.ws_col - 2;
     }
 
-    xsh = socket ? xs_daemon_open() : xs_domain_open();
-    if (xsh == NULL)
-       err(1, socket ? "xs_daemon_open" : "xs_domain_open");
+    xsh = xs_open(socket ? XS_OPEN_SOCKETONLY : 0);
+    if (xsh == NULL) err(1, "xs_open");
 
 again:
     if (transaction) {
diff -r 618ba64260fa -r f46d49257da5 tools/xenstore/xs.c
--- a/tools/xenstore/xs.c       Tue Dec 14 09:54:10 2010 +0000
+++ b/tools/xenstore/xs.c       Tue Dec 14 16:56:54 2010 +0000
@@ -262,7 +262,7 @@ struct xs_handle *xs_open(unsigned long 
        else
                xsh = get_handle(xs_daemon_socket(), flags);
 
-       if (!xsh)
+       if (!xsh && !(flags & XS_OPEN_SOCKETONLY))
                xsh = get_handle(xs_domain_dev(), flags);
 
        return xsh;
diff -r 618ba64260fa -r f46d49257da5 tools/xenstore/xs.h
--- a/tools/xenstore/xs.h       Tue Dec 14 09:54:10 2010 +0000
+++ b/tools/xenstore/xs.h       Tue Dec 14 16:56:54 2010 +0000
@@ -24,7 +24,8 @@
 
 #define XBT_NULL 0
 
-#define XS_OPEN_READONLY       1<<0
+#define XS_OPEN_READONLY       1UL<<0
+#define XS_OPEN_SOCKETONLY      1UL<<1
 
 struct xs_handle;
 typedef uint32_t xs_transaction_t;

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.