The SKB_SGO_CB_OFFSET should be SKB_GSO_CB_OFFSET which means the offset of the GSO in skb cb. This patch fixes the typo.
Unified · Split
| @@ -4389,8 +4389,8 @@ struct skb_gso_cb { · 4388 unmodified lines | ||
| 4389 | 4389 | __wsum csum; |
| 4390 | 4390 | __u16 csum_start; |
| 4391 | 4391 | }; |
| 4392 | −#define SKB_SGO_CB_OFFSET 32 | |
| 4393 | −#define SKB_GSO_CB(skb) ((struct skb_gso_cb *)((skb)->cb + SKB_SGO_CB_OFFSET)) | |
| 4392 | +#define SKB_GSO_CB_OFFSET 32 | |
| 4393 | +#define SKB_GSO_CB(skb) ((struct skb_gso_cb *)((skb)->cb + SKB_GSO_CB_OFFSET)) | |
| 4394 | 4394 | |
| 4395 | 4395 | static inline int skb_tnl_header_len(const struct sk_buff *inner_skb) |
| 4396 | 4396 | { |
| @@ -3266,7 +3266,7 @@ static inline bool skb_needs_check(struct sk_buff *skb, bool tx_path) · 3265 unmodified lines | ||
| 3266 | 3266 | * It may return NULL if the skb requires no segmentation. This is |
| 3267 | 3267 | * only possible when GSO is used for verifying header integrity. |
| 3268 | 3268 | * |
| 3269 | − * Segmentation preserves SKB_SGO_CB_OFFSET bytes of previous skb cb. | |
| 3269 | + * Segmentation preserves SKB_GSO_CB_OFFSET bytes of previous skb cb. | |
| 3270 | 3270 | */ |
| 3271 | 3271 | struct sk_buff *__skb_gso_segment(struct sk_buff *skb, |
| 3272 | 3272 | netdev_features_t features, bool tx_path) |
| @@ -3295,7 +3295,7 @@ struct sk_buff *__skb_gso_segment(struct sk_buff *skb, · 22 unmodified lines | ||
| 3295 | 3295 | features &= ~NETIF_F_GSO_PARTIAL; |
| 3296 | 3296 | } |
| 3297 | 3297 | |
| 3298 | − BUILD_BUG_ON(SKB_SGO_CB_OFFSET + | |
| 3298 | + BUILD_BUG_ON(SKB_GSO_CB_OFFSET + | |
| 3299 | 3299 | sizeof(*SKB_GSO_CB(skb)) > sizeof(skb->cb)); |
| 3300 | 3300 | |
| 3301 | 3301 | SKB_GSO_CB(skb)->mac_offset = skb_headroom(skb); |
| @@ -263,7 +263,7 @@ static int ip_finish_output_gso(struct net *net, struct sock *sk, · 262 unmodified lines | ||
| 263 | 263 | * insufficent MTU. |
| 264 | 264 | */ |
| 265 | 265 | features = netif_skb_features(skb); |
| 266 | − BUILD_BUG_ON(sizeof(*IPCB(skb)) > SKB_SGO_CB_OFFSET); | |
| 266 | + BUILD_BUG_ON(sizeof(*IPCB(skb)) > SKB_GSO_CB_OFFSET); | |
| 267 | 267 | segs = skb_gso_segment(skb, features & ~NETIF_F_GSO_MASK); |
| 268 | 268 | if (IS_ERR_OR_NULL(segs)) { |
| 269 | 269 | kfree_skb(skb); |
| @@ -2109,7 +2109,7 @@ static int udp_queue_rcv_skb(struct sock *sk, struct sk_buff *skb) · 2108 unmodified lines | ||
| 2109 | 2109 | if (likely(!udp_unexpected_gso(sk, skb))) |
| 2110 | 2110 | return udp_queue_rcv_one_skb(sk, skb); |
| 2111 | 2111 | |
| 2112 | − BUILD_BUG_ON(sizeof(struct udp_skb_cb) > SKB_SGO_CB_OFFSET); | |
| 2112 | + BUILD_BUG_ON(sizeof(struct udp_skb_cb) > SKB_GSO_CB_OFFSET); | |
| 2113 | 2113 | __skb_push(skb, -skb_mac_offset(skb)); |
| 2114 | 2114 | segs = udp_rcv_segment(sk, skb, true); |
| 2115 | 2115 | skb_list_walk_safe(segs, skb, next) { |
| @@ -305,7 +305,7 @@ static int queue_gso_packets(struct datapath *dp, struct sk_buff *skb, · 304 unmodified lines | ||
| 305 | 305 | struct sk_buff *segs, *nskb; |
| 306 | 306 | int err; |
| 307 | 307 | |
| 308 | − BUILD_BUG_ON(sizeof(*OVS_CB(skb)) > SKB_SGO_CB_OFFSET); | |
| 308 | + BUILD_BUG_ON(sizeof(*OVS_CB(skb)) > SKB_GSO_CB_OFFSET); | |
| 309 | 309 | segs = __skb_gso_segment(skb, NETIF_F_SG, false); |
| 310 | 310 | if (IS_ERR(segs)) |
| 311 | 311 | return PTR_ERR(segs); |
| @@ -535,8 +535,8 @@ static int xfrm_output_gso(struct net *net, struct sock *sk, struct sk_buff *skb · 534 unmodified lines | ||
| 535 | 535 | { |
| 536 | 536 | struct sk_buff *segs, *nskb; |
| 537 | 537 | |
| 538 | − BUILD_BUG_ON(sizeof(*IPCB(skb)) > SKB_SGO_CB_OFFSET); | |
| 539 | − BUILD_BUG_ON(sizeof(*IP6CB(skb)) > SKB_SGO_CB_OFFSET); | |
| 538 | + BUILD_BUG_ON(sizeof(*IPCB(skb)) > SKB_GSO_CB_OFFSET); | |
| 539 | + BUILD_BUG_ON(sizeof(*IP6CB(skb)) > SKB_GSO_CB_OFFSET); | |
| 540 | 540 | segs = skb_gso_segment(skb, 0); |
| 541 | 541 | kfree_skb(skb); |
| 542 | 542 | if (IS_ERR(segs)) |