Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Evergreen:11.1
libvirt
detach-disk.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File detach-disk.patch of Package libvirt
Index: libvirt-0.4.6/src/xend_internal.c =================================================================== --- libvirt-0.4.6.orig/src/xend_internal.c +++ libvirt-0.4.6/src/xend_internal.c @@ -107,6 +107,7 @@ xenDaemonFormatSxprNet(virConnectPtr con int isAttach); static int virDomainXMLDevID(virDomainPtr domain, + virDomainDefPtr domDef, virDomainDeviceDefPtr dev, char *class, char *ref, @@ -4016,7 +4017,7 @@ xenDaemonAttachDevice(virDomainPtr domai sexpr = virBufferContentAndReset(&buf); - if (virDomainXMLDevID(domain, dev, class, ref, sizeof(ref))) { + if (virDomainXMLDevID(domain, def, dev, class, ref, sizeof(ref))) { /* device doesn't exist, define it */ ret = xend_op(domain->conn, domain->name, "op", "device_create", "config", sexpr, NULL); @@ -4076,7 +4077,7 @@ xenDaemonDetachDevice(virDomainPtr domai if (!(dev = virDomainDeviceDefParse(domain->conn, def, xml))) goto cleanup; - if (virDomainXMLDevID(domain, dev, class, ref, sizeof(ref))) + if (virDomainXMLDevID(domain, def, dev, class, ref, sizeof(ref))) goto cleanup; ret = xend_op(domain->conn, domain->name, "op", "device_destroy", @@ -5607,25 +5608,33 @@ error: */ static int virDomainXMLDevID(virDomainPtr domain, + virDomainDefPtr domDef, virDomainDeviceDefPtr dev, char *class, char *ref, int ref_len) { char *xref; + virDomainDiskDefPtr disk; if (dev->type == VIR_DOMAIN_DEVICE_DISK) { - strcpy(class, "vbd"); if (dev->data.disk->dst == NULL) return -1; - xref = xenStoreDomainGetDiskID(domain->conn, domain->id, - dev->data.disk->dst); - if (xref == NULL) - return -1; - strncpy(ref, xref, ref_len); - free(xref); - ref[ref_len - 1] = '\0'; + if (dev->data.disk->driverName && + (strcasecmp(dev->data.disk->driverName, "tap") == 0)) + strcpy(class, "tap"); + else + strcpy(class, "vbd"); + + for (disk = domDef->disks; disk != NULL; disk = disk->next) { + if (STREQ(dev->data.disk->dst, disk->dst)) { + strncpy(ref, disk->dst, ref_len); + ref[ref_len - 1] = '\0'; + return 0; + } + } + return -1; } else if (dev->type == VIR_DOMAIN_DEVICE_NET) { char mac[30]; virDomainNetDefPtr def = dev->data.net;
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor