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

Reply via email to