Re: [PATCH v2 29/34] SUNRPC: Convert the xprt->sending queue back to an ordinary wait queue

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, 2018-09-06 at 10:17 -0400, Anna Schumaker wrote:
> Hi Trond,
> 
> On Tue, 2018-09-04 at 17:05 -0400, Trond Myklebust wrote:
> > We no longer need priority semantics on the xprt->sending queue, because
> > the order in which tasks are sent is now dictated by their position in
> > the send queue.
> > Note that the backlog queue remains a priority queue, meaning that
> > slot resources are still managed in order of task priority.
> > 
> > Signed-off-by: Trond Myklebust <trond.myklebust@xxxxxxxxxxxxxxx>
> > ---
> >  net/sunrpc/xprt.c | 29 ++++++-----------------------
> >  1 file changed, 6 insertions(+), 23 deletions(-)
> > 
> > diff --git a/net/sunrpc/xprt.c b/net/sunrpc/xprt.c
> > index ba9af25d14de..ebe5235c484b 100644
> > --- a/net/sunrpc/xprt.c
> > +++ b/net/sunrpc/xprt.c
> > @@ -181,7 +181,6 @@ EXPORT_SYMBOL_GPL(xprt_load_transport);
> >  int xprt_reserve_xprt(struct rpc_xprt *xprt, struct rpc_task *task)
> >  {
> >  	struct rpc_rqst *req = task->tk_rqstp;
> 
> As of this patch, req is no longer used either.  Can it be removed?

Never mind, I looked at the next patch and saw that it's used again.

> 
> Thanks,
> Anna
> 
> > -	int priority;
> >  
> >  	if (test_and_set_bit(XPRT_LOCKED, &xprt->state)) {
> >  		if (task == xprt->snd_task)
> > @@ -197,13 +196,7 @@ int xprt_reserve_xprt(struct rpc_xprt *xprt, struct
> > rpc_task *task)
> >  			task->tk_pid, xprt);
> >  	task->tk_timeout = 0;
> >  	task->tk_status = -EAGAIN;
> > -	if (req == NULL)
> > -		priority = RPC_PRIORITY_LOW;
> > -	else if (!req->rq_ntrans)
> > -		priority = RPC_PRIORITY_NORMAL;
> > -	else
> > -		priority = RPC_PRIORITY_HIGH;
> > -	rpc_sleep_on_priority(&xprt->sending, task, NULL, priority);
> > +	rpc_sleep_on(&xprt->sending, task, NULL);
> >  	return 0;
> >  }
> >  EXPORT_SYMBOL_GPL(xprt_reserve_xprt);
> > @@ -231,7 +224,6 @@ static void xprt_clear_locked(struct rpc_xprt *xprt)
> >  int xprt_reserve_xprt_cong(struct rpc_xprt *xprt, struct rpc_task *task)
> >  {
> >  	struct rpc_rqst *req = task->tk_rqstp;
> > -	int priority;
> >  
> >  	if (test_and_set_bit(XPRT_LOCKED, &xprt->state)) {
> >  		if (task == xprt->snd_task)
> > @@ -251,13 +243,7 @@ int xprt_reserve_xprt_cong(struct rpc_xprt *xprt,
> > struct
> > rpc_task *task)
> >  	dprintk("RPC: %5u failed to lock transport %p\n", task->tk_pid, xprt);
> >  	task->tk_timeout = 0;
> >  	task->tk_status = -EAGAIN;
> > -	if (req == NULL)
> > -		priority = RPC_PRIORITY_LOW;
> > -	else if (!req->rq_ntrans)
> > -		priority = RPC_PRIORITY_NORMAL;
> > -	else
> > -		priority = RPC_PRIORITY_HIGH;
> > -	rpc_sleep_on_priority(&xprt->sending, task, NULL, priority);
> > +	rpc_sleep_on(&xprt->sending, task, NULL);
> >  	return 0;
> >  }
> >  EXPORT_SYMBOL_GPL(xprt_reserve_xprt_cong);
> > @@ -285,8 +271,7 @@ static void __xprt_lock_write_next(struct rpc_xprt
> > *xprt)
> >  	if (test_and_set_bit(XPRT_LOCKED, &xprt->state))
> >  		return;
> >  
> > -	if (rpc_wake_up_first_on_wq(xprtiod_workqueue, &xprt->sending,
> > -				__xprt_lock_write_func, xprt))
> > +	if (rpc_wake_up_first(&xprt->sending, __xprt_lock_write_func, xprt))
> >  		return;
> >  	xprt_clear_locked(xprt);
> >  }
> > @@ -297,8 +282,7 @@ static void __xprt_lock_write_next_cong(struct rpc_xprt
> > *xprt)
> >  		return;
> >  	if (RPCXPRT_CONGESTED(xprt))
> >  		goto out_unlock;
> > -	if (rpc_wake_up_first_on_wq(xprtiod_workqueue, &xprt->sending,
> > -				__xprt_lock_write_func, xprt))
> > +	if (rpc_wake_up_first(&xprt->sending, __xprt_lock_write_func, xprt))
> >  		return;
> >  out_unlock:
> >  	xprt_clear_locked(xprt);
> > @@ -495,8 +479,7 @@ void xprt_write_space(struct rpc_xprt *xprt)
> >  	if (xprt->snd_task) {
> >  		dprintk("RPC:       write space: waking waiting task on "
> >  				"xprt %p\n", xprt);
> > -		rpc_wake_up_queued_task_on_wq(xprtiod_workqueue,
> > -				&xprt->pending, xprt->snd_task);
> > +		rpc_wake_up_queued_task(&xprt->pending, xprt->snd_task);
> >  	}
> >  	spin_unlock_bh(&xprt->transport_lock);
> >  }
> > @@ -1596,7 +1579,7 @@ static void xprt_init(struct rpc_xprt *xprt, struct
> > net
> > *net)
> >  
> >  	rpc_init_wait_queue(&xprt->binding, "xprt_binding");
> >  	rpc_init_wait_queue(&xprt->pending, "xprt_pending");
> > -	rpc_init_priority_wait_queue(&xprt->sending, "xprt_sending");
> > +	rpc_init_wait_queue(&xprt->sending, "xprt_sending");
> >  	rpc_init_priority_wait_queue(&xprt->backlog, "xprt_backlog");
> >  
> >  	xprt_init_xid(xprt);




[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux