diff options
author | Trond Myklebust <trond.myklebust@hammerspace.com> | 2018-12-04 07:50:06 -0500 |
---|---|---|
committer | Trond Myklebust <trond.myklebust@hammerspace.com> | 2018-12-05 07:11:12 -0500 |
commit | dfcf0380858b4e760ae02665649d884d1baa50c9 (patch) | |
tree | 8e374cccfa782bcca719eed3bc2486975401cbbb /net/sunrpc/xprtsock.c | |
parent | b76a5afdce6c6dacfbd51863b31b3d7cc61ca21e (diff) |
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>
Diffstat (limited to 'net/sunrpc/xprtsock.c')
-rw-r--r-- | net/sunrpc/xprtsock.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c index fc6d129401ba..92d08be2384d 100644 --- a/net/sunrpc/xprtsock.c +++ b/net/sunrpc/xprtsock.c | |||
@@ -649,9 +649,9 @@ static void xs_stream_data_receive(struct sock_xprt *transport) | |||
649 | ssize_t ret = 0; | 649 | ssize_t ret = 0; |
650 | 650 | ||
651 | mutex_lock(&transport->recv_mutex); | 651 | mutex_lock(&transport->recv_mutex); |
652 | clear_bit(XPRT_SOCK_DATA_READY, &transport->sock_state); | ||
652 | if (transport->sock == NULL) | 653 | if (transport->sock == NULL) |
653 | goto out; | 654 | goto out; |
654 | clear_bit(XPRT_SOCK_DATA_READY, &transport->sock_state); | ||
655 | for (;;) { | 655 | for (;;) { |
656 | ret = xs_read_stream(transport, MSG_DONTWAIT); | 656 | ret = xs_read_stream(transport, MSG_DONTWAIT); |
657 | if (ret < 0) | 657 | if (ret < 0) |
@@ -1346,10 +1346,10 @@ static void xs_udp_data_receive(struct sock_xprt *transport) | |||
1346 | int err; | 1346 | int err; |
1347 | 1347 | ||
1348 | mutex_lock(&transport->recv_mutex); | 1348 | mutex_lock(&transport->recv_mutex); |
1349 | clear_bit(XPRT_SOCK_DATA_READY, &transport->sock_state); | ||
1349 | sk = transport->inet; | 1350 | sk = transport->inet; |
1350 | if (sk == NULL) | 1351 | if (sk == NULL) |
1351 | goto out; | 1352 | goto out; |
1352 | clear_bit(XPRT_SOCK_DATA_READY, &transport->sock_state); | ||
1353 | for (;;) { | 1353 | for (;;) { |
1354 | skb = skb_recv_udp(sk, 0, 1, &err); | 1354 | skb = skb_recv_udp(sk, 0, 1, &err); |
1355 | if (skb == NULL) | 1355 | if (skb == NULL) |