diff options
Diffstat (limited to 'net/sunrpc/xprtsock.c')
| -rw-r--r-- | net/sunrpc/xprtsock.c | 16 | 
1 files changed, 9 insertions, 7 deletions
diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c index 68b0a81c31d..37cbda63f45 100644 --- a/net/sunrpc/xprtsock.c +++ b/net/sunrpc/xprtsock.c @@ -770,7 +770,7 @@ static void xs_tcp_release_xprt(struct rpc_xprt *xprt, struct rpc_task *task)  		goto out_release;  	if (req->rq_bytes_sent == req->rq_snd_buf.len)  		goto out_release; -	set_bit(XPRT_CLOSE_WAIT, &task->tk_xprt->state); +	set_bit(XPRT_CLOSE_WAIT, &xprt->state);  out_release:  	xprt_release_xprt(xprt, task);  } @@ -1005,7 +1005,7 @@ static void xs_udp_data_ready(struct sock *sk, int len)  	UDPX_INC_STATS_BH(sk, UDP_MIB_INDATAGRAMS); -	xprt_adjust_cwnd(task, copied); +	xprt_adjust_cwnd(xprt, task, copied);  	xprt_complete_rqst(task, copied);   out_unlock: @@ -1646,9 +1646,9 @@ static void xs_udp_set_buffer_size(struct rpc_xprt *xprt, size_t sndsize, size_t   *   * Adjust the congestion window after a retransmit timeout has occurred.   */ -static void xs_udp_timer(struct rpc_task *task) +static void xs_udp_timer(struct rpc_xprt *xprt, struct rpc_task *task)  { -	xprt_adjust_cwnd(task, -ETIMEDOUT); +	xprt_adjust_cwnd(xprt, task, -ETIMEDOUT);  }  static unsigned short xs_get_random_port(void) @@ -1731,7 +1731,9 @@ static int xs_bind(struct sock_xprt *transport, struct socket *sock)   */  static void xs_local_rpcbind(struct rpc_task *task)  { -	xprt_set_bound(task->tk_xprt); +	rcu_read_lock(); +	xprt_set_bound(rcu_dereference(task->tk_client->cl_xprt)); +	rcu_read_unlock();  }  static void xs_local_set_port(struct rpc_xprt *xprt, unsigned short port) @@ -2205,6 +2207,7 @@ out:  /**   * xs_connect - connect a socket to a remote endpoint + * @xprt: pointer to transport structure   * @task: address of RPC task that manages state of connect request   *   * TCP: If the remote end dropped the connection, delay reconnecting. @@ -2216,9 +2219,8 @@ out:   * If a UDP socket connect fails, the delay behavior here prevents   * retry floods (hard mounts).   */ -static void xs_connect(struct rpc_task *task) +static void xs_connect(struct rpc_xprt *xprt, struct rpc_task *task)  { -	struct rpc_xprt *xprt = task->tk_xprt;  	struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt);  	if (transport->sock != NULL && !RPC_IS_SOFTCONN(task)) {  |