]> git.baikalelectronics.ru Git - kernel.git/commit
SUNRPC: Use poll() to fix up the socket requeue races
authorTrond Myklebust <trond.myklebust@hammerspace.com>
Wed, 30 Jan 2019 19:51:26 +0000 (14:51 -0500)
committerTrond Myklebust <trond.myklebust@hammerspace.com>
Wed, 20 Feb 2019 22:33:54 +0000 (17:33 -0500)
commit647f958cae04fca7d4d4220968b8539ecc31b15f
treedd64e946ccdfdef857fc51476b66fb48efee5de2
parentf981b42e4572af272ceddeb70fa29ec71832ea52
SUNRPC: Use poll() to fix up the socket requeue races

Because we clear XPRT_SOCK_DATA_READY before reading, we can end up
with a situation where new data arrives, causing xs_data_ready() to
queue up a second receive worker job for the same socket, which then
immediately gets stuck waiting on the transport receive mutex.
The fix is to only clear XPRT_SOCK_DATA_READY once we're done reading,
and then to use poll() to check if we might need to queue up a new
job in order to deal with any new data.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
net/sunrpc/xprtsock.c