from net/core/sock.c, sock_alloc_send_skb():
>>>>>>>
if (fallback) {
/* The buffer get won't block, or use the atomic queue.
* It does produce annoying no free page messages still.
*/
skb = alloc_skb(size, GFP_BUFFER);
if (skb)
break;
try_size = fallback;
}
skb = alloc_skb(try_size, sk->allocation);
<<<<<<<<
IMHO the flags are wrong:
Someone modified GFP_BUFFER between 2.2.15 and 2.3.99-pre9:
was:
GFP_BUFFER == GFP_MED|GFP_WAIT
now:
GFP_BUFFER == GFP_HIGH|GFP_WAIT
It will eat the memory for atomic allocations, and it will sleep instead
of downgrading to fallback.
What about
sk->allocation & (~(GFP_WAIT|GFP_IO|GFP_HIGH))
Should I write a patch?
Btw, I'd reorder the allocations in alloc_skb():
I'm sure that the actual data kmalloc fails far more often than the
skb_head alloc. We should allocate the data area first, and then the
skb_head.
I'm not subscribed to linux-net, please cc
--
Manfred
-
To unsubscribe from this list: send the line "unsubscribe linux-net" in
the body of a message to [EMAIL PROTECTED]