aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv4/igmp.c
diff options
context:
space:
mode:
authorDenis V. Lunev <den@openvz.org>2008-02-10 02:22:26 -0500
committerDavid S. Miller <davem@davemloft.net>2008-02-10 02:22:26 -0500
commitcd557bc1c15cbd20fbea47a150e1c7e56834e627 (patch)
tree1bc82bff8c7f1a69f7f87a4c728e3890e5343025 /net/ipv4/igmp.c
parentbd2f747658b303d9b08d2c5bc815022d825a5e3c (diff)
[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>
Diffstat (limited to 'net/ipv4/igmp.c')
-rw-r--r--net/ipv4/igmp.c13
1 files changed, 6 insertions, 7 deletions
diff --git a/net/ipv4/igmp.c b/net/ipv4/igmp.c
index 994648be80ab..732cd07e6071 100644
--- a/net/ipv4/igmp.c
+++ b/net/ipv4/igmp.c
@@ -922,13 +922,11 @@ int igmp_rcv(struct sk_buff *skb)
922 struct in_device *in_dev = in_dev_get(skb->dev); 922 struct in_device *in_dev = in_dev_get(skb->dev);
923 int len = skb->len; 923 int len = skb->len;
924 924
925 if (in_dev==NULL) { 925 if (in_dev == NULL)
926 kfree_skb(skb); 926 goto drop;
927 return 0;
928 }
929 927
930 if (!pskb_may_pull(skb, sizeof(struct igmphdr))) 928 if (!pskb_may_pull(skb, sizeof(struct igmphdr)))
931 goto drop; 929 goto drop_ref;
932 930
933 switch (skb->ip_summed) { 931 switch (skb->ip_summed) {
934 case CHECKSUM_COMPLETE: 932 case CHECKSUM_COMPLETE:
@@ -938,7 +936,7 @@ int igmp_rcv(struct sk_buff *skb)
938 case CHECKSUM_NONE: 936 case CHECKSUM_NONE:
939 skb->csum = 0; 937 skb->csum = 0;
940 if (__skb_checksum_complete(skb)) 938 if (__skb_checksum_complete(skb))
941 goto drop; 939 goto drop_ref;
942 } 940 }
943 941
944 ih = igmp_hdr(skb); 942 ih = igmp_hdr(skb);
@@ -972,8 +970,9 @@ int igmp_rcv(struct sk_buff *skb)
972 break; 970 break;
973 } 971 }
974 972
975drop: 973drop_ref:
976 in_dev_put(in_dev); 974 in_dev_put(in_dev);
975drop:
977 kfree_skb(skb); 976 kfree_skb(skb);
978 return 0; 977 return 0;
979} 978}