On rebooting a hvm, the blktapctrl daemon has died.
gdb shows the following call trace:
(gdb) where
#0 0x00000039d1830155 in raise () from /lib64/libc.so.6
#1 0x00000039d1831bf0 in abort () from /lib64/libc.so.6
#2 0x00000039d186a38b in __libc_message () from /lib64/libc.so.6
#3 0x00000039d1871634 in _int_free () from /lib64/libc.so.6
#4 0x00000039d1874c5c in free () from /lib64/libc.so.6
#5 0x0000003320a01bdd in ueblktap_probe (h=0x6073b0,
w=<value optimized out>, bepath_im=<value optimized out>) at xenbus.c:270
#6 0x0000003320a020e0 in xs_fire_next_watch (h=0x6073b0) at
xs_api.c:355
#7 0x0000000000401785 in main (argc=<value optimized out>,
argv=<value optimized out>) at blktapctrl.c:907
There is a case that "/local/domain/0/backend/tap/<dom_id>" exists but
"/local/domain/<dom_id>/vm" is not in the xenstore.
Signed-off-by: Kouya Shimura <kouya@xxxxxxxxxxxxxx>
diff -r c06732ac2392 tools/blktap/lib/xenbus.c
--- a/tools/blktap/lib/xenbus.c Thu Jan 21 15:13:00 2010 +0000
+++ b/tools/blktap/lib/xenbus.c Fri Jan 22 16:24:33 2010 +0900
@@ -232,8 +232,11 @@ static int check_sharing(struct xs_handl
ret = -1;
break;
}
+ cur_dom_uuid = NULL;
xs_gather(h, path, "vm", NULL, &cur_dom_uuid, NULL);
free(path);
+ if (!cur_dom_uuid)
+ continue;
if (!strcmp(cur_dom_uuid, dom_uuid)) {
free(cur_dom_uuid);
@@ -256,8 +259,11 @@ static int check_sharing(struct xs_handl
ret = -1;
break;
}
+ params = NULL;
xs_gather(h, path, "params", NULL, ¶ms, NULL);
free(path);
+ if (!params)
+ continue;
image_path[1] = get_image_path(params);
if (!strcmp(image_path[0], image_path[1])) {
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|