Skip to content

Commit c420c98

Browse files
teknoraverdavem330
authored andcommitted
skbuff: add a parameter to __skb_frag_unref
This is a prerequisite patch, the next one is enabling recycling of skbs and fragments. Add an extra argument on __skb_frag_unref() to handle recycling, and update the current users of the function with that. Signed-off-by: Matteo Croce <mcroce@microsoft.com> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent c07aea3 commit c420c98

File tree

5 files changed

+10
-8
lines changed

5 files changed

+10
-8
lines changed

drivers/net/ethernet/marvell/sky2.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -2503,7 +2503,7 @@ static void skb_put_frags(struct sk_buff *skb, unsigned int hdr_space,
25032503

25042504
if (length == 0) {
25052505
/* don't need this page */
2506-
__skb_frag_unref(frag);
2506+
__skb_frag_unref(frag, false);
25072507
--skb_shinfo(skb)->nr_frags;
25082508
} else {
25092509
size = min(length, (unsigned) PAGE_SIZE);

drivers/net/ethernet/mellanox/mlx4/en_rx.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -526,7 +526,7 @@ static int mlx4_en_complete_rx_desc(struct mlx4_en_priv *priv,
526526
fail:
527527
while (nr > 0) {
528528
nr--;
529-
__skb_frag_unref(skb_shinfo(skb)->frags + nr);
529+
__skb_frag_unref(skb_shinfo(skb)->frags + nr, false);
530530
}
531531
return 0;
532532
}

include/linux/skbuff.h

+5-3
Original file line numberDiff line numberDiff line change
@@ -3081,10 +3081,12 @@ static inline void skb_frag_ref(struct sk_buff *skb, int f)
30813081
/**
30823082
* __skb_frag_unref - release a reference on a paged fragment.
30833083
* @frag: the paged fragment
3084+
* @recycle: recycle the page if allocated via page_pool
30843085
*
3085-
* Releases a reference on the paged fragment @frag.
3086+
* Releases a reference on the paged fragment @frag
3087+
* or recycles the page via the page_pool API.
30863088
*/
3087-
static inline void __skb_frag_unref(skb_frag_t *frag)
3089+
static inline void __skb_frag_unref(skb_frag_t *frag, bool recycle)
30883090
{
30893091
put_page(skb_frag_page(frag));
30903092
}
@@ -3098,7 +3100,7 @@ static inline void __skb_frag_unref(skb_frag_t *frag)
30983100
*/
30993101
static inline void skb_frag_unref(struct sk_buff *skb, int f)
31003102
{
3101-
__skb_frag_unref(&skb_shinfo(skb)->frags[f]);
3103+
__skb_frag_unref(&skb_shinfo(skb)->frags[f], false);
31023104
}
31033105

31043106
/**

net/core/skbuff.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -664,7 +664,7 @@ static void skb_release_data(struct sk_buff *skb)
664664
skb_zcopy_clear(skb, true);
665665

666666
for (i = 0; i < shinfo->nr_frags; i++)
667-
__skb_frag_unref(&shinfo->frags[i]);
667+
__skb_frag_unref(&shinfo->frags[i], false);
668668

669669
if (shinfo->frag_list)
670670
kfree_skb_list(shinfo->frag_list);
@@ -3495,7 +3495,7 @@ int skb_shift(struct sk_buff *tgt, struct sk_buff *skb, int shiftlen)
34953495
fragto = &skb_shinfo(tgt)->frags[merge];
34963496

34973497
skb_frag_size_add(fragto, skb_frag_size(fragfrom));
3498-
__skb_frag_unref(fragfrom);
3498+
__skb_frag_unref(fragfrom, false);
34993499
}
35003500

35013501
/* Reposition in the original skb */

net/tls/tls_device.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ static void destroy_record(struct tls_record_info *record)
128128
int i;
129129

130130
for (i = 0; i < record->num_frags; i++)
131-
__skb_frag_unref(&record->frags[i]);
131+
__skb_frag_unref(&record->frags[i], false);
132132
kfree(record);
133133
}
134134

0 commit comments

Comments
 (0)