Re: [libvirt] [PATCH] storage_scsi: Handle physical HBA when deleting vHBA vport.

On 04/15/2016 02:26 PM, Nitesh Konkar wrote:
On Fri, Apr 15, 2016 at 8:08 PM, John Ferlan <jferlan@redhat.com> wrote:
Please do not remove libvir-list from a response. I've replaced it. Someone may have a different idea.
On 04/15/2016 10:11 AM, Nitesh Konkar wrote:
Thanks John for the reply.
On Fri, Apr 15, 2016 at 5:08 PM, John Ferlan <jferlan@redhat.com> wrote:
HBA will get treated as vHBA if not returned after detecting vhba_parent format.
Signed-off-by: Nitesh Konkar <nitkon12@linux.vnet.ibm.com> --- Before Patch: # virsh pool-destroy poolhba_name error: Failed to destroy pool poolhba_name error: internal error: Invalid adapter name 'pci_000x_0x_00_x' for SCSI
On 04/07/2016 05:09 AM, Nitesh Konkar wrote: pool
# virsh nodedev-dumpxml scsi_host2 <device> <name>scsi_host2</name> <path>xxxx</path> <parent>pci_000x_0x_00_x</parent> <capability type='scsi_host'> <host>2</host> ... ... <capability type='vport_ops'> <max_vports>255</max_vports> <vports>0</vports> </capability> </capability> </device>
After Patch: # virsh pool-destroy poolhba_name Pool poolhba_name destroyed
src/storage/storage_backend_scsi.c | 5 +++++ 1 file changed, 5 insertions(+)
Can you provide the pool-dumpxml for poolhba_name? Can you provide the nodedev-dumpxml of the 'scsi_host#' that was created for the vHBA pool?
This patch is to destroy a pool created out from a Physical HBA. Apologies, if the commit message was misleading.
# virsh pool-dumpxml poolhba_name <pool type='scsi'> <name>poolhba_name</name> <uuid>60d74134-0c18-4d4f-9305-24d96ce1a1b6</uuid> <capacity unit='bytes'>268435456000</capacity> <allocation unit='bytes'>268435456000</allocation> <available unit='bytes'>0</available> <source> <adapter type='fc_host' managed='yes' wwnn='20000120fa8f1271' wwpn='10000090fa8f1271'/> </source> <target> <path>/dev/disk/by-id</path> <permissions> <mode>0700</mode> <owner>0</owner> <group>0</group> </permissions> </target> </pool>
OK, maybe I wasn't clear enough... Which 'scsi_host#' is *this* pool associated with. Prior to creating it, do a virsh nodedev-list scsi_host. Then create it. Then generate the list again.
The pool poolhba_name is associated with scsi_host2.
#virsh list --all Id Name State ----------------------------------------------------
# virsh nodedev-list scsi_host scsi_host0 scsi_host1 scsi_host2 scsi_host3 scsi_host4
#virsh pool-list --all Name State Autostart ------------------------------------------- poolhba_name active yes
# virsh nodedev-dumpxml scsi_host2 <device> <name>scsi_host2</name>
<path>/sys/devices/pci0001:00/0001:00:00.0/0001:01:00.0/0001:02:09.0/0001:09:00.1/host2</path> <parent>pci_0001_09_00_1</parent> <capability type='scsi_host'> <host>2</host> <unique_id>1</unique_id> <capability type='fc_host'> <wwnn>20000120fa8f1271</wwnn> <wwpn>10000090fa8f1271</wwpn> <fabric_wwn>100050eb1a99d430</fabric_wwn> </capability> <capability type='vport_ops'> <max_vports>255</max_vports> <vports>1</vports> </capability> </capability> </device>
Or of course since you cannot delete the poolvhba_name, go through the
various scsi_host#'s on your host looking for the one with the match wwwn/wwpn - then do the nodedev-dumpxml of that. For you example you are looking for the scsi_host# with the matching wwnn='20000120fa8f1271' and wwpn='10000090fa8f1271'.
That one is supposed to list 'scsi_host2' in the <parent> field as my 'scsi_host19' does below.
# virsh pool-list --all Name State Autostart
poolhba_name active yes
# virsh nodedev-dumpxml scsi_host2 <device> <name>scsi_host2</name>
<path>/sys/devices/pci0001:00/0001:00:00.0/0001:01:00.0/0001:02:09.0/0001:09:00.1/host2</path> <parent>pci_0001_09_00_1</parent> <capability type='scsi_host'> <host>2</host> <unique_id>1</unique_id> <capability type='fc_host'> <wwnn>20000120fa8f1271</wwnn> <wwpn>10000090fa8f1271</wwpn> <fabric_wwn>100050eb1a99d430</fabric_wwn> </capability> <capability type='vport_ops'> <max_vports>255</max_vports> <vports>1</vports> </capability> </capability> </device>
Here the parent field has "pci_0001_09_00_1" and not 'scsi_host2' . This is why it errors out.
# virsh pool-destroy poolhba_name 2016-04-15 18:21:07.054+0000: 113209: error : virGetSCSIHostNumber:1922 : internal error: Invalid adapter name 'pci_0001_09_00_1' for SCSI pool error: Failed to destroy pool poolhba_name error: internal error: Invalid adapter name 'pci_0001_09_00_1' for SCSI pool
Am I missing something?
Perhaps - I think I explained how the vHBA is created before... Look at the code for createVport() - see the 'parent_hoststr' description. When you did a pool-{create|define} for the "poolhba_name", you provided some XML which would search the existing 'scsi_host#' for one that's capable of supporting a vHBA. What that create is supposed to do (at least it does it on the systems I used) is create another 'scsi_host#'. That scsi_host# is then the vHBA - it's *parent* is supposed to be 'scsi_host2' - see my example. On your host perhaps scsi_host3 or scsi_host4. Do either one of those two have the wwnn/wwpn that's in your poolhba_name: <adapter type='fc_host' managed='yes' wwnn='20000120fa8f1271' wwpn='10000090fa8f1271'/> I'm really not quite sure what's happening on your host/environment. Perhaps you could follow how createVport generates things and report back. You can always 'create' another vHBA using a different wwnn/wwpn John
participants (1)
-
John Ferlan