aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv6
diff options
context:
space:
mode:
authorRick Jones <rick.jones2@hp.com>2014-11-17 17:04:29 -0500
committerDavid S. Miller <davem@davemloft.net>2014-11-18 15:28:28 -0500
commite3e3217029a35c579bf100998b43976d0b1cb8d7 (patch)
treedc2e5073002588cea3bb600e9df7d8de00359d86 /net/ipv6
parent54aeba7f06323e04d59a6053ee3c6023079667b2 (diff)
icmp: Remove some spurious dropped packet profile hits from the ICMP path
If icmp_rcv() has successfully processed the incoming ICMP datagram, we should use consume_skb() rather than kfree_skb() because a hit on the likes of perf -e skb:kfree_skb is not called-for. Signed-off-by: Rick Jones <rick.jones2@hp.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv6')
-rw-r--r--net/ipv6/icmp.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/net/ipv6/icmp.c b/net/ipv6/icmp.c
index 092934032077..39b3ff97a504 100644
--- a/net/ipv6/icmp.c
+++ b/net/ipv6/icmp.c
@@ -679,6 +679,7 @@ static int icmpv6_rcv(struct sk_buff *skb)
679 const struct in6_addr *saddr, *daddr; 679 const struct in6_addr *saddr, *daddr;
680 struct icmp6hdr *hdr; 680 struct icmp6hdr *hdr;
681 u8 type; 681 u8 type;
682 bool success = false;
682 683
683 if (!xfrm6_policy_check(NULL, XFRM_POLICY_IN, skb)) { 684 if (!xfrm6_policy_check(NULL, XFRM_POLICY_IN, skb)) {
684 struct sec_path *sp = skb_sec_path(skb); 685 struct sec_path *sp = skb_sec_path(skb);
@@ -726,7 +727,7 @@ static int icmpv6_rcv(struct sk_buff *skb)
726 break; 727 break;
727 728
728 case ICMPV6_ECHO_REPLY: 729 case ICMPV6_ECHO_REPLY:
729 ping_rcv(skb); 730 success = ping_rcv(skb);
730 break; 731 break;
731 732
732 case ICMPV6_PKT_TOOBIG: 733 case ICMPV6_PKT_TOOBIG:
@@ -790,7 +791,14 @@ static int icmpv6_rcv(struct sk_buff *skb)
790 icmpv6_notify(skb, type, hdr->icmp6_code, hdr->icmp6_mtu); 791 icmpv6_notify(skb, type, hdr->icmp6_code, hdr->icmp6_mtu);
791 } 792 }
792 793
793 kfree_skb(skb); 794 /* until the v6 path can be better sorted assume failure and
795 * preserve the status quo behaviour for the rest of the paths to here
796 */
797 if (success)
798 consume_skb(skb);
799 else
800 kfree_skb(skb);
801
794 return 0; 802 return 0;
795 803
796csum_error: 804csum_error: