[openib-general] [PATCH 00/12] ofed_1_2 - Neighbour update support

Michael S. Tsirkin mst at mellanox.co.il
Thu Feb 1 11:22:21 PST 2007


> > Could we miss events because skb has a desctructor?
> 
> Yes.  I looked through the ethernet drivers and didn't see anyone using
> destructors.  I thought perhaps this is ok for backports.  There are
> ways to address this issue:
> 
> 1) Enhance the current code to save off the original destructor function
> if it exists and put in ours.  Then when our function is called, we do
> our processing, then call the original destructor function.  We would
> need to save the original function ptr somewhere. 
> 
> 2) schedule the function to happen at a later time and hope the ARP
> subsystem has already updated the neigh table.  I opted against this
> approach because it doesn't ensure that the neigh entry was updated
> before we act on it.
> 
> > Can we just call the descructor function directly (this is what addr.c
> > did previously, and this apparently worked fine).
> 
> The original addr.c snoop code worked fine for IB address resolution and
> for the initial ARP resolution for iWARP devices, but not for notifying
> iWARP devices when a neighbour changes.  For instance, if the neighbour
> mac address changes, then the iWARP device needs to be notified so it
> can update its L2 table maintained in the device. 
> 
> We need to defer calling the destructor function until the ARP subsystem
> has processed this ARP packet.  Through testing, I saw that our snoop
> function gets called _before_ the ARP subsystem processes the ARP
> packet.  So the neighbour entry hasn't been updated yet.  Hooking via
> destructor calls our function _after_ the ARP subsystem has updated the
> neighbour.  So we can then lookup the neigh entry and do the callouts.

Not sure how do you mean all this. You do kfree_skb immediately in the
arp processing function. Will this not call the destructor directly?

Anyway, it seems too risky to change the code a lot now.
what I am concerned is that this could have broken working code.

To reduce the risk of problems for existing code,
I'd like to see something like the following:

	if (someone asked for notification on neighbour changes)
		do the destructor trick

	if (someone asked for notification on address resolution)
		call the destructor directly

Could you code this up please?

-- 
MST




More information about the general mailing list