Patch "geneve: add missing rx stats accounting" has been added to the 4.9-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
geneve: add missing rx stats accounting
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
geneve-add-missing-rx-stats-accounting.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From foo@baz Mon Apr 9 17:09:24 CEST 2018
From: Girish Moodalbail <[email protected]>
Date: Thu, 8 Jun 2017 17:07:48 -0700
Subject: geneve: add missing rx stats accounting
From: Girish Moodalbail <[email protected]>
[ Upstream commit fe741e2362f33bbea813bcc3a921de356c6653db ]
There are few places on the receive path where packet drops and packet errors were not accounted for. This patch fixes that issue.
--- drivers/net/geneve.c | 36 ++++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-)
drivers/net/geneve.c +24 -12
@@ -209,6 +209,7 @@ static void geneve_rx(struct geneve_devstruct genevehdr *gnvh =geneve_hdr (skb);struct metadata_dst *tun_dst =NULL ;struct pcpu_sw_netstats *stats; +unsigned int len;int err =0 ;void *oiph;
@@ -222,8 +223,10 @@ static void geneve_rx(struct geneve_dev tun_dst =udp_tun_rx_dst (skb,geneve_get_sk_family (gs), flags,vni_to_tunnel_id (gnvh->vni), gnvh->opt_len *4 ); -if (!tun_dst) +if (!tun_dst) { + geneve->dev->stats.rx_dropped++; goto drop; + }/* Update tunnel dst according to Geneve options. */ ip_tunnel_info_opts_set (&tun_dst->u.tun_info, gnvh->options, gnvh->opt_len *4 );
@@ -231,8 +234,11 @@ static void geneve_rx(struct geneve_dev/* Drop packets w/ critical options, * since we don't support any... */ -if (gnvh->critical) +if (gnvh->critical) { + geneve->dev->stats.rx_frame_errors++; + geneve->dev->stats.rx_errors++; goto drop; + } }skb_reset_mac_header (skb);
@@ -243,8 +249,10 @@ static void geneve_rx(struct geneve_devskb_dst_set (skb, &tun_dst->dst);/* Ignore packet loops (and multicast echo) */ -if (ether_addr_equal (eth_hdr (skb)->h_source, geneve->dev->dev_addr)) +if (ether_addr_equal (eth_hdr (skb)->h_source, geneve->dev->dev_addr)) { + geneve->dev->stats.rx_errors++; goto drop; + } oiph =skb_network_header (skb);skb_reset_network_header (skb);
@@ -276,13 +284,15 @@ static void geneve_rx(struct geneve_dev } } - stats =this_cpu_ptr (geneve->dev->tstats); -u64_stats_update_begin (&stats->syncp); - stats->rx_packets++; - stats->rx_bytes += skb->len; -u64_stats_update_end (&stats->syncp); - -gro_cells_receive (&geneve->gro_cells, skb); + len = skb->len; + err =gro_cells_receive (&geneve->gro_cells, skb); +if (likely (err ==NET_RX_SUCCESS )) { + stats =this_cpu_ptr (geneve->dev->tstats); +u64_stats_update_begin (&stats->syncp); + stats->rx_packets++; + stats->rx_bytes += len; +u64_stats_update_end (&stats->syncp); + }return ; drop:/* Consume bad packet */
@@ -332,7 +342,7 @@ static int geneve_udp_encap_recv(structstruct geneve_sock *gs;int opts_len; -/* Need Geneve and inner Ethernet header to be present */ +/* Need UDP and Geneve header to be present */ if (unlikely (!pskb_may_pull (skb,GENEVE_BASE_HLEN ))) goto drop;
@@ -355,8 +365,10 @@ static int geneve_udp_encap_recv(struct opts_len = geneveh->opt_len *4 ;if (iptunnel_pull_header (skb,GENEVE_BASE_HLEN + opts_len,htons (ETH_P_TEB ), - !net_eq (geneve->net,dev_net (geneve->dev)))) + !net_eq (geneve->net,dev_net (geneve->dev)))) { + geneve->dev->stats.rx_dropped++; goto drop; + }geneve_rx (geneve, gs, skb);return 0 ;
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/geneve-add-missing-rx-stats-accounting.patch