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

RE: [Xen-devel] [PATCH] Clear device-model information when destroying a

To: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx>
Subject: RE: [Xen-devel] [PATCH] Clear device-model information when destroying an HVM domain with stubdom
From: "Jun Zhu (Intern)" <Jun.Zhu@xxxxxxxxxx>
Date: Wed, 8 Sep 2010 20:50:47 +0100
Accept-language: en-US
Acceptlanguage: en-US
Cc: "xen-devel@xxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxx>
Delivery-date: Wed, 08 Sep 2010 12:52:59 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <19591.38102.637494.941183@xxxxxxxxxxxxxxxxxxxxxxxx>
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: <433DDF91DFB08148BAD3FDB6FDDA314C9F35F3BB58@xxxxxxxxxxxxxxxxxxxxxxxxx>, <19591.38102.637494.941183@xxxxxxxxxxxxxxxxxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
Thread-index: ActPXOWt+q/N0t4PTc29a9DyfdUo3wAMjvmW
Thread-topic: [Xen-devel] [PATCH] Clear device-model information when destroying an HVM domain with stubdom
I make a new path from the newest unstable version.

exporting patch:
# HG changeset patch
# User Jun Zhu <Jun.Zhu@xxxxxxxxxx>
# Date 1283975147 -3600
# Node ID d218c93a1fb7d7a532e1cc324e0cf45a3b96b911
# Parent  c54e3f3df3ed2edf4e09a004267df81deb999cc5
Make libxl remove device model infomation when destroying a hvm with stubdom.

diff -r c54e3f3df3ed -r d218c93a1fb7 tools/libxl/libxl.c
--- a/tools/libxl/libxl.c       Wed Sep 08 20:16:48 2010 +0100
+++ b/tools/libxl/libxl.c       Wed Sep 08 20:45:47 2010 +0100
@@ -897,21 +897,28 @@
         }
         XL_LOG(ctx, XL_LOG_ERROR, "Device model is a stubdom, domid=%d\n", 
stubdomid);
         ret = libxl_domain_destroy(ctx, stubdomid, 0);
-        goto out;
+        if (!ret)
+               {
+                       XL_LOG(ctx, XL_LOG_ERROR, "Destroy stubdom failed, 
domid=%d\n", stubdomid);
+                       goto out;
+               }
     }
-    xs_rm(ctx->xsh, XBT_NULL, libxl_sprintf(&gc, 
"/local/domain/0/device-model/%d", domid));
-
-    ret = kill(atoi(pid), SIGHUP);
-    if (ret < 0 && errno == ESRCH) {
-        XL_LOG(ctx, XL_LOG_DEBUG, "Device Model already exited");
-        ret = 0;
-    } else if (ret == 0) {
-        XL_LOG(ctx, XL_LOG_DEBUG, "Device Model signaled");
-        ret = 0;
-    } else {
-        XL_LOG_ERRNO(ctx, XL_LOG_ERROR, "failed to kill Device Model [%d]",
-                     atoi(pid));
-    }
+       else
+       {
+               ret = kill(atoi(pid), SIGHUP);
+               if (ret < 0 && errno == ESRCH) {
+                       XL_LOG(ctx, XL_LOG_DEBUG, "Device Model already 
exited");
+                       ret = 0;
+               } else if (ret == 0) {
+                       XL_LOG(ctx, XL_LOG_DEBUG, "Device Model signaled");
+                       ret = 0;
+               } else {
+                       XL_LOG_ERRNO(ctx, XL_LOG_ERROR, "failed to kill Device 
Model [%d]",
+                                       atoi(pid));
+               }
+       }
+       if (!ret)
+           xs_rm(ctx->xsh, XBT_NULL, libxl_sprintf(&gc, 
"/local/domain/0/device-model/%d", domid));
 out:
     libxl_free_all(&gc);
     return ret;


Jun Zhu
Citrix Systems UK
________________________________________
From: Ian Jackson
Sent: 08 September 2010 09:51
To: Jun Zhu (Intern)
Cc: xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: Re: [Xen-devel] [PATCH] Clear device-model information when destroying 
an HVM domain with stubdom

Jun Zhu (Intern) writes ("[Xen-devel] [PATCH] Clear device-model information 
when destroying an HVM domain with stubdom"):
> This patch clears the device-model information from xenstore when
> destroying an HVM domain with stubdom.

I don't think this patch is correct.

> +     xs_rm(ctx->xsh, XBT_NULL, libxl_sprintf(ctx, 
> "/local/domain/0/device-model/%d", domid));
> +

This removes the information from xenstore before the process is
killed.  These things should be done in the opposite order, so that we
are never (even briefly) in a situation with a dm (whether stubdom or
dom0 process) which is not mentioned in xenstore.

The code already has this bug in the dom0 process case.

>      pid = libxl_xs_read(ctx, XBT_NULL, libxl_sprintf(ctx, 
> "/local/domain/%d/image/device-model-pid", domid));
>      if (!pid) {
>          int stubdomid = libxl_get_stubdom_id(ctx, domid);
> @@ -844,7 +846,6 @@
>          XL_LOG(ctx, XL_LOG_ERROR, "Device model is a stubdom, domid=%d\n", 
> stubdomid);
>          return libxl_domain_destroy(ctx, stubdomid, 0);
>      }
> -    xs_rm(ctx->xsh, XBT_NULL, libxl_sprintf(ctx, 
> "/local/domain/0/device-model/%d", domid));
>
>      ret = kill(atoi(pid), SIGHUP);
>      if (ret < 0 && errno == ESRCH) {

The right answer is probably to move the xs_rm until _after_ the kill
is dealt with, and to put the kill section in an else branch of the
if, and remove the return in the stubdom case and replace it with an
ordinary error check.

Ian.

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