<div dir="ltr">Thanks John for the reply.<br><div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Apr 15, 2016 at 5:08 PM, John Ferlan <span dir="ltr"><<a href="mailto:jferlan@redhat.com" target="_blank">jferlan@redhat.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div class=""><div class="h5"><br>
<br>
On 04/07/2016 05:09 AM, Nitesh Konkar wrote:<br>
> HBA will get treated as vHBA if not returned<br>
> after detecting vhba_parent format.<br>
><br>
> Signed-off-by: Nitesh Konkar <<a href="mailto:nitkon12@linux.vnet.ibm.com">nitkon12@linux.vnet.ibm.com</a>><br>
> ---<br>
> Before Patch:<br>
> # virsh pool-destroy poolhba_name<br>
> error: Failed to destroy pool poolhba_name<br>
> error: internal error: Invalid adapter name 'pci_000x_0x_00_x' for SCSI pool<br>
><br>
> # virsh nodedev-dumpxml scsi_host2<br>
> <device><br>
>   <name>scsi_host2</name><br>
>   <path>xxxx</path><br>
>   <parent>pci_000x_0x_00_x</parent><br>
>   <capability type='scsi_host'><br>
>     <host>2</host><br>
>     ...<br>
>     ...<br>
>     <capability type='vport_ops'><br>
>       <max_vports>255</max_vports><br>
>       <vports>0</vports><br>
>     </capability><br>
>   </capability><br>
> </device><br>
><br>
> After Patch:<br>
> # virsh pool-destroy poolhba_name<br>
> Pool poolhba_name destroyed<br>
><br>
>  src/storage/storage_backend_scsi.c | 5 +++++<br>
>  1 file changed, 5 insertions(+)<br>
><br>
<br>
</div></div>Can you provide the pool-dumpxml for poolhba_name? Can you provide the<br>
nodedev-dumpxml of the 'scsi_host#' that was created for the vHBA pool?<br>
<br></blockquote><div><br><div>This patch is to destroy a pool created out from a Physical HBA. Apologies, if the <br></div>commit message was misleading.<br> <br></div><div> # virsh pool-dumpxml poolhba_name<br><pool type='scsi'><br>  <name>poolhba_name</name><br>  <uuid>60d74134-0c18-4d4f-9305-24d96ce1a1b6</uuid><br>  <capacity unit='bytes'>268435456000</capacity><br>  <allocation unit='bytes'>268435456000</allocation><br>  <available unit='bytes'>0</available><br>  <source><br>    <adapter type='fc_host' managed='yes' wwnn='20000120fa8f1271' wwpn='10000090fa8f1271'/><br>  </source><br>  <target><br>    <path>/dev/disk/by-id</path><br>    <permissions><br>      <mode>0700</mode><br>      <owner>0</owner><br>      <group>0</group><br>    </permissions><br>  </target><br></pool><br><br>virsh nodedev-dumpxml scsi_host2<br><device><br>  <name>scsi_host2</name><br>  <path>/sys/devices/pci0001:00/0001:00:00.0/0001:01:00.0/0001:02:09.0/0001:09:00.1/host2</path><br>  <parent>pci_0001_09_00_1</parent><br>  <capability type='scsi_host'><br>    <host>2</host><br>    <unique_id>1</unique_id><br>    <capability type='fc_host'><br>      <wwnn>20000120fa8f1271</wwnn><br>      <wwpn>10000090fa8f1271</wwpn><br>      <fabric_wwn>100050eb1a99d430</fabric_wwn><br>    </capability><br>    <capability type='vport_ops'><br>      <max_vports>255</max_vports><br>      <vports>0</vports><br>    </capability><br>  </capability><br></device><br><br><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
Something just doesn't seem right. The 'parent' is optional and the path<br>
you're changing is for the case when the XML doesn't provide the parent.<br>
Thus on delete we have to look up the parent based upon the wwwn/wwpn of<br>
the vHBA.  From that, we grab the 'parent' field in order to<br>
automagically remove the vHBA.<br>
<br></blockquote><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
For example, if I have:<br>
<br>
# cat vhbapool_noparent.xml<br>
    <pool type='scsi'><br>
      <name>vhbapool_noparent</name><br>
      <source><br>
        <adapter type='fc_host' wwnn='5001a4aea69b98a3'<br>
wwpn='5001a4ac3f71c7e1'/><br>
      </source><br>
      <target><br>
        <path>/dev/disk/by-path</path><br>
        <permissions><br>
          <mode>0700</mode><br>
          <owner>0</owner><br>
          <group>0</group><br>
        </permissions><br>
      </target><br>
    </pool><br>
<br>
<br>
Then the code will search for HBA's that are capable of supporting vhost<br>
(e.g., they have the vport_ops).  In my case, that's scsi_host3:<br>
<br>
# virsh nodedev-dumpxml scsi_host3<br>
<device><br>
  <name>scsi_host3</name><br>
  <path>/sys/devices/pci0000:00/0000:00:04.0/0000:10:00.0/host3</path><br>
  <parent>pci_0000_10_00_0</parent><br>
  <capability type='scsi_host'><br>
    <host>3</host><br>
    <unique_id>0</unique_id><br>
    <capability type='fc_host'><br>
      <wwnn>20000000c9848140</wwnn><br>
      <wwpn>10000000c9848140</wwpn><br>
      <fabric_wwn>2002000573de9a81</fabric_wwn><br>
    </capability><br>
    <capability type='vport_ops'><br>
      <max_vports>127</max_vports><br>
      <vports>5</vports><br>
    </capability><br>
  </capability><br>
</device><br>
<br>
<br>
I can start the pool:<br>
<br>
# virsh pool-create vhbapool_noprent.xml<br>
Pool vhbapool_noparent created from vhbapool_noparent.xml<br>
<br>
If I look at the list of scsi_host's:<br>
<br>
# virsh nodedev-list scsi_host<br>
scsi_host0<br>
scsi_host1<br>
scsi_host15<br>
scsi_host16<br>
scsi_host17<br>
scsi_host19<br>
scsi_host2<br>
scsi_host3<br>
scsi_host4<br>
scsi_host5<br>
<br>
I can "assume" the one with the highest number is my vHBA and then dump<br>
it's XML:<br>
<br>
# virsh nodedev-dumpxml scsi_host19<br>
<device><br>
  <name>scsi_host19</name><br>
<br>
<path>/sys/devices/pci0000:00/0000:00:04.0/0000:10:00.0/host3/vport-3:0-14/host19</path><br>
  <parent>scsi_host3</parent><br>
  <capability type='scsi_host'><br>
    <host>19</host><br>
    <unique_id>16</unique_id><br>
    <capability type='fc_host'><br>
      <wwnn>5001a4aea69b98a3</wwnn><br>
      <wwpn>5001a4ac3f71c7e1</wwpn><br>
      <fabric_wwn>2002000573de9a81</fabric_wwn><br>
    </capability><br>
  </capability><br>
</device><br>
<br>
Which it is since the 'wwnn' and 'wwpn' match.  Note the "<parent>" in<br>
this case is "scsi_host3" (just like I assumed earlier).<br>
<br>
When we go to delete the vHBA, the deleteVport code will do this lookup<br>
for us and remove the parent scsi_host#<br>
<br>
# virsh pool-destroy vhbapool_noparent<br>
Pool vhbapool_noparent destroyed<br>
<br>
# virsh nodedev-list scsi_host<br>
scsi_host0<br>
scsi_host1<br>
scsi_host15<br>
scsi_host16<br>
scsi_host17<br>
scsi_host2<br>
scsi_host3<br>
scsi_host4<br>
scsi_host5<br>
<br>
#<br>
<br>
So can you show me what's different with the configuration you have that<br>
the <parent> for the vHBA is not prefixed with scsi_host. Is there<br>
perhaps a way to determine what the 'scsi_host#' is that was created for<br>
the vHBA? (since it should be removed).<br>
<br>
Thanks -<br>
<br>
John<br>
<div class=""><div class="h5">> diff --git a/src/storage/storage_backend_scsi.c b/src/storage/storage_backend_scsi.c<br>
> index e6c8bb5..dd0343f 100644<br>
> --- a/src/storage/storage_backend_scsi.c<br>
> +++ b/src/storage/storage_backend_scsi.c<br>
> @@ -842,6 +842,11 @@ deleteVport(virConnectPtr conn,<br>
>          if (!(vhba_parent = virStoragePoolGetVhbaSCSIHostParent(conn, name)))<br>
>              goto cleanup;<br>
><br>
> +        if (STRPREFIX(vhba_parent, "pci")) {<br>
> +            ret = 0;<br>
> +            goto cleanup;<br>
> +        }<br>
> +<br>
>          if (virGetSCSIHostNumber(vhba_parent, &parent_host) < 0)<br>
>              goto cleanup;<br>
>      }<br>
><br>
</div></div></blockquote></div>Looking forward for your comments. <br><br></div><div class="gmail_extra">Warm Regards,<br></div><div class="gmail_extra">Nitesh Konkar.<br></div></div></div>