Description of problem:
When using a FCoE adapter instead of a FC adapter, volumes will fail to attach to the VM . The issue has been pinpointed to the way the libvirt drivers are handling the path of the created device in order to extract the PCI location of the device . In order to support FCoE, the following patch needs to be applied:
[root@picompute02 libvirt]# diff -u volume.py.old volume.py
--- volume.py.old 2015-10-21 14:47:28.744189152 -0400
+++ volume.py 2015-10-21 14:07:18.317114439 -0400
@@ -997,6 +997,7 @@
# NOTE(walter-boring)
# device path is in format of
# /sys/devices/pci0000:00/0000:00:03.0/0000:05:00.3/host2/fc_host/host2
+ # /sys/devices/pci0000:20/0000:20:03.0/0000:21:00.2/net/ens2f2/ctlr_2/host3/fc_host/host3
# sometimes an extra entry exists before the host2 value
# we always want the value prior to the host2 value
pci_num = None
@@ -1010,7 +1011,7 @@
index = index + 1
if index > 0:
- pci_num = device_path[index - 1]
+ pci_num = device_path[index - 4]
return pci_num
This is still an ugly patch because it breaks support for regular FC adapters. For what it worths, I think this patch might be better:
--- a/nova/virt/libvirt/volume.py
+++ b/nova/virt/libvirt/volume.py
@@ -990,12 +990,12 @@ class LibvirtFibreChannelVolumeDriver(LibvirtBaseVolumeDriver):
index = 0
device_path = hba['device_path'].split('/')
for value in device_path:
- if value.startswith('host'):
+ if value.startswith('pci'):
break
index = index + 1
if index > 0:
- pci_num = device_path[index - 1]
+ pci_num = device_path[index + 3]
return pci_num
Version-Release number of selected component (if applicable):
Latest
How reproducible:
Always
Steps to Reproduce:
1. Configure 3PAR storage
2. Add computes with FCoE adapters
3. Try to attach a volume
Actual results:
Will fail to attach
Expected results:
Should attach
Additional info:
This is due to the device path being different when added through FCoE instead of regular FC devices
FC:
/sys/devices/pci0000:00/0000:00:03.0/0000:05:00.3/host2/fc_host/host2
FCoE:
/sys/devices/pci0000:20/0000:20:03.0/0000:21:00.2/net/ens2f2/ctlr_2/host3/fc_host/host3