Again, I'm not convinced this is 100% feasible. I understand, I think, what you're getting at. If you want to use the field, you defined a structure like struct my_arg { void *old, ... my data ... }. However, this isn't like C++ where the destructors for all layers are called. There is only 1 destructor for the layer that created the skb (AFAIK) - all the layers simply increment their reference to it (which is decremented by a free). Thus there's really no way to do what you want with minimal impact on existing code - the ideal behaviour would be to define a common struct (i.e. { void * olddata, void *thisdata }, that is filled with whatever data that layer needs when it increments the refcount and then have kfree_skb unwind the pointer as needed. This would require a massive change to the code though, increase the amount of memory usage unnecessarily, and be prone to memory leaks if it's not done carefully.
We're talking about skb destructors, not socket destructors. sock_wfree is not a destructor - it releases the resources allocated to the skb back to the socket that the resources are from.
Also, from what I can tell, this is how the Linux kernel works - if someone's change breaks the code, they're responsible for fixing it. Changing how sock_wfree is fairly significant enough that we don't need to worry about making it easier - it'll probably be so significant that there will be a lot of changes anyways. It's also highly unlikely to happen I think.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html