On Thu, Jun 03, 2010 at 09:53:07AM -0400, Cole Robinson wrote:
On 06/03/2010 12:04 AM, David Allan wrote:
> * It appears that the udev event for HBA creation arrives before the
> associated sysfs data is fully populated, resulting in bogus data
> for the nodedev entry until the entry is refreshed. This problem is
> particularly troublesome when creating NPIV vHBAs because it results
> in libvirt failing to find the newly created adapter and waiting for
> the full timeout period before erroneously failing the create
> operation. This patch forces an update before any attempt to use
> any scsi_host nodedev entry.
> ---
> src/node_device/node_device_driver.c | 19 +++----------------
> 1 files changed, 3 insertions(+), 16 deletions(-)
>
> diff --git a/src/node_device/node_device_driver.c
b/src/node_device/node_device_driver.c
> index 8fb062c..f7e2f69 100644
> --- a/src/node_device/node_device_driver.c
> +++ b/src/node_device/node_device_driver.c
> @@ -45,23 +45,9 @@ static int update_caps(virNodeDeviceObjPtr dev)
> virNodeDevCapsDefPtr cap = dev->def->caps;
>
> while (cap) {
> - /* The only cap that currently needs updating is the WWN of FC HBAs. */
> + /* The only caps that currently need updating are FC related. */
> if (cap->type == VIR_NODE_DEV_CAP_SCSI_HOST) {
> - if (cap->data.scsi_host.flags &
VIR_NODE_DEV_CAP_FLAG_HBA_FC_HOST) {
> - if (read_wwn(cap->data.scsi_host.host,
> - "port_name",
> - &cap->data.scsi_host.wwpn) == -1) {
> - VIR_ERROR(_("Failed to refresh WWPN for host%d"),
> - cap->data.scsi_host.host);
> - }
> -
> - if (read_wwn(cap->data.scsi_host.host,
> - "node_name",
> - &cap->data.scsi_host.wwnn) == -1) {
> - VIR_ERROR(_("Failed to refresh WWNN for host%d"),
> - cap->data.scsi_host.host);
> - }
> - }
> + check_fc_host(&dev->def->caps->data);
> }
> cap = cap->next;
> }
> @@ -239,6 +225,7 @@ nodeDeviceLookupByWWN(virConnectPtr conn,
> while (cap) {
>
> if (cap->type == VIR_NODE_DEV_CAP_SCSI_HOST) {
> + check_fc_host(&cap->data);
> if (cap->data.scsi_host.flags &
> VIR_NODE_DEV_CAP_FLAG_HBA_FC_HOST) {
>
ACK
- Cole
Thanks--pushed.
Dave