> On Dec 3, 2017, at 1:50 PM, Trond Myklebust <trond.myklebust@xxxxxxxxxxxxxxx> wrote: > > We must ensure that the call to rpc_sleep_on() in xprt_transmit() cannot > race with the call to xprt_complete_rqst(). :-( this will kill scalability, we might as well just go back to the old locking scheme. But I will give it a try. > Reported-by: Chuck Lever <chuck.lever@xxxxxxxxxx> > Link: https://bugzilla.linux-nfs.org/show_bug.cgi?id=317 > Fixes: ce7c252a8c74 ("SUNRPC: Add a separate spinlock to protect..") > Cc: stable@xxxxxxxxxxxxxxx # 4.14+ > Signed-off-by: Trond Myklebust <trond.myklebust@xxxxxxxxxxxxxxx> > --- > net/sunrpc/xprt.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/net/sunrpc/xprt.c b/net/sunrpc/xprt.c > index 333b9d697ae5..9d9092805696 100644 > --- a/net/sunrpc/xprt.c > +++ b/net/sunrpc/xprt.c > @@ -1035,6 +1035,7 @@ void xprt_transmit(struct rpc_task *task) > > dprintk("RPC: %5u xmit complete\n", task->tk_pid); > task->tk_flags |= RPC_TASK_SENT; > + spin_lock(&xprt->recv_lock); > spin_lock_bh(&xprt->transport_lock); > > xprt->ops->set_retrans_timeout(task); > @@ -1061,6 +1062,7 @@ void xprt_transmit(struct rpc_task *task) > req->rq_connect_cookie = xprt->connect_cookie; > } > spin_unlock_bh(&xprt->transport_lock); > + spin_unlock(&xprt->recv_lock); > } > > static void xprt_add_backlog(struct rpc_xprt *xprt, struct rpc_task *task) > -- > 2.14.3 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-nfs" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- Chuck Lever chucklever@xxxxxxxxx -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html