On Wed 11-01-17 21:02:01, Cong Wang wrote: > alloc_tx() is already inside a wait loop for a successful skb > allocation, this loop inside alloc_tx() is quite unnecessary > and actually problematic.
I am not familiar with this code at all but vcc_sendmsg seems to be one of those cases where open coding __GFP_NOFAIL semantic makes sense as there is an allocation fallback strategy implemented. > Signed-off-by: Cong Wang <xiyou.wangc...@gmail.com> I cannot give my reviewed-by because I am not familiar with the code but this looks like an improvement to me. > --- > 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 -- Michal Hocko SUSE Labs