<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META content="text/html; charset=gb2312" http-equiv=Content-Type>
<STYLE>
BLOCKQUOTE {
MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; MARGIN-LEFT: 2em
}
OL {
MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px
}
UL {
MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px
}
P {
MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px
}
BODY {
LINE-HEIGHT: 1.5; FONT-FAMILY: ΢ÈíÑźÚ; COLOR: #000000; FONT-SIZE: 10.5pt
}
</STYLE>
<META name=GENERATOR content="MSHTML 8.00.7600.17267"></HEAD>
<BODY style="MARGIN: 10px">
<DIV>Dear:</DIV>
<DIV> </DIV>
<DIV style="TEXT-INDENT: 2em">I think there was a bug, when
attach-interface using xen driver.</DIV>
<DIV style="TEXT-INDENT: 2em"> </DIV>
<DIV style="TEXT-INDENT: 2em">when I use xen driver to attach interface for
domain, the libvirtd will crash.</DIV>
<DIV style="TEXT-INDENT: 2em"> </DIV>
<DIV style="TEXT-INDENT: 2em">the info with GDB:</DIV>
<DIV>#0 0x00007ffff7571815 in virDomainDiskGetDriver () from
/usr/lib/libvirt.so.0 </DIV>
<DIV style="TEXT-INDENT: 2em">
<DIV
style="TEXT-ALIGN: left; TEXT-TRANSFORM: none; BACKGROUND-COLOR: rgb(255,255,255); TEXT-INDENT: 0px; FONT: 14px/21px ΢ÈíÑźÚ; WHITE-SPACE: normal; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-text-stroke-width: 0px">#1
0x00007fffeb9ad471 in ?? () from
/usr/lib/libvirt/connection-driver/libvirt_driver_xen.so </DIV>
<DIV
style="TEXT-ALIGN: left; TEXT-TRANSFORM: none; BACKGROUND-COLOR: rgb(255,255,255); TEXT-INDENT: 0px; FONT: 14px/21px ΢ÈíÑźÚ; WHITE-SPACE: normal; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-text-stroke-width: 0px">#2
0x00007fffeb9b1062 in xenDaemonAttachDeviceFlags () from
/usr/lib/libvirt/connection-driver/libvirt_driver_xen.so </DIV>
<DIV
style="TEXT-ALIGN: left; TEXT-TRANSFORM: none; BACKGROUND-COLOR: rgb(255,255,255); TEXT-INDENT: 0px; FONT: 14px/21px ΢ÈíÑźÚ; WHITE-SPACE: normal; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-text-stroke-width: 0px">#3
0x00007fffeb9a8a86 in ?? () from
/usr/lib/libvirt/connection-driver/libvirt_driver_xen.so </DIV>
<DIV
style="TEXT-ALIGN: left; TEXT-TRANSFORM: none; BACKGROUND-COLOR: rgb(255,255,255); TEXT-INDENT: 0px; FONT: 14px/21px ΢ÈíÑźÚ; WHITE-SPACE: normal; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-text-stroke-width: 0px">#4
0x00007ffff7609266 in virDomainAttachDevice () from /usr/lib/libvirt.so.0 </DIV>
<DIV
style="TEXT-ALIGN: left; TEXT-TRANSFORM: none; BACKGROUND-COLOR: rgb(255,255,255); TEXT-INDENT: 0px; FONT: 14px/21px ΢ÈíÑźÚ; WHITE-SPACE: normal; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-text-stroke-width: 0px">#5
0x0000555555593c9d in ?? () </DIV>
<DIV
style="TEXT-ALIGN: left; TEXT-TRANSFORM: none; BACKGROUND-COLOR: rgb(255,255,255); TEXT-INDENT: 0px; FONT: 14px/21px ΢ÈíÑźÚ; WHITE-SPACE: normal; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-text-stroke-width: 0px">#6
0x00007ffff76743c9 in virNetServerProgramDispatch () from /usr/lib/libvirt.so.0
</DIV>
<DIV
style="TEXT-ALIGN: left; TEXT-TRANSFORM: none; BACKGROUND-COLOR: rgb(255,255,255); TEXT-INDENT: 0px; FONT: 14px/21px ΢ÈíÑźÚ; WHITE-SPACE: normal; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-text-stroke-width: 0px">#7
0x00005555555a678d in ?? () </DIV>
<DIV
style="TEXT-ALIGN: left; TEXT-TRANSFORM: none; BACKGROUND-COLOR: rgb(255,255,255); TEXT-INDENT: 0px; FONT: 14px/21px ΢ÈíÑźÚ; WHITE-SPACE: normal; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-text-stroke-width: 0px">#8
0x00007ffff755460e in ?? () from /usr/lib/libvirt.so.0 </DIV>
<DIV
style="TEXT-ALIGN: left; TEXT-TRANSFORM: none; BACKGROUND-COLOR: rgb(255,255,255); TEXT-INDENT: 0px; FONT: 14px/21px ΢ÈíÑźÚ; WHITE-SPACE: normal; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-text-stroke-width: 0px">#9
0x00007ffff7553b06 in ?? () from /usr/lib/libvirt.so.0 </DIV>
<DIV
style="TEXT-ALIGN: left; TEXT-TRANSFORM: none; BACKGROUND-COLOR: rgb(255,255,255); TEXT-INDENT: 0px; FONT: 14px/21px ΢ÈíÑźÚ; WHITE-SPACE: normal; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-text-stroke-width: 0px">#10
0x00007ffff4998b50 in start_thread () from /lib/x86_64-linux-gnu/libpthread.so.0
</DIV>
<DIV
style="TEXT-ALIGN: left; TEXT-TRANSFORM: none; BACKGROUND-COLOR: rgb(255,255,255); TEXT-INDENT: 0px; FONT: 14px/21px ΢ÈíÑźÚ; WHITE-SPACE: normal; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-text-stroke-width: 0px">#11
0x00007ffff46e30ed in clone () from /lib/x86_64-linux-gnu/libc.so.6 </DIV>
<DIV
style="TEXT-ALIGN: left; TEXT-TRANSFORM: none; BACKGROUND-COLOR: rgb(255,255,255); TEXT-INDENT: 0px; FONT: 14px/21px ΢ÈíÑźÚ; WHITE-SPACE: normal; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-text-stroke-width: 0px">#12
0x0000000000000000 in ?? () </DIV>
<DIV
style="TEXT-ALIGN: left; TEXT-TRANSFORM: none; BACKGROUND-COLOR: rgb(255,255,255); TEXT-INDENT: 0px; FONT: 14px/21px ΢ÈíÑźÚ; WHITE-SPACE: normal; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-text-stroke-width: 0px"> </DIV></DIV>
<DIV style="TEXT-INDENT: 2em">And I think the bug is at the
function virDomainXMLDevID(), file path:
src/xen/xend_internal.c</DIV>
<DIV style="TEXT-INDENT: 2em"> </DIV>
<DIV
style="TEXT-INDENT: 2em">--------------------------------------------------</DIV>
<DIV style="TEXT-INDENT: 2em">
<DIV>static int</DIV>
<DIV>virDomainXMLDevID(virConnectPtr conn, virDomainDefPtr def, virDomainDeviceDefPtr dev, char *class, char *ref, int ref_len)</DIV>
<DIV>{</DIV>
<DIV> xenUnifiedPrivatePtr priv = conn->privateData;</DIV>
<DIV> char *xref;</DIV>
<DIV> char *tmp;</DIV>
<DIV> const char *driver = virDomainDiskGetDriver(dev->data.disk);</DIV>
<DIV> </DIV>
<DIV> if (dev->type == VIR_DOMAIN_DEVICE_DISK) {</DIV>
<DIV> if (STREQ_NULLABLE(driver, "tap") || STREQ_NULLABLE(driver, "tap2"))</DIV>
<DIV> strcpy(class, driver);</DIV>
<DIV> else</DIV>
<DIV> strcpy(class, "vbd");</DIV></DIV>
<DIV>-----------------------------------------------------------------</DIV>
<DIV style="TEXT-INDENT: 2em">the follow line:</DIV>
<DIV
style="TEXT-INDENT: 2em">const char *driver = virDomainDiskGetDriver(dev->data.disk);</DIV>
<DIV style="TEXT-INDENT: 2em"> </DIV>
<DIV style="TEXT-INDENT: 2em">if the dev->data.disk not initialize
before, the libvirt will crash.</DIV>
<DIV> </DIV>
<DIV style="TEXT-INDENT: 2em">And I changed it like this :</DIV>
<DIV style="TEXT-INDENT: 2em"> </DIV>
<DIV
style="TEXT-INDENT: 2em">--------------------------------------------------------------</DIV>
<DIV style="TEXT-INDENT: 2em">static int</DIV>
<DIV style="TEXT-INDENT: 2em">
<DIV style="TEXT-INDENT: 2em">
<DIV>virDomainXMLDevID(virConnectPtr conn, virDomainDefPtr def, virDomainDeviceDefPtr dev, char *class, char *ref, int ref_len)</DIV>
<DIV>{</DIV>
<DIV> xenUnifiedPrivatePtr priv = conn->privateData;</DIV>
<DIV> char *xref;</DIV>
<DIV> char *tmp;</DIV>
<DIV> </DIV>
<DIV> if (dev->type == VIR_DOMAIN_DEVICE_DISK) {</DIV>
<DIV> </DIV>
<DIV>
<DIV>
const char *driver = virDomainDiskGetDriver(dev->data.disk);</DIV>
<DIV> </DIV></DIV>
<DIV> if (STREQ_NULLABLE(driver, "tap") || STREQ_NULLABLE(driver, "tap2"))</DIV>
<DIV> strcpy(class, driver);</DIV>
<DIV> else</DIV>
<DIV> strcpy(class, "vbd");</DIV></DIV></DIV>
<DIV
style="TEXT-INDENT: 2em">-------------------------------------------------------------</DIV>
<DIV style="TEXT-INDENT: 2em"> </DIV>
<DIV style="TEXT-INDENT: 2em">It works fine</DIV>
<DIV style="TEXT-INDENT: 2em"> </DIV>
<DIV style="TEXT-INDENT: 2em">Would some confirm and fix it?</DIV>
<DIV style="TEXT-INDENT: 2em"> </DIV>
<DIV style="TEXT-INDENT: 2em"> </DIV>
<DIV style="TEXT-INDENT: 26em">Xiaolin.Su</DIV></BODY></HTML>