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]

Reply via email to