OSDN Git Service

SUNRPC: Simplify xprt_prepare_transmit()
authorTrond Myklebust <trond.myklebust@hammerspace.com>
Sat, 1 Sep 2018 18:25:24 +0000 (14:25 -0400)
committerTrond Myklebust <trond.myklebust@hammerspace.com>
Sun, 30 Sep 2018 19:35:15 +0000 (15:35 -0400)
Remove the checks for whether or not we need to transmit, and whether
or not a reply has been received. Those are already handled in
call_transmit() itself.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
net/sunrpc/xprt.c

index a4b854d..dca822b 100644 (file)
@@ -1123,27 +1123,18 @@ bool xprt_prepare_transmit(struct rpc_task *task)
 {
        struct rpc_rqst *req = task->tk_rqstp;
        struct rpc_xprt *xprt = req->rq_xprt;
-       bool ret = false;
 
        dprintk("RPC: %5u xprt_prepare_transmit\n", task->tk_pid);
 
-       spin_lock_bh(&xprt->transport_lock);
-       if (!req->rq_bytes_sent) {
-               if (req->rq_reply_bytes_recvd) {
-                       task->tk_status = req->rq_reply_bytes_recvd;
-                       goto out_unlock;
-               }
+       if (!xprt_lock_write(xprt, task)) {
+               /* Race breaker: someone may have transmitted us */
                if (!test_bit(RPC_TASK_NEED_XMIT, &task->tk_runstate))
-                       goto out_unlock;
-       }
-       if (!xprt->ops->reserve_xprt(xprt, task)) {
-               task->tk_status = -EAGAIN;
-               goto out_unlock;
+                       rpc_wake_up_queued_task_set_status(&xprt->sending,
+                                       task, 0);
+               return false;
+
        }
-       ret = true;
-out_unlock:
-       spin_unlock_bh(&xprt->transport_lock);
-       return ret;
+       return true;
 }
 
 void xprt_end_transmit(struct rpc_task *task)