[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID:
<168935825709.1984.4898358403212846149.stgit@manet.1015granger.net>
Date: Fri, 14 Jul 2023 14:10:57 -0400
From: Chuck Lever <cel@...nel.org>
To: linux-nfs@...r.kernel.org, netdev@...r.kernel.org
Cc: Chuck Lever <chuck.lever@...cle.com>, dhowells@...hat.com
Subject: [PATCH v2 4/4] SUNRPC: Use a per-transport receive bio_vec array
From: Chuck Lever <chuck.lever@...cle.com>
TCP receives are serialized, so we need only one bio_vec array per
socket. This shrinks the size of struct svc_rqst by 4144 bytes on
x86_64.
Signed-off-by: Chuck Lever <chuck.lever@...cle.com>
---
include/linux/sunrpc/svc.h | 1 -
include/linux/sunrpc/svcsock.h | 2 ++
net/sunrpc/svcsock.c | 2 +-
3 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/include/linux/sunrpc/svc.h b/include/linux/sunrpc/svc.h
index f8751118c122..36052188222d 100644
--- a/include/linux/sunrpc/svc.h
+++ b/include/linux/sunrpc/svc.h
@@ -224,7 +224,6 @@ struct svc_rqst {
struct folio_batch rq_fbatch;
struct kvec rq_vec[RPCSVC_MAXPAGES]; /* generally useful.. */
- struct bio_vec rq_bvec[RPCSVC_MAXPAGES];
__be32 rq_xid; /* transmission id */
u32 rq_prog; /* program number */
diff --git a/include/linux/sunrpc/svcsock.h b/include/linux/sunrpc/svcsock.h
index baea012e3b04..55446136499f 100644
--- a/include/linux/sunrpc/svcsock.h
+++ b/include/linux/sunrpc/svcsock.h
@@ -42,6 +42,8 @@ struct svc_sock {
struct completion sk_handshake_done;
+ struct bio_vec sk_recv_bvec[RPCSVC_MAXPAGES]
+ ____cacheline_aligned;
struct bio_vec sk_send_bvec[RPCSVC_MAXPAGES]
____cacheline_aligned;
diff --git a/net/sunrpc/svcsock.c b/net/sunrpc/svcsock.c
index e164ea4d0e0a..5cbc35e23e4f 100644
--- a/net/sunrpc/svcsock.c
+++ b/net/sunrpc/svcsock.c
@@ -299,7 +299,7 @@ static ssize_t svc_tcp_read_msg(struct svc_rqst *rqstp, size_t buflen,
{
struct svc_sock *svsk =
container_of(rqstp->rq_xprt, struct svc_sock, sk_xprt);
- struct bio_vec *bvec = rqstp->rq_bvec;
+ struct bio_vec *bvec = svsk->sk_recv_bvec;
struct msghdr msg = { NULL };
unsigned int i;
ssize_t len;
Powered by blists - more mailing lists