Linux 5.10.257
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.10.257 kernel.
All users of the 5.10 kernel series must upgrade.
The updated 5.10.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.10.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 +- net/core/skbuff.c | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-)
Greg Kroah-Hartman (1):
Linux 5.10.257
Hyunwoo Kim (1):
net: skbuff: propagate shared-frag marker through frag-transfer helpers
William Bowling (1):
net: skbuff: preserve shared-frag marker during coalescing
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 10 -SUBLEVEL = 256 +SUBLEVEL = 257 EXTRAVERSION = NAME = Dare mighty things
net/core/skbuff.c +14 -1
@@ -1596,6 +1596,7 @@ struct sk_buff *__pskb_copy_fclone(struct sk_buff *skb, int headroom,skb_frag_ref (skb, i); }skb_shinfo (n)->nr_frags = i; +skb_shinfo (n)->tx_flags |=skb_shinfo (skb)->tx_flags &SKBTX_SHARED_FRAG ; }if (skb_has_frag_list (skb)) {
@@ -3502,6 +3503,8 @@ int skb_shift(struct sk_buff *tgt, struct sk_buff *skb, int shiftlen) tgt->ip_summed =CHECKSUM_PARTIAL ; skb->ip_summed =CHECKSUM_PARTIAL ; +skb_shinfo (tgt)->tx_flags |=skb_shinfo (skb)->tx_flags &SKBTX_SHARED_FRAG ; +/* Yak, is it really working this way? Some helper please? */ skb->len -= shiftlen; skb->data_len -= shiftlen;
@@ -3843,6 +3846,8 @@ int skb_gro_receive_list(struct sk_buff *p, struct sk_buff *skb) p->truesize += skb->truesize; p->len += skb->len; +skb_shinfo (p)->tx_flags |=skb_shinfo (skb)->tx_flags &SKBTX_SHARED_FRAG ; +NAPI_GRO_CB (skb)->same_flow =1 ;return 0 ;
@@ -4076,7 +4081,8 @@ struct sk_buff *skb_segment(struct sk_buff *head_skb,skb_copy_from_linear_data_offset (head_skb, offset,skb_put (nskb, hsize), hsize); -skb_shinfo (nskb)->tx_flags |=skb_shinfo (head_skb)->tx_flags & +skb_shinfo (nskb)->tx_flags |= (skb_shinfo (head_skb)->tx_flags | +skb_shinfo (frag_skb)->tx_flags) &SKBTX_SHARED_FRAG ;if (skb_zerocopy_clone (nskb, frag_skb,GFP_ATOMIC ))
@@ -4093,6 +4099,9 @@ struct sk_buff *skb_segment(struct sk_buff *head_skb, nfrags =skb_shinfo (list_skb)->nr_frags; frag =skb_shinfo (list_skb)->frags; frag_skb = list_skb; + +skb_shinfo (nskb)->tx_flags |=skb_shinfo (frag_skb)->tx_flags &SKBTX_SHARED_FRAG ; +if (!skb_headlen (list_skb)) {BUG_ON (!nfrags); }else {
@@ -4309,10 +4318,12 @@ int skb_gro_receive(struct sk_buff *p, struct sk_buff *skb) p->data_len += len; p->truesize += delta_truesize; p->len += len; +skb_shinfo (p)->tx_flags |= skbinfo->tx_flags &SKBTX_SHARED_FRAG ;if (lp != p) { lp->data_len += len; lp->truesize += delta_truesize; lp->len += len; +skb_shinfo (lp)->tx_flags |= skbinfo->tx_flags &SKBTX_SHARED_FRAG ; }NAPI_GRO_CB (skb)->same_flow =1 ;return 0 ;
@@ -5315,6 +5326,8 @@ bool skb_try_coalesce(struct sk_buff *to, struct sk_buff *from, from_shinfo->frags, from_shinfo->nr_frags * sizeof(skb_frag_t)); to_shinfo->nr_frags += from_shinfo->nr_frags; +if (from_shinfo->nr_frags) + to_shinfo->tx_flags |= from_shinfo->tx_flags &SKBTX_SHARED_FRAG ;if (!skb_cloned (from)) from_shinfo->nr_frags =0 ;