Sean Hefty wrote:
+static int cma_netdev_callback(struct notifier_block *self, unsigned long 
event, void *ctx)
+
+       mutex_lock(&lock);
+       list_for_each_entry(cma_dev, &dev_list, list)

It seems like we just need to find the cma_dev that has the current mapping
If your comment comes to say that maybe first find the cma_dev to which this event applies, I don't think its possible, see below. If I didn't get you right, can you please explain it a little more.

The rdma-cm maintains a mapping between IDs to the physical devices. The mapping is established during address resolution using the HW address of the --network-- device that was resolved (eg through ARP and then looking on neigh->dev or route lookup) for this ID.

In the bonding case, the network device --borrows-- the HW address from the active slave device. During fail-over, the bonding net device changes its HW address and then the netdev event is delivered on which this code acts. So the same cma_dev can have IDs with different netdev HW address in their dev_addr struct, say bond0 = <ib0, ib1> and pdevA list = { <ID1, HW(ib0)>, <ID2, HW(ib1)>} depending on the time address resolution was done to ID1,ID2 and the ULP behavior on the ADDR_CHANGE event. I don't see how to get along with a simple check that tell on what cma_dev to look for matches. If we really want to avoid scanning all the cma_dev list, we can add a mapping between --net devices-- to IDs and then scan only the list of the affiliated netdevice.

So I am still left with the general rdma-cm mutex being taken for the duration of the double-loop...

Or.

_______________________________________________
general mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to