]> git.proxmox.com Git - mirror_ubuntu-focal-kernel.git/commitdiff
SUNRPC: Fix up socket polling
authorTrond Myklebust <trond.myklebust@hammerspace.com>
Tue, 4 Dec 2018 12:50:06 +0000 (07:50 -0500)
committerTrond Myklebust <trond.myklebust@hammerspace.com>
Wed, 5 Dec 2018 12:11:12 +0000 (07:11 -0500)
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>
net/sunrpc/xprtsock.c

index fc6d129401ba38fbefc40ebd03ac84dec5008be5..92d08be2384d215ba8a2309e6c55907742943fa0 100644 (file)
@@ -649,9 +649,9 @@ static void xs_stream_data_receive(struct sock_xprt *transport)
        ssize_t ret = 0;
 
        mutex_lock(&transport->recv_mutex);
+       clear_bit(XPRT_SOCK_DATA_READY, &transport->sock_state);
        if (transport->sock == NULL)
                goto out;
-       clear_bit(XPRT_SOCK_DATA_READY, &transport->sock_state);
        for (;;) {
                ret = xs_read_stream(transport, MSG_DONTWAIT);
                if (ret < 0)
@@ -1346,10 +1346,10 @@ static void xs_udp_data_receive(struct sock_xprt *transport)
        int err;
 
        mutex_lock(&transport->recv_mutex);
+       clear_bit(XPRT_SOCK_DATA_READY, &transport->sock_state);
        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)