[IGMP]: Optimize kfree_skb in igmp_rcv.

Merge error paths inside igmp_rcv.

Signed-off-by: Denis V. Lunev <den@openvz.org>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by Denis V. Lunev and committed by David S. Miller cd557bc1 bd2f7476

+6 -7
+6 -7
net/ipv4/igmp.c
··· 922 struct in_device *in_dev = in_dev_get(skb->dev); 923 int len = skb->len; 924 925 - if (in_dev==NULL) { 926 - kfree_skb(skb); 927 - return 0; 928 - } 929 930 if (!pskb_may_pull(skb, sizeof(struct igmphdr))) 931 - goto drop; 932 933 switch (skb->ip_summed) { 934 case CHECKSUM_COMPLETE: ··· 936 case CHECKSUM_NONE: 937 skb->csum = 0; 938 if (__skb_checksum_complete(skb)) 939 - goto drop; 940 } 941 942 ih = igmp_hdr(skb); ··· 970 break; 971 } 972 973 - drop: 974 in_dev_put(in_dev); 975 kfree_skb(skb); 976 return 0; 977 }
··· 922 struct in_device *in_dev = in_dev_get(skb->dev); 923 int len = skb->len; 924 925 + if (in_dev == NULL) 926 + goto drop; 927 928 if (!pskb_may_pull(skb, sizeof(struct igmphdr))) 929 + goto drop_ref; 930 931 switch (skb->ip_summed) { 932 case CHECKSUM_COMPLETE: ··· 938 case CHECKSUM_NONE: 939 skb->csum = 0; 940 if (__skb_checksum_complete(skb)) 941 + goto drop_ref; 942 } 943 944 ih = igmp_hdr(skb); ··· 972 break; 973 } 974 975 + drop_ref: 976 in_dev_put(in_dev); 977 + drop: 978 kfree_skb(skb); 979 return 0; 980 }