Index: libvirt-0.7.2/src/xen/xend_internal.c =================================================================== --- libvirt-0.7.2.orig/src/xen/xend_internal.c +++ libvirt-0.7.2/src/xen/xend_internal.c @@ -5896,7 +5896,7 @@ virDomainXMLDevID(virDomainPtr domain, return -1; xenUnifiedLock(priv); xref = xenStoreDomainGetDiskID(domain->conn, domain->id, - dev->data.disk->dst); + dev->data.disk->dst, class); xenUnifiedUnlock(priv); if (xref == NULL) return -1; Index: libvirt-0.7.2/src/xen/xs_internal.c =================================================================== --- libvirt-0.7.2.orig/src/xen/xs_internal.c +++ libvirt-0.7.2/src/xen/xs_internal.c @@ -968,7 +968,8 @@ xenStoreDomainGetNetworkID(virConnectPtr * freed by the caller. */ char * -xenStoreDomainGetDiskID(virConnectPtr conn, int id, const char *dev) { +xenStoreDomainGetDiskID(virConnectPtr conn, int id, + const char *dev, const char *class) { char dir[80], path[128], **list = NULL, *val = NULL; unsigned int devlen, len, i, num; char *ret = NULL; @@ -986,7 +987,7 @@ xenStoreDomainGetDiskID(virConnectPtr co if (devlen <= 0) return (NULL); - snprintf(dir, sizeof(dir), "/local/domain/0/backend/vbd/%d", id); + snprintf(dir, sizeof(dir), "/local/domain/0/backend/%s/%d", class, id); list = xs_directory(priv->xshandle, 0, dir, &num); if (list != NULL) { for (i = 0; i < num; i++) { Index: libvirt-0.7.2/src/xen/xs_internal.h =================================================================== --- libvirt-0.7.2.orig/src/xen/xs_internal.h +++ libvirt-0.7.2/src/xen/xs_internal.h @@ -49,7 +49,8 @@ char * xenStoreDomainGetNetworkID(virCo const char *mac); char * xenStoreDomainGetDiskID(virConnectPtr conn, int id, - const char *dev); + const char *dev, + const char *class); char * xenStoreDomainGetName(virConnectPtr conn, int id); int xenStoreDomainGetUUID(virConnectPtr conn,