The SCSI Architecture Model defines a logical unit address as 64-bits in length, so change the field accordingly so that the entire value could be stored. Signed-off-by: Eric Farman <farman@xxxxxxxxxxxxxxxxxx> --- src/conf/domain_audit.c | 2 +- src/conf/domain_conf.c | 4 ++-- src/conf/domain_conf.h | 2 +- src/qemu/qemu_command.h | 2 +- src/qemu/qemu_hotplug.c | 4 ++-- src/util/virhostdev.c | 6 +++--- src/util/virscsi.c | 16 ++++++++-------- src/util/virscsi.h | 8 ++++---- tests/testutilsqemu.c | 2 +- tools/virsh-domain.c | 6 +++--- 10 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/conf/domain_audit.c b/src/conf/domain_audit.c index c94cae8..e5d7e15 100644 --- a/src/conf/domain_audit.c +++ b/src/conf/domain_audit.c @@ -427,7 +427,7 @@ virDomainAuditHostdev(virDomainObjPtr vm, virDomainHostdevDefPtr hostdev, } else { virDomainHostdevSubsysSCSIHostPtr scsihostsrc = &scsisrc->u.host; - if (virAsprintfQuiet(&address, "%s:%d:%d:%u", + if (virAsprintfQuiet(&address, "%s:%d:%d:%llu", scsihostsrc->adapter, scsihostsrc->bus, scsihostsrc->target, scsihostsrc->unit) < 0) { diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 7e3ca36..3f0f175 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -4954,7 +4954,7 @@ virDomainHostdevSubsysSCSIHostDefParseXML(xmlNodePtr sourcenode, goto cleanup; } - if (virStrToLong_uip(unit, NULL, 0, &scsihostsrc->unit) < 0) { + if (virStrToLong_ullp(unit, NULL, 0, &scsihostsrc->unit) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, _("cannot parse unit '%s'"), unit); goto cleanup; @@ -18940,7 +18940,7 @@ virDomainHostdevDefFormatSubsys(virBufferPtr buf, virBufferAsprintf(buf, "<adapter name='%s'/>\n", scsihostsrc->adapter); virBufferAsprintf(buf, - "<address %sbus='%d' target='%d' unit='%u'/>\n", + "<address %sbus='%d' target='%d' unit='%llu'/>\n", includeTypeInAddr ? "type='scsi' " : "", scsihostsrc->bus, scsihostsrc->target, scsihostsrc->unit); diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index ba17a8d..f677c2e 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -463,7 +463,7 @@ struct _virDomainHostdevSubsysSCSIHost { char *adapter; unsigned bus; unsigned target; - unsigned unit; + unsigned long long unit; }; typedef struct _virDomainHostdevSubsysSCSIiSCSI virDomainHostdevSubsysSCSIiSCSI; diff --git a/src/qemu/qemu_command.h b/src/qemu/qemu_command.h index 0fc59a8..6e0c3a3 100644 --- a/src/qemu/qemu_command.h +++ b/src/qemu/qemu_command.h @@ -63,7 +63,7 @@ struct _qemuBuildCommandLineCallbacks { const char *adapter, unsigned int bus, unsigned int target, - unsigned int unit); + unsigned long long unit); }; extern qemuBuildCommandLineCallbacks buildCommandLineCallbacks; diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 1d538a0..d5a40aa 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -1938,7 +1938,7 @@ qemuDomainAttachHostSCSIDevice(virConnectPtr conn, } else { virDomainHostdevSubsysSCSIHostPtr scsihostsrc = &scsisrc->u.host; virReportError(VIR_ERR_INTERNAL_ERROR, - _("Unable to prepare scsi hostdev: %s:%d:%d:%u"), + _("Unable to prepare scsi hostdev: %s:%d:%d:%llu"), scsihostsrc->adapter, scsihostsrc->bus, scsihostsrc->target, scsihostsrc->unit); } @@ -3873,7 +3873,7 @@ int qemuDomainDetachHostDevice(virQEMUDriverPtr driver, virDomainHostdevSubsysSCSIHostPtr scsihostsrc = &scsisrc->u.host; virReportError(VIR_ERR_OPERATION_FAILED, - _("host scsi device %s:%d:%d.%u not found"), + _("host scsi device %s:%d:%d.%llu not found"), scsihostsrc->adapter, scsihostsrc->bus, scsihostsrc->target, scsihostsrc->unit); } diff --git a/src/util/virhostdev.c b/src/util/virhostdev.c index ea0076c..aa06b4a 100644 --- a/src/util/virhostdev.c +++ b/src/util/virhostdev.c @@ -1482,7 +1482,7 @@ virHostdevReAttachSCSIHostDevices(virHostdevManagerPtr hostdev_mgr, scsihostsrc->adapter, scsihostsrc->bus, scsihostsrc->target, scsihostsrc->unit, hostdev->readonly, hostdev->shareable))) { - VIR_WARN("Unable to reattach SCSI device %s:%d:%d:%u on domain %s", + VIR_WARN("Unable to reattach SCSI device %s:%d:%d:%llu on domain %s", scsihostsrc->adapter, scsihostsrc->bus, scsihostsrc->target, scsihostsrc->unit, dom_name); return; @@ -1492,7 +1492,7 @@ virHostdevReAttachSCSIHostDevices(virHostdevManagerPtr hostdev_mgr, * because qemuProcessStart could fail half way through. */ if (!(tmp = virSCSIDeviceListFind(hostdev_mgr->activeSCSIHostdevs, scsi))) { - VIR_WARN("Unable to find device %s:%d:%d:%u " + VIR_WARN("Unable to find device %s:%d:%d:%llu " "in list of active SCSI devices", scsihostsrc->adapter, scsihostsrc->bus, scsihostsrc->target, scsihostsrc->unit); @@ -1500,7 +1500,7 @@ virHostdevReAttachSCSIHostDevices(virHostdevManagerPtr hostdev_mgr, return; } - VIR_DEBUG("Removing %s:%d:%d:%u dom=%s from activeSCSIHostdevs", + VIR_DEBUG("Removing %s:%d:%d:%llu dom=%s from activeSCSIHostdevs", scsihostsrc->adapter, scsihostsrc->bus, scsihostsrc->target, scsihostsrc->unit, dom_name); diff --git a/src/util/virscsi.c b/src/util/virscsi.c index 6c8b6ce..ea4a738 100644 --- a/src/util/virscsi.c +++ b/src/util/virscsi.c @@ -56,7 +56,7 @@ struct _virSCSIDevice { unsigned int adapter; unsigned int bus; unsigned int target; - unsigned int unit; + unsigned long long unit; char *name; /* adapter:bus:target:unit */ char *id; /* model:vendor */ @@ -110,7 +110,7 @@ virSCSIDeviceGetSgName(const char *sysfs_prefix, const char *adapter, unsigned int bus, unsigned int target, - unsigned int unit) + unsigned long long unit) { DIR *dir = NULL; struct dirent *entry; @@ -123,7 +123,7 @@ virSCSIDeviceGetSgName(const char *sysfs_prefix, return NULL; if (virAsprintf(&path, - "%s/%d:%d:%d:%u/scsi_generic", + "%s/%d:%d:%d:%llu/scsi_generic", prefix, adapter_id, bus, target, unit) < 0) return NULL; @@ -157,7 +157,7 @@ virSCSIDeviceGetDevName(const char *sysfs_prefix, const char *adapter, unsigned int bus, unsigned int target, - unsigned int unit) + unsigned long long unit) { DIR *dir = NULL; struct dirent *entry; @@ -170,7 +170,7 @@ virSCSIDeviceGetDevName(const char *sysfs_prefix, return NULL; if (virAsprintf(&path, - "%s/%d:%d:%d:%u/block", + "%s/%d:%d:%d:%llu/block", prefix, adapter_id, bus, target, unit) < 0) return NULL; @@ -200,7 +200,7 @@ virSCSIDeviceNew(const char *sysfs_prefix, const char *adapter, unsigned int bus, unsigned int target, - unsigned int unit, + unsigned long long unit, bool readonly, bool shareable) { @@ -227,7 +227,7 @@ virSCSIDeviceNew(const char *sysfs_prefix, if (virSCSIDeviceGetAdapterId(adapter, &dev->adapter) < 0) goto cleanup; - if (virAsprintf(&dev->name, "%d:%d:%d:%u", dev->adapter, + if (virAsprintf(&dev->name, "%d:%d:%d:%llu", dev->adapter, dev->bus, dev->target, dev->unit) < 0 || virAsprintf(&dev->sg_path, "%s/%s", sysfs_prefix ? sysfs_prefix : "/dev", sg) < 0) @@ -347,7 +347,7 @@ virSCSIDeviceGetTarget(virSCSIDevicePtr dev) return dev->target; } -unsigned int +unsigned long long virSCSIDeviceGetUnit(virSCSIDevicePtr dev) { return dev->unit; diff --git a/src/util/virscsi.h b/src/util/virscsi.h index c67837f..df40d7f 100644 --- a/src/util/virscsi.h +++ b/src/util/virscsi.h @@ -37,18 +37,18 @@ char *virSCSIDeviceGetSgName(const char *sysfs_prefix, const char *adapter, unsigned int bus, unsigned int target, - unsigned int unit); + unsigned long long unit); char *virSCSIDeviceGetDevName(const char *sysfs_prefix, const char *adapter, unsigned int bus, unsigned int target, - unsigned int unit); + unsigned long long unit); virSCSIDevicePtr virSCSIDeviceNew(const char *sysfs_prefix, const char *adapter, unsigned int bus, unsigned int target, - unsigned int unit, + unsigned long long unit, bool readonly, bool shareable); @@ -61,7 +61,7 @@ const char *virSCSIDeviceGetName(virSCSIDevicePtr dev); unsigned int virSCSIDeviceGetAdapter(virSCSIDevicePtr dev); unsigned int virSCSIDeviceGetBus(virSCSIDevicePtr dev); unsigned int virSCSIDeviceGetTarget(virSCSIDevicePtr dev); -unsigned int virSCSIDeviceGetUnit(virSCSIDevicePtr dev); +unsigned long long virSCSIDeviceGetUnit(virSCSIDevicePtr dev); bool virSCSIDeviceGetReadonly(virSCSIDevicePtr dev); bool virSCSIDeviceGetShareable(virSCSIDevicePtr dev); diff --git a/tests/testutilsqemu.c b/tests/testutilsqemu.c index d067bca..ceaabb6 100644 --- a/tests/testutilsqemu.c +++ b/tests/testutilsqemu.c @@ -462,7 +462,7 @@ testSCSIDeviceGetSgName(const char *sysfs_prefix ATTRIBUTE_UNUSED, const char *adapter ATTRIBUTE_UNUSED, unsigned int bus ATTRIBUTE_UNUSED, unsigned int target ATTRIBUTE_UNUSED, - unsigned int unit ATTRIBUTE_UNUSED) + unsigned long long unit ATTRIBUTE_UNUSED) { char *sg = NULL; diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c index e9dbcd9..a4620bf 100644 --- a/tools/virsh-domain.c +++ b/tools/virsh-domain.c @@ -415,7 +415,7 @@ struct PCIAddress { struct SCSIAddress { unsigned int controller; unsigned int bus; - unsigned int unit; + unsigned long long unit; }; struct IDEAddress { @@ -488,7 +488,7 @@ static int str2SCSIAddress(const char *str, struct SCSIAddress *scsiAddr) return -1; unit++; - if (virStrToLong_uip(unit, NULL, 0, &scsiAddr->unit) != 0) + if (virStrToLong_ullp(unit, NULL, 0, &scsiAddr->unit) != 0) return -1; return 0; @@ -725,7 +725,7 @@ cmdAttachDisk(vshControl *ctl, const vshCmd *cmd) if (diskAddr.type == DISK_ADDR_TYPE_SCSI) { virBufferAsprintf(&buf, "<address type='drive' controller='%d'" - " bus='%d' unit='%u' />\n", + " bus='%d' unit='%llu' />\n", diskAddr.addr.scsi.controller, diskAddr.addr.scsi.bus, diskAddr.addr.scsi.unit); } else { -- 1.9.1 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list