Skip to content

Commit ae05355

Browse files
author
Trond Myklebust
committed
SUNRPC: Don't reset the stream record info when the receive worker is running
To ensure that the receive worker has exclusive access to the stream record info, we must not reset the contents other than when holding the transport->recv_mutex. Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
1 parent ded52fb commit ae05355

File tree

1 file changed

+9
-3
lines changed

1 file changed

+9
-3
lines changed

net/sunrpc/xprtsock.c

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -716,6 +716,11 @@ xs_stream_reset_connect(struct sock_xprt *transport)
716716
transport->recv.len = 0;
717717
transport->recv.copied = 0;
718718
transport->xmit.offset = 0;
719+
}
720+
721+
static void
722+
xs_stream_start_connect(struct sock_xprt *transport)
723+
{
719724
transport->xprt.stat.connect_count++;
720725
transport->xprt.stat.connect_start = jiffies;
721726
}
@@ -1255,6 +1260,8 @@ static void xs_reset_transport(struct sock_xprt *transport)
12551260
xprt_clear_connected(xprt);
12561261
write_unlock_bh(&sk->sk_callback_lock);
12571262
xs_sock_reset_connection_flags(xprt);
1263+
/* Reset stream record info */
1264+
xs_stream_reset_connect(transport);
12581265
mutex_unlock(&transport->recv_mutex);
12591266

12601267
trace_rpc_socket_close(xprt, sock);
@@ -1906,7 +1913,7 @@ static int xs_local_finish_connecting(struct rpc_xprt *xprt,
19061913
write_unlock_bh(&sk->sk_callback_lock);
19071914
}
19081915

1909-
xs_stream_reset_connect(transport);
1916+
xs_stream_start_connect(transport);
19101917

19111918
return kernel_connect(sock, xs_addr(xprt), xprt->addrlen, 0);
19121919
}
@@ -2264,8 +2271,7 @@ static int xs_tcp_finish_connecting(struct rpc_xprt *xprt, struct socket *sock)
22642271

22652272
xs_set_memalloc(xprt);
22662273

2267-
/* Reset TCP record info */
2268-
xs_stream_reset_connect(transport);
2274+
xs_stream_start_connect(transport);
22692275

22702276
/* Tell the socket layer to start connecting... */
22712277
set_bit(XPRT_SOCK_CONNECTING, &transport->sock_state);

0 commit comments

Comments
 (0)