mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-09-09 09:14:57 +00:00
storage: Check for valid fc_host parent at startup
https://bugzilla.redhat.com/show_bug.cgi?id=1160565 If a 'parent' attribute is provided for the fchost, then at startup time check to ensure it is a vport capable scsi_host. If the parent is not vport capable, then disallow the startup. The following is the expected results: error: Failed to start pool fc_pool error: XML error: parent 'scsi_host2' specified for vHBA is not vport capable where the XML for the fc_pool is: <pool type='scsi'> <name>fc_pool</name> <source> <adapter type='fc_host' parent='scsi_host2' wwnn='5001a4aaf3ca174b' wwpn='5001a4a77192b864'/> </source> ... and 'scsi_host2' is not vport capable. Providing an incorrect parent and a correct wwnn/wwpn could lead to failures at shutdown (deleteVport) where the assumption is the parent is for the fchost. NOTE: If the provided wwnn/wwpn doesn't resolve to an existing scsi_host, then we will be creating one with code (virManageVport) which assumes the parent is vport capable. Signed-off-by: John Ferlan <jferlan@redhat.com>
This commit is contained in:
parent
6c1347ec06
commit
844c1d7e32
@ -556,6 +556,20 @@ createVport(virStoragePoolSourceAdapter adapter)
|
||||
if (adapter.type != VIR_STORAGE_POOL_SOURCE_ADAPTER_TYPE_FC_HOST)
|
||||
return 0;
|
||||
|
||||
/* If a parent was provided, then let's make sure it's vhost capable */
|
||||
if (adapter.data.fchost.parent) {
|
||||
if (virGetSCSIHostNumber(adapter.data.fchost.parent, &parent_host) < 0)
|
||||
return -1;
|
||||
|
||||
if (!virIsCapableFCHost(NULL, parent_host)) {
|
||||
virReportError(VIR_ERR_XML_ERROR,
|
||||
_("parent '%s' specified for vHBA "
|
||||
"is not vport capable"),
|
||||
adapter.data.fchost.parent);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
/* This filters either HBA or already created vHBA */
|
||||
if ((name = virGetFCHostNameByWWN(NULL, adapter.data.fchost.wwnn,
|
||||
adapter.data.fchost.wwpn))) {
|
||||
@ -563,16 +577,17 @@ createVport(virStoragePoolSourceAdapter adapter)
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!adapter.data.fchost.parent &&
|
||||
!(adapter.data.fchost.parent = virFindFCHostCapableVport(NULL))) {
|
||||
virReportError(VIR_ERR_XML_ERROR, "%s",
|
||||
_("'parent' for vHBA not specified, and "
|
||||
"cannot find one on this host"));
|
||||
return -1;
|
||||
}
|
||||
if (!adapter.data.fchost.parent) {
|
||||
if (!(adapter.data.fchost.parent = virFindFCHostCapableVport(NULL))) {
|
||||
virReportError(VIR_ERR_XML_ERROR, "%s",
|
||||
_("'parent' for vHBA not specified, and "
|
||||
"cannot find one on this host"));
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (virGetSCSIHostNumber(adapter.data.fchost.parent, &parent_host) < 0)
|
||||
return -1;
|
||||
if (virGetSCSIHostNumber(adapter.data.fchost.parent, &parent_host) < 0)
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (virManageVport(parent_host, adapter.data.fchost.wwpn,
|
||||
adapter.data.fchost.wwnn, VPORT_CREATE) < 0)
|
||||
|
Loading…
Reference in New Issue
Block a user