Since the ESX storage implements VMFS and iSCSI storage backends and chooses relevant backend dynamically at runtime, there was a segfault when issuing vol-info on iSCSI volume due to unimplemented virStorageGetInfo function. This patch implements that function that was missing in iSCSI backend and returns expected result without a segfault. --- src/esx/esx_storage_backend_iscsi.c | 47 +++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/src/esx/esx_storage_backend_iscsi.c b/src/esx/esx_storage_backend_iscsi.c index 4619629..3d31908 100644 --- a/src/esx/esx_storage_backend_iscsi.c +++ b/src/esx/esx_storage_backend_iscsi.c @@ -621,6 +621,52 @@ esxStorageVolCreateXMLFrom(virStoragePoolPtr pool ATTRIBUTE_UNUSED, +static int +esxStorageVolGetInfo(virStorageVolPtr volume, + virStorageVolInfoPtr info) +{ + int result = -1; + esxPrivate *priv = volume->conn->storagePrivateData; + esxVI_ScsiLun *scsiLunList = NULL; + esxVI_ScsiLun *scsiLun; + esxVI_HostScsiDisk *hostScsiDisk = NULL; + + if (esxVI_LookupScsiLunList(priv->primary, &scsiLunList) < 0) { + goto cleanup; + } + + for (scsiLun = scsiLunList; scsiLun; + scsiLun = scsiLun->_next) { + hostScsiDisk = esxVI_HostScsiDisk_DynamicCast(scsiLun); + + if (hostScsiDisk && + STREQ(hostScsiDisk->deviceName, volume->name)) { + break; + } + } + + if (!hostScsiDisk) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Could not find volume with name: %s"), + volume->name); + goto cleanup; + } + + info->type = VIR_STORAGE_VOL_BLOCK; + info->capacity = hostScsiDisk->capacity->block->value * + hostScsiDisk->capacity->blockSize->value; + info->allocation = info->capacity; + + result = 0; + + cleanup: + esxVI_ScsiLun_Free(&scsiLunList); + + return result; +} + + + static char * esxStorageVolGetXMLDesc(virStorageVolPtr volume, unsigned int flags) @@ -752,6 +798,7 @@ virStorageDriver esxStorageBackendISCSI = { .storageVolLookupByKey = esxStorageVolLookupByKey, /* 1.0.1 */ .storageVolCreateXML = esxStorageVolCreateXML, /* 1.0.1 */ .storageVolCreateXMLFrom = esxStorageVolCreateXMLFrom, /* 1.0.1 */ + .storageVolGetInfo = esxStorageVolGetInfo, /* 1.2.4 */ .storageVolGetXMLDesc = esxStorageVolGetXMLDesc, /* 1.0.1 */ .storageVolDelete = esxStorageVolDelete, /* 1.0.1 */ .storageVolWipe = esxStorageVolWipe, /* 1.0.1 */ -- 1.9.0 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list