https://bugzilla.redhat.com/show_bug.cgi?id=1657468
Commit be1bb6c95 changed the way volumes were stored from a forward
linked list to a hash table. In doing so, it required that each vol
object would have 3 unique values as keys into tables - key, name,
and path. Due to how vHBA/NPIV LUNs are created/used this resulted
in a failure to utilize all the LUN's found during processing.
During virStorageBackendSCSINewLun processing fetch the key (or
serial value) for NPIV LUN's using virStorageFileGetNPIVKey which
will formulate a more unique key based on the serial value and
the port for the LUN.
Signed-off-by: John Ferlan <jferlan(a)redhat.com>
---
src/storage/storage_util.c | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/src/storage/storage_util.c b/src/storage/storage_util.c
index aa1af434de..089eca01bf 100644
--- a/src/storage/storage_util.c
+++ b/src/storage/storage_util.c
@@ -3756,12 +3756,16 @@ virStorageBackendRefreshLocal(virStoragePoolObjPtr pool)
static char *
-virStorageBackendSCSISerial(const char *dev)
+virStorageBackendSCSISerial(const char *dev,
+ bool isNPIV)
{
int rc;
char *serial = NULL;
- rc = virStorageFileGetSCSIKey(dev, &serial);
+ if (isNPIV)
+ rc = virStorageFileGetNPIVKey(dev, &serial);
+ else
+ rc = virStorageFileGetSCSIKey(dev, &serial);
if (rc == 0 && serial)
return serial;
@@ -3859,7 +3863,10 @@ virStorageBackendSCSINewLun(virStoragePoolObjPtr pool,
VIR_STORAGE_VOL_READ_NOERROR)) < 0)
goto cleanup;
- if (!(vol->key = virStorageBackendSCSISerial(vol->target.path)))
+ vol->key = virStorageBackendSCSISerial(vol->target.path,
+ (def->source.adapter.type ==
+ VIR_STORAGE_ADAPTER_TYPE_FC_HOST));
+ if (!vol->key)
goto cleanup;
def->capacity += vol->target.capacity;
--
2.20.1