[libvirt] [PATCH] check "fc_host" and "vport_ops" capabilities in SCSI host nodedevs
John Ferlan
jferlan at redhat.com
Tue Feb 3 20:59:53 UTC 2015
On 02/03/2015 06:55 AM, Shivaprasad G Bhat wrote:
> fc_host & vport_ops devices are SCSI devices with additional capabilities.
> Mere string comparison of basic types is not sufficient in this case. This
> patch introduces additional capability checks for SCSI devices if the user
> is looking to list 'fc_host' or 'vport_ops' devices.
>
> Signed-off-by: Shivaprasad G Bhat <sbhat at linux.vnet.ibm.com>
> ---
> src/conf/node_device_conf.c | 8 ++++++++
> 1 file changed, 8 insertions(+)
>
While this does work and more or less follows what was done for
virNodeDeviceCapMatch, I'm wondering if the 'fc_host' and 'vports_ops'
capabilities need to also be returned in a "list" of capabilities for a
node device
That is I see that virNodeDeviceListCaps() seems to be only returning 1
capability for every device. However, for the scsi_host, it has those
additional fc_host and vport_ops capabilities which if returned in the
list would then be "found" by the python listDevices code which for some
devices (like the scsi_host here) there may be more than one way to "get
at" the information.
I'm investigating whether modifying nodeDeviceListCaps() in
src/node_device/node_device_driver.c to add "fc_host" and "vport_ops" to
the return caps_list will resolve the issue... This also means
virNodeDeviceNumOfCaps() (and it's driver API nodeDeviceNumOfCaps) will
need some tweaking too.
Another option would be to fix the libvirt-python code to use
ListAllDevices with the flags argument like virsh does.
John
> diff --git a/src/conf/node_device_conf.c b/src/conf/node_device_conf.c
> index 03b88a2..ab27829 100644
> --- a/src/conf/node_device_conf.c
> +++ b/src/conf/node_device_conf.c
> @@ -78,6 +78,14 @@ int virNodeDeviceHasCap(const virNodeDeviceObj *dev, const char *cap)
> while (caps) {
> if (STREQ(cap, virNodeDevCapTypeToString(caps->type)))
> return 1;
> + else if (caps->type == VIR_NODE_DEV_CAP_SCSI_HOST)
> + if ((STREQ(cap, "fc_host") &&
> + (caps->data.scsi_host.flags &
> + VIR_NODE_DEV_CAP_FLAG_HBA_FC_HOST)) ||
> + (STREQ(cap, "vport_ops") &&
> + (caps->data.scsi_host.flags &
> + VIR_NODE_DEV_CAP_FLAG_HBA_VPORT_OPS)))
> + return 1;
> caps = caps->next;
> }
> return 0;
>
> --
> libvir-list mailing list
> libvir-list at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list
>
More information about the libvir-list
mailing list