WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

答复: [Xen-devel] [PATCH] libxl: make libxl communicate with xenstored by

To: Ian Campbell <Ian.Campbell@xxxxxxxxxxxxx>
Subject: 答复: [Xen-devel] [PATCH] libxl: make libxl communicate with xenstored by socket or xenbus driver
From: "Jun Zhu (Intern)" <Jun.Zhu@xxxxxxxxxx>
Date: Mon, 6 Sep 2010 12:28:02 +0100
Accept-language: zh-CN, en-US
Acceptlanguage: zh-CN, en-US
Cc: "xen-devel@xxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxx>
Delivery-date: Mon, 06 Sep 2010 04:31:10 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <1283439564.12544.9720.camel@xxxxxxxxxxxxxxxxxxxxxx>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
References: <433DDF91DFB08148BAD3FDB6FDDA314C9F35F3BB57@xxxxxxxxxxxxxxxxxxxxxxxxx>, <1283439564.12544.9720.camel@xxxxxxxxxxxxxxxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
Thread-index: ActKr2zzHH3I40N/SHKow51XMhnrlADByRuW
Thread-topic: [Xen-devel] [PATCH] libxl: make libxl communicate with xenstored by socket or xenbus driver
# HG changeset patch
# User Jun Zhu <Jun.Zhu@xxxxxxxxxx>
# Date 1283771532 -3600
# Node ID f26503f8f56ac0ebbcdbf3aa1dc3a9daeae7cacf
# Parent  5f53805b349ecf1ec4fb588e43e8536b5d18b8f5
libxl uses socket or xenbus dev to communicate with xenstored.

signed-off-by: Jun Zhu <Jun.Zhu@xxxxxxxxxx>

diff -r 5f53805b349e -r f26503f8f56a tools/libxl/libxl.c
--- a/tools/libxl/libxl.c       Fri Sep 03 18:44:49 2010 +0100
+++ b/tools/libxl/libxl.c       Mon Sep 06 12:12:12 2010 +0100
@@ -53,9 +53,7 @@
         return ERROR_FAIL;
     }
 
-    ctx->xsh = xs_daemon_open();
-    if (!ctx->xsh)
-        ctx->xsh = xs_domain_open();
+    ctx->xsh = libxl_xs_open();
     if (!ctx->xsh) {
         XL_LOG_ERRNOVAL(ctx, XL_LOG_ERROR, errno, 
                         "cannot connect to xenstore");
@@ -69,7 +67,7 @@
 {
     xc_interface_close(ctx->xch);
     libxl_version_info_destroy(&ctx->version_info);
-    if (ctx->xsh) xs_daemon_close(ctx->xsh); 
+    if (ctx->xsh) libxl_xs_close(ctx->xsh); 
     return 0;
 }
 
@@ -1387,10 +1385,8 @@
 {
     libxl_device_model_starting *starting = for_spawn;
     char *kvs[3];
-    int rc;
     struct xs_handle *xsh;
 
-    xsh = xs_daemon_open();
     /* we mustn't use the parent's handle in the child */
 
     kvs[0] = "image/device-model-pid";
@@ -1398,10 +1394,11 @@
         return;
     kvs[2] = NULL;
 
-    rc = xs_writev(xsh, XBT_NULL, starting->dom_path, kvs);
-    if (rc)
-        return;
-    xs_daemon_close(xsh);
+    xsh = libxl_xs_open();
+    if (!xsh)
+       fprintf(stderr, "cannot connect to xenstore");
+    xs_writev(xsh, XBT_NULL, starting->dom_path, kvs);
+    libxl_xs_close(xsh);
 }
 
 static int libxl_vfb_and_vkb_from_device_model_info(libxl_ctx *ctx,
diff -r 5f53805b349e -r f26503f8f56a tools/libxl/libxl_device.c
--- a/tools/libxl/libxl_device.c        Fri Sep 03 18:44:49 2010 +0100
+++ b/tools/libxl/libxl_device.c        Mon Sep 06 12:12:12 2010 +0100
@@ -405,7 +405,10 @@
     unsigned int num;
     char **l = NULL;
 
-    xsh = xs_daemon_open();
+    xsh = libxl_xs_open();
+    if (!xsh)
+        XL_LOG_ERRNOVAL(ctx, XL_LOG_ERROR, errno,
+               "cannot connect to xenstore");
     path = libxl_sprintf(&gc, "/local/domain/0/device-model/%d/state", domid);
     xs_watch(xsh, path, path);
     tv.tv_sec = LIBXL_DEVICE_MODEL_START_TIMEOUT;
@@ -427,7 +430,7 @@
 
         free(p);
         xs_unwatch(xsh, path, path);
-        xs_daemon_close(xsh);
+        libxl_xs_close(xsh);
         libxl_free_all(&gc);
         return rc;
 again:
@@ -444,7 +447,7 @@
         }
     }
     xs_unwatch(xsh, path, path);
-    xs_daemon_close(xsh);
+    libxl_xs_close(xsh);
     XL_LOG(ctx, XL_LOG_ERROR, "Device Model not ready");
     libxl_free_all(&gc);
     return -1;
diff -r 5f53805b349e -r f26503f8f56a tools/libxl/libxl_dom.c
--- a/tools/libxl/libxl_dom.c   Fri Sep 03 18:44:49 2010 +0100
+++ b/tools/libxl/libxl_dom.c   Mon Sep 06 12:12:12 2010 +0100
@@ -283,14 +283,16 @@
 
     snprintf(path, sizeof(path), 
"/local/domain/0/device-model/%u/logdirty/cmd", domid);
 
-    xsh = xs_daemon_open();
+    xsh = libxl_xs_open();
+    if (!xsh)
+        fprintf(stderr, "cannot connect to xenstore");
 
     if (enable)
         xs_write(xsh, XBT_NULL, path, "enable", strlen("enable"));
     else
         xs_write(xsh, XBT_NULL, path, "disable", strlen("disable"));
 
-    xs_daemon_close(xsh);
+    libxl_xs_close(xsh);
 }
 
 static int core_suspend_callback(void *data)
diff -r 5f53805b349e -r f26503f8f56a tools/libxl/libxl_internal.h
--- a/tools/libxl/libxl_internal.h      Fri Sep 03 18:44:49 2010 +0100
+++ b/tools/libxl/libxl_internal.h      Mon Sep 06 12:12:12 2010 +0100
@@ -138,6 +138,8 @@
 _hidden char *libxl_xs_get_dompath(libxl_gc *gc, uint32_t domid); // logs errs
 _hidden char *libxl_xs_read(libxl_gc *gc, xs_transaction_t t, char *path);
 _hidden char **libxl_xs_directory(libxl_gc *gc, xs_transaction_t t, char 
*path, unsigned int *nb);
+_hidden struct xs_handle *libxl_xs_open(void);
+_hidden void libxl_xs_close(struct xs_handle *xsh);
 
 /* from xl_dom */
 _hidden int is_hvm(libxl_ctx *ctx, uint32_t domid);
diff -r 5f53805b349e -r f26503f8f56a tools/libxl/libxl_utils.c
--- a/tools/libxl/libxl_utils.c Fri Sep 03 18:44:49 2010 +0100
+++ b/tools/libxl/libxl_utils.c Mon Sep 06 12:12:12 2010 +0100
@@ -367,7 +367,10 @@
 
 int libxl_ctx_postfork(libxl_ctx *ctx) {
     if (ctx->xsh) xs_daemon_destroy_postfork(ctx->xsh);
-    ctx->xsh = xs_daemon_open();
+    ctx->xsh = libxl_xs_open();
+    if (!ctx->xsh)
+        XL_LOG_ERRNOVAL(ctx, XL_LOG_ERROR, errno,
+                "cannot connect to xenstore");
     if (!ctx->xsh) return ERROR_FAIL;
     return 0;
 }
diff -r 5f53805b349e -r f26503f8f56a tools/libxl/libxl_xshelp.c
--- a/tools/libxl/libxl_xshelp.c        Fri Sep 03 18:44:49 2010 +0100
+++ b/tools/libxl/libxl_xshelp.c        Mon Sep 06 12:12:12 2010 +0100
@@ -141,3 +141,20 @@
     libxl_ptr_add(gc, ret);
     return ret;
 }
+
+struct xs_handle *libxl_xs_open()
+{
+    struct xs_handle *xsh = NULL;
+
+    xsh = xs_daemon_open();
+    if (!xsh)
+        xsh = xs_domain_open();
+
+    return xsh;
+}
+
+void libxl_xs_close(struct xs_handle *xsh)
+{
+    xs_daemon_close(xsh);
+}



Jun Zhu
Citrix Systems UK
________________________________________
发件人: Ian Campbell
发送时间: 2010年9月2日 上午 10:59
收件人: Jun Zhu (Intern)
抄送: xen-devel@xxxxxxxxxxxxxxxxxxx
主题: Re: [Xen-devel] [PATCH] libxl: make libxl communicate with xenstored by 
socket or xenbus driver

On Thu, 2010-09-02 at 14:56 +0100, Jun Zhu (Intern) wrote:
> Hi,
>
> George sent a patch on this problem before, but it was not completed.
> This patch makes libxl use xenbus to communicate with xenstored if
> libxl cannot open a socket.

I think rather than repeating the pattern:
    xsh = xs_daemon_open();
    if (!xsh)
        xsh = xs_domain_open();
everywhere we should add libxl__xenstore_open() instead.

> There's a place that does not close fd in the case of failure, which
> is also fixed in this patch.

It's a small patch in this case but generally it is best to put separate
fixes in separate patches.

Also you need to add a Signed-off-by to your patches. I suspect the
maintainers would also appreciate it if you would format the email as
        DESCRIPTION

        Signed-off-by:

        PATCH

without additional punctuation or delineation (such as ---Patch----)
which they need to edit out when applying.

Ian.

>
> -----------------------------------------Patch------------------------------------------------------
> diff -r eff592364826 tools/libxl/libxl.c
> --- a/tools/libxl/libxl.c     Wed Sep 01 11:23:49 2010 +0100
> +++ b/tools/libxl/libxl.c     Thu Sep 02 14:51:46 2010 +0100
> @@ -1387,10 +1387,8 @@
>  {
>      libxl_device_model_starting *starting = for_spawn;
>      char *kvs[3];
> -    int rc;
>      struct xs_handle *xsh;
>
> -    xsh = xs_daemon_open();
>      /* we mustn't use the parent's handle in the child */
>
>      kvs[0] = "image/device-model-pid";
> @@ -1398,9 +1396,10 @@
>          return;
>      kvs[2] = NULL;
>
> -    rc = xs_writev(xsh, XBT_NULL, starting->dom_path, kvs);
> -    if (rc)
> -        return;
> +    xsh = xs_daemon_open();
> +    if (!xsh)
> +        xsh = xs_domain_open();
> +    xs_writev(xsh, XBT_NULL, starting->dom_path, kvs);
>      xs_daemon_close(xsh);
>  }
>
> diff -r eff592364826 tools/libxl/libxl_device.c
> --- a/tools/libxl/libxl_device.c      Wed Sep 01 11:23:49 2010 +0100
> +++ b/tools/libxl/libxl_device.c      Thu Sep 02 14:51:46 2010 +0100
> @@ -406,6 +406,8 @@
>      char **l = NULL;
>
>      xsh = xs_daemon_open();
> +    if (!xsh)
> +        xsh = xs_domain_open();
>      path = libxl_sprintf(&gc, "/local/domain/0/device-model/%d/state", 
> domid);
>      xs_watch(xsh, path, path);
>      tv.tv_sec = LIBXL_DEVICE_MODEL_START_TIMEOUT;
> diff -r eff592364826 tools/libxl/libxl_dom.c
> --- a/tools/libxl/libxl_dom.c Wed Sep 01 11:23:49 2010 +0100
> +++ b/tools/libxl/libxl_dom.c Thu Sep 02 14:51:46 2010 +0100
> @@ -284,6 +284,8 @@
>      snprintf(path, sizeof(path), 
> "/local/domain/0/device-model/%u/logdirty/cmd", domid);
>
>      xsh = xs_daemon_open();
> +    if (!xsh)
> +        xsh = xs_domain_open();
>
>      if (enable)
>          xs_write(xsh, XBT_NULL, path, "enable", strlen("enable"));
> diff -r eff592364826 tools/libxl/libxl_utils.c
> --- a/tools/libxl/libxl_utils.c       Wed Sep 01 11:23:49 2010 +0100
> +++ b/tools/libxl/libxl_utils.c       Thu Sep 02 14:51:46 2010 +0100
> @@ -368,6 +368,8 @@
>  int libxl_ctx_postfork(libxl_ctx *ctx) {
>      if (ctx->xsh) xs_daemon_destroy_postfork(ctx->xsh);
>      ctx->xsh = xs_daemon_open();
> +    if (!ctx->xsh)
> +        ctx->xsh = xs_domain_open();
>      if (!ctx->xsh) return ERROR_FAIL;
>      return 0;
>  }
> --------------------------------------END----------------------------------------------
>
>
> Jun Zhu
> Citrix Systems UK
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxxxxxxxx
> http://lists.xensource.com/xen-devel


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