gro: Avoid unnecessary comparison after skb_gro_header
For the overwhelming majority of cases, skb_gro_header's return value cannot be NULL. Yet we must check it because of its current form. This patch splits it up into multiple functions in order to avoid this. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
7489594cb2
commit
a5b1cf288d
@@ -2590,17 +2590,24 @@ struct sk_buff *napi_frags_skb(struct napi_struct *napi)
|
||||
{
|
||||
struct sk_buff *skb = napi->skb;
|
||||
struct ethhdr *eth;
|
||||
unsigned int hlen;
|
||||
unsigned int off;
|
||||
|
||||
napi->skb = NULL;
|
||||
|
||||
skb_reset_mac_header(skb);
|
||||
skb_gro_reset_offset(skb);
|
||||
|
||||
eth = skb_gro_header(skb, sizeof(*eth));
|
||||
if (!eth) {
|
||||
napi_reuse_skb(napi, skb);
|
||||
skb = NULL;
|
||||
goto out;
|
||||
off = skb_gro_offset(skb);
|
||||
hlen = off + sizeof(*eth);
|
||||
eth = skb_gro_header_fast(skb, off);
|
||||
if (skb_gro_header_hard(skb, hlen)) {
|
||||
eth = skb_gro_header_slow(skb, hlen, off);
|
||||
if (unlikely(!eth)) {
|
||||
napi_reuse_skb(napi, skb);
|
||||
skb = NULL;
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
skb_gro_pull(skb, sizeof(*eth));
|
||||
|
Reference in New Issue
Block a user