Merge branch 'for-3.9' of git://linux-nfs.org/~bfields/linux
[cascardo/linux.git] / net / sunrpc / xprtsock.c
index 4dc8eb2..c1d8476 100644 (file)
@@ -771,7 +771,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);
 }
@@ -1006,7 +1006,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:
@@ -1647,9 +1647,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)
@@ -1732,7 +1732,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)
@@ -1916,9 +1918,8 @@ out:
        return status;
 }
 
-static void xs_local_connect(struct rpc_task *task)
+static void xs_local_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);
        int ret;
 
@@ -2227,6 +2228,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.
@@ -2238,9 +2240,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)) {