From: Chuck Lever <chuck.lever@oracle.com>
To: anna.schumaker@netapp.com
Cc: linux-rdma@vger.kernel.org, linux-nfs@vger.kernel.org
Subject: [PATCH v3 08/16] xprtrdma: Saving IRQs no longer needed for rb_lock
Date: Fri, 16 Oct 2015 09:25:06 -0400 [thread overview]
Message-ID: <20151016132506.6819.30436.stgit@oracle-122.nfsv4bat.org> (raw)
In-Reply-To: <20151016131958.6819.98407.stgit@oracle-122.nfsv4bat.org>
Now that RPC replies are processed in a workqueue, there's no need
to disable IRQs when managing send and receive buffers. This saves
noticeable overhead per RPC.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Reviewed-by: Sagi Grimberg <sagig@mellanox.com>
Tested-By: Devesh Sharma <devesh.sharma@avagotech.com>
---
net/sunrpc/xprtrdma/verbs.c | 24 ++++++++++--------------
1 file changed, 10 insertions(+), 14 deletions(-)
diff --git a/net/sunrpc/xprtrdma/verbs.c b/net/sunrpc/xprtrdma/verbs.c
index a4102fc..2dca18d 100644
--- a/net/sunrpc/xprtrdma/verbs.c
+++ b/net/sunrpc/xprtrdma/verbs.c
@@ -1065,24 +1065,23 @@ struct rpcrdma_req *
rpcrdma_buffer_get(struct rpcrdma_buffer *buffers)
{
struct rpcrdma_req *req;
- unsigned long flags;
- spin_lock_irqsave(&buffers->rb_lock, flags);
+ spin_lock(&buffers->rb_lock);
if (list_empty(&buffers->rb_send_bufs))
goto out_reqbuf;
req = rpcrdma_buffer_get_req_locked(buffers);
if (list_empty(&buffers->rb_recv_bufs))
goto out_repbuf;
req->rl_reply = rpcrdma_buffer_get_rep_locked(buffers);
- spin_unlock_irqrestore(&buffers->rb_lock, flags);
+ spin_unlock(&buffers->rb_lock);
return req;
out_reqbuf:
- spin_unlock_irqrestore(&buffers->rb_lock, flags);
+ spin_unlock(&buffers->rb_lock);
pr_warn("RPC: %s: out of request buffers\n", __func__);
return NULL;
out_repbuf:
- spin_unlock_irqrestore(&buffers->rb_lock, flags);
+ spin_unlock(&buffers->rb_lock);
pr_warn("RPC: %s: out of reply buffers\n", __func__);
req->rl_reply = NULL;
return req;
@@ -1097,16 +1096,15 @@ rpcrdma_buffer_put(struct rpcrdma_req *req)
{
struct rpcrdma_buffer *buffers = req->rl_buffer;
struct rpcrdma_rep *rep = req->rl_reply;
- unsigned long flags;
req->rl_niovs = 0;
req->rl_reply = NULL;
- spin_lock_irqsave(&buffers->rb_lock, flags);
+ spin_lock(&buffers->rb_lock);
list_add_tail(&req->rl_free, &buffers->rb_send_bufs);
if (rep)
list_add_tail(&rep->rr_list, &buffers->rb_recv_bufs);
- spin_unlock_irqrestore(&buffers->rb_lock, flags);
+ spin_unlock(&buffers->rb_lock);
}
/*
@@ -1117,12 +1115,11 @@ void
rpcrdma_recv_buffer_get(struct rpcrdma_req *req)
{
struct rpcrdma_buffer *buffers = req->rl_buffer;
- unsigned long flags;
- spin_lock_irqsave(&buffers->rb_lock, flags);
+ spin_lock(&buffers->rb_lock);
if (!list_empty(&buffers->rb_recv_bufs))
req->rl_reply = rpcrdma_buffer_get_rep_locked(buffers);
- spin_unlock_irqrestore(&buffers->rb_lock, flags);
+ spin_unlock(&buffers->rb_lock);
}
/*
@@ -1133,11 +1130,10 @@ void
rpcrdma_recv_buffer_put(struct rpcrdma_rep *rep)
{
struct rpcrdma_buffer *buffers = &rep->rr_rxprt->rx_buf;
- unsigned long flags;
- spin_lock_irqsave(&buffers->rb_lock, flags);
+ spin_lock(&buffers->rb_lock);
list_add_tail(&rep->rr_list, &buffers->rb_recv_bufs);
- spin_unlock_irqrestore(&buffers->rb_lock, flags);
+ spin_unlock(&buffers->rb_lock);
}
/*
next prev parent reply other threads:[~2015-10-16 13:25 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-10-16 13:23 [PATCH v3 00/16] NFS/RDMA patches for merging into v4.4 Chuck Lever
2015-10-16 13:24 ` [PATCH v3 01/16] xprtrdma: Enable swap-on-NFS/RDMA Chuck Lever
2015-10-16 13:24 ` [PATCH v3 02/16] xprtrdma: Re-arm after missed events Chuck Lever
2015-10-16 13:24 ` [PATCH v3 03/16] xprtrdma: Prevent loss of completion signals Chuck Lever
2015-10-16 13:24 ` [PATCH v3 04/16] xprtrdma: Refactor reply handler error handling Chuck Lever
2015-10-16 13:24 ` [PATCH v3 05/16] xprtrdma: Replace send and receive arrays Chuck Lever
2015-10-16 13:24 ` [PATCH v3 06/16] xprtrdma: Use workqueue to process RPC/RDMA replies Chuck Lever
2015-10-16 13:24 ` [PATCH v3 07/16] xprtrdma: Remove reply tasklet Chuck Lever
2015-10-16 13:25 ` Chuck Lever [this message]
2015-10-16 13:25 ` [PATCH v3 09/16] SUNRPC: Abstract backchannel operations Chuck Lever
2015-10-16 13:25 ` [PATCH v3 10/16] xprtrdma: Pre-allocate backward rpc_rqst and send/receive buffers Chuck Lever
2015-10-16 13:25 ` [PATCH v3 11/16] xprtrdma: Pre-allocate Work Requests for backchannel Chuck Lever
2015-10-16 13:25 ` [PATCH v3 12/16] xprtrdma: Add support for sending backward direction RPC replies Chuck Lever
2015-10-16 13:25 ` [PATCH v3 13/16] xprtrdma: Handle incoming backward direction RPC calls Chuck Lever
2015-10-16 13:25 ` [PATCH v3 14/16] svcrdma: Add backward direction service for RPC/RDMA transport Chuck Lever
2015-10-16 13:26 ` [PATCH v3 15/16] SUNRPC: Remove the TCP-only restriction in bc_svc_process() Chuck Lever
2015-10-16 13:26 ` [PATCH v3 16/16] NFS: Enable client side NFSv4.1 backchannel to use other transports Chuck Lever
[not found] ` <CAHQdGtQ+iUnuxFzZ6kOHaC=EGj1ptB_P6odciBe3MnuSZ4PBiA@mail.gmail.com>
2015-10-23 21:30 ` Trond Myklebust
2015-10-23 21:49 ` Chuck Lever
2015-10-19 18:58 ` [PATCH v3 00/16] NFS/RDMA patches for merging into v4.4 Anna Schumaker
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20151016132506.6819.30436.stgit@oracle-122.nfsv4bat.org \
--to=chuck.lever@oracle.com \
--cc=anna.schumaker@netapp.com \
--cc=linux-nfs@vger.kernel.org \
--cc=linux-rdma@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox