On Fri, Dec 02, 2011 at 12:57:25 -0500, David Miller wrote:
From: Antonio Quartulli ordex@autistici.org Date: Fri, 2 Dec 2011 18:12:16 +0100
First of all I think you are referring to patch 08/10, in which I moved a skb_linearise() operation.
To be sure it is really needed, I backtracked the code flow and noted down any eventual psbk_may_pull() (or any other linearisation operation). The result is:
=> in batman_skb_recv()
- pskb_may_pull(2)
=> in recv_tt_query() - pskb_may_pull(sizeof(header)) - skb_linearise()
Actually it seems we haven't any useless linearisation. Would you mind explain us where you actually found the problem, please?
It might also be that I misunderstood your advice.
You only need to call pskb_may_pull() on the parts of the packet you want to access directly to parse headers etc.
If you use that interface properly, you never need to linearize, ever.
Sorry for being too generic: we actually invoke skb_linearise() because we want to access the whole skb.
We first call pskb_may_pull() to pull the header only and then, under certain conditions, we linearise the whole skb to access it all. Should I use pskb_may_pull() even in this case?
Sorry for stealing you so much time on this issue, but I would like to fully understand it in order to avoid any further mistake.
Thank you again.
Best Regards,