summaryrefslogtreecommitdiff
path: root/net/sunrpc/xprtmultipath.c
diff options
context:
space:
mode:
authorChuck Lever <chuck.lever@oracle.com>2017-08-23 17:05:58 -0400
committerTrond Myklebust <trond.myklebust@primarydata.com>2017-09-05 18:27:07 -0400
commit9590d083c1bb1419b7992609d1a0a3e3517d3893 (patch)
treeed285e1635c2232d66d432835fc13890ef209718 /net/sunrpc/xprtmultipath.c
parentf9773b22a27a4234f436c9570afd62d905e00a13 (diff)
xprtrdma: Use xprt_pin_rqst in rpcrdma_reply_handler
Adopt the use of xprt_pin_rqst to eliminate contention between Call-side users of rb_lock and the use of rb_lock in rpcrdma_reply_handler. This replaces the mechanism introduced in 431af645cf66 ("xprtrdma: Fix client lock-up after application signal fires"). Use recv_lock to quickly find the completing rqst, pin it, then drop the lock. At that point invalidation and pull-up of the Reply XDR can be done. Both are often expensive operations. Finally, take recv_lock again to signal completion to the RPC layer. It also protects adjustment of "cwnd". This greatly reduces the amount of time a lock is held by the reply handler. Comparing lock_stat results shows a marked decrease in contention on rb_lock and recv_lock. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> [trond.myklebust@primarydata.com: Remove call to rpcrdma_buffer_put() from the "out_norqst:" path in rpcrdma_reply_handler.] Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
Diffstat (limited to 'net/sunrpc/xprtmultipath.c')
0 files changed, 0 insertions, 0 deletions