On 13/01/15 11:02, Wissam Shoukair wrote:
We found an issue in ipoib_discard_remac().
1. IPoIB discarder is not valid for non-Infiniband devices.
2. owner data in ibdev is netdev struct pointer and not ipoib struct pointer.

This bug made some servers hang when trying to do HTTP boot over IB.

Thanks.  The patch had some issues:

        for_each_ibdev ( ibdev ) {
-               ipoib = ib_get_ownerdata ( ibdev );
+               netdev = ib_get_ownerdata ( ibdev );
+               /* Skip non-Infiniband ports */
+               if ( netdev->op != &ipoib_operations )
+                       continue;

I don't think there are any circumstances (at least in the current iPXE master) in which an ibdev will have a valid netdev as its ownerdata but where that netdev will be something other than an IPoIB device.

+               if ( list_empty ( &ipoib->peers ) )
+                       return 0;

This check is unnecessary: if the list is empty than list_for_each_entry_reverse_safe() will be a no-op. In such a circumstance, we probably want to continue to iterate over any other IPoIB devices, rather than aborting (and returning a possibly-incorrect zero item count).

I've committed a hopefully-fixed version of this patch:

  http://git.ipxe.org/ipxe.git/commitdiff/6b7157c

Please let me know if this does not fix your issue.

Thanks,

Michael
_______________________________________________
ipxe-devel mailing list
[email protected]
https://lists.ipxe.org/mailman/listinfo.cgi/ipxe-devel

Reply via email to