mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-22 03:12:22 +00:00
move virHostdevReAttachHostScsiDevices to virhostdev.c
This commit is contained in:
parent
1136b8c153
commit
a4797138ad
@ -1303,6 +1303,7 @@ virHostdevPreparePCIDevices;
|
||||
virHostdevPrepareSCSIDevices;
|
||||
virHostdevPrepareUSBDevices;
|
||||
virHostdevReAttachPCIDevices;
|
||||
virHostdevReAttachScsiHostdevs;
|
||||
virHostdevReAttachUsbHostdevs;
|
||||
virHostdevUpdateActivePciHostdevs;
|
||||
virHostdevUpdateActiveScsiHostdevs;
|
||||
|
@ -328,68 +328,6 @@ qemuDomainReAttachHostUsbDevices(virQEMUDriverPtr driver,
|
||||
name, hostdevs, nhostdevs);
|
||||
}
|
||||
|
||||
static void
|
||||
virHostdevReAttachScsiHostdevs(virHostdevManagerPtr hostdev_mgr,
|
||||
const char *drv_name,
|
||||
const char *name,
|
||||
virDomainHostdevDefPtr *hostdevs,
|
||||
int nhostdevs)
|
||||
{
|
||||
size_t i;
|
||||
|
||||
virObjectLock(hostdev_mgr->activeScsiHostdevs);
|
||||
for (i = 0; i < nhostdevs; i++) {
|
||||
virDomainHostdevDefPtr hostdev = hostdevs[i];
|
||||
virSCSIDevicePtr scsi;
|
||||
virSCSIDevicePtr tmp;
|
||||
|
||||
if (hostdev->mode != VIR_DOMAIN_HOSTDEV_MODE_SUBSYS ||
|
||||
hostdev->source.subsys.type != VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI)
|
||||
continue;
|
||||
|
||||
if (!(scsi = virSCSIDeviceNew(NULL,
|
||||
hostdev->source.subsys.u.scsi.adapter,
|
||||
hostdev->source.subsys.u.scsi.bus,
|
||||
hostdev->source.subsys.u.scsi.target,
|
||||
hostdev->source.subsys.u.scsi.unit,
|
||||
hostdev->readonly,
|
||||
hostdev->shareable))) {
|
||||
VIR_WARN("Unable to reattach SCSI device %s:%d:%d:%d on domain %s",
|
||||
hostdev->source.subsys.u.scsi.adapter,
|
||||
hostdev->source.subsys.u.scsi.bus,
|
||||
hostdev->source.subsys.u.scsi.target,
|
||||
hostdev->source.subsys.u.scsi.unit,
|
||||
name);
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Only delete the devices which are marked as being used by @name,
|
||||
* because qemuProcessStart could fail on the half way. */
|
||||
|
||||
if (!(tmp = virSCSIDeviceListFind(hostdev_mgr->activeScsiHostdevs, scsi))) {
|
||||
VIR_WARN("Unable to find device %s:%d:%d:%d "
|
||||
"in list of active SCSI devices",
|
||||
hostdev->source.subsys.u.scsi.adapter,
|
||||
hostdev->source.subsys.u.scsi.bus,
|
||||
hostdev->source.subsys.u.scsi.target,
|
||||
hostdev->source.subsys.u.scsi.unit);
|
||||
virSCSIDeviceFree(scsi);
|
||||
continue;
|
||||
}
|
||||
|
||||
VIR_DEBUG("Removing %s:%d:%d:%d dom=%s from activeScsiHostdevs",
|
||||
hostdev->source.subsys.u.scsi.adapter,
|
||||
hostdev->source.subsys.u.scsi.bus,
|
||||
hostdev->source.subsys.u.scsi.target,
|
||||
hostdev->source.subsys.u.scsi.unit,
|
||||
name);
|
||||
|
||||
virSCSIDeviceListDel(hostdev_mgr->activeScsiHostdevs, tmp, drv_name, name);
|
||||
virSCSIDeviceFree(scsi);
|
||||
}
|
||||
virObjectUnlock(hostdev_mgr->activeScsiHostdevs);
|
||||
}
|
||||
|
||||
void
|
||||
qemuDomainReAttachHostScsiDevices(virQEMUDriverPtr driver,
|
||||
const char *name,
|
||||
|
@ -1317,3 +1317,65 @@ virHostdevReAttachUsbHostdevs(virHostdevManagerPtr hostdev_mgr,
|
||||
}
|
||||
virObjectUnlock(hostdev_mgr->activeUsbHostdevs);
|
||||
}
|
||||
|
||||
void
|
||||
virHostdevReAttachScsiHostdevs(virHostdevManagerPtr hostdev_mgr,
|
||||
const char *drv_name,
|
||||
const char *name,
|
||||
virDomainHostdevDefPtr *hostdevs,
|
||||
int nhostdevs)
|
||||
{
|
||||
size_t i;
|
||||
|
||||
virObjectLock(hostdev_mgr->activeScsiHostdevs);
|
||||
for (i = 0; i < nhostdevs; i++) {
|
||||
virDomainHostdevDefPtr hostdev = hostdevs[i];
|
||||
virSCSIDevicePtr scsi;
|
||||
virSCSIDevicePtr tmp;
|
||||
|
||||
if (hostdev->mode != VIR_DOMAIN_HOSTDEV_MODE_SUBSYS ||
|
||||
hostdev->source.subsys.type != VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI)
|
||||
continue;
|
||||
|
||||
if (!(scsi = virSCSIDeviceNew(NULL,
|
||||
hostdev->source.subsys.u.scsi.adapter,
|
||||
hostdev->source.subsys.u.scsi.bus,
|
||||
hostdev->source.subsys.u.scsi.target,
|
||||
hostdev->source.subsys.u.scsi.unit,
|
||||
hostdev->readonly,
|
||||
hostdev->shareable))) {
|
||||
VIR_WARN("Unable to reattach SCSI device %s:%d:%d:%d on domain %s",
|
||||
hostdev->source.subsys.u.scsi.adapter,
|
||||
hostdev->source.subsys.u.scsi.bus,
|
||||
hostdev->source.subsys.u.scsi.target,
|
||||
hostdev->source.subsys.u.scsi.unit,
|
||||
name);
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Only delete the devices which are marked as being used by @name,
|
||||
* because qemuProcessStart could fail on the half way. */
|
||||
|
||||
if (!(tmp = virSCSIDeviceListFind(hostdev_mgr->activeScsiHostdevs, scsi))) {
|
||||
VIR_WARN("Unable to find device %s:%d:%d:%d "
|
||||
"in list of active SCSI devices",
|
||||
hostdev->source.subsys.u.scsi.adapter,
|
||||
hostdev->source.subsys.u.scsi.bus,
|
||||
hostdev->source.subsys.u.scsi.target,
|
||||
hostdev->source.subsys.u.scsi.unit);
|
||||
virSCSIDeviceFree(scsi);
|
||||
continue;
|
||||
}
|
||||
|
||||
VIR_DEBUG("Removing %s:%d:%d:%d dom=%s from activeScsiHostdevs",
|
||||
hostdev->source.subsys.u.scsi.adapter,
|
||||
hostdev->source.subsys.u.scsi.bus,
|
||||
hostdev->source.subsys.u.scsi.target,
|
||||
hostdev->source.subsys.u.scsi.unit,
|
||||
name);
|
||||
|
||||
virSCSIDeviceListDel(hostdev_mgr->activeScsiHostdevs, tmp, drv_name, name);
|
||||
virSCSIDeviceFree(scsi);
|
||||
}
|
||||
virObjectUnlock(hostdev_mgr->activeScsiHostdevs);
|
||||
}
|
||||
|
@ -84,6 +84,12 @@ virHostdevReAttachUsbHostdevs(virHostdevManagerPtr hostdev_mgr,
|
||||
const char *name,
|
||||
virDomainHostdevDefPtr *hostdevs,
|
||||
int nhostdevs);
|
||||
void
|
||||
virHostdevReAttachScsiHostdevs(virHostdevManagerPtr hostdev_mgr,
|
||||
const char *drv_name,
|
||||
const char *name,
|
||||
virDomainHostdevDefPtr *hostdevs,
|
||||
int nhostdevs);
|
||||
int
|
||||
virHostdevUpdateActivePciHostdevs(virHostdevManagerPtr mgr,
|
||||
const char *drv_name,
|
||||
|
Loading…
x
Reference in New Issue
Block a user