···17221722 task->tk_action = call_status;17231723 if (task->tk_status < 0)17241724 return;17251725- task->tk_status = xprt_prepare_transmit(task);17261726- if (task->tk_status != 0)17251725+ if (!xprt_prepare_transmit(task))17271726 return;17281727 task->tk_action = call_transmit_status;17291728 /* Encode here so that rpcsec_gss can use correct sequence number. */···18101811{18111812 struct rpc_rqst *req = task->tk_rqstp;1812181318131813- task->tk_status = xprt_prepare_transmit(task);18141814- if (task->tk_status == -EAGAIN) {18141814+ if (!xprt_prepare_transmit(task)) {18151815 /*18161816 * Could not reserve the transport. Try again after the18171817 * transport is released.
+9-6
net/sunrpc/xprt.c
···864864 * @task: RPC task about to send a request865865 *866866 */867867-int xprt_prepare_transmit(struct rpc_task *task)867867+bool xprt_prepare_transmit(struct rpc_task *task)868868{869869 struct rpc_rqst *req = task->tk_rqstp;870870 struct rpc_xprt *xprt = req->rq_xprt;871871- int err = 0;871871+ bool ret = false;872872873873 dprintk("RPC: %5u xprt_prepare_transmit\n", task->tk_pid);874874875875 spin_lock_bh(&xprt->transport_lock);876876 if (req->rq_reply_bytes_recvd && !req->rq_bytes_sent) {877877- err = req->rq_reply_bytes_recvd;877877+ task->tk_status = req->rq_reply_bytes_recvd;878878 goto out_unlock;879879 }880880- if (!xprt->ops->reserve_xprt(xprt, task))881881- err = -EAGAIN;880880+ if (!xprt->ops->reserve_xprt(xprt, task)) {881881+ task->tk_status = -EAGAIN;882882+ goto out_unlock;883883+ }884884+ ret = true;882885out_unlock:883886 spin_unlock_bh(&xprt->transport_lock);884884- return err;887887+ return ret;885888}886889887890void xprt_end_transmit(struct rpc_task *task)