[libvirt] [PATCH 3/5] Convert SCSI logical unit from int to long long

Eric Farman farman at linux.vnet.ibm.com
Wed Jun 17 03:29:53 UTC 2015


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 at linux.vnet.ibm.com>
---
 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




More information about the libvir-list mailing list