net: Pass max frags into skb_append_pagefrags()
authorDavid Howells <dhowells@redhat.com>
Mon, 22 May 2023 12:11:11 +0000 (13:11 +0100)
committerJakub Kicinski <kuba@kernel.org>
Wed, 24 May 2023 03:48:27 +0000 (20:48 -0700)
Pass the maximum number of fragments into skb_append_pagefrags() rather
than using MAX_SKB_FRAGS so that it can be used from code that wants to
specify sysctl_max_skb_frags.

Signed-off-by: David Howells <dhowells@redhat.com>
cc: David Ahern <dsahern@kernel.org>
cc: Jens Axboe <axboe@kernel.dk>
cc: Matthew Wilcox <willy@infradead.org>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
include/linux/skbuff.h
net/core/skbuff.c
net/ipv4/ip_output.c
net/unix/af_unix.c

index 8cff3d8..1501140 100644 (file)
@@ -1383,7 +1383,7 @@ static inline int skb_pad(struct sk_buff *skb, int pad)
 #define dev_kfree_skb(a)       consume_skb(a)
 
 int skb_append_pagefrags(struct sk_buff *skb, struct page *page,
-                        int offset, size_t size);
+                        int offset, size_t size, size_t max_frags);
 
 struct skb_seq_state {
        __u32           lower_offset;
index 6724a84..7f53dcb 100644 (file)
@@ -4188,13 +4188,13 @@ unsigned int skb_find_text(struct sk_buff *skb, unsigned int from,
 EXPORT_SYMBOL(skb_find_text);
 
 int skb_append_pagefrags(struct sk_buff *skb, struct page *page,
-                        int offset, size_t size)
+                        int offset, size_t size, size_t max_frags)
 {
        int i = skb_shinfo(skb)->nr_frags;
 
        if (skb_can_coalesce(skb, i, page, offset)) {
                skb_frag_size_add(&skb_shinfo(skb)->frags[i - 1], size);
-       } else if (i < MAX_SKB_FRAGS) {
+       } else if (i < max_frags) {
                skb_zcopy_downgrade_managed(skb);
                get_page(page);
                skb_fill_page_desc_noacc(skb, i, page, offset, size);
index 6189226..52fc840 100644 (file)
@@ -1450,7 +1450,8 @@ ssize_t   ip_append_page(struct sock *sk, struct flowi4 *fl4, struct page *page,
                if (len > size)
                        len = size;
 
-               if (skb_append_pagefrags(skb, page, offset, len)) {
+               if (skb_append_pagefrags(skb, page, offset, len,
+                                        MAX_SKB_FRAGS)) {
                        err = -EMSGSIZE;
                        goto error;
                }
index cc695c9..dd55506 100644 (file)
@@ -2349,7 +2349,7 @@ alloc_skb:
                newskb = NULL;
        }
 
-       if (skb_append_pagefrags(skb, page, offset, size)) {
+       if (skb_append_pagefrags(skb, page, offset, size, MAX_SKB_FRAGS)) {
                tail = skb;
                goto alloc_skb;
        }