* [RFC PATCH v1 09/57] fs/nfs: Remove PAGE_SIZE compile-time constant assumption
[not found] ` <20241014105912.3207374-1-ryan.roberts@arm.com>
@ 2024-10-14 10:58 ` Ryan Roberts
2024-10-14 10:58 ` [RFC PATCH v1 21/57] sunrpc: " Ryan Roberts
2024-10-14 10:58 ` [RFC PATCH v1 23/57] net: " Ryan Roberts
2 siblings, 0 replies; 8+ messages in thread
From: Ryan Roberts @ 2024-10-14 10:58 UTC (permalink / raw)
To: Andrew Morton, Anna Schumaker, Anshuman Khandual, Ard Biesheuvel,
Catalin Marinas, David Hildenbrand, Greg Marsden, Ivan Ivanov,
Kalesh Singh, Marc Zyngier, Mark Rutland, Matthias Brugger,
Miroslav Benes, Trond Myklebust, Will Deacon
Cc: Ryan Roberts, linux-arm-kernel, linux-kernel, linux-mm, linux-nfs
To prepare for supporting boot-time page size selection, refactor code
to remove assumptions about PAGE_SIZE being compile-time constant. Code
intended to be equivalent when compile-time page size is active.
Calculation of NFS4ACL_MAXPAGES and NFS4XATTR_MAXPAGES are modified to
give max pages when page size is at the minimum.
BUILD_BUG_ON() is modified to test against the min page size, which
implicitly also applies to all other page sizes.
Signed-off-by: Ryan Roberts <ryan.roberts@arm.com>
---
***NOTE***
Any confused maintainers may want to read the cover note here for context:
https://lore.kernel.org/all/20241014105514.3206191-1-ryan.roberts@arm.com/
fs/nfs/nfs42proc.c | 2 +-
fs/nfs/nfs42xattr.c | 2 +-
fs/nfs/nfs4proc.c | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/fs/nfs/nfs42proc.c b/fs/nfs/nfs42proc.c
index 28704f924612c..c600574105c63 100644
--- a/fs/nfs/nfs42proc.c
+++ b/fs/nfs/nfs42proc.c
@@ -1161,7 +1161,7 @@ int nfs42_proc_clone(struct file *src_f, struct file *dst_f,
return err;
}
-#define NFS4XATTR_MAXPAGES DIV_ROUND_UP(XATTR_SIZE_MAX, PAGE_SIZE)
+#define NFS4XATTR_MAXPAGES DIV_ROUND_UP(XATTR_SIZE_MAX, PAGE_SIZE_MIN)
static int _nfs42_proc_removexattr(struct inode *inode, const char *name)
{
diff --git a/fs/nfs/nfs42xattr.c b/fs/nfs/nfs42xattr.c
index b6e3d8f77b910..734177eb44889 100644
--- a/fs/nfs/nfs42xattr.c
+++ b/fs/nfs/nfs42xattr.c
@@ -183,7 +183,7 @@ nfs4_xattr_alloc_entry(const char *name, const void *value,
uint32_t flags;
BUILD_BUG_ON(sizeof(struct nfs4_xattr_entry) +
- XATTR_NAME_MAX + 1 > PAGE_SIZE);
+ XATTR_NAME_MAX + 1 > PAGE_SIZE_MIN);
alloclen = sizeof(struct nfs4_xattr_entry);
if (name != NULL) {
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index b8ffbe52ba15a..3c3622f46d3e0 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -5928,7 +5928,7 @@ static bool nfs4_server_supports_acls(const struct nfs_server *server,
* it's OK to put sizeof(void) * (XATTR_SIZE_MAX/PAGE_SIZE) bytes on
* the stack.
*/
-#define NFS4ACL_MAXPAGES DIV_ROUND_UP(XATTR_SIZE_MAX, PAGE_SIZE)
+#define NFS4ACL_MAXPAGES DIV_ROUND_UP(XATTR_SIZE_MAX, PAGE_SIZE_MIN)
int nfs4_buf_to_pages_noslab(const void *buf, size_t buflen,
struct page **pages)
--
2.43.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [RFC PATCH v1 21/57] sunrpc: Remove PAGE_SIZE compile-time constant assumption
[not found] ` <20241014105912.3207374-1-ryan.roberts@arm.com>
2024-10-14 10:58 ` [RFC PATCH v1 09/57] fs/nfs: Remove PAGE_SIZE compile-time constant assumption Ryan Roberts
@ 2024-10-14 10:58 ` Ryan Roberts
2024-10-16 14:42 ` Ryan Roberts
2024-10-14 10:58 ` [RFC PATCH v1 23/57] net: " Ryan Roberts
2 siblings, 1 reply; 8+ messages in thread
From: Ryan Roberts @ 2024-10-14 10:58 UTC (permalink / raw)
To: Andrew Morton, Anna Schumaker, Anshuman Khandual, Ard Biesheuvel,
Catalin Marinas, David Hildenbrand, Greg Marsden, Ivan Ivanov,
Kalesh Singh, Marc Zyngier, Mark Rutland, Matthias Brugger,
Miroslav Benes, Trond Myklebust, Will Deacon
Cc: Ryan Roberts, linux-arm-kernel, linux-kernel, linux-mm, linux-nfs
To prepare for supporting boot-time page size selection, refactor code
to remove assumptions about PAGE_SIZE being compile-time constant. Code
intended to be equivalent when compile-time page size is active.
Updated array sizes in various structs to contain enough entries for the
smallest supported page size.
Signed-off-by: Ryan Roberts <ryan.roberts@arm.com>
---
***NOTE***
Any confused maintainers may want to read the cover note here for context:
https://lore.kernel.org/all/20241014105514.3206191-1-ryan.roberts@arm.com/
include/linux/sunrpc/svc.h | 8 +++++---
include/linux/sunrpc/svc_rdma.h | 4 ++--
include/linux/sunrpc/svcsock.h | 2 +-
3 files changed, 8 insertions(+), 6 deletions(-)
diff --git a/include/linux/sunrpc/svc.h b/include/linux/sunrpc/svc.h
index a7d0406b9ef59..dda44018b8f36 100644
--- a/include/linux/sunrpc/svc.h
+++ b/include/linux/sunrpc/svc.h
@@ -160,6 +160,8 @@ extern u32 svc_max_payload(const struct svc_rqst *rqstp);
*/
#define RPCSVC_MAXPAGES ((RPCSVC_MAXPAYLOAD+PAGE_SIZE-1)/PAGE_SIZE \
+ 2 + 1)
+#define RPCSVC_MAXPAGES_MAX ((RPCSVC_MAXPAYLOAD+PAGE_SIZE_MIN-1)/PAGE_SIZE_MIN \
+ + 2 + 1)
/*
* The context of a single thread, including the request currently being
@@ -190,14 +192,14 @@ struct svc_rqst {
struct xdr_stream rq_res_stream;
struct page *rq_scratch_page;
struct xdr_buf rq_res;
- struct page *rq_pages[RPCSVC_MAXPAGES + 1];
+ struct page *rq_pages[RPCSVC_MAXPAGES_MAX + 1];
struct page * *rq_respages; /* points into rq_pages */
struct page * *rq_next_page; /* next reply page to use */
struct page * *rq_page_end; /* one past the last page */
struct folio_batch rq_fbatch;
- struct kvec rq_vec[RPCSVC_MAXPAGES]; /* generally useful.. */
- struct bio_vec rq_bvec[RPCSVC_MAXPAGES];
+ struct kvec rq_vec[RPCSVC_MAXPAGES_MAX]; /* generally useful.. */
+ struct bio_vec rq_bvec[RPCSVC_MAXPAGES_MAX];
__be32 rq_xid; /* transmission id */
u32 rq_prog; /* program number */
diff --git a/include/linux/sunrpc/svc_rdma.h b/include/linux/sunrpc/svc_rdma.h
index d33bab33099ab..7c6441e8d6f7a 100644
--- a/include/linux/sunrpc/svc_rdma.h
+++ b/include/linux/sunrpc/svc_rdma.h
@@ -200,7 +200,7 @@ struct svc_rdma_recv_ctxt {
struct svc_rdma_pcl rc_reply_pcl;
unsigned int rc_page_count;
- struct page *rc_pages[RPCSVC_MAXPAGES];
+ struct page *rc_pages[RPCSVC_MAXPAGES_MAX];
};
/*
@@ -242,7 +242,7 @@ struct svc_rdma_send_ctxt {
void *sc_xprt_buf;
int sc_page_count;
int sc_cur_sge_no;
- struct page *sc_pages[RPCSVC_MAXPAGES];
+ struct page *sc_pages[RPCSVC_MAXPAGES_MAX];
struct ib_sge sc_sges[];
};
diff --git a/include/linux/sunrpc/svcsock.h b/include/linux/sunrpc/svcsock.h
index 7c78ec6356b92..6c6bcc82685a3 100644
--- a/include/linux/sunrpc/svcsock.h
+++ b/include/linux/sunrpc/svcsock.h
@@ -40,7 +40,7 @@ struct svc_sock {
struct completion sk_handshake_done;
- struct page * sk_pages[RPCSVC_MAXPAGES]; /* received data */
+ struct page * sk_pages[RPCSVC_MAXPAGES_MAX]; /* received data */
};
static inline u32 svc_sock_reclen(struct svc_sock *svsk)
--
2.43.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [RFC PATCH v1 23/57] net: Remove PAGE_SIZE compile-time constant assumption
[not found] ` <20241014105912.3207374-1-ryan.roberts@arm.com>
2024-10-14 10:58 ` [RFC PATCH v1 09/57] fs/nfs: Remove PAGE_SIZE compile-time constant assumption Ryan Roberts
2024-10-14 10:58 ` [RFC PATCH v1 21/57] sunrpc: " Ryan Roberts
@ 2024-10-14 10:58 ` Ryan Roberts
2024-10-16 14:43 ` Ryan Roberts
2 siblings, 1 reply; 8+ messages in thread
From: Ryan Roberts @ 2024-10-14 10:58 UTC (permalink / raw)
To: David S. Miller, Andrew Morton, Anna Schumaker, Anshuman Khandual,
Ard Biesheuvel, Catalin Marinas, David Hildenbrand, Eric Dumazet,
Greg Marsden, Ivan Ivanov, Jakub Kicinski, Kalesh Singh,
Marc Zyngier, Mark Rutland, Matthias Brugger, Miroslav Benes,
Paolo Abeni, Trond Myklebust, Will Deacon
Cc: Ryan Roberts, linux-arm-kernel, linux-kernel, linux-mm, linux-nfs,
netdev
To prepare for supporting boot-time page size selection, refactor code
to remove assumptions about PAGE_SIZE being compile-time constant. Code
intended to be equivalent when compile-time page size is active.
Define NLMSG_GOODSIZE using min() instead of ifdeffery. This will now
evaluate to a compile-time constant for compile-time page size, but
evaluate at run-time when using boot-time page size.
Rework NAPI small page frag infrastructure so that for boot-time page
size it is compiled in if 4K page size is in the possible range, but
defer deciding to use it to run time when the page size is known. No
change for compile-time page size case.
Resize cache_defer_hash[] array for PAGE_SIZE_MAX.
Convert a complex BUILD_BUG_ON() to runtime BUG_ON().
Wrap global variables that are initialized with PAGE_SIZE derived values
using DEFINE_GLOBAL_PAGE_SIZE_VAR() so their initialization can be
deferred for boot-time page size builds.
Signed-off-by: Ryan Roberts <ryan.roberts@arm.com>
---
***NOTE***
Any confused maintainers may want to read the cover note here for context:
https://lore.kernel.org/all/20241014105514.3206191-1-ryan.roberts@arm.com/
include/linux/netlink.h | 6 +-----
net/core/hotdata.c | 4 ++--
net/core/skbuff.c | 4 ++--
net/core/sysctl_net_core.c | 2 +-
net/sunrpc/cache.c | 3 ++-
net/unix/af_unix.c | 2 +-
6 files changed, 9 insertions(+), 12 deletions(-)
diff --git a/include/linux/netlink.h b/include/linux/netlink.h
index b332c2048c755..ffa1e94111f89 100644
--- a/include/linux/netlink.h
+++ b/include/linux/netlink.h
@@ -267,11 +267,7 @@ netlink_skb_clone(struct sk_buff *skb, gfp_t gfp_mask)
* use enormous buffer sizes on recvmsg() calls just to avoid
* MSG_TRUNC when PAGE_SIZE is very large.
*/
-#if PAGE_SIZE < 8192UL
-#define NLMSG_GOODSIZE SKB_WITH_OVERHEAD(PAGE_SIZE)
-#else
-#define NLMSG_GOODSIZE SKB_WITH_OVERHEAD(8192UL)
-#endif
+#define NLMSG_GOODSIZE SKB_WITH_OVERHEAD(min(PAGE_SIZE, 8192UL))
#define NLMSG_DEFAULT_SIZE (NLMSG_GOODSIZE - NLMSG_HDRLEN)
diff --git a/net/core/hotdata.c b/net/core/hotdata.c
index d0aaaaa556f22..e1f30e87ba6e9 100644
--- a/net/core/hotdata.c
+++ b/net/core/hotdata.c
@@ -5,7 +5,7 @@
#include <net/hotdata.h>
#include <net/proto_memory.h>
-struct net_hotdata net_hotdata __cacheline_aligned = {
+__DEFINE_GLOBAL_PAGE_SIZE_VAR(struct net_hotdata, net_hotdata, __cacheline_aligned, {
.offload_base = LIST_HEAD_INIT(net_hotdata.offload_base),
.ptype_all = LIST_HEAD_INIT(net_hotdata.ptype_all),
.gro_normal_batch = 8,
@@ -21,5 +21,5 @@ struct net_hotdata net_hotdata __cacheline_aligned = {
.sysctl_max_skb_frags = MAX_SKB_FRAGS,
.sysctl_skb_defer_max = 64,
.sysctl_mem_pcpu_rsv = SK_MEMORY_PCPU_RESERVE
-};
+});
EXPORT_SYMBOL(net_hotdata);
diff --git a/net/core/skbuff.c b/net/core/skbuff.c
index 83f8cd8aa2d16..b6c8eee0cc74b 100644
--- a/net/core/skbuff.c
+++ b/net/core/skbuff.c
@@ -219,9 +219,9 @@ static void skb_under_panic(struct sk_buff *skb, unsigned int sz, void *addr)
#define NAPI_SKB_CACHE_BULK 16
#define NAPI_SKB_CACHE_HALF (NAPI_SKB_CACHE_SIZE / 2)
-#if PAGE_SIZE == SZ_4K
+#if PAGE_SIZE_MIN <= SZ_4K && SZ_4K <= PAGE_SIZE_MAX
-#define NAPI_HAS_SMALL_PAGE_FRAG 1
+#define NAPI_HAS_SMALL_PAGE_FRAG (PAGE_SIZE == SZ_4K)
#define NAPI_SMALL_PAGE_PFMEMALLOC(nc) ((nc).pfmemalloc)
/* specialized page frag allocator using a single order 0 page
diff --git a/net/core/sysctl_net_core.c b/net/core/sysctl_net_core.c
index 86a2476678c48..a7a2eb7581bd1 100644
--- a/net/core/sysctl_net_core.c
+++ b/net/core/sysctl_net_core.c
@@ -33,7 +33,7 @@ static int int_3600 = 3600;
static int min_sndbuf = SOCK_MIN_SNDBUF;
static int min_rcvbuf = SOCK_MIN_RCVBUF;
static int max_skb_frags = MAX_SKB_FRAGS;
-static int min_mem_pcpu_rsv = SK_MEMORY_PCPU_RESERVE;
+static DEFINE_GLOBAL_PAGE_SIZE_VAR(int, min_mem_pcpu_rsv, SK_MEMORY_PCPU_RESERVE);
static int net_msg_warn; /* Unused, but still a sysctl */
diff --git a/net/sunrpc/cache.c b/net/sunrpc/cache.c
index 95ff747061046..4e682c0cd7586 100644
--- a/net/sunrpc/cache.c
+++ b/net/sunrpc/cache.c
@@ -573,13 +573,14 @@ EXPORT_SYMBOL_GPL(cache_purge);
*/
#define DFR_HASHSIZE (PAGE_SIZE/sizeof(struct list_head))
+#define DFR_HASHSIZE_MAX (PAGE_SIZE_MAX/sizeof(struct list_head))
#define DFR_HASH(item) ((((long)item)>>4 ^ (((long)item)>>13)) % DFR_HASHSIZE)
#define DFR_MAX 300 /* ??? */
static DEFINE_SPINLOCK(cache_defer_lock);
static LIST_HEAD(cache_defer_list);
-static struct hlist_head cache_defer_hash[DFR_HASHSIZE];
+static struct hlist_head cache_defer_hash[DFR_HASHSIZE_MAX];
static int cache_defer_cnt;
static void __unhash_deferred_req(struct cache_deferred_req *dreq)
diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c
index 0be0dcb07f7b6..1cf9f583358af 100644
--- a/net/unix/af_unix.c
+++ b/net/unix/af_unix.c
@@ -2024,7 +2024,7 @@ static int unix_dgram_sendmsg(struct socket *sock, struct msghdr *msg,
MAX_SKB_FRAGS * PAGE_SIZE);
data_len = PAGE_ALIGN(data_len);
- BUILD_BUG_ON(SKB_MAX_ALLOC < PAGE_SIZE);
+ BUG_ON(SKB_MAX_ALLOC < PAGE_SIZE);
}
skb = sock_alloc_send_pskb(sk, len - data_len, data_len,
--
2.43.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [RFC PATCH v1 21/57] sunrpc: Remove PAGE_SIZE compile-time constant assumption
2024-10-14 10:58 ` [RFC PATCH v1 21/57] sunrpc: " Ryan Roberts
@ 2024-10-16 14:42 ` Ryan Roberts
2024-10-16 14:47 ` Chuck Lever
0 siblings, 1 reply; 8+ messages in thread
From: Ryan Roberts @ 2024-10-16 14:42 UTC (permalink / raw)
To: Andrew Morton, Anna Schumaker, Anshuman Khandual, Ard Biesheuvel,
Catalin Marinas, David Hildenbrand, Greg Marsden, Ivan Ivanov,
Kalesh Singh, Marc Zyngier, Mark Rutland, Matthias Brugger,
Miroslav Benes, Trond Myklebust, Will Deacon, Chuck Lever,
Jeff Layton
Cc: linux-arm-kernel, linux-kernel, linux-mm, linux-nfs
+ Chuck Lever, Jeff Layton
This was a rather tricky series to get the recipients correct for and my script
did not realize that "supporter" was a pseudonym for "maintainer" so you were
missed off the original post. Appologies!
More context in cover letter:
https://lore.kernel.org/all/20241014105514.3206191-1-ryan.roberts@arm.com/
On 14/10/2024 11:58, Ryan Roberts wrote:
> To prepare for supporting boot-time page size selection, refactor code
> to remove assumptions about PAGE_SIZE being compile-time constant. Code
> intended to be equivalent when compile-time page size is active.
>
> Updated array sizes in various structs to contain enough entries for the
> smallest supported page size.
>
> Signed-off-by: Ryan Roberts <ryan.roberts@arm.com>
> ---
>
> ***NOTE***
> Any confused maintainers may want to read the cover note here for context:
> https://lore.kernel.org/all/20241014105514.3206191-1-ryan.roberts@arm.com/
>
> include/linux/sunrpc/svc.h | 8 +++++---
> include/linux/sunrpc/svc_rdma.h | 4 ++--
> include/linux/sunrpc/svcsock.h | 2 +-
> 3 files changed, 8 insertions(+), 6 deletions(-)
>
> diff --git a/include/linux/sunrpc/svc.h b/include/linux/sunrpc/svc.h
> index a7d0406b9ef59..dda44018b8f36 100644
> --- a/include/linux/sunrpc/svc.h
> +++ b/include/linux/sunrpc/svc.h
> @@ -160,6 +160,8 @@ extern u32 svc_max_payload(const struct svc_rqst *rqstp);
> */
> #define RPCSVC_MAXPAGES ((RPCSVC_MAXPAYLOAD+PAGE_SIZE-1)/PAGE_SIZE \
> + 2 + 1)
> +#define RPCSVC_MAXPAGES_MAX ((RPCSVC_MAXPAYLOAD+PAGE_SIZE_MIN-1)/PAGE_SIZE_MIN \
> + + 2 + 1)
>
> /*
> * The context of a single thread, including the request currently being
> @@ -190,14 +192,14 @@ struct svc_rqst {
> struct xdr_stream rq_res_stream;
> struct page *rq_scratch_page;
> struct xdr_buf rq_res;
> - struct page *rq_pages[RPCSVC_MAXPAGES + 1];
> + struct page *rq_pages[RPCSVC_MAXPAGES_MAX + 1];
> struct page * *rq_respages; /* points into rq_pages */
> struct page * *rq_next_page; /* next reply page to use */
> struct page * *rq_page_end; /* one past the last page */
>
> struct folio_batch rq_fbatch;
> - struct kvec rq_vec[RPCSVC_MAXPAGES]; /* generally useful.. */
> - struct bio_vec rq_bvec[RPCSVC_MAXPAGES];
> + struct kvec rq_vec[RPCSVC_MAXPAGES_MAX]; /* generally useful.. */
> + struct bio_vec rq_bvec[RPCSVC_MAXPAGES_MAX];
>
> __be32 rq_xid; /* transmission id */
> u32 rq_prog; /* program number */
> diff --git a/include/linux/sunrpc/svc_rdma.h b/include/linux/sunrpc/svc_rdma.h
> index d33bab33099ab..7c6441e8d6f7a 100644
> --- a/include/linux/sunrpc/svc_rdma.h
> +++ b/include/linux/sunrpc/svc_rdma.h
> @@ -200,7 +200,7 @@ struct svc_rdma_recv_ctxt {
> struct svc_rdma_pcl rc_reply_pcl;
>
> unsigned int rc_page_count;
> - struct page *rc_pages[RPCSVC_MAXPAGES];
> + struct page *rc_pages[RPCSVC_MAXPAGES_MAX];
> };
>
> /*
> @@ -242,7 +242,7 @@ struct svc_rdma_send_ctxt {
> void *sc_xprt_buf;
> int sc_page_count;
> int sc_cur_sge_no;
> - struct page *sc_pages[RPCSVC_MAXPAGES];
> + struct page *sc_pages[RPCSVC_MAXPAGES_MAX];
> struct ib_sge sc_sges[];
> };
>
> diff --git a/include/linux/sunrpc/svcsock.h b/include/linux/sunrpc/svcsock.h
> index 7c78ec6356b92..6c6bcc82685a3 100644
> --- a/include/linux/sunrpc/svcsock.h
> +++ b/include/linux/sunrpc/svcsock.h
> @@ -40,7 +40,7 @@ struct svc_sock {
>
> struct completion sk_handshake_done;
>
> - struct page * sk_pages[RPCSVC_MAXPAGES]; /* received data */
> + struct page * sk_pages[RPCSVC_MAXPAGES_MAX]; /* received data */
> };
>
> static inline u32 svc_sock_reclen(struct svc_sock *svsk)
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [RFC PATCH v1 23/57] net: Remove PAGE_SIZE compile-time constant assumption
2024-10-14 10:58 ` [RFC PATCH v1 23/57] net: " Ryan Roberts
@ 2024-10-16 14:43 ` Ryan Roberts
0 siblings, 0 replies; 8+ messages in thread
From: Ryan Roberts @ 2024-10-16 14:43 UTC (permalink / raw)
To: David S. Miller, Andrew Morton, Anna Schumaker, Anshuman Khandual,
Ard Biesheuvel, Catalin Marinas, David Hildenbrand, Eric Dumazet,
Greg Marsden, Ivan Ivanov, Jakub Kicinski, Kalesh Singh,
Marc Zyngier, Mark Rutland, Matthias Brugger, Miroslav Benes,
Paolo Abeni, Trond Myklebust, Will Deacon, Chuck Lever,
Jeff Layton
Cc: linux-arm-kernel, linux-kernel, linux-mm, linux-nfs, netdev
+ Chuck Lever, Jeff Layton
This was a rather tricky series to get the recipients correct for and my script
did not realize that "supporter" was a pseudonym for "maintainer" so you were
missed off the original post. Appologies!
More context in cover letter:
https://lore.kernel.org/all/20241014105514.3206191-1-ryan.roberts@arm.com/
On 14/10/2024 11:58, Ryan Roberts wrote:
> To prepare for supporting boot-time page size selection, refactor code
> to remove assumptions about PAGE_SIZE being compile-time constant. Code
> intended to be equivalent when compile-time page size is active.
>
> Define NLMSG_GOODSIZE using min() instead of ifdeffery. This will now
> evaluate to a compile-time constant for compile-time page size, but
> evaluate at run-time when using boot-time page size.
>
> Rework NAPI small page frag infrastructure so that for boot-time page
> size it is compiled in if 4K page size is in the possible range, but
> defer deciding to use it to run time when the page size is known. No
> change for compile-time page size case.
>
> Resize cache_defer_hash[] array for PAGE_SIZE_MAX.
>
> Convert a complex BUILD_BUG_ON() to runtime BUG_ON().
>
> Wrap global variables that are initialized with PAGE_SIZE derived values
> using DEFINE_GLOBAL_PAGE_SIZE_VAR() so their initialization can be
> deferred for boot-time page size builds.
>
> Signed-off-by: Ryan Roberts <ryan.roberts@arm.com>
> ---
>
> ***NOTE***
> Any confused maintainers may want to read the cover note here for context:
> https://lore.kernel.org/all/20241014105514.3206191-1-ryan.roberts@arm.com/
>
> include/linux/netlink.h | 6 +-----
> net/core/hotdata.c | 4 ++--
> net/core/skbuff.c | 4 ++--
> net/core/sysctl_net_core.c | 2 +-
> net/sunrpc/cache.c | 3 ++-
> net/unix/af_unix.c | 2 +-
> 6 files changed, 9 insertions(+), 12 deletions(-)
>
> diff --git a/include/linux/netlink.h b/include/linux/netlink.h
> index b332c2048c755..ffa1e94111f89 100644
> --- a/include/linux/netlink.h
> +++ b/include/linux/netlink.h
> @@ -267,11 +267,7 @@ netlink_skb_clone(struct sk_buff *skb, gfp_t gfp_mask)
> * use enormous buffer sizes on recvmsg() calls just to avoid
> * MSG_TRUNC when PAGE_SIZE is very large.
> */
> -#if PAGE_SIZE < 8192UL
> -#define NLMSG_GOODSIZE SKB_WITH_OVERHEAD(PAGE_SIZE)
> -#else
> -#define NLMSG_GOODSIZE SKB_WITH_OVERHEAD(8192UL)
> -#endif
> +#define NLMSG_GOODSIZE SKB_WITH_OVERHEAD(min(PAGE_SIZE, 8192UL))
>
> #define NLMSG_DEFAULT_SIZE (NLMSG_GOODSIZE - NLMSG_HDRLEN)
>
> diff --git a/net/core/hotdata.c b/net/core/hotdata.c
> index d0aaaaa556f22..e1f30e87ba6e9 100644
> --- a/net/core/hotdata.c
> +++ b/net/core/hotdata.c
> @@ -5,7 +5,7 @@
> #include <net/hotdata.h>
> #include <net/proto_memory.h>
>
> -struct net_hotdata net_hotdata __cacheline_aligned = {
> +__DEFINE_GLOBAL_PAGE_SIZE_VAR(struct net_hotdata, net_hotdata, __cacheline_aligned, {
> .offload_base = LIST_HEAD_INIT(net_hotdata.offload_base),
> .ptype_all = LIST_HEAD_INIT(net_hotdata.ptype_all),
> .gro_normal_batch = 8,
> @@ -21,5 +21,5 @@ struct net_hotdata net_hotdata __cacheline_aligned = {
> .sysctl_max_skb_frags = MAX_SKB_FRAGS,
> .sysctl_skb_defer_max = 64,
> .sysctl_mem_pcpu_rsv = SK_MEMORY_PCPU_RESERVE
> -};
> +});
> EXPORT_SYMBOL(net_hotdata);
> diff --git a/net/core/skbuff.c b/net/core/skbuff.c
> index 83f8cd8aa2d16..b6c8eee0cc74b 100644
> --- a/net/core/skbuff.c
> +++ b/net/core/skbuff.c
> @@ -219,9 +219,9 @@ static void skb_under_panic(struct sk_buff *skb, unsigned int sz, void *addr)
> #define NAPI_SKB_CACHE_BULK 16
> #define NAPI_SKB_CACHE_HALF (NAPI_SKB_CACHE_SIZE / 2)
>
> -#if PAGE_SIZE == SZ_4K
> +#if PAGE_SIZE_MIN <= SZ_4K && SZ_4K <= PAGE_SIZE_MAX
>
> -#define NAPI_HAS_SMALL_PAGE_FRAG 1
> +#define NAPI_HAS_SMALL_PAGE_FRAG (PAGE_SIZE == SZ_4K)
> #define NAPI_SMALL_PAGE_PFMEMALLOC(nc) ((nc).pfmemalloc)
>
> /* specialized page frag allocator using a single order 0 page
> diff --git a/net/core/sysctl_net_core.c b/net/core/sysctl_net_core.c
> index 86a2476678c48..a7a2eb7581bd1 100644
> --- a/net/core/sysctl_net_core.c
> +++ b/net/core/sysctl_net_core.c
> @@ -33,7 +33,7 @@ static int int_3600 = 3600;
> static int min_sndbuf = SOCK_MIN_SNDBUF;
> static int min_rcvbuf = SOCK_MIN_RCVBUF;
> static int max_skb_frags = MAX_SKB_FRAGS;
> -static int min_mem_pcpu_rsv = SK_MEMORY_PCPU_RESERVE;
> +static DEFINE_GLOBAL_PAGE_SIZE_VAR(int, min_mem_pcpu_rsv, SK_MEMORY_PCPU_RESERVE);
>
> static int net_msg_warn; /* Unused, but still a sysctl */
>
> diff --git a/net/sunrpc/cache.c b/net/sunrpc/cache.c
> index 95ff747061046..4e682c0cd7586 100644
> --- a/net/sunrpc/cache.c
> +++ b/net/sunrpc/cache.c
> @@ -573,13 +573,14 @@ EXPORT_SYMBOL_GPL(cache_purge);
> */
>
> #define DFR_HASHSIZE (PAGE_SIZE/sizeof(struct list_head))
> +#define DFR_HASHSIZE_MAX (PAGE_SIZE_MAX/sizeof(struct list_head))
> #define DFR_HASH(item) ((((long)item)>>4 ^ (((long)item)>>13)) % DFR_HASHSIZE)
>
> #define DFR_MAX 300 /* ??? */
>
> static DEFINE_SPINLOCK(cache_defer_lock);
> static LIST_HEAD(cache_defer_list);
> -static struct hlist_head cache_defer_hash[DFR_HASHSIZE];
> +static struct hlist_head cache_defer_hash[DFR_HASHSIZE_MAX];
> static int cache_defer_cnt;
>
> static void __unhash_deferred_req(struct cache_deferred_req *dreq)
> diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c
> index 0be0dcb07f7b6..1cf9f583358af 100644
> --- a/net/unix/af_unix.c
> +++ b/net/unix/af_unix.c
> @@ -2024,7 +2024,7 @@ static int unix_dgram_sendmsg(struct socket *sock, struct msghdr *msg,
> MAX_SKB_FRAGS * PAGE_SIZE);
> data_len = PAGE_ALIGN(data_len);
>
> - BUILD_BUG_ON(SKB_MAX_ALLOC < PAGE_SIZE);
> + BUG_ON(SKB_MAX_ALLOC < PAGE_SIZE);
> }
>
> skb = sock_alloc_send_pskb(sk, len - data_len, data_len,
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [RFC PATCH v1 21/57] sunrpc: Remove PAGE_SIZE compile-time constant assumption
2024-10-16 14:42 ` Ryan Roberts
@ 2024-10-16 14:47 ` Chuck Lever
2024-10-16 14:54 ` Jeff Layton
0 siblings, 1 reply; 8+ messages in thread
From: Chuck Lever @ 2024-10-16 14:47 UTC (permalink / raw)
To: Ryan Roberts
Cc: Andrew Morton, Anna Schumaker, Anshuman Khandual, Ard Biesheuvel,
Catalin Marinas, David Hildenbrand, Greg Marsden, Ivan Ivanov,
Kalesh Singh, Marc Zyngier, Mark Rutland, Matthias Brugger,
Miroslav Benes, Trond Myklebust, Will Deacon, Jeff Layton,
linux-arm-kernel, linux-kernel, linux-mm, linux-nfs
On Wed, Oct 16, 2024 at 03:42:12PM +0100, Ryan Roberts wrote:
> + Chuck Lever, Jeff Layton
>
> This was a rather tricky series to get the recipients correct for and my script
> did not realize that "supporter" was a pseudonym for "maintainer" so you were
> missed off the original post. Appologies!
>
> More context in cover letter:
> https://lore.kernel.org/all/20241014105514.3206191-1-ryan.roberts@arm.com/
>
>
> On 14/10/2024 11:58, Ryan Roberts wrote:
> > To prepare for supporting boot-time page size selection, refactor code
> > to remove assumptions about PAGE_SIZE being compile-time constant. Code
> > intended to be equivalent when compile-time page size is active.
> >
> > Updated array sizes in various structs to contain enough entries for the
> > smallest supported page size.
> >
> > Signed-off-by: Ryan Roberts <ryan.roberts@arm.com>
> > ---
> >
> > ***NOTE***
> > Any confused maintainers may want to read the cover note here for context:
> > https://lore.kernel.org/all/20241014105514.3206191-1-ryan.roberts@arm.com/
> >
> > include/linux/sunrpc/svc.h | 8 +++++---
> > include/linux/sunrpc/svc_rdma.h | 4 ++--
> > include/linux/sunrpc/svcsock.h | 2 +-
> > 3 files changed, 8 insertions(+), 6 deletions(-)
> >
> > diff --git a/include/linux/sunrpc/svc.h b/include/linux/sunrpc/svc.h
> > index a7d0406b9ef59..dda44018b8f36 100644
> > --- a/include/linux/sunrpc/svc.h
> > +++ b/include/linux/sunrpc/svc.h
> > @@ -160,6 +160,8 @@ extern u32 svc_max_payload(const struct svc_rqst *rqstp);
> > */
> > #define RPCSVC_MAXPAGES ((RPCSVC_MAXPAYLOAD+PAGE_SIZE-1)/PAGE_SIZE \
> > + 2 + 1)
> > +#define RPCSVC_MAXPAGES_MAX ((RPCSVC_MAXPAYLOAD+PAGE_SIZE_MIN-1)/PAGE_SIZE_MIN \
> > + + 2 + 1)
There is already a "MAX" in the name, so adding this new macro seems
superfluous to me. Can we get away with simply updating the
"RPCSVC_MAXPAGES" macro, instead of adding this new one?
> > /*
> > * The context of a single thread, including the request currently being
> > @@ -190,14 +192,14 @@ struct svc_rqst {
> > struct xdr_stream rq_res_stream;
> > struct page *rq_scratch_page;
> > struct xdr_buf rq_res;
> > - struct page *rq_pages[RPCSVC_MAXPAGES + 1];
> > + struct page *rq_pages[RPCSVC_MAXPAGES_MAX + 1];
> > struct page * *rq_respages; /* points into rq_pages */
> > struct page * *rq_next_page; /* next reply page to use */
> > struct page * *rq_page_end; /* one past the last page */
> >
> > struct folio_batch rq_fbatch;
> > - struct kvec rq_vec[RPCSVC_MAXPAGES]; /* generally useful.. */
> > - struct bio_vec rq_bvec[RPCSVC_MAXPAGES];
> > + struct kvec rq_vec[RPCSVC_MAXPAGES_MAX]; /* generally useful.. */
> > + struct bio_vec rq_bvec[RPCSVC_MAXPAGES_MAX];
> >
> > __be32 rq_xid; /* transmission id */
> > u32 rq_prog; /* program number */
> > diff --git a/include/linux/sunrpc/svc_rdma.h b/include/linux/sunrpc/svc_rdma.h
> > index d33bab33099ab..7c6441e8d6f7a 100644
> > --- a/include/linux/sunrpc/svc_rdma.h
> > +++ b/include/linux/sunrpc/svc_rdma.h
> > @@ -200,7 +200,7 @@ struct svc_rdma_recv_ctxt {
> > struct svc_rdma_pcl rc_reply_pcl;
> >
> > unsigned int rc_page_count;
> > - struct page *rc_pages[RPCSVC_MAXPAGES];
> > + struct page *rc_pages[RPCSVC_MAXPAGES_MAX];
> > };
> >
> > /*
> > @@ -242,7 +242,7 @@ struct svc_rdma_send_ctxt {
> > void *sc_xprt_buf;
> > int sc_page_count;
> > int sc_cur_sge_no;
> > - struct page *sc_pages[RPCSVC_MAXPAGES];
> > + struct page *sc_pages[RPCSVC_MAXPAGES_MAX];
> > struct ib_sge sc_sges[];
> > };
> >
> > diff --git a/include/linux/sunrpc/svcsock.h b/include/linux/sunrpc/svcsock.h
> > index 7c78ec6356b92..6c6bcc82685a3 100644
> > --- a/include/linux/sunrpc/svcsock.h
> > +++ b/include/linux/sunrpc/svcsock.h
> > @@ -40,7 +40,7 @@ struct svc_sock {
> >
> > struct completion sk_handshake_done;
> >
> > - struct page * sk_pages[RPCSVC_MAXPAGES]; /* received data */
> > + struct page * sk_pages[RPCSVC_MAXPAGES_MAX]; /* received data */
> > };
> >
> > static inline u32 svc_sock_reclen(struct svc_sock *svsk)
>
--
Chuck Lever
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [RFC PATCH v1 21/57] sunrpc: Remove PAGE_SIZE compile-time constant assumption
2024-10-16 14:47 ` Chuck Lever
@ 2024-10-16 14:54 ` Jeff Layton
2024-10-16 15:09 ` Ryan Roberts
0 siblings, 1 reply; 8+ messages in thread
From: Jeff Layton @ 2024-10-16 14:54 UTC (permalink / raw)
To: Chuck Lever, Ryan Roberts
Cc: Andrew Morton, Anna Schumaker, Anshuman Khandual, Ard Biesheuvel,
Catalin Marinas, David Hildenbrand, Greg Marsden, Ivan Ivanov,
Kalesh Singh, Marc Zyngier, Mark Rutland, Matthias Brugger,
Miroslav Benes, Trond Myklebust, Will Deacon, linux-arm-kernel,
linux-kernel, linux-mm, linux-nfs
On Wed, 2024-10-16 at 10:47 -0400, Chuck Lever wrote:
> On Wed, Oct 16, 2024 at 03:42:12PM +0100, Ryan Roberts wrote:
> > + Chuck Lever, Jeff Layton
> >
> > This was a rather tricky series to get the recipients correct for and my script
> > did not realize that "supporter" was a pseudonym for "maintainer" so you were
> > missed off the original post. Appologies!
> >
> > More context in cover letter:
> > https://lore.kernel.org/all/20241014105514.3206191-1-ryan.roberts@arm.com/
> >
> >
> > On 14/10/2024 11:58, Ryan Roberts wrote:
> > > To prepare for supporting boot-time page size selection, refactor code
> > > to remove assumptions about PAGE_SIZE being compile-time constant. Code
> > > intended to be equivalent when compile-time page size is active.
> > >
> > > Updated array sizes in various structs to contain enough entries for the
> > > smallest supported page size.
> > >
> > > Signed-off-by: Ryan Roberts <ryan.roberts@arm.com>
> > > ---
> > >
> > > ***NOTE***
> > > Any confused maintainers may want to read the cover note here for context:
> > > https://lore.kernel.org/all/20241014105514.3206191-1-ryan.roberts@arm.com/
> > >
> > > include/linux/sunrpc/svc.h | 8 +++++---
> > > include/linux/sunrpc/svc_rdma.h | 4 ++--
> > > include/linux/sunrpc/svcsock.h | 2 +-
> > > 3 files changed, 8 insertions(+), 6 deletions(-)
> > >
> > > diff --git a/include/linux/sunrpc/svc.h b/include/linux/sunrpc/svc.h
> > > index a7d0406b9ef59..dda44018b8f36 100644
> > > --- a/include/linux/sunrpc/svc.h
> > > +++ b/include/linux/sunrpc/svc.h
> > > @@ -160,6 +160,8 @@ extern u32 svc_max_payload(const struct svc_rqst *rqstp);
> > > */
> > > #define RPCSVC_MAXPAGES ((RPCSVC_MAXPAYLOAD+PAGE_SIZE-1)/PAGE_SIZE \
> > > + 2 + 1)
> > > +#define RPCSVC_MAXPAGES_MAX ((RPCSVC_MAXPAYLOAD+PAGE_SIZE_MIN-1)/PAGE_SIZE_MIN \
> > > + + 2 + 1)
>
> There is already a "MAX" in the name, so adding this new macro seems
> superfluous to me. Can we get away with simply updating the
> "RPCSVC_MAXPAGES" macro, instead of adding this new one?
>
+1 that was my thinking too. This is mostly just used to size arrays,
so we might as well just change the existing macro.
With 64k pages we probably wouldn't need arrays as long as these will
be. Fixing those array sizes to be settable at runtime though is not a
trivial project though.
>
> > > /*
> > > * The context of a single thread, including the request currently being
> > > @@ -190,14 +192,14 @@ struct svc_rqst {
> > > struct xdr_stream rq_res_stream;
> > > struct page *rq_scratch_page;
> > > struct xdr_buf rq_res;
> > > - struct page *rq_pages[RPCSVC_MAXPAGES + 1];
> > > + struct page *rq_pages[RPCSVC_MAXPAGES_MAX + 1];
> > > struct page * *rq_respages; /* points into rq_pages */
> > > struct page * *rq_next_page; /* next reply page to use */
> > > struct page * *rq_page_end; /* one past the last page */
> > >
> > > struct folio_batch rq_fbatch;
> > > - struct kvec rq_vec[RPCSVC_MAXPAGES]; /* generally useful.. */
> > > - struct bio_vec rq_bvec[RPCSVC_MAXPAGES];
> > > + struct kvec rq_vec[RPCSVC_MAXPAGES_MAX]; /* generally useful.. */
> > > + struct bio_vec rq_bvec[RPCSVC_MAXPAGES_MAX];
> > >
> > > __be32 rq_xid; /* transmission id */
> > > u32 rq_prog; /* program number */
> > > diff --git a/include/linux/sunrpc/svc_rdma.h b/include/linux/sunrpc/svc_rdma.h
> > > index d33bab33099ab..7c6441e8d6f7a 100644
> > > --- a/include/linux/sunrpc/svc_rdma.h
> > > +++ b/include/linux/sunrpc/svc_rdma.h
> > > @@ -200,7 +200,7 @@ struct svc_rdma_recv_ctxt {
> > > struct svc_rdma_pcl rc_reply_pcl;
> > >
> > > unsigned int rc_page_count;
> > > - struct page *rc_pages[RPCSVC_MAXPAGES];
> > > + struct page *rc_pages[RPCSVC_MAXPAGES_MAX];
> > > };
> > >
> > > /*
> > > @@ -242,7 +242,7 @@ struct svc_rdma_send_ctxt {
> > > void *sc_xprt_buf;
> > > int sc_page_count;
> > > int sc_cur_sge_no;
> > > - struct page *sc_pages[RPCSVC_MAXPAGES];
> > > + struct page *sc_pages[RPCSVC_MAXPAGES_MAX];
> > > struct ib_sge sc_sges[];
> > > };
> > >
> > > diff --git a/include/linux/sunrpc/svcsock.h b/include/linux/sunrpc/svcsock.h
> > > index 7c78ec6356b92..6c6bcc82685a3 100644
> > > --- a/include/linux/sunrpc/svcsock.h
> > > +++ b/include/linux/sunrpc/svcsock.h
> > > @@ -40,7 +40,7 @@ struct svc_sock {
> > >
> > > struct completion sk_handshake_done;
> > >
> > > - struct page * sk_pages[RPCSVC_MAXPAGES]; /* received data */
> > > + struct page * sk_pages[RPCSVC_MAXPAGES_MAX]; /* received data */
> > > };
> > >
> > > static inline u32 svc_sock_reclen(struct svc_sock *svsk)
> >
>
--
Jeff Layton <jlayton@kernel.org>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [RFC PATCH v1 21/57] sunrpc: Remove PAGE_SIZE compile-time constant assumption
2024-10-16 14:54 ` Jeff Layton
@ 2024-10-16 15:09 ` Ryan Roberts
0 siblings, 0 replies; 8+ messages in thread
From: Ryan Roberts @ 2024-10-16 15:09 UTC (permalink / raw)
To: Jeff Layton, Chuck Lever
Cc: Andrew Morton, Anna Schumaker, Anshuman Khandual, Ard Biesheuvel,
Catalin Marinas, David Hildenbrand, Greg Marsden, Ivan Ivanov,
Kalesh Singh, Marc Zyngier, Mark Rutland, Matthias Brugger,
Miroslav Benes, Trond Myklebust, Will Deacon, linux-arm-kernel,
linux-kernel, linux-mm, linux-nfs
On 16/10/2024 15:54, Jeff Layton wrote:
> On Wed, 2024-10-16 at 10:47 -0400, Chuck Lever wrote:
>> On Wed, Oct 16, 2024 at 03:42:12PM +0100, Ryan Roberts wrote:
>>> + Chuck Lever, Jeff Layton
>>>
>>> This was a rather tricky series to get the recipients correct for and my script
>>> did not realize that "supporter" was a pseudonym for "maintainer" so you were
>>> missed off the original post. Appologies!
>>>
>>> More context in cover letter:
>>> https://lore.kernel.org/all/20241014105514.3206191-1-ryan.roberts@arm.com/
>>>
>>>
>>> On 14/10/2024 11:58, Ryan Roberts wrote:
>>>> To prepare for supporting boot-time page size selection, refactor code
>>>> to remove assumptions about PAGE_SIZE being compile-time constant. Code
>>>> intended to be equivalent when compile-time page size is active.
>>>>
>>>> Updated array sizes in various structs to contain enough entries for the
>>>> smallest supported page size.
>>>>
>>>> Signed-off-by: Ryan Roberts <ryan.roberts@arm.com>
>>>> ---
>>>>
>>>> ***NOTE***
>>>> Any confused maintainers may want to read the cover note here for context:
>>>> https://lore.kernel.org/all/20241014105514.3206191-1-ryan.roberts@arm.com/
>>>>
>>>> include/linux/sunrpc/svc.h | 8 +++++---
>>>> include/linux/sunrpc/svc_rdma.h | 4 ++--
>>>> include/linux/sunrpc/svcsock.h | 2 +-
>>>> 3 files changed, 8 insertions(+), 6 deletions(-)
>>>>
>>>> diff --git a/include/linux/sunrpc/svc.h b/include/linux/sunrpc/svc.h
>>>> index a7d0406b9ef59..dda44018b8f36 100644
>>>> --- a/include/linux/sunrpc/svc.h
>>>> +++ b/include/linux/sunrpc/svc.h
>>>> @@ -160,6 +160,8 @@ extern u32 svc_max_payload(const struct svc_rqst *rqstp);
>>>> */
>>>> #define RPCSVC_MAXPAGES ((RPCSVC_MAXPAYLOAD+PAGE_SIZE-1)/PAGE_SIZE \
>>>> + 2 + 1)
>>>> +#define RPCSVC_MAXPAGES_MAX ((RPCSVC_MAXPAYLOAD+PAGE_SIZE_MIN-1)/PAGE_SIZE_MIN \
>>>> + + 2 + 1)
>>
>> There is already a "MAX" in the name, so adding this new macro seems
>> superfluous to me. Can we get away with simply updating the
>> "RPCSVC_MAXPAGES" macro, instead of adding this new one?
>>
>
> +1 that was my thinking too. This is mostly just used to size arrays,
> so we might as well just change the existing macro.
I agree, its not the prettiest. I was (incorrectly) assuming you would want to
continue to limit the number of actual pages at runtime based on the in-use page
size. That said, looking again at the code, RPCSVC_MAXPAGES never actually gets
used to dynamically allocate any memory. So I propose to just do the following:
#define RPCSVC_MAXPAGES ((RPCSVC_MAXPAYLOAD+PAGE_SIZE_MIN-1)/
PAGE_SIZE_MIN + 2 + 1)
That will be 259 in practice (assuming PAGE_SIZE_MIN=4K).
>
> With 64k pages we probably wouldn't need arrays as long as these will
> be. Fixing those array sizes to be settable at runtime though is not a
> trivial project though.
Indeed. Hopefully the above is sufficient.
Thanks for the review!
Ryan
>
>>
>>>> /*
>>>> * The context of a single thread, including the request currently being
>>>> @@ -190,14 +192,14 @@ struct svc_rqst {
>>>> struct xdr_stream rq_res_stream;
>>>> struct page *rq_scratch_page;
>>>> struct xdr_buf rq_res;
>>>> - struct page *rq_pages[RPCSVC_MAXPAGES + 1];
>>>> + struct page *rq_pages[RPCSVC_MAXPAGES_MAX + 1];
>>>> struct page * *rq_respages; /* points into rq_pages */
>>>> struct page * *rq_next_page; /* next reply page to use */
>>>> struct page * *rq_page_end; /* one past the last page */
>>>>
>>>> struct folio_batch rq_fbatch;
>>>> - struct kvec rq_vec[RPCSVC_MAXPAGES]; /* generally useful.. */
>>>> - struct bio_vec rq_bvec[RPCSVC_MAXPAGES];
>>>> + struct kvec rq_vec[RPCSVC_MAXPAGES_MAX]; /* generally useful.. */
>>>> + struct bio_vec rq_bvec[RPCSVC_MAXPAGES_MAX];
>>>>
>>>> __be32 rq_xid; /* transmission id */
>>>> u32 rq_prog; /* program number */
>>>> diff --git a/include/linux/sunrpc/svc_rdma.h b/include/linux/sunrpc/svc_rdma.h
>>>> index d33bab33099ab..7c6441e8d6f7a 100644
>>>> --- a/include/linux/sunrpc/svc_rdma.h
>>>> +++ b/include/linux/sunrpc/svc_rdma.h
>>>> @@ -200,7 +200,7 @@ struct svc_rdma_recv_ctxt {
>>>> struct svc_rdma_pcl rc_reply_pcl;
>>>>
>>>> unsigned int rc_page_count;
>>>> - struct page *rc_pages[RPCSVC_MAXPAGES];
>>>> + struct page *rc_pages[RPCSVC_MAXPAGES_MAX];
>>>> };
>>>>
>>>> /*
>>>> @@ -242,7 +242,7 @@ struct svc_rdma_send_ctxt {
>>>> void *sc_xprt_buf;
>>>> int sc_page_count;
>>>> int sc_cur_sge_no;
>>>> - struct page *sc_pages[RPCSVC_MAXPAGES];
>>>> + struct page *sc_pages[RPCSVC_MAXPAGES_MAX];
>>>> struct ib_sge sc_sges[];
>>>> };
>>>>
>>>> diff --git a/include/linux/sunrpc/svcsock.h b/include/linux/sunrpc/svcsock.h
>>>> index 7c78ec6356b92..6c6bcc82685a3 100644
>>>> --- a/include/linux/sunrpc/svcsock.h
>>>> +++ b/include/linux/sunrpc/svcsock.h
>>>> @@ -40,7 +40,7 @@ struct svc_sock {
>>>>
>>>> struct completion sk_handshake_done;
>>>>
>>>> - struct page * sk_pages[RPCSVC_MAXPAGES]; /* received data */
>>>> + struct page * sk_pages[RPCSVC_MAXPAGES_MAX]; /* received data */
>>>> };
>>>>
>>>> static inline u32 svc_sock_reclen(struct svc_sock *svsk)
>>>
>>
>
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2024-10-16 15:09 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20241014105514.3206191-1-ryan.roberts@arm.com>
[not found] ` <20241014105912.3207374-1-ryan.roberts@arm.com>
2024-10-14 10:58 ` [RFC PATCH v1 09/57] fs/nfs: Remove PAGE_SIZE compile-time constant assumption Ryan Roberts
2024-10-14 10:58 ` [RFC PATCH v1 21/57] sunrpc: " Ryan Roberts
2024-10-16 14:42 ` Ryan Roberts
2024-10-16 14:47 ` Chuck Lever
2024-10-16 14:54 ` Jeff Layton
2024-10-16 15:09 ` Ryan Roberts
2024-10-14 10:58 ` [RFC PATCH v1 23/57] net: " Ryan Roberts
2024-10-16 14:43 ` Ryan Roberts
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox