From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yosuke Iwamatsu Subject: ioemu: Re-enable guest boot with blktap devices (Weekly VMX status report. Xen: #18577 & Xen0: #696) Date: Tue, 14 Oct 2008 13:04:29 +0900 Message-ID: <48F41A4D.1020608@ab.jp.nec.com> References: <76780B19A496DC4B80439008DAD7076C01ACDF710F@PDSMSX501.ccr.corp.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <76780B19A496DC4B80439008DAD7076C01ACDF710F@PDSMSX501.ccr.corp.intel.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: haicheng.li@intel.com, Ian Jackson Cc: xen-devel@lists.xensource.com List-Id: xen-devel@lists.xenproject.org Li, Haicheng wrote: > Our testing was blocke by bug #1367; and totally 2 new issues were found this week, > > New Bugs: > ===================================================================== > 1. [Qcow]Guest cannot boot up with Qcow image > http://bugzilla.xensource.com/bugzilla/show_bug.cgi?id=1367 Bug #1367 looks caused by the xenstore path checking code recently added to ioemu-remote. I saw the same problem and found that the code didn't consider the case blktap devices were attached to the guest. The patch below should avoid the problem. Signed-off-by: Yosuke Iwamatsu diff --git a/xenstore.c b/xenstore.c index f5aa8a7..39ff8a6 100644 --- a/xenstore.c +++ b/xenstore.c @@ -158,6 +158,7 @@ static void xenstore_get_backend_path(char **backend, const char *devtype, char *frontend_path=0; char *backend_dompath=0; char *expected_backend=0; + char *expected_devtype=0; char *frontend_backend_path=0; char *backend_frontend_path=0; char *frontend_doublecheck=0; @@ -191,11 +192,18 @@ static void xenstore_get_backend_path(char **backend, const char *devtype, backend_dompath = xs_get_domain_path(xsh, domid_backend); if (!backend_dompath) goto out; + if (pasprintf(&expected_devtype, "%s", devtype) == -1) goto out; + + again: if (pasprintf(&expected_backend, "%s/backend/%s/%lu/%s", - backend_dompath, devtype, frontend_domid, inst_danger) + backend_dompath, expected_devtype, frontend_domid, inst_danger) == -1) goto out; if (strcmp(bpath, expected_backend)) { + if (!strcmp(expected_devtype, "vbd")) { + pasprintf(&expected_devtype, "tap"); + goto again; + } fprintf(stderr, "frontend `%s' expected backend `%s' got `%s'," " ignoring\n", frontend_path, expected_backend, bpath); errno = EINVAL; @@ -223,6 +231,7 @@ static void xenstore_get_backend_path(char **backend, const char *devtype, free(frontend_path); free(backend_dompath); free(expected_backend); + free(expected_devtype); free(frontend_backend_path); free(backend_frontend_path); free(frontend_doublecheck);