lkml.org 
[lkml]   [2023]   [May]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH net-next v10 02/16] net: Pass max frags into skb_append_pagefrags()
    Date
    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: Eric Dumazet <edumazet@google.com>
    cc: "David S. Miller" <davem@davemloft.net>
    cc: David Ahern <dsahern@kernel.org>
    cc: Jakub Kicinski <kuba@kernel.org>
    cc: Paolo Abeni <pabeni@redhat.com>
    cc: Jens Axboe <axboe@kernel.dk>
    cc: Matthew Wilcox <willy@infradead.org>
    cc: netdev@vger.kernel.org
    ---
    include/linux/skbuff.h | 2 +-
    net/core/skbuff.c | 4 ++--
    net/ipv4/ip_output.c | 3 ++-
    net/unix/af_unix.c | 2 +-
    4 files changed, 6 insertions(+), 5 deletions(-)

    diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
    index 8cff3d817131..15011408c47c 100644
    --- a/include/linux/skbuff.h
    +++ b/include/linux/skbuff.h
    @@ -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;
    diff --git a/net/core/skbuff.c b/net/core/skbuff.c
    index 6724a84ebb09..7f53dcb26ad3 100644
    --- a/net/core/skbuff.c
    +++ b/net/core/skbuff.c
    @@ -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);
    diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c
    index 61892268e8a6..52fc840898d8 100644
    --- a/net/ipv4/ip_output.c
    +++ b/net/ipv4/ip_output.c
    @@ -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;
    }
    diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c
    index cc695c9f09ec..dd55506b4632 100644
    --- a/net/unix/af_unix.c
    +++ b/net/unix/af_unix.c
    @@ -2349,7 +2349,7 @@ static ssize_t unix_stream_sendpage(struct socket *socket, struct page *page,
    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;
    }
    \
     
     \ /
      Last update: 2023-05-22 14:13    [W:4.036 / U:0.144 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site