summaryrefslogtreecommitdiffstats
path: root/net/sunrpc/xprtsock.c
diff options
context:
space:
mode:
authorTrond Myklebust <trond.myklebust@hammerspace.com>2018-12-04 07:50:06 -0500
committerTrond Myklebust <trond.myklebust@hammerspace.com>2018-12-05 07:11:12 -0500
commitdfcf0380858b4e760ae02665649d884d1baa50c9 (patch)
tree8e374cccfa782bcca719eed3bc2486975401cbbb /net/sunrpc/xprtsock.c
parentb76a5afdce6c6dacfbd51863b31b3d7cc61ca21e (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.c4
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)