alloc_tx() is already inside a wait loop for a successful skb allocation, this loop inside alloc_tx() is quite unnecessary and actually problematic.
Signed-off-by: Cong Wang <xiyou.wangc...@gmail.com> --- net/atm/common.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/net/atm/common.c b/net/atm/common.c index a3ca922..7ec3bbc 100644 --- a/net/atm/common.c +++ b/net/atm/common.c @@ -72,10 +72,11 @@ static struct sk_buff *alloc_tx(struct atm_vcc *vcc, unsigned int size) sk_wmem_alloc_get(sk), size, sk->sk_sndbuf); return NULL; } - while (!(skb = alloc_skb(size, GFP_KERNEL))) - schedule(); - pr_debug("%d += %d\n", sk_wmem_alloc_get(sk), skb->truesize); - atomic_add(skb->truesize, &sk->sk_wmem_alloc); + skb = alloc_skb(size, GFP_KERNEL); + if (skb) { + pr_debug("%d += %d\n", sk_wmem_alloc_get(sk), skb->truesize); + atomic_add(skb->truesize, &sk->sk_wmem_alloc); + } return skb; } -- 2.5.5