On 01/15/2013 11:56 AM, Zou, Yi wrote:
When creating an fcoe interfce, we call fcoe_link_speed_update before we add
the
lports fcoe interface to the fc_hostlist.  Since network device events like
NETDEV_CHANGE are only processed if an fcoe interface is found with an
underlying netdev that matches the netdev of the event.  Since this processing
in fcoe_device_notification is how link_speed changes get communicated to the
libfc  code (via fcoe_link_speed_update), we have a race condition - if a
NETDEV_CHANGE event is sent after the call to fcoe_link_speed_update in
fcoe_netdev_config, but before we add the interface to the fc_hostlist, we will
loose the event and attributes like /sys/class/fc_host/hostX/speed will not get
updated properly.

Fix this by moving the add to the fc_hostlist above the serialized call to
fcoe_netdev_config, ensuring that we catch netdev envents before we make a
direct call to fcoe_link_speed_update.

Also use this opportunity to clean up access to the fc_hostlist a bit by
creating a fcoe_hostlist_del accessor and replacing the cleanup in fcoe_exit to
use it properly.

Tested by myself successfully

Signed-off-by: Neil Horman <[email protected]>
CC: Robert Love <[email protected]>
Looks good to me, good catch for the missing netdev event, minor typo above
for 'loose' event => 'lose' event. Bnx2fc may have the similar issue if it has 
the same
netdev notifier and populate the lport list after netdev config, not sure 
though.


yes, bnx2fc may have the similar issue. I'll submit the change soon.

Thanks,
Bhanu


_______________________________________________
fcoe-devel mailing list
[email protected]
http://lists.open-fcoe.org/mailman/listinfo/fcoe-devel

Reply via email to