]> git.baikalelectronics.ru Git - kernel.git/commit
atm/svc: Fix blocking in wait loop
authorchas williams - CONTRACTOR <chas@cmf.nrl.navy.mil>
Tue, 12 Aug 2014 12:12:26 +0000 (08:12 -0400)
committerDavid S. Miller <davem@davemloft.net>
Thu, 14 Aug 2014 03:04:46 +0000 (20:04 -0700)
commit2657509aab8278299f7f57418d3e85fbdb83f966
treed47fa60ae55956e23ff7c1d57c32bdcafd3f65f8
parent93a05ecb3710503c724a926b5f02e9654b712816
atm/svc: Fix blocking in wait loop

One should not call blocking primitives inside a wait loop, since both
require task_struct::state to sleep, so the inner will destroy the
outer state.

sigd_enq() will possibly sleep for alloc_skb().  Move sigd_enq() before
prepare_to_wait() to avoid sleeping while waiting interruptibly.  You do
not actually need to call sigd_enq() after the initial prepare_to_wait()
because we test the termination condition before calling schedule().

Based on suggestions from Peter Zijlstra.

Signed-off-by: Chas Williams <chas@cmf.n4rl.navy.mil>
Acked-by: Peter Zijlstra <peterz@infradead.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/atm/svc.c