gro: avoid checking for a failed search
Subsystems (2)
PATCH v2 1/1 gro: avoid checking for a failed search
After searching for a protocol handler in dev_gro_receive, checking for failure is redundant. Skip the failure code after finding the corresponding handler.
Suggested-by Eric Dumazet <[email protected]>
Signed-off-by Richard Gobert <[email protected]>
--- net/core/gro.c | 72 +++++++++++++++++++++++++------------------------- 1 file changed, 36 insertions(+), 36 deletions(-)
net/core/gro.c +36 -36
@@ -489,45 +489,45 @@ static enum gro_result dev_gro_receive(struct napi_struct *napi, struct sk_buffrcu_read_lock ();list_for_each_entry_rcu (ptype, head, list) { -if (ptype->type != type || !ptype->callbacks.gro_receive) -continue ; - -skb_set_network_header (skb,skb_gro_offset (skb)); -skb_reset_mac_len (skb); - BUILD_BUG_ON(sizeof_field(struct napi_gro_cb, zeroed) != sizeof(u32)); -BUILD_BUG_ON (!IS_ALIGNED (offsetof(struct napi_gro_cb , zeroed), -sizeof (u32)));/* Avoid slow unaligned acc */ - *(u32 *)&NAPI_GRO_CB (skb)->zeroed =0 ; -NAPI_GRO_CB (skb)->flush =skb_has_frag_list (skb); -NAPI_GRO_CB (skb)->is_atomic =1 ; -NAPI_GRO_CB (skb)->count =1 ; -if (unlikely (skb_is_gso (skb))) { -NAPI_GRO_CB (skb)->count =skb_shinfo (skb)->gso_segs; -/* Only support TCP at the moment. */ -if (!skb_is_gso_tcp (skb)) -NAPI_GRO_CB (skb)->flush =1 ; - } - -/* Setup for GRO checksum validation */ -switch (skb->ip_summed) { -case CHECKSUM_COMPLETE : -NAPI_GRO_CB (skb)->csum = skb->csum; -NAPI_GRO_CB (skb)->csum_valid =1 ; -break ; -case CHECKSUM_UNNECESSARY : -NAPI_GRO_CB (skb)->csum_cnt = skb->csum_level +1 ; -break ; - } - - pp =INDIRECT_CALL_INET (ptype->callbacks.gro_receive, - ipv6_gro_receive, inet_gro_receive, - &gro_list->list, skb); -break ; +if (ptype->type == type && ptype->callbacks.gro_receive) + goto found_ptype; }rcu_read_unlock (); + goto normal; -if (&ptype->list == head) - goto normal; +found_ptype: +skb_set_network_header (skb,skb_gro_offset (skb)); +skb_reset_mac_len (skb); + BUILD_BUG_ON(sizeof_field(struct napi_gro_cb, zeroed) != sizeof(u32)); +BUILD_BUG_ON (!IS_ALIGNED (offsetof(struct napi_gro_cb , zeroed), +sizeof (u32)));/* Avoid slow unaligned acc */ + *(u32 *)&NAPI_GRO_CB (skb)->zeroed =0 ; +NAPI_GRO_CB (skb)->flush =skb_has_frag_list (skb); +NAPI_GRO_CB (skb)->is_atomic =1 ; +NAPI_GRO_CB (skb)->count =1 ; +if (unlikely (skb_is_gso (skb))) { +NAPI_GRO_CB (skb)->count =skb_shinfo (skb)->gso_segs; +/* Only support TCP at the moment. */ +if (!skb_is_gso_tcp (skb)) +NAPI_GRO_CB (skb)->flush =1 ; + } + +/* Setup for GRO checksum validation */ +switch (skb->ip_summed) { +case CHECKSUM_COMPLETE : +NAPI_GRO_CB (skb)->csum = skb->csum; +NAPI_GRO_CB (skb)->csum_valid =1 ; +break ; +case CHECKSUM_UNNECESSARY : +NAPI_GRO_CB (skb)->csum_cnt = skb->csum_level +1 ; +break ; + } + + pp =INDIRECT_CALL_INET (ptype->callbacks.gro_receive, + ipv6_gro_receive, inet_gro_receive, + &gro_list->list, skb); + +rcu_read_unlock ();if (PTR_ERR (pp) == -EINPROGRESS ) { ret =GRO_CONSUMED ;
Signature · 1 line
2.20.1
Quoted 8 lines · Richard Gobert
After searching for a protocol handler in
dev_gro_receive, checking for failure is redundant. Skip the failure code after finding the corresponding handler.Suggested-by Eric Dumazet <[email protected]>Signed-off-by Richard Gobert <[email protected]>---
Reviewed-by Eric Dumazet <[email protected]>
This patch was applied to netdev/net-next.git (master) by Paolo Abeni <[email protected]>:
Hello:
This patch was applied to netdev/net-next.git (master) by Paolo Abeni <[email protected]>:
Quoted 8 lines · On Tue, 8 Nov 2022 13:33:28 +0100 you wrote:
After searching for a protocol handler in
dev_gro_receive, checking for failure is redundant. Skip the failure code after finding the corresponding handler.Suggested-by Eric Dumazet <[email protected]>Signed-off-by Richard Gobert <[email protected]>[...]
Here is the summary with links:
- [net-next,v2] gro: avoid checking for a failed search
https://git.kernel.org/netdev/net-next/c/e081ecf084d3
You are awesome, thank you!
Signature · 2 lines
Deet-doot-dot, I am a bot. https://korg.docs.kernel.org/patchwork/pwbot.html