mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-04 21:47:16 +03:00
storage: Fetch a unique key for vHBA/NPIV LUNs
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@redhat.com> ACKed-by: Michal Privoznik <mprivozn@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
parent
5f9e211c93
commit
850cfd75be
@ -3776,12 +3776,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, true);
|
||||
if (isNPIV)
|
||||
rc = virStorageFileGetNPIVKey(dev, &serial);
|
||||
else
|
||||
rc = virStorageFileGetSCSIKey(dev, &serial, true);
|
||||
if (rc == 0 && serial)
|
||||
return serial;
|
||||
|
||||
@ -3878,7 +3882,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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user