diff options
author | Denis V. Lunev <den@openvz.org> | 2008-02-10 02:22:26 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-02-10 02:22:26 -0500 |
commit | cd557bc1c15cbd20fbea47a150e1c7e56834e627 (patch) | |
tree | 1bc82bff8c7f1a69f7f87a4c728e3890e5343025 /net/ipv4/igmp.c | |
parent | bd2f747658b303d9b08d2c5bc815022d825a5e3c (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.c | 13 |
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 | ||
975 | drop: | 973 | drop_ref: |
976 | in_dev_put(in_dev); | 974 | in_dev_put(in_dev); |
975 | drop: | ||
977 | kfree_skb(skb); | 976 | kfree_skb(skb); |
978 | return 0; | 977 | return 0; |
979 | } | 978 | } |