提交 42957661 编写于 作者: J John Ferlan

hostdev: Introduce virDomainHostdevSubsysSCSIHost

Split virDomainHostdevSubsysSCSI further. In preparation for having
either SCSI or iSCSI data, create a union in virDomainHostdevSubsysSCSI
to contain just a virDomainHostdevSubsysSCSIHost to describe the
'scsi_host' host device
上级 5805621c
...@@ -423,14 +423,16 @@ virDomainAuditHostdev(virDomainObjPtr vm, virDomainHostdevDefPtr hostdev, ...@@ -423,14 +423,16 @@ virDomainAuditHostdev(virDomainObjPtr vm, virDomainHostdevDefPtr hostdev,
goto cleanup; goto cleanup;
} }
break; break;
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI: case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI: {
virDomainHostdevSubsysSCSIHostPtr scsihostsrc = &scsisrc->u.host;
if (virAsprintfQuiet(&address, "%s:%d:%d:%d", if (virAsprintfQuiet(&address, "%s:%d:%d:%d",
scsisrc->adapter, scsisrc->bus, scsihostsrc->adapter, scsihostsrc->bus,
scsisrc->target, scsisrc->unit) < 0) { scsihostsrc->target, scsihostsrc->unit) < 0) {
VIR_WARN("OOM while encoding audit message"); VIR_WARN("OOM while encoding audit message");
goto cleanup; goto cleanup;
} }
break; break;
}
default: default:
VIR_WARN("Unexpected hostdev type while encoding audit message: %d", VIR_WARN("Unexpected hostdev type while encoding audit message: %d",
hostdev->source.subsys.type); hostdev->source.subsys.type);
......
...@@ -1726,7 +1726,7 @@ void virDomainHostdevDefClear(virDomainHostdevDefPtr def) ...@@ -1726,7 +1726,7 @@ void virDomainHostdevDefClear(virDomainHostdevDefPtr def)
break; break;
case VIR_DOMAIN_HOSTDEV_MODE_SUBSYS: case VIR_DOMAIN_HOSTDEV_MODE_SUBSYS:
if (def->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI) if (def->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI)
VIR_FREE(def->source.subsys.u.scsi.adapter); VIR_FREE(def->source.subsys.u.scsi.u.host.adapter);
break; break;
} }
} }
...@@ -4011,16 +4011,16 @@ virDomainHostdevSubsysPCIDefParseXML(xmlNodePtr node, ...@@ -4011,16 +4011,16 @@ virDomainHostdevSubsysPCIDefParseXML(xmlNodePtr node,
} }
static int static int
virDomainHostdevSubsysSCSIDefParseXML(xmlNodePtr node, virDomainHostdevSubsysSCSIHostDefParseXML(xmlNodePtr sourcenode,
virDomainHostdevDefPtr def) virDomainHostdevSubsysSCSIPtr scsisrc)
{ {
int ret = -1; int ret = -1;
bool got_address = false, got_adapter = false; bool got_address = false, got_adapter = false;
xmlNodePtr cur; xmlNodePtr cur;
char *bus = NULL, *target = NULL, *unit = NULL; char *bus = NULL, *target = NULL, *unit = NULL;
virDomainHostdevSubsysSCSIPtr scsisrc = &def->source.subsys.u.scsi; virDomainHostdevSubsysSCSIHostPtr scsihostsrc = &scsisrc->u.host;
cur = node->children; cur = sourcenode->children;
while (cur != NULL) { while (cur != NULL) {
if (cur->type == XML_ELEMENT_NODE) { if (cur->type == XML_ELEMENT_NODE) {
if (xmlStrEqual(cur->name, BAD_CAST "address")) { if (xmlStrEqual(cur->name, BAD_CAST "address")) {
...@@ -4040,19 +4040,20 @@ virDomainHostdevSubsysSCSIDefParseXML(xmlNodePtr node, ...@@ -4040,19 +4040,20 @@ virDomainHostdevSubsysSCSIDefParseXML(xmlNodePtr node,
goto cleanup; goto cleanup;
} }
if (virStrToLong_ui(bus, NULL, 0, &scsisrc->bus) < 0) { if (virStrToLong_ui(bus, NULL, 0, &scsihostsrc->bus) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("cannot parse bus '%s'"), bus); _("cannot parse bus '%s'"), bus);
goto cleanup; goto cleanup;
} }
if (virStrToLong_ui(target, NULL, 0, &scsisrc->target) < 0) { if (virStrToLong_ui(target, NULL, 0,
&scsihostsrc->target) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("cannot parse target '%s'"), target); _("cannot parse target '%s'"), target);
goto cleanup; goto cleanup;
} }
if (virStrToLong_ui(unit, NULL, 0, &scsisrc->unit) < 0) { if (virStrToLong_ui(unit, NULL, 0, &scsihostsrc->unit) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("cannot parse unit '%s'"), unit); _("cannot parse unit '%s'"), unit);
goto cleanup; goto cleanup;
...@@ -4066,7 +4067,7 @@ virDomainHostdevSubsysSCSIDefParseXML(xmlNodePtr node, ...@@ -4066,7 +4067,7 @@ virDomainHostdevSubsysSCSIDefParseXML(xmlNodePtr node,
"for scsi hostdev source")); "for scsi hostdev source"));
goto cleanup; goto cleanup;
} }
if (!(scsisrc->adapter = virXMLPropString(cur, "name"))) { if (!(scsihostsrc->adapter = virXMLPropString(cur, "name"))) {
virReportError(VIR_ERR_XML_ERROR, "%s", virReportError(VIR_ERR_XML_ERROR, "%s",
_("'adapter' must be specified for scsi hostdev source")); _("'adapter' must be specified for scsi hostdev source"));
goto cleanup; goto cleanup;
...@@ -4098,6 +4099,13 @@ virDomainHostdevSubsysSCSIDefParseXML(xmlNodePtr node, ...@@ -4098,6 +4099,13 @@ virDomainHostdevSubsysSCSIDefParseXML(xmlNodePtr node,
return ret; return ret;
} }
static int
virDomainHostdevSubsysSCSIDefParseXML(xmlNodePtr sourcenode,
virDomainHostdevSubsysSCSIPtr scsisrc)
{
return virDomainHostdevSubsysSCSIHostDefParseXML(sourcenode, scsisrc);
}
/* Check if a drive type address $controller:0:0:$unit is already /* Check if a drive type address $controller:0:0:$unit is already
* taken by a disk or not. * taken by a disk or not.
*/ */
...@@ -4336,7 +4344,7 @@ virDomainHostdevDefParseXMLSubsys(xmlNodePtr node, ...@@ -4336,7 +4344,7 @@ virDomainHostdevDefParseXMLSubsys(xmlNodePtr node,
break; break;
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI: case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI:
if (virDomainHostdevSubsysSCSIDefParseXML(sourcenode, def) < 0) if (virDomainHostdevSubsysSCSIDefParseXML(sourcenode, scsisrc) < 0)
goto error; goto error;
break; break;
...@@ -10231,17 +10239,18 @@ virDomainHostdevMatchSubsysPCI(virDomainHostdevDefPtr first, ...@@ -10231,17 +10239,18 @@ virDomainHostdevMatchSubsysPCI(virDomainHostdevDefPtr first,
} }
static int static int
virDomainHostdevMatchSubsysSCSI(virDomainHostdevDefPtr first, virDomainHostdevMatchSubsysSCSIHost(virDomainHostdevDefPtr first,
virDomainHostdevDefPtr second) virDomainHostdevDefPtr second)
{ {
virDomainHostdevSubsysSCSIPtr first_scsisrc = &first->source.subsys.u.scsi; virDomainHostdevSubsysSCSIHostPtr first_scsihostsrc =
virDomainHostdevSubsysSCSIPtr second_scsisrc = &first->source.subsys.u.scsi.u.host;
&second->source.subsys.u.scsi; virDomainHostdevSubsysSCSIHostPtr second_scsihostsrc =
&second->source.subsys.u.scsi.u.host;
if (STREQ(first_scsisrc->adapter, second_scsisrc->adapter) && if (STREQ(first_scsihostsrc->adapter, second_scsihostsrc->adapter) &&
first_scsisrc->bus == second_scsisrc->bus && first_scsihostsrc->bus == second_scsihostsrc->bus &&
first_scsisrc->target == second_scsisrc->target && first_scsihostsrc->target == second_scsihostsrc->target &&
first_scsisrc->unit == second_scsisrc->unit) first_scsihostsrc->unit == second_scsihostsrc->unit)
return 1; return 1;
return 0; return 0;
} }
...@@ -10259,7 +10268,7 @@ virDomainHostdevMatchSubsys(virDomainHostdevDefPtr a, ...@@ -10259,7 +10268,7 @@ virDomainHostdevMatchSubsys(virDomainHostdevDefPtr a,
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB: case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB:
return virDomainHostdevMatchSubsysUSB(a, b); return virDomainHostdevMatchSubsysUSB(a, b);
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI: case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI:
return virDomainHostdevMatchSubsysSCSI(a, b); return virDomainHostdevMatchSubsysSCSIHost(a, b);
} }
return 0; return 0;
} }
...@@ -15526,6 +15535,7 @@ virDomainHostdevDefFormatSubsys(virBufferPtr buf, ...@@ -15526,6 +15535,7 @@ virDomainHostdevDefFormatSubsys(virBufferPtr buf,
virDomainHostdevSubsysUSBPtr usbsrc = &def->source.subsys.u.usb; virDomainHostdevSubsysUSBPtr usbsrc = &def->source.subsys.u.usb;
virDomainHostdevSubsysPCIPtr pcisrc = &def->source.subsys.u.pci; virDomainHostdevSubsysPCIPtr pcisrc = &def->source.subsys.u.pci;
virDomainHostdevSubsysSCSIPtr scsisrc = &def->source.subsys.u.scsi; virDomainHostdevSubsysSCSIPtr scsisrc = &def->source.subsys.u.scsi;
virDomainHostdevSubsysSCSIHostPtr scsihostsrc = &scsisrc->u.host;
if (def->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI && if (def->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI &&
pcisrc->backend != VIR_DOMAIN_HOSTDEV_PCI_BACKEND_DEFAULT) { pcisrc->backend != VIR_DOMAIN_HOSTDEV_PCI_BACKEND_DEFAULT) {
...@@ -15594,10 +15604,11 @@ virDomainHostdevDefFormatSubsys(virBufferPtr buf, ...@@ -15594,10 +15604,11 @@ virDomainHostdevDefFormatSubsys(virBufferPtr buf,
break; break;
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI: case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI:
virBufferAsprintf(buf, "<adapter name='%s'/>\n", virBufferAsprintf(buf, "<adapter name='%s'/>\n",
scsisrc->adapter); scsihostsrc->adapter);
virBufferAsprintf(buf, "<address %sbus='%d' target='%d' unit='%d'/>\n", virBufferAsprintf(buf, "<address %sbus='%d' target='%d' unit='%d'/>\n",
includeTypeInAddr ? "type='scsi' " : "", includeTypeInAddr ? "type='scsi' " : "",
scsisrc->bus, scsisrc->target, scsisrc->unit); scsihostsrc->bus, scsihostsrc->target,
scsihostsrc->unit);
break; break;
default: default:
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
......
...@@ -407,14 +407,22 @@ struct _virDomainHostdevSubsysPCI { ...@@ -407,14 +407,22 @@ struct _virDomainHostdevSubsysPCI {
int backend; /* enum virDomainHostdevSubsysPCIBackendType */ int backend; /* enum virDomainHostdevSubsysPCIBackendType */
}; };
typedef struct _virDomainHostdevSubsysSCSI virDomainHostdevSubsysSCSI; typedef struct _virDomainHostdevSubsysSCSIHost virDomainHostdevSubsysSCSIHost;
typedef virDomainHostdevSubsysSCSI *virDomainHostdevSubsysSCSIPtr; typedef virDomainHostdevSubsysSCSIHost *virDomainHostdevSubsysSCSIHostPtr;
struct _virDomainHostdevSubsysSCSI { struct _virDomainHostdevSubsysSCSIHost {
char *adapter; char *adapter;
unsigned bus; unsigned bus;
unsigned target; unsigned target;
unsigned unit; unsigned unit;
};
typedef struct _virDomainHostdevSubsysSCSI virDomainHostdevSubsysSCSI;
typedef virDomainHostdevSubsysSCSI *virDomainHostdevSubsysSCSIPtr;
struct _virDomainHostdevSubsysSCSI {
int sgio; /* enum virDomainDeviceSGIO */ int sgio; /* enum virDomainDeviceSGIO */
union {
virDomainHostdevSubsysSCSIHost host;
} u;
}; };
typedef struct _virDomainHostdevSubsys virDomainHostdevSubsys; typedef struct _virDomainHostdevSubsys virDomainHostdevSubsys;
......
...@@ -306,10 +306,11 @@ qemuSetupHostdevCGroup(virDomainObjPtr vm, ...@@ -306,10 +306,11 @@ qemuSetupHostdevCGroup(virDomainObjPtr vm,
} }
break; break;
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI: case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI: {
virDomainHostdevSubsysSCSIHostPtr scsihostsrc = &scsisrc->u.host;
if ((scsi = virSCSIDeviceNew(NULL, if ((scsi = virSCSIDeviceNew(NULL,
scsisrc->adapter, scsisrc->bus, scsihostsrc->adapter, scsihostsrc->bus,
scsisrc->target, scsisrc->unit, scsihostsrc->target, scsihostsrc->unit,
dev->readonly, dev->readonly,
dev->shareable)) == NULL) dev->shareable)) == NULL)
goto cleanup; goto cleanup;
...@@ -318,6 +319,8 @@ qemuSetupHostdevCGroup(virDomainObjPtr vm, ...@@ -318,6 +319,8 @@ qemuSetupHostdevCGroup(virDomainObjPtr vm,
qemuSetupHostSCSIDeviceCgroup, qemuSetupHostSCSIDeviceCgroup,
vm) < 0) vm) < 0)
goto cleanup; goto cleanup;
break;
}
default: default:
break; break;
......
...@@ -5131,11 +5131,14 @@ qemuBuildSCSIHostdevDrvStr(virDomainHostdevDefPtr dev, ...@@ -5131,11 +5131,14 @@ qemuBuildSCSIHostdevDrvStr(virDomainHostdevDefPtr dev,
{ {
virBuffer buf = VIR_BUFFER_INITIALIZER; virBuffer buf = VIR_BUFFER_INITIALIZER;
virDomainHostdevSubsysSCSIPtr scsisrc = &dev->source.subsys.u.scsi; virDomainHostdevSubsysSCSIPtr scsisrc = &dev->source.subsys.u.scsi;
virDomainHostdevSubsysSCSIHostPtr scsihostsrc = &scsisrc->u.host;
char *sg = NULL; char *sg = NULL;
sg = (callbacks->qemuGetSCSIDeviceSgName)(NULL, sg = (callbacks->qemuGetSCSIDeviceSgName)(NULL,
scsisrc->adapter, scsisrc->bus, scsihostsrc->adapter,
scsisrc->target, scsisrc->unit); scsihostsrc->bus,
scsihostsrc->target,
scsihostsrc->unit);
if (!sg) if (!sg)
goto error; goto error;
......
...@@ -928,11 +928,12 @@ qemuAddSharedDevice(virQEMUDriverPtr driver, ...@@ -928,11 +928,12 @@ qemuAddSharedDevice(virQEMUDriverPtr driver,
goto cleanup; goto cleanup;
} else { } else {
virDomainHostdevSubsysSCSIPtr scsisrc = &hostdev->source.subsys.u.scsi; virDomainHostdevSubsysSCSIPtr scsisrc = &hostdev->source.subsys.u.scsi;
virDomainHostdevSubsysSCSIHostPtr scsihostsrc = &scsisrc->u.host;
if (!(dev_name = virSCSIDeviceGetDevName(NULL, if (!(dev_name = virSCSIDeviceGetDevName(NULL,
scsisrc->adapter, scsihostsrc->adapter,
scsisrc->bus, scsihostsrc->bus,
scsisrc->target, scsihostsrc->target,
scsisrc->unit))) scsihostsrc->unit)))
goto cleanup; goto cleanup;
if (virAsprintf(&dev_path, "/dev/%s", dev_name) < 0) if (virAsprintf(&dev_path, "/dev/%s", dev_name) < 0)
...@@ -1034,11 +1035,12 @@ qemuRemoveSharedDevice(virQEMUDriverPtr driver, ...@@ -1034,11 +1035,12 @@ qemuRemoveSharedDevice(virQEMUDriverPtr driver,
goto cleanup; goto cleanup;
} else { } else {
virDomainHostdevSubsysSCSIPtr scsisrc = &hostdev->source.subsys.u.scsi; virDomainHostdevSubsysSCSIPtr scsisrc = &hostdev->source.subsys.u.scsi;
virDomainHostdevSubsysSCSIHostPtr scsihostsrc = &scsisrc->u.host;
if (!(dev_name = virSCSIDeviceGetDevName(NULL, if (!(dev_name = virSCSIDeviceGetDevName(NULL,
scsisrc->adapter, scsihostsrc->adapter,
scsisrc->bus, scsihostsrc->bus,
scsisrc->target, scsihostsrc->target,
scsisrc->unit))) scsihostsrc->unit)))
goto cleanup; goto cleanup;
if (virAsprintf(&dev_path, "/dev/%s", dev_name) < 0) if (virAsprintf(&dev_path, "/dev/%s", dev_name) < 0)
......
...@@ -1574,10 +1574,11 @@ qemuDomainAttachHostSCSIDevice(virQEMUDriverPtr driver, ...@@ -1574,10 +1574,11 @@ qemuDomainAttachHostSCSIDevice(virQEMUDriverPtr driver,
if (qemuPrepareHostdevSCSIDevices(driver, vm->def->name, if (qemuPrepareHostdevSCSIDevices(driver, vm->def->name,
&hostdev, 1)) { &hostdev, 1)) {
virDomainHostdevSubsysSCSIPtr scsisrc = &hostdev->source.subsys.u.scsi; virDomainHostdevSubsysSCSIPtr scsisrc = &hostdev->source.subsys.u.scsi;
virDomainHostdevSubsysSCSIHostPtr scsihostsrc = &scsisrc->u.host;
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("Unable to prepare scsi hostdev: %s:%d:%d:%d"), _("Unable to prepare scsi hostdev: %s:%d:%d:%d"),
scsisrc->adapter, scsisrc->bus, scsihostsrc->adapter, scsihostsrc->bus,
scsisrc->target, scsisrc->unit); scsihostsrc->target, scsihostsrc->unit);
return -1; return -1;
} }
...@@ -3393,12 +3394,14 @@ int qemuDomainDetachHostDevice(virQEMUDriverPtr driver, ...@@ -3393,12 +3394,14 @@ int qemuDomainDetachHostDevice(virQEMUDriverPtr driver,
usbsrc->vendor, usbsrc->product); usbsrc->vendor, usbsrc->product);
} }
break; break;
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI: case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI: {
virDomainHostdevSubsysSCSIHostPtr scsihostsrc = &scsisrc->u.host;
virReportError(VIR_ERR_OPERATION_FAILED, virReportError(VIR_ERR_OPERATION_FAILED,
_("host scsi device %s:%d:%d.%d not found"), _("host scsi device %s:%d:%d.%d not found"),
scsisrc->adapter, scsisrc->bus, scsihostsrc->adapter, scsihostsrc->bus,
scsisrc->target, scsisrc->unit); scsihostsrc->target, scsihostsrc->unit);
break; break;
}
default: default:
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("unexpected hostdev type %d"), subsys->type); _("unexpected hostdev type %d"), subsys->type);
......
...@@ -870,10 +870,11 @@ AppArmorSetSecurityHostdevLabel(virSecurityManagerPtr mgr, ...@@ -870,10 +870,11 @@ AppArmorSetSecurityHostdevLabel(virSecurityManagerPtr mgr,
} }
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI: { case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI: {
virDomainHostdevSubsysSCSIHostPtr scsihostsrc = &scsisrc->u.host;
virSCSIDevicePtr scsi = virSCSIDevicePtr scsi =
virSCSIDeviceNew(NULL, virSCSIDeviceNew(NULL,
scsisrc->adapter, scsisrc->bus, scsihostsrc->adapter, scsihostsrc->bus,
scsisrc->target, scsisrc->unit, scsihostsrc->target, scsihostsrc->unit,
dev->readonly, dev->shareable); dev->readonly, dev->shareable);
if (!scsi) if (!scsi)
......
...@@ -571,10 +571,11 @@ virSecurityDACSetSecurityHostdevLabel(virSecurityManagerPtr mgr, ...@@ -571,10 +571,11 @@ virSecurityDACSetSecurityHostdevLabel(virSecurityManagerPtr mgr,
} }
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI: { case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI: {
virDomainHostdevSubsysSCSIHostPtr scsihostsrc = &scsisrc->u.host;
virSCSIDevicePtr scsi = virSCSIDevicePtr scsi =
virSCSIDeviceNew(NULL, virSCSIDeviceNew(NULL,
scsisrc->adapter, scsisrc->bus, scsihostsrc->adapter, scsihostsrc->bus,
scsisrc->target, scsisrc->unit, scsihostsrc->target, scsihostsrc->unit,
dev->readonly, dev->shareable); dev->readonly, dev->shareable);
if (!scsi) if (!scsi)
...@@ -688,10 +689,11 @@ virSecurityDACRestoreSecurityHostdevLabel(virSecurityManagerPtr mgr, ...@@ -688,10 +689,11 @@ virSecurityDACRestoreSecurityHostdevLabel(virSecurityManagerPtr mgr,
} }
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI: { case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI: {
virDomainHostdevSubsysSCSIHostPtr scsihostsrc = &scsisrc->u.host;
virSCSIDevicePtr scsi = virSCSIDevicePtr scsi =
virSCSIDeviceNew(NULL, virSCSIDeviceNew(NULL,
scsisrc->adapter, scsisrc->bus, scsihostsrc->adapter, scsihostsrc->bus,
scsisrc->target, scsisrc->unit, scsihostsrc->target, scsihostsrc->unit,
dev->readonly, dev->shareable); dev->readonly, dev->shareable);
if (!scsi) if (!scsi)
......
...@@ -1367,10 +1367,11 @@ virSecuritySELinuxSetSecurityHostdevSubsysLabel(virDomainDefPtr def, ...@@ -1367,10 +1367,11 @@ virSecuritySELinuxSetSecurityHostdevSubsysLabel(virDomainDefPtr def,
} }
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI: { case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI: {
virDomainHostdevSubsysSCSIHostPtr scsihostsrc = &scsisrc->u.host;
virSCSIDevicePtr scsi = virSCSIDevicePtr scsi =
virSCSIDeviceNew(NULL, virSCSIDeviceNew(NULL,
scsisrc->adapter, scsisrc->bus, scsihostsrc->adapter, scsihostsrc->bus,
scsisrc->target, scsisrc->unit, scsihostsrc->target, scsihostsrc->unit,
dev->readonly, dev->shareable); dev->readonly, dev->shareable);
if (!scsi) if (!scsi)
...@@ -1554,10 +1555,11 @@ virSecuritySELinuxRestoreSecurityHostdevSubsysLabel(virSecurityManagerPtr mgr, ...@@ -1554,10 +1555,11 @@ virSecuritySELinuxRestoreSecurityHostdevSubsysLabel(virSecurityManagerPtr mgr,
} }
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI: { case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI: {
virDomainHostdevSubsysSCSIHostPtr scsihostsrc = &scsisrc->u.host;
virSCSIDevicePtr scsi = virSCSIDevicePtr scsi =
virSCSIDeviceNew(NULL, virSCSIDeviceNew(NULL,
scsisrc->adapter, scsisrc->bus, scsihostsrc->adapter, scsihostsrc->bus,
scsisrc->target, scsisrc->unit, scsihostsrc->target, scsihostsrc->unit,
dev->readonly, dev->shareable); dev->readonly, dev->shareable);
if (!scsi) if (!scsi)
......
...@@ -938,17 +938,17 @@ virHostdevUpdateActiveSCSIDevices(virHostdevManagerPtr mgr, ...@@ -938,17 +938,17 @@ virHostdevUpdateActiveSCSIDevices(virHostdevManagerPtr mgr,
virObjectLock(mgr->activeSCSIHostdevs); virObjectLock(mgr->activeSCSIHostdevs);
for (i = 0; i < nhostdevs; i++) { for (i = 0; i < nhostdevs; i++) {
virDomainHostdevSubsysSCSIPtr scsisrc; virDomainHostdevSubsysSCSIHostPtr scsihostsrc;
hostdev = hostdevs[i]; hostdev = hostdevs[i];
scsisrc = &hostdev->source.subsys.u.scsi; scsihostsrc = &hostdev->source.subsys.u.scsi.u.host;
if (hostdev->mode != VIR_DOMAIN_HOSTDEV_MODE_SUBSYS || if (hostdev->mode != VIR_DOMAIN_HOSTDEV_MODE_SUBSYS ||
hostdev->source.subsys.type != VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI) hostdev->source.subsys.type != VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI)
continue; continue;
if (!(scsi = virSCSIDeviceNew(NULL, if (!(scsi = virSCSIDeviceNew(NULL,
scsisrc->adapter, scsisrc->bus, scsihostsrc->adapter, scsihostsrc->bus,
scsisrc->target, scsisrc->unit, scsihostsrc->target, scsihostsrc->unit,
hostdev->readonly, hostdev->shareable))) hostdev->readonly, hostdev->shareable)))
goto cleanup; goto cleanup;
...@@ -1219,8 +1219,8 @@ virHostdevPrepareSCSIDevices(virHostdevManagerPtr hostdev_mgr, ...@@ -1219,8 +1219,8 @@ virHostdevPrepareSCSIDevices(virHostdevManagerPtr hostdev_mgr,
/* Loop 1: build temporary list */ /* Loop 1: build temporary list */
for (i = 0; i < nhostdevs; i++) { for (i = 0; i < nhostdevs; i++) {
virDomainHostdevDefPtr hostdev = hostdevs[i]; virDomainHostdevDefPtr hostdev = hostdevs[i];
virDomainHostdevSubsysSCSIPtr scsisrc = virDomainHostdevSubsysSCSIHostPtr scsihostsrc =
&hostdev->source.subsys.u.scsi; &hostdev->source.subsys.u.scsi.u.host;
virSCSIDevicePtr scsi; virSCSIDevicePtr scsi;
if (hostdev->mode != VIR_DOMAIN_HOSTDEV_MODE_SUBSYS || if (hostdev->mode != VIR_DOMAIN_HOSTDEV_MODE_SUBSYS ||
...@@ -1234,8 +1234,8 @@ virHostdevPrepareSCSIDevices(virHostdevManagerPtr hostdev_mgr, ...@@ -1234,8 +1234,8 @@ virHostdevPrepareSCSIDevices(virHostdevManagerPtr hostdev_mgr,
} }
if (!(scsi = virSCSIDeviceNew(NULL, if (!(scsi = virSCSIDeviceNew(NULL,
scsisrc->adapter, scsisrc->bus, scsihostsrc->adapter, scsihostsrc->bus,
scsisrc->target, scsisrc->unit, scsihostsrc->target, scsihostsrc->unit,
hostdev->readonly, hostdev->shareable))) hostdev->readonly, hostdev->shareable)))
goto cleanup; goto cleanup;
...@@ -1381,8 +1381,8 @@ virHostdevReAttachSCSIDevices(virHostdevManagerPtr hostdev_mgr, ...@@ -1381,8 +1381,8 @@ virHostdevReAttachSCSIDevices(virHostdevManagerPtr hostdev_mgr,
virObjectLock(hostdev_mgr->activeSCSIHostdevs); virObjectLock(hostdev_mgr->activeSCSIHostdevs);
for (i = 0; i < nhostdevs; i++) { for (i = 0; i < nhostdevs; i++) {
virDomainHostdevDefPtr hostdev = hostdevs[i]; virDomainHostdevDefPtr hostdev = hostdevs[i];
virDomainHostdevSubsysSCSIPtr scsisrc = virDomainHostdevSubsysSCSIHostPtr scsihostsrc =
&hostdev->source.subsys.u.scsi; &hostdev->source.subsys.u.scsi.u.host;
virSCSIDevicePtr scsi; virSCSIDevicePtr scsi;
virSCSIDevicePtr tmp; virSCSIDevicePtr tmp;
...@@ -1391,12 +1391,12 @@ virHostdevReAttachSCSIDevices(virHostdevManagerPtr hostdev_mgr, ...@@ -1391,12 +1391,12 @@ virHostdevReAttachSCSIDevices(virHostdevManagerPtr hostdev_mgr,
continue; continue;
if (!(scsi = virSCSIDeviceNew(NULL, if (!(scsi = virSCSIDeviceNew(NULL,
scsisrc->adapter, scsisrc->bus, scsihostsrc->adapter, scsihostsrc->bus,
scsisrc->target, scsisrc->unit, scsihostsrc->target, scsihostsrc->unit,
hostdev->readonly, hostdev->shareable))) { hostdev->readonly, hostdev->shareable))) {
VIR_WARN("Unable to reattach SCSI device %s:%d:%d:%d on domain %s", VIR_WARN("Unable to reattach SCSI device %s:%d:%d:%d on domain %s",
scsisrc->adapter, scsisrc->bus, scsisrc->target, scsihostsrc->adapter, scsihostsrc->bus,
scsisrc->unit, dom_name); scsihostsrc->target, scsihostsrc->unit, dom_name);
continue; continue;
} }
...@@ -1406,15 +1406,15 @@ virHostdevReAttachSCSIDevices(virHostdevManagerPtr hostdev_mgr, ...@@ -1406,15 +1406,15 @@ virHostdevReAttachSCSIDevices(virHostdevManagerPtr hostdev_mgr,
if (!(tmp = virSCSIDeviceListFind(hostdev_mgr->activeSCSIHostdevs, scsi))) { if (!(tmp = virSCSIDeviceListFind(hostdev_mgr->activeSCSIHostdevs, scsi))) {
VIR_WARN("Unable to find device %s:%d:%d:%d " VIR_WARN("Unable to find device %s:%d:%d:%d "
"in list of active SCSI devices", "in list of active SCSI devices",
scsisrc->adapter, scsisrc->bus, scsihostsrc->adapter, scsihostsrc->bus,
scsisrc->target, scsisrc->unit); scsihostsrc->target, scsihostsrc->unit);
virSCSIDeviceFree(scsi); virSCSIDeviceFree(scsi);
continue; continue;
} }
VIR_DEBUG("Removing %s:%d:%d:%d dom=%s from activeSCSIHostdevs", VIR_DEBUG("Removing %s:%d:%d:%d dom=%s from activeSCSIHostdevs",
scsisrc->adapter, scsisrc->bus, scsisrc->target, scsihostsrc->adapter, scsihostsrc->bus,
scsisrc->unit, dom_name); scsihostsrc->target, scsihostsrc->unit, dom_name);
virSCSIDeviceListDel(hostdev_mgr->activeSCSIHostdevs, tmp, virSCSIDeviceListDel(hostdev_mgr->activeSCSIHostdevs, tmp,
drv_name, dom_name); drv_name, dom_name);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册