SUNRPC: Clean up xs_udp_data_receive()
authorTrond Myklebust <trond.myklebust@hammerspace.com>
Fri, 14 Sep 2018 21:45:23 +0000 (17:45 -0400)
committerTrond Myklebust <trond.myklebust@hammerspace.com>
Sun, 30 Sep 2018 19:35:16 +0000 (15:35 -0400)
Simplify the retry logic.

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

index 90d4c92..039444e 100644 (file)
@@ -1344,25 +1344,18 @@ static void xs_udp_data_receive(struct sock_xprt *transport)
        struct sock *sk;
        int err;
 
-restart:
        mutex_lock(&transport->recv_mutex);
        sk = transport->inet;
        if (sk == NULL)
                goto out;
+       clear_bit(XPRT_SOCK_DATA_READY, &transport->sock_state);
        for (;;) {
                skb = skb_recv_udp(sk, 0, 1, &err);
-               if (skb != NULL) {
-                       xs_udp_data_read_skb(&transport->xprt, sk, skb);
-                       consume_skb(skb);
-                       continue;
-               }
-               if (!test_and_clear_bit(XPRT_SOCK_DATA_READY, &transport->sock_state))
+               if (skb == NULL)
                        break;
-               if (need_resched()) {
-                       mutex_unlock(&transport->recv_mutex);
-                       cond_resched();
-                       goto restart;
-               }
+               xs_udp_data_read_skb(&transport->xprt, sk, skb);
+               consume_skb(skb);
+               cond_resched();
        }
 out:
        mutex_unlock(&transport->recv_mutex);