hostdev: Introduce virDomainHostdevSubsysSCSI

Create a separate typedef for the hostdev union data describing SCSI
Then adjust the code to use the new pointer
This commit is contained in:
John Ferlan 2014-07-03 17:01:10 -04:00
parent 1c8da0d44e
commit 5805621cd9
11 changed files with 101 additions and 116 deletions

View File

@ -390,6 +390,7 @@ virDomainAuditHostdev(virDomainObjPtr vm, virDomainHostdevDefPtr hostdev,
const char *virt; const char *virt;
virDomainHostdevSubsysUSBPtr usbsrc = &hostdev->source.subsys.u.usb; virDomainHostdevSubsysUSBPtr usbsrc = &hostdev->source.subsys.u.usb;
virDomainHostdevSubsysPCIPtr pcisrc = &hostdev->source.subsys.u.pci; virDomainHostdevSubsysPCIPtr pcisrc = &hostdev->source.subsys.u.pci;
virDomainHostdevSubsysSCSIPtr scsisrc = &hostdev->source.subsys.u.scsi;
virUUIDFormat(vm->def->uuid, uuidstr); virUUIDFormat(vm->def->uuid, uuidstr);
if (!(vmname = virAuditEncode("vm", vm->def->name))) { if (!(vmname = virAuditEncode("vm", vm->def->name))) {
@ -424,10 +425,8 @@ virDomainAuditHostdev(virDomainObjPtr vm, virDomainHostdevDefPtr hostdev,
break; break;
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI: case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI:
if (virAsprintfQuiet(&address, "%s:%d:%d:%d", if (virAsprintfQuiet(&address, "%s:%d:%d:%d",
hostdev->source.subsys.u.scsi.adapter, scsisrc->adapter, scsisrc->bus,
hostdev->source.subsys.u.scsi.bus, scsisrc->target, scsisrc->unit) < 0) {
hostdev->source.subsys.u.scsi.target,
hostdev->source.subsys.u.scsi.unit) < 0) {
VIR_WARN("OOM while encoding audit message"); VIR_WARN("OOM while encoding audit message");
goto cleanup; goto cleanup;
} }

View File

@ -4018,6 +4018,7 @@ virDomainHostdevSubsysSCSIDefParseXML(xmlNodePtr node,
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;
cur = node->children; cur = node->children;
while (cur != NULL) { while (cur != NULL) {
@ -4039,19 +4040,19 @@ virDomainHostdevSubsysSCSIDefParseXML(xmlNodePtr node,
goto cleanup; goto cleanup;
} }
if (virStrToLong_ui(bus, NULL, 0, &def->source.subsys.u.scsi.bus) < 0) { if (virStrToLong_ui(bus, NULL, 0, &scsisrc->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, &def->source.subsys.u.scsi.target) < 0) { if (virStrToLong_ui(target, NULL, 0, &scsisrc->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, &def->source.subsys.u.scsi.unit) < 0) { if (virStrToLong_ui(unit, NULL, 0, &scsisrc->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;
@ -4065,8 +4066,7 @@ virDomainHostdevSubsysSCSIDefParseXML(xmlNodePtr node,
"for scsi hostdev source")); "for scsi hostdev source"));
goto cleanup; goto cleanup;
} }
if (!(def->source.subsys.u.scsi.adapter = if (!(scsisrc->adapter = virXMLPropString(cur, "name"))) {
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;
@ -4247,6 +4247,7 @@ virDomainHostdevDefParseXMLSubsys(xmlNodePtr node,
int backend; int backend;
int ret = -1; int ret = -1;
virDomainHostdevSubsysPCIPtr pcisrc = &def->source.subsys.u.pci; virDomainHostdevSubsysPCIPtr pcisrc = &def->source.subsys.u.pci;
virDomainHostdevSubsysSCSIPtr scsisrc = &def->source.subsys.u.scsi;
/* @managed can be read from the xml document - it is always an /* @managed can be read from the xml document - it is always an
* attribute of the toplevel element, no matter what type of * attribute of the toplevel element, no matter what type of
@ -4304,8 +4305,7 @@ virDomainHostdevDefParseXMLSubsys(xmlNodePtr node,
goto error; goto error;
} }
if ((def->source.subsys.u.scsi.sgio = if ((scsisrc->sgio = virDomainDeviceSGIOTypeFromString(sgio)) <= 0) {
virDomainDeviceSGIOTypeFromString(sgio)) <= 0) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("unknown sgio mode '%s'"), sgio); _("unknown sgio mode '%s'"), sgio);
goto error; goto error;
@ -10231,13 +10231,17 @@ virDomainHostdevMatchSubsysPCI(virDomainHostdevDefPtr first,
} }
static int static int
virDomainHostdevMatchSubsysSCSI(virDomainHostdevDefPtr a, virDomainHostdevMatchSubsysSCSI(virDomainHostdevDefPtr first,
virDomainHostdevDefPtr b) virDomainHostdevDefPtr second)
{ {
if (STREQ(a->source.subsys.u.scsi.adapter, b->source.subsys.u.scsi.adapter) && virDomainHostdevSubsysSCSIPtr first_scsisrc = &first->source.subsys.u.scsi;
a->source.subsys.u.scsi.bus == b->source.subsys.u.scsi.bus && virDomainHostdevSubsysSCSIPtr second_scsisrc =
a->source.subsys.u.scsi.target == b->source.subsys.u.scsi.target && &second->source.subsys.u.scsi;
a->source.subsys.u.scsi.unit == b->source.subsys.u.scsi.unit)
if (STREQ(first_scsisrc->adapter, second_scsisrc->adapter) &&
first_scsisrc->bus == second_scsisrc->bus &&
first_scsisrc->target == second_scsisrc->target &&
first_scsisrc->unit == second_scsisrc->unit)
return 1; return 1;
return 0; return 0;
} }
@ -15521,6 +15525,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;
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) {
@ -15589,12 +15594,10 @@ 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",
def->source.subsys.u.scsi.adapter); scsisrc->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' " : "",
def->source.subsys.u.scsi.bus, scsisrc->bus, scsisrc->target, scsisrc->unit);
def->source.subsys.u.scsi.target,
def->source.subsys.u.scsi.unit);
break; break;
default: default:
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
@ -17012,6 +17015,7 @@ virDomainHostdevDefFormat(virBufferPtr buf,
unsigned int flags) unsigned int flags)
{ {
const char *mode = virDomainHostdevModeTypeToString(def->mode); const char *mode = virDomainHostdevModeTypeToString(def->mode);
virDomainHostdevSubsysSCSIPtr scsisrc = &def->source.subsys.u.scsi;
const char *type; const char *type;
if (!mode) { if (!mode) {
@ -17051,11 +17055,10 @@ virDomainHostdevDefFormat(virBufferPtr buf,
virBufferAsprintf(buf, " managed='%s'", virBufferAsprintf(buf, " managed='%s'",
def->managed ? "yes" : "no"); def->managed ? "yes" : "no");
if (def->source.subsys.type == if (def->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI &&
VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI && scsisrc->sgio)
def->source.subsys.u.scsi.sgio)
virBufferAsprintf(buf, " sgio='%s'", virBufferAsprintf(buf, " sgio='%s'",
virDomainDeviceSGIOTypeToString(def->source.subsys.u.scsi.sgio)); virDomainDeviceSGIOTypeToString(scsisrc->sgio));
} }
virBufferAddLit(buf, ">\n"); virBufferAddLit(buf, ">\n");
virBufferAdjustIndent(buf, 2); virBufferAdjustIndent(buf, 2);

View File

@ -407,6 +407,16 @@ struct _virDomainHostdevSubsysPCI {
int backend; /* enum virDomainHostdevSubsysPCIBackendType */ int backend; /* enum virDomainHostdevSubsysPCIBackendType */
}; };
typedef struct _virDomainHostdevSubsysSCSI virDomainHostdevSubsysSCSI;
typedef virDomainHostdevSubsysSCSI *virDomainHostdevSubsysSCSIPtr;
struct _virDomainHostdevSubsysSCSI {
char *adapter;
unsigned bus;
unsigned target;
unsigned unit;
int sgio; /* enum virDomainDeviceSGIO */
};
typedef struct _virDomainHostdevSubsys virDomainHostdevSubsys; typedef struct _virDomainHostdevSubsys virDomainHostdevSubsys;
typedef virDomainHostdevSubsys *virDomainHostdevSubsysPtr; typedef virDomainHostdevSubsys *virDomainHostdevSubsysPtr;
struct _virDomainHostdevSubsys { struct _virDomainHostdevSubsys {
@ -414,13 +424,7 @@ struct _virDomainHostdevSubsys {
union { union {
virDomainHostdevSubsysUSB usb; virDomainHostdevSubsysUSB usb;
virDomainHostdevSubsysPCI pci; virDomainHostdevSubsysPCI pci;
struct { virDomainHostdevSubsysSCSI scsi;
char *adapter;
unsigned bus;
unsigned target;
unsigned unit;
int sgio; /* enum virDomainDeviceSGIO */
} scsi;
} u; } u;
}; };

View File

@ -244,6 +244,7 @@ qemuSetupHostdevCGroup(virDomainObjPtr vm,
qemuDomainObjPrivatePtr priv = vm->privateData; qemuDomainObjPrivatePtr priv = vm->privateData;
virDomainHostdevSubsysUSBPtr usbsrc = &dev->source.subsys.u.usb; virDomainHostdevSubsysUSBPtr usbsrc = &dev->source.subsys.u.usb;
virDomainHostdevSubsysPCIPtr pcisrc = &dev->source.subsys.u.pci; virDomainHostdevSubsysPCIPtr pcisrc = &dev->source.subsys.u.pci;
virDomainHostdevSubsysSCSIPtr scsisrc = &dev->source.subsys.u.scsi;
virPCIDevicePtr pci = NULL; virPCIDevicePtr pci = NULL;
virUSBDevicePtr usb = NULL; virUSBDevicePtr usb = NULL;
virSCSIDevicePtr scsi = NULL; virSCSIDevicePtr scsi = NULL;
@ -307,10 +308,8 @@ qemuSetupHostdevCGroup(virDomainObjPtr vm,
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI: case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI:
if ((scsi = virSCSIDeviceNew(NULL, if ((scsi = virSCSIDeviceNew(NULL,
dev->source.subsys.u.scsi.adapter, scsisrc->adapter, scsisrc->bus,
dev->source.subsys.u.scsi.bus, scsisrc->target, scsisrc->unit,
dev->source.subsys.u.scsi.target,
dev->source.subsys.u.scsi.unit,
dev->readonly, dev->readonly,
dev->shareable)) == NULL) dev->shareable)) == NULL)
goto cleanup; goto cleanup;

View File

@ -5130,13 +5130,12 @@ qemuBuildSCSIHostdevDrvStr(virDomainHostdevDefPtr dev,
qemuBuildCommandLineCallbacksPtr callbacks) qemuBuildCommandLineCallbacksPtr callbacks)
{ {
virBuffer buf = VIR_BUFFER_INITIALIZER; virBuffer buf = VIR_BUFFER_INITIALIZER;
virDomainHostdevSubsysSCSIPtr scsisrc = &dev->source.subsys.u.scsi;
char *sg = NULL; char *sg = NULL;
sg = (callbacks->qemuGetSCSIDeviceSgName)(NULL, sg = (callbacks->qemuGetSCSIDeviceSgName)(NULL,
dev->source.subsys.u.scsi.adapter, scsisrc->adapter, scsisrc->bus,
dev->source.subsys.u.scsi.bus, scsisrc->target, scsisrc->unit);
dev->source.subsys.u.scsi.target,
dev->source.subsys.u.scsi.unit);
if (!sg) if (!sg)
goto error; goto error;

View File

@ -927,11 +927,12 @@ qemuAddSharedDevice(virQEMUDriverPtr driver,
if (!(key = qemuGetSharedDeviceKey(virDomainDiskGetSource(disk)))) if (!(key = qemuGetSharedDeviceKey(virDomainDiskGetSource(disk))))
goto cleanup; goto cleanup;
} else { } else {
virDomainHostdevSubsysSCSIPtr scsisrc = &hostdev->source.subsys.u.scsi;
if (!(dev_name = virSCSIDeviceGetDevName(NULL, if (!(dev_name = virSCSIDeviceGetDevName(NULL,
hostdev->source.subsys.u.scsi.adapter, scsisrc->adapter,
hostdev->source.subsys.u.scsi.bus, scsisrc->bus,
hostdev->source.subsys.u.scsi.target, scsisrc->target,
hostdev->source.subsys.u.scsi.unit))) scsisrc->unit)))
goto cleanup; goto cleanup;
if (virAsprintf(&dev_path, "/dev/%s", dev_name) < 0) if (virAsprintf(&dev_path, "/dev/%s", dev_name) < 0)
@ -1032,11 +1033,12 @@ qemuRemoveSharedDevice(virQEMUDriverPtr driver,
if (!(key = qemuGetSharedDeviceKey(virDomainDiskGetSource(disk)))) if (!(key = qemuGetSharedDeviceKey(virDomainDiskGetSource(disk))))
goto cleanup; goto cleanup;
} else { } else {
virDomainHostdevSubsysSCSIPtr scsisrc = &hostdev->source.subsys.u.scsi;
if (!(dev_name = virSCSIDeviceGetDevName(NULL, if (!(dev_name = virSCSIDeviceGetDevName(NULL,
hostdev->source.subsys.u.scsi.adapter, scsisrc->adapter,
hostdev->source.subsys.u.scsi.bus, scsisrc->bus,
hostdev->source.subsys.u.scsi.target, scsisrc->target,
hostdev->source.subsys.u.scsi.unit))) scsisrc->unit)))
goto cleanup; goto cleanup;
if (virAsprintf(&dev_path, "/dev/%s", dev_name) < 0) if (virAsprintf(&dev_path, "/dev/%s", dev_name) < 0)

View File

@ -1573,12 +1573,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;
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"),
hostdev->source.subsys.u.scsi.adapter, scsisrc->adapter, scsisrc->bus,
hostdev->source.subsys.u.scsi.bus, scsisrc->target, scsisrc->unit);
hostdev->source.subsys.u.scsi.target,
hostdev->source.subsys.u.scsi.unit);
return -1; return -1;
} }
@ -3362,6 +3361,7 @@ int qemuDomainDetachHostDevice(virQEMUDriverPtr driver,
virDomainHostdevSubsysPtr subsys = &hostdev->source.subsys; virDomainHostdevSubsysPtr subsys = &hostdev->source.subsys;
virDomainHostdevSubsysUSBPtr usbsrc = &subsys->u.usb; virDomainHostdevSubsysUSBPtr usbsrc = &subsys->u.usb;
virDomainHostdevSubsysPCIPtr pcisrc = &subsys->u.pci; virDomainHostdevSubsysPCIPtr pcisrc = &subsys->u.pci;
virDomainHostdevSubsysSCSIPtr scsisrc = &subsys->u.scsi;
virDomainHostdevDefPtr detach = NULL; virDomainHostdevDefPtr detach = NULL;
int idx; int idx;
@ -3396,8 +3396,8 @@ int qemuDomainDetachHostDevice(virQEMUDriverPtr driver,
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI: case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI:
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"),
subsys->u.scsi.adapter, subsys->u.scsi.bus, scsisrc->adapter, scsisrc->bus,
subsys->u.scsi.target, subsys->u.scsi.unit); scsisrc->target, scsisrc->unit);
break; break;
default: default:
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,

View File

@ -814,6 +814,7 @@ AppArmorSetSecurityHostdevLabel(virSecurityManagerPtr mgr,
virDomainDefGetSecurityLabelDef(def, SECURITY_APPARMOR_NAME); virDomainDefGetSecurityLabelDef(def, SECURITY_APPARMOR_NAME);
virDomainHostdevSubsysUSBPtr usbsrc = &dev->source.subsys.u.usb; virDomainHostdevSubsysUSBPtr usbsrc = &dev->source.subsys.u.usb;
virDomainHostdevSubsysPCIPtr pcisrc = &dev->source.subsys.u.pci; virDomainHostdevSubsysPCIPtr pcisrc = &dev->source.subsys.u.pci;
virDomainHostdevSubsysSCSIPtr scsisrc = &dev->source.subsys.u.scsi;
if (!secdef) if (!secdef)
return -1; return -1;
@ -871,12 +872,9 @@ AppArmorSetSecurityHostdevLabel(virSecurityManagerPtr mgr,
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI: { case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI: {
virSCSIDevicePtr scsi = virSCSIDevicePtr scsi =
virSCSIDeviceNew(NULL, virSCSIDeviceNew(NULL,
dev->source.subsys.u.scsi.adapter, scsisrc->adapter, scsisrc->bus,
dev->source.subsys.u.scsi.bus, scsisrc->target, scsisrc->unit,
dev->source.subsys.u.scsi.target, dev->readonly, dev->shareable);
dev->source.subsys.u.scsi.unit,
dev->readonly,
dev->shareable);
if (!scsi) if (!scsi)
goto done; goto done;

View File

@ -511,6 +511,7 @@ virSecurityDACSetSecurityHostdevLabel(virSecurityManagerPtr mgr,
virSecurityDACCallbackData cbdata; virSecurityDACCallbackData cbdata;
virDomainHostdevSubsysUSBPtr usbsrc = &dev->source.subsys.u.usb; virDomainHostdevSubsysUSBPtr usbsrc = &dev->source.subsys.u.usb;
virDomainHostdevSubsysPCIPtr pcisrc = &dev->source.subsys.u.pci; virDomainHostdevSubsysPCIPtr pcisrc = &dev->source.subsys.u.pci;
virDomainHostdevSubsysSCSIPtr scsisrc = &dev->source.subsys.u.scsi;
int ret = -1; int ret = -1;
if (!priv->dynamicOwnership) if (!priv->dynamicOwnership)
@ -572,12 +573,9 @@ virSecurityDACSetSecurityHostdevLabel(virSecurityManagerPtr mgr,
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI: { case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI: {
virSCSIDevicePtr scsi = virSCSIDevicePtr scsi =
virSCSIDeviceNew(NULL, virSCSIDeviceNew(NULL,
dev->source.subsys.u.scsi.adapter, scsisrc->adapter, scsisrc->bus,
dev->source.subsys.u.scsi.bus, scsisrc->target, scsisrc->unit,
dev->source.subsys.u.scsi.target, dev->readonly, dev->shareable);
dev->source.subsys.u.scsi.unit,
dev->readonly,
dev->shareable);
if (!scsi) if (!scsi)
goto done; goto done;
@ -638,6 +636,7 @@ virSecurityDACRestoreSecurityHostdevLabel(virSecurityManagerPtr mgr,
virSecurityLabelDefPtr secdef; virSecurityLabelDefPtr secdef;
virDomainHostdevSubsysUSBPtr usbsrc = &dev->source.subsys.u.usb; virDomainHostdevSubsysUSBPtr usbsrc = &dev->source.subsys.u.usb;
virDomainHostdevSubsysPCIPtr pcisrc = &dev->source.subsys.u.pci; virDomainHostdevSubsysPCIPtr pcisrc = &dev->source.subsys.u.pci;
virDomainHostdevSubsysSCSIPtr scsisrc = &dev->source.subsys.u.scsi;
int ret = -1; int ret = -1;
secdef = virDomainDefGetSecurityLabelDef(def, SECURITY_DAC_NAME); secdef = virDomainDefGetSecurityLabelDef(def, SECURITY_DAC_NAME);
@ -691,12 +690,9 @@ virSecurityDACRestoreSecurityHostdevLabel(virSecurityManagerPtr mgr,
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI: { case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI: {
virSCSIDevicePtr scsi = virSCSIDevicePtr scsi =
virSCSIDeviceNew(NULL, virSCSIDeviceNew(NULL,
dev->source.subsys.u.scsi.adapter, scsisrc->adapter, scsisrc->bus,
dev->source.subsys.u.scsi.bus, scsisrc->target, scsisrc->unit,
dev->source.subsys.u.scsi.target, dev->readonly, dev->shareable);
dev->source.subsys.u.scsi.unit,
dev->readonly,
dev->shareable);
if (!scsi) if (!scsi)
goto done; goto done;

View File

@ -1321,6 +1321,7 @@ virSecuritySELinuxSetSecurityHostdevSubsysLabel(virDomainDefPtr def,
{ {
virDomainHostdevSubsysUSBPtr usbsrc = &dev->source.subsys.u.usb; virDomainHostdevSubsysUSBPtr usbsrc = &dev->source.subsys.u.usb;
virDomainHostdevSubsysPCIPtr pcisrc = &dev->source.subsys.u.pci; virDomainHostdevSubsysPCIPtr pcisrc = &dev->source.subsys.u.pci;
virDomainHostdevSubsysSCSIPtr scsisrc = &dev->source.subsys.u.scsi;
int ret = -1; int ret = -1;
switch (dev->source.subsys.type) { switch (dev->source.subsys.type) {
@ -1368,12 +1369,9 @@ virSecuritySELinuxSetSecurityHostdevSubsysLabel(virDomainDefPtr def,
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI: { case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI: {
virSCSIDevicePtr scsi = virSCSIDevicePtr scsi =
virSCSIDeviceNew(NULL, virSCSIDeviceNew(NULL,
dev->source.subsys.u.scsi.adapter, scsisrc->adapter, scsisrc->bus,
dev->source.subsys.u.scsi.bus, scsisrc->target, scsisrc->unit,
dev->source.subsys.u.scsi.target, dev->readonly, dev->shareable);
dev->source.subsys.u.scsi.unit,
dev->readonly,
dev->shareable);
if (!scsi) if (!scsi)
goto done; goto done;
@ -1509,6 +1507,7 @@ virSecuritySELinuxRestoreSecurityHostdevSubsysLabel(virSecurityManagerPtr mgr,
{ {
virDomainHostdevSubsysUSBPtr usbsrc = &dev->source.subsys.u.usb; virDomainHostdevSubsysUSBPtr usbsrc = &dev->source.subsys.u.usb;
virDomainHostdevSubsysPCIPtr pcisrc = &dev->source.subsys.u.pci; virDomainHostdevSubsysPCIPtr pcisrc = &dev->source.subsys.u.pci;
virDomainHostdevSubsysSCSIPtr scsisrc = &dev->source.subsys.u.scsi;
int ret = -1; int ret = -1;
switch (dev->source.subsys.type) { switch (dev->source.subsys.type) {
@ -1557,12 +1556,9 @@ virSecuritySELinuxRestoreSecurityHostdevSubsysLabel(virSecurityManagerPtr mgr,
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI: { case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI: {
virSCSIDevicePtr scsi = virSCSIDevicePtr scsi =
virSCSIDeviceNew(NULL, virSCSIDeviceNew(NULL,
dev->source.subsys.u.scsi.adapter, scsisrc->adapter, scsisrc->bus,
dev->source.subsys.u.scsi.bus, scsisrc->target, scsisrc->unit,
dev->source.subsys.u.scsi.target, dev->readonly, dev->shareable);
dev->source.subsys.u.scsi.unit,
dev->readonly,
dev->shareable);
if (!scsi) if (!scsi)
goto done; goto done;

View File

@ -938,19 +938,18 @@ virHostdevUpdateActiveSCSIDevices(virHostdevManagerPtr mgr,
virObjectLock(mgr->activeSCSIHostdevs); virObjectLock(mgr->activeSCSIHostdevs);
for (i = 0; i < nhostdevs; i++) { for (i = 0; i < nhostdevs; i++) {
virDomainHostdevSubsysSCSIPtr scsisrc;
hostdev = hostdevs[i]; hostdev = hostdevs[i];
scsisrc = &hostdev->source.subsys.u.scsi;
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,
hostdev->source.subsys.u.scsi.adapter, scsisrc->adapter, scsisrc->bus,
hostdev->source.subsys.u.scsi.bus, scsisrc->target, scsisrc->unit,
hostdev->source.subsys.u.scsi.target, hostdev->readonly, hostdev->shareable)))
hostdev->source.subsys.u.scsi.unit,
hostdev->readonly,
hostdev->shareable)))
goto cleanup; goto cleanup;
if ((tmp = virSCSIDeviceListFind(mgr->activeSCSIHostdevs, scsi))) { if ((tmp = virSCSIDeviceListFind(mgr->activeSCSIHostdevs, scsi))) {
@ -1220,6 +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 =
&hostdev->source.subsys.u.scsi;
virSCSIDevicePtr scsi; virSCSIDevicePtr scsi;
if (hostdev->mode != VIR_DOMAIN_HOSTDEV_MODE_SUBSYS || if (hostdev->mode != VIR_DOMAIN_HOSTDEV_MODE_SUBSYS ||
@ -1233,12 +1234,9 @@ virHostdevPrepareSCSIDevices(virHostdevManagerPtr hostdev_mgr,
} }
if (!(scsi = virSCSIDeviceNew(NULL, if (!(scsi = virSCSIDeviceNew(NULL,
hostdev->source.subsys.u.scsi.adapter, scsisrc->adapter, scsisrc->bus,
hostdev->source.subsys.u.scsi.bus, scsisrc->target, scsisrc->unit,
hostdev->source.subsys.u.scsi.target, hostdev->readonly, hostdev->shareable)))
hostdev->source.subsys.u.scsi.unit,
hostdev->readonly,
hostdev->shareable)))
goto cleanup; goto cleanup;
if (scsi && virSCSIDeviceListAdd(list, scsi) < 0) { if (scsi && virSCSIDeviceListAdd(list, scsi) < 0) {
@ -1383,6 +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 =
&hostdev->source.subsys.u.scsi;
virSCSIDevicePtr scsi; virSCSIDevicePtr scsi;
virSCSIDevicePtr tmp; virSCSIDevicePtr tmp;
@ -1391,18 +1391,12 @@ virHostdevReAttachSCSIDevices(virHostdevManagerPtr hostdev_mgr,
continue; continue;
if (!(scsi = virSCSIDeviceNew(NULL, if (!(scsi = virSCSIDeviceNew(NULL,
hostdev->source.subsys.u.scsi.adapter, scsisrc->adapter, scsisrc->bus,
hostdev->source.subsys.u.scsi.bus, scsisrc->target, scsisrc->unit,
hostdev->source.subsys.u.scsi.target, hostdev->readonly, hostdev->shareable))) {
hostdev->source.subsys.u.scsi.unit,
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",
hostdev->source.subsys.u.scsi.adapter, scsisrc->adapter, scsisrc->bus, scsisrc->target,
hostdev->source.subsys.u.scsi.bus, scsisrc->unit, dom_name);
hostdev->source.subsys.u.scsi.target,
hostdev->source.subsys.u.scsi.unit,
dom_name);
continue; continue;
} }
@ -1412,20 +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",
hostdev->source.subsys.u.scsi.adapter, scsisrc->adapter, scsisrc->bus,
hostdev->source.subsys.u.scsi.bus, scsisrc->target, scsisrc->unit);
hostdev->source.subsys.u.scsi.target,
hostdev->source.subsys.u.scsi.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",
hostdev->source.subsys.u.scsi.adapter, scsisrc->adapter, scsisrc->bus, scsisrc->target,
hostdev->source.subsys.u.scsi.bus, scsisrc->unit, dom_name);
hostdev->source.subsys.u.scsi.target,
hostdev->source.subsys.u.scsi.unit,
dom_name);
virSCSIDeviceListDel(hostdev_mgr->activeSCSIHostdevs, tmp, virSCSIDeviceListDel(hostdev_mgr->activeSCSIHostdevs, tmp,
drv_name, dom_name); drv_name, dom_name);