[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH] libxl: fix cd insert/eject
libxl: fix cd insert/eject When multiple disks are passed to libxl_wait_for_disk_ejects, watch the correct disk paths. Parse the backend type and backend domid from xenstore in libxl_event_get_disk_eject_info. libxl_event_get_disk_eject_info must return a valid string in disk->vdev, while at the moment is free'ed before returning. Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx> diff -r 20b0f74bc31c tools/libxl/libxl.c --- a/tools/libxl/libxl.c Thu Feb 17 12:25:09 2011 +0000 +++ b/tools/libxl/libxl.c Thu Feb 17 15:31:43 2011 +0000 @@ -592,7 +592,7 @@ int libxl_wait_for_disk_ejects(libxl_ctx goto out; if (asprintf(&(waiter[i].token), "%d", LIBXL_EVENT_DISK_EJECT) < 0) goto out; - xs_watch(ctx->xsh, waiter->path, waiter->token); + xs_watch(ctx->xsh, waiter[i].path, waiter[i].token); } rc = 0; out: @@ -654,6 +654,7 @@ int libxl_event_get_disk_eject_info(libx char *path; char *backend; char *value; + char backend_type[5]; value = libxl__xs_read(&gc, XBT_NULL, event->path); @@ -666,12 +667,20 @@ int libxl_event_get_disk_eject_info(libx path[strlen(path) - 6] = '\0'; backend = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, "%s/backend", path)); - disk->backend_domid = 0; + sscanf(backend, "/local/domain/%d/backend/%5[a-z]/%*d/%*d", &disk->backend_domid, backend_type); + if (!strcmp(backend_type, "tap") || !strcmp(backend_type, "vbd")) { + disk->backend = DISK_BACKEND_TAP; + } else if (!strcmp(backend_type, "qdisk")) { + disk->backend = DISK_BACKEND_QDISK; + } else { + disk->backend = DISK_BACKEND_UNKNOWN; + } + disk->domid = domid; disk->pdev_path = strdup(""); disk->format = DISK_FORMAT_EMPTY; /* this value is returned to the user: do not free right away */ - disk->vdev = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, "%s/dev", backend)); + disk->vdev = xs_read(ctx->xsh, XBT_NULL, libxl__sprintf(&gc, "%s/dev", backend), NULL); disk->unpluggable = 1; disk->readwrite = 0; disk->is_cdrom = 1; _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |