From c65be9f02e4c778fef97b390c0802545f2897e8a Mon Sep 17 00:00:00 2001 Message-Id: From: Osier Yang Date: Sun, 2 Feb 2014 23:09:37 +0800 Subject: [PATCH] util: Add "shareable" field for virSCSIDevice struct https://bugzilla.redhat.com/show_bug.cgi?id=957292 Unlike the host devices of other types, SCSI host device XML supports "shareable" tag. This patch introduces it for the virSCSIDevice struct for a later patch use (to detect if the SCSI device is shareable when preparing the SCSI host device in QEMU driver). (cherry picked from commit 2b66504ded244a249aa4a877b41c1ef9101ba28f) Signed-off-by: Jiri Denemark --- src/libvirt_private.syms | 1 + src/qemu/qemu_cgroup.c | 3 ++- src/qemu/qemu_hostdev.c | 9 ++++++--- src/security/security_apparmor.c | 3 ++- src/security/security_dac.c | 6 ++++-- src/security/security_selinux.c | 6 ++++-- src/util/virscsi.c | 11 ++++++++++- src/util/virscsi.h | 4 +++- 8 files changed, 32 insertions(+), 11 deletions(-) diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 5e65c35..f5ee380 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1852,6 +1852,7 @@ virSCSIDeviceGetDevName; virSCSIDeviceGetName; virSCSIDeviceGetReadonly; virSCSIDeviceGetSgName; +virSCSIDeviceGetShareable; virSCSIDeviceGetTarget; virSCSIDeviceGetUnit; virSCSIDeviceGetUsedBy; diff --git a/src/qemu/qemu_cgroup.c b/src/qemu/qemu_cgroup.c index 3ebbeb7..4d7ade1 100644 --- a/src/qemu/qemu_cgroup.c +++ b/src/qemu/qemu_cgroup.c @@ -294,7 +294,8 @@ qemuSetupHostdevCGroup(virDomainObjPtr vm, dev->source.subsys.u.scsi.bus, dev->source.subsys.u.scsi.target, dev->source.subsys.u.scsi.unit, - dev->readonly)) == NULL) + dev->readonly, + dev->shareable)) == NULL) goto cleanup; if (virSCSIDeviceFileIterate(scsi, diff --git a/src/qemu/qemu_hostdev.c b/src/qemu/qemu_hostdev.c index b78f080..4d613b8 100644 --- a/src/qemu/qemu_hostdev.c +++ b/src/qemu/qemu_hostdev.c @@ -267,7 +267,8 @@ qemuUpdateActiveScsiHostdevs(virQEMUDriverPtr driver, hostdev->source.subsys.u.scsi.bus, hostdev->source.subsys.u.scsi.target, hostdev->source.subsys.u.scsi.unit, - hostdev->readonly))) + hostdev->readonly, + hostdev->shareable))) goto cleanup; virSCSIDeviceSetUsedBy(scsi, def->name); @@ -1096,7 +1097,8 @@ qemuPrepareHostdevSCSIDevices(virQEMUDriverPtr driver, hostdev->source.subsys.u.scsi.bus, hostdev->source.subsys.u.scsi.target, hostdev->source.subsys.u.scsi.unit, - hostdev->readonly))) + hostdev->readonly, + hostdev->shareable))) goto cleanup; if (scsi && virSCSIDeviceListAdd(list, scsi) < 0) { @@ -1394,7 +1396,8 @@ qemuDomainReAttachHostScsiDevices(virQEMUDriverPtr driver, hostdev->source.subsys.u.scsi.bus, hostdev->source.subsys.u.scsi.target, hostdev->source.subsys.u.scsi.unit, - hostdev->readonly))) { + 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, diff --git a/src/security/security_apparmor.c b/src/security/security_apparmor.c index eb80d23..9c97e3b 100644 --- a/src/security/security_apparmor.c +++ b/src/security/security_apparmor.c @@ -833,7 +833,8 @@ AppArmorSetSecurityHostdevLabel(virSecurityManagerPtr mgr, dev->source.subsys.u.scsi.bus, dev->source.subsys.u.scsi.target, dev->source.subsys.u.scsi.unit, - dev->readonly); + dev->readonly, + dev->shareable); if (!scsi) goto done; diff --git a/src/security/security_dac.c b/src/security/security_dac.c index 6876bd5..26fa124 100644 --- a/src/security/security_dac.c +++ b/src/security/security_dac.c @@ -532,7 +532,8 @@ virSecurityDACSetSecurityHostdevLabel(virSecurityManagerPtr mgr, dev->source.subsys.u.scsi.bus, dev->source.subsys.u.scsi.target, dev->source.subsys.u.scsi.unit, - dev->readonly); + dev->readonly, + dev->shareable); if (!scsi) goto done; @@ -649,7 +650,8 @@ virSecurityDACRestoreSecurityHostdevLabel(virSecurityManagerPtr mgr, dev->source.subsys.u.scsi.bus, dev->source.subsys.u.scsi.target, dev->source.subsys.u.scsi.unit, - dev->readonly); + dev->readonly, + dev->shareable); if (!scsi) goto done; diff --git a/src/security/security_selinux.c b/src/security/security_selinux.c index ba008ca..dd25ba8 100644 --- a/src/security/security_selinux.c +++ b/src/security/security_selinux.c @@ -1363,7 +1363,8 @@ virSecuritySELinuxSetSecurityHostdevSubsysLabel(virDomainDefPtr def, dev->source.subsys.u.scsi.bus, dev->source.subsys.u.scsi.target, dev->source.subsys.u.scsi.unit, - dev->readonly); + dev->readonly, + dev->shareable); if (!scsi) goto done; @@ -1554,7 +1555,8 @@ virSecuritySELinuxRestoreSecurityHostdevSubsysLabel(virSecurityManagerPtr mgr, dev->source.subsys.u.scsi.bus, dev->source.subsys.u.scsi.target, dev->source.subsys.u.scsi.unit, - dev->readonly); + dev->readonly, + dev->shareable); if (!scsi) goto done; diff --git a/src/util/virscsi.c b/src/util/virscsi.c index 3950c62..4036db8 100644 --- a/src/util/virscsi.c +++ b/src/util/virscsi.c @@ -58,6 +58,7 @@ struct _virSCSIDevice { const char *used_by; /* name of the domain using this dev */ bool readonly; + bool shareable; }; struct _virSCSIDeviceList { @@ -185,7 +186,8 @@ virSCSIDeviceNew(const char *adapter, unsigned int bus, unsigned int target, unsigned int unit, - bool readonly) + bool readonly, + bool shareable) { virSCSIDevicePtr dev, ret = NULL; char *sg = NULL; @@ -201,6 +203,7 @@ virSCSIDeviceNew(const char *adapter, dev->target = target; dev->unit = unit; dev->readonly = readonly; + dev->shareable= shareable; if (!(sg = virSCSIDeviceGetSgName(adapter, bus, target, unit))) goto cleanup; @@ -311,6 +314,12 @@ virSCSIDeviceGetReadonly(virSCSIDevicePtr dev) return dev->readonly; } +bool +virSCSIDeviceGetShareable(virSCSIDevicePtr dev) +{ + return dev->shareable; +} + int virSCSIDeviceFileIterate(virSCSIDevicePtr dev, virSCSIDeviceFileActor actor, diff --git a/src/util/virscsi.h b/src/util/virscsi.h index cce5df4..84890be 100644 --- a/src/util/virscsi.h +++ b/src/util/virscsi.h @@ -46,7 +46,8 @@ virSCSIDevicePtr virSCSIDeviceNew(const char *adapter, unsigned int bus, unsigned int target, unsigned int unit, - bool readonly); + bool readonly, + bool shareable); void virSCSIDeviceFree(virSCSIDevicePtr dev); void virSCSIDeviceSetUsedBy(virSCSIDevicePtr dev, const char *name); @@ -57,6 +58,7 @@ unsigned int virSCSIDeviceGetBus(virSCSIDevicePtr dev); unsigned int virSCSIDeviceGetTarget(virSCSIDevicePtr dev); unsigned int virSCSIDeviceGetUnit(virSCSIDevicePtr dev); bool virSCSIDeviceGetReadonly(virSCSIDevicePtr dev); +bool virSCSIDeviceGetShareable(virSCSIDevicePtr dev); /* * Callback that will be invoked once for each file -- 1.8.5.4