/**
  * xs_nospace - place task on wait queue if transmit was incomplete
+ * @req: pointer to RPC request
  * @task: task to put to sleep
  *
  */
-static int xs_nospace(struct rpc_task *task)
+static int xs_nospace(struct rpc_rqst *req, struct rpc_task *task)
 {
-       struct rpc_rqst *req = task->tk_rqstp;
        struct rpc_xprt *xprt = req->rq_xprt;
        struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt);
        struct sock *sk = transport->inet;
 
 /**
  * xs_local_send_request - write an RPC request to an AF_LOCAL socket
+ * @req: pointer to RPC request
  * @task: RPC task that manages the state of an RPC request
  *
  * Return values:
  * ENOTCONN:   Caller needs to invoke connect logic then call again
  *    other:   Some other error occured, the request was not sent
  */
-static int xs_local_send_request(struct rpc_task *task)
+static int xs_local_send_request(struct rpc_rqst *req, struct rpc_task *task)
 {
-       struct rpc_rqst *req = task->tk_rqstp;
        struct rpc_xprt *xprt = req->rq_xprt;
        struct sock_xprt *transport =
                                container_of(xprt, struct sock_xprt, xprt);
        case -ENOBUFS:
                break;
        case -EAGAIN:
-               status = xs_nospace(task);
+               status = xs_nospace(req, task);
                break;
        default:
                dprintk("RPC:       sendmsg returned unrecognized error %d\n",
 
 /**
  * xs_udp_send_request - write an RPC request to a UDP socket
+ * @req: pointer to RPC request
  * @task: address of RPC task that manages the state of an RPC request
  *
  * Return values:
  * ENOTCONN:   Caller needs to invoke connect logic then call again
  *    other:   Some other error occurred, the request was not sent
  */
-static int xs_udp_send_request(struct rpc_task *task)
+static int xs_udp_send_request(struct rpc_rqst *req, struct rpc_task *task)
 {
-       struct rpc_rqst *req = task->tk_rqstp;
        struct rpc_xprt *xprt = req->rq_xprt;
        struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt);
        struct xdr_buf *xdr = &req->rq_snd_buf;
                /* Should we call xs_close() here? */
                break;
        case -EAGAIN:
-               status = xs_nospace(task);
+               status = xs_nospace(req, task);
                break;
        case -ENETUNREACH:
        case -ENOBUFS:
 
 /**
  * xs_tcp_send_request - write an RPC request to a TCP socket
+ * @req: pointer to RPC request
  * @task: address of RPC task that manages the state of an RPC request
  *
  * Return values:
  * XXX: In the case of soft timeouts, should we eventually give up
  *     if sendmsg is not able to make progress?
  */
-static int xs_tcp_send_request(struct rpc_task *task)
+static int xs_tcp_send_request(struct rpc_rqst *req, struct rpc_task *task)
 {
-       struct rpc_rqst *req = task->tk_rqstp;
        struct rpc_xprt *xprt = req->rq_xprt;
        struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt);
        struct xdr_buf *xdr = &req->rq_snd_buf;
         * completes while the socket holds a reference to the pages,
         * then we may end up resending corrupted data.
         */
-       if (task->tk_flags & RPC_TASK_SENT)
+       if (req->rq_task->tk_flags & RPC_TASK_SENT)
                zerocopy = false;
 
        if (test_bit(XPRT_SOCK_UPD_TIMEOUT, &transport->sock_state))
                /* Should we call xs_close() here? */
                break;
        case -EAGAIN:
-               status = xs_nospace(task);
+               status = xs_nospace(req, task);
                break;
        case -ECONNRESET:
        case -ECONNREFUSED:
 /*
  * The send routine. Borrows from svc_send
  */
-static int bc_send_request(struct rpc_task *task)
+static int bc_send_request(struct rpc_rqst *req, struct rpc_task *task)
 {
-       struct rpc_rqst *req = task->tk_rqstp;
        struct svc_xprt *xprt;
        int len;