mirror of https://gitee.com/openkylin/libvirt.git
qemu: Move qemuDomainDetachDeviceDiskLive to qemu_hotplug.c
This commit is contained in:
parent
7a5d85f9b1
commit
4e6b05f5b6
|
@ -6362,58 +6362,6 @@ qemuDomainAttachDeviceLive(virDomainObjPtr vm,
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int
|
||||
qemuFindDisk(virDomainDefPtr def, const char *dst)
|
||||
{
|
||||
size_t i;
|
||||
|
||||
for (i = 0; i < def->ndisks; i++) {
|
||||
if (STREQ(def->disks[i]->dst, dst)) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int
|
||||
qemuDomainDetachDeviceDiskLive(virQEMUDriverPtr driver,
|
||||
virDomainObjPtr vm,
|
||||
virDomainDeviceDefPtr dev)
|
||||
{
|
||||
virDomainDiskDefPtr disk;
|
||||
int ret = -1;
|
||||
int idx;
|
||||
|
||||
if ((idx = qemuFindDisk(vm->def, dev->data.disk->dst)) < 0) {
|
||||
virReportError(VIR_ERR_OPERATION_FAILED,
|
||||
_("disk %s not found"), dev->data.disk->dst);
|
||||
return -1;
|
||||
}
|
||||
disk = vm->def->disks[idx];
|
||||
|
||||
switch (disk->device) {
|
||||
case VIR_DOMAIN_DISK_DEVICE_DISK:
|
||||
case VIR_DOMAIN_DISK_DEVICE_LUN:
|
||||
if (disk->bus == VIR_DOMAIN_DISK_BUS_VIRTIO)
|
||||
ret = qemuDomainDetachVirtioDiskDevice(driver, vm, disk);
|
||||
else if (disk->bus == VIR_DOMAIN_DISK_BUS_SCSI ||
|
||||
disk->bus == VIR_DOMAIN_DISK_BUS_USB)
|
||||
ret = qemuDomainDetachDiskDevice(driver, vm, disk);
|
||||
else
|
||||
virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
|
||||
_("This type of disk cannot be hot unplugged"));
|
||||
break;
|
||||
default:
|
||||
virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
|
||||
_("disk device type '%s' cannot be detached"),
|
||||
virDomainDiskDeviceTypeToString(disk->device));
|
||||
break;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int
|
||||
qemuDomainDetachDeviceControllerLive(virQEMUDriverPtr driver,
|
||||
virDomainObjPtr vm,
|
||||
|
|
|
@ -2752,9 +2752,10 @@ qemuDomainSignalDeviceRemoval(virDomainObjPtr vm,
|
|||
}
|
||||
|
||||
|
||||
int qemuDomainDetachVirtioDiskDevice(virQEMUDriverPtr driver,
|
||||
virDomainObjPtr vm,
|
||||
virDomainDiskDefPtr detach)
|
||||
static int
|
||||
qemuDomainDetachVirtioDiskDevice(virQEMUDriverPtr driver,
|
||||
virDomainObjPtr vm,
|
||||
virDomainDiskDefPtr detach)
|
||||
{
|
||||
int ret = -1;
|
||||
qemuDomainObjPrivatePtr priv = vm->privateData;
|
||||
|
@ -2823,9 +2824,10 @@ cleanup:
|
|||
return ret;
|
||||
}
|
||||
|
||||
int qemuDomainDetachDiskDevice(virQEMUDriverPtr driver,
|
||||
virDomainObjPtr vm,
|
||||
virDomainDiskDefPtr detach)
|
||||
static int
|
||||
qemuDomainDetachDiskDevice(virQEMUDriverPtr driver,
|
||||
virDomainObjPtr vm,
|
||||
virDomainDiskDefPtr detach)
|
||||
{
|
||||
int ret = -1;
|
||||
qemuDomainObjPrivatePtr priv = vm->privateData;
|
||||
|
@ -2875,6 +2877,59 @@ cleanup:
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int
|
||||
qemuFindDisk(virDomainDefPtr def, const char *dst)
|
||||
{
|
||||
size_t i;
|
||||
|
||||
for (i = 0; i < def->ndisks; i++) {
|
||||
if (STREQ(def->disks[i]->dst, dst)) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
int
|
||||
qemuDomainDetachDeviceDiskLive(virQEMUDriverPtr driver,
|
||||
virDomainObjPtr vm,
|
||||
virDomainDeviceDefPtr dev)
|
||||
{
|
||||
virDomainDiskDefPtr disk;
|
||||
int ret = -1;
|
||||
int idx;
|
||||
|
||||
if ((idx = qemuFindDisk(vm->def, dev->data.disk->dst)) < 0) {
|
||||
virReportError(VIR_ERR_OPERATION_FAILED,
|
||||
_("disk %s not found"), dev->data.disk->dst);
|
||||
return -1;
|
||||
}
|
||||
disk = vm->def->disks[idx];
|
||||
|
||||
switch (disk->device) {
|
||||
case VIR_DOMAIN_DISK_DEVICE_DISK:
|
||||
case VIR_DOMAIN_DISK_DEVICE_LUN:
|
||||
if (disk->bus == VIR_DOMAIN_DISK_BUS_VIRTIO)
|
||||
ret = qemuDomainDetachVirtioDiskDevice(driver, vm, disk);
|
||||
else if (disk->bus == VIR_DOMAIN_DISK_BUS_SCSI ||
|
||||
disk->bus == VIR_DOMAIN_DISK_BUS_USB)
|
||||
ret = qemuDomainDetachDiskDevice(driver, vm, disk);
|
||||
else
|
||||
virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
|
||||
_("This type of disk cannot be hot unplugged"));
|
||||
break;
|
||||
default:
|
||||
virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
|
||||
_("disk device type '%s' cannot be detached"),
|
||||
virDomainDiskDeviceTypeToString(disk->device));
|
||||
break;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
static bool qemuDomainDiskControllerIsBusy(virDomainObjPtr vm,
|
||||
virDomainControllerDefPtr detach)
|
||||
{
|
||||
|
|
|
@ -75,12 +75,9 @@ int qemuDomainChangeNetLinkState(virQEMUDriverPtr driver,
|
|||
virDomainObjPtr vm,
|
||||
virDomainNetDefPtr dev,
|
||||
int linkstate);
|
||||
int qemuDomainDetachVirtioDiskDevice(virQEMUDriverPtr driver,
|
||||
virDomainObjPtr vm,
|
||||
virDomainDiskDefPtr disk);
|
||||
int qemuDomainDetachDiskDevice(virQEMUDriverPtr driver,
|
||||
virDomainObjPtr vm,
|
||||
virDomainDiskDefPtr disk);
|
||||
int qemuDomainDetachDeviceDiskLive(virQEMUDriverPtr driver,
|
||||
virDomainObjPtr vm,
|
||||
virDomainDeviceDefPtr dev);
|
||||
int qemuDomainDetachPciControllerDevice(virQEMUDriverPtr driver,
|
||||
virDomainObjPtr vm,
|
||||
virDomainDeviceDefPtr dev);
|
||||
|
|
Loading…
Reference in New Issue