diff --git a/src/storage/storage_backend_scsi.c b/src/storage/storage_backend_scsi.c index fb7aef1..d72c153 100644 --- a/src/storage/storage_backend_scsi.c +++ b/src/storage/storage_backend_scsi.c @@ -648,14 +648,17 @@ static int createVport(virStoragePoolSourceAdapter adapter) { unsigned int parent_host; + char *name = NULL; if (adapter.type != VIR_STORAGE_POOL_SOURCE_ADAPTER_TYPE_FC_HOST) return 0; /* This filters either HBA or already created vHBA */ - if (virGetFCHostNameByWWN(NULL, adapter.data.fchost.wwnn, - adapter.data.fchost.wwpn)) + if ((name = virGetFCHostNameByWWN(NULL, adapter.data.fchost.wwnn, + adapter.data.fchost.wwpn))) { + VIR_FREE(name); return 0; + } if (!adapter.data.fchost.parent) { virReportError(VIR_ERR_XML_ERROR, "%s", @@ -675,6 +678,29 @@ createVport(virStoragePoolSourceAdapter adapter) } static int +deleteVport(virStoragePoolSourceAdapter adapter) +{ + unsigned int parent_host; + + if (adapter.type != VIR_STORAGE_POOL_SOURCE_ADAPTER_TYPE_FC_HOST) + return 0; + + if (!(virGetFCHostNameByWWN(NULL, adapter.data.fchost.wwnn, + adapter.data.fchost.wwpn))) + return -1; + + if (getHostNumber(adapter.data.fchost.parent, &parent_host) < 0) + return -1; + + if (virManageVport(parent_host, adapter.data.fchost.wwnn, + adapter.data.fchost.wwpn, VPORT_DELETE) < 0) + return -1; + + return 0; +} + + +static int virStorageBackendSCSICheckPool(virConnectPtr conn ATTRIBUTE_UNUSED, virStoragePoolObjPtr pool, bool *isActive) @@ -741,7 +767,6 @@ virStorageBackendSCSIStartPool(virConnectPtr conn ATTRIBUTE_UNUSED, virStoragePoolObjPtr pool) { virStoragePoolSourceAdapter adapter = pool->def->source.adapter; - return createVport(adapter); } @@ -750,23 +775,7 @@ virStorageBackendSCSIStopPool(virConnectPtr conn ATTRIBUTE_UNUSED, virStoragePoolObjPtr pool) { virStoragePoolSourceAdapter adapter = pool->def->source.adapter; - unsigned int parent_host; - - if (adapter.type != VIR_STORAGE_POOL_SOURCE_ADAPTER_TYPE_FC_HOST) - return 0; - - if (!(virGetFCHostNameByWWN(NULL, adapter.data.fchost.wwnn, - adapter.data.fchost.wwpn))) - return -1; - - if (getHostNumber(adapter.data.fchost.parent, &parent_host) < 0) - return -1; - - if (virManageVport(parent_host, adapter.data.fchost.wwnn, - adapter.data.fchost.wwpn, VPORT_DELETE) < 0) - return -1; - - return 0; + return deleteVport(adapter); } virStorageBackend virStorageBackendSCSI = {