Re: Change in alloc_skb() behavior in 3.2+ kernels?
From: Eric Dumazet <hidden>
Date: 2012-06-06 19:42:25
On Wed, 2012-06-06 at 11:51 -0700, David Miller wrote:
From: Grant Edwards <redacted> Date: Wed, 6 Jun 2012 18:32:57 +0000 (UTC)quoted
The kernel module that's started failing fills the allocated sk_buff until tailroom() indicates it is full and then sends it. The problem is that sending a packet with a length of 1850 won't work (it's a MAC-layer Ethernet packet).The amount of tailroom an SKB has is implementation dependent. It's incredibly poor form to rely upon it to determine whether a fully sized frame has been constructed or not. Please fix the code that does this.
By the way, we had a similar problem, and the fix was : http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=commitdiff;h=a21d45726acacc963d8baddf74607d9b74e2b723 Grant, depending on the context, you might use skb->avail_size and skb_availroom() as well. Beware skb->avail_size is unioned with skb->{mark|dropcount}