mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-06 08:46:46 +00:00
SUNRPC: Fix up socket polling
Ensure that we do not exit the socket read callback without clearing XPRT_SOCK_DATA_READY. Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
This commit is contained in:
parent
b76a5afdce
commit
dfcf038085
1 changed files with 2 additions and 2 deletions
|
@ -649,9 +649,9 @@ static void xs_stream_data_receive(struct sock_xprt *transport)
|
||||||
ssize_t ret = 0;
|
ssize_t ret = 0;
|
||||||
|
|
||||||
mutex_lock(&transport->recv_mutex);
|
mutex_lock(&transport->recv_mutex);
|
||||||
|
clear_bit(XPRT_SOCK_DATA_READY, &transport->sock_state);
|
||||||
if (transport->sock == NULL)
|
if (transport->sock == NULL)
|
||||||
goto out;
|
goto out;
|
||||||
clear_bit(XPRT_SOCK_DATA_READY, &transport->sock_state);
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
ret = xs_read_stream(transport, MSG_DONTWAIT);
|
ret = xs_read_stream(transport, MSG_DONTWAIT);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
|
@ -1346,10 +1346,10 @@ static void xs_udp_data_receive(struct sock_xprt *transport)
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
mutex_lock(&transport->recv_mutex);
|
mutex_lock(&transport->recv_mutex);
|
||||||
|
clear_bit(XPRT_SOCK_DATA_READY, &transport->sock_state);
|
||||||
sk = transport->inet;
|
sk = transport->inet;
|
||||||
if (sk == NULL)
|
if (sk == NULL)
|
||||||
goto out;
|
goto out;
|
||||||
clear_bit(XPRT_SOCK_DATA_READY, &transport->sock_state);
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
skb = skb_recv_udp(sk, 0, 1, &err);
|
skb = skb_recv_udp(sk, 0, 1, &err);
|
||||||
if (skb == NULL)
|
if (skb == NULL)
|
||||||
|
|
Loading…
Reference in a new issue