[libvirt] [PATCH 1/1] Update nodedev scsi_host data before use

Dave Allan dallan at redhat.com
Thu Jun 3 14:54:58 UTC 2010


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




More information about the libvir-list mailing list