Skip to content

Commit 4963d23

Browse files
Guillaume Naultkuba-moo
authored andcommitted
bareudp: Fix device stats updates.
Bareudp devices update their stats concurrently. Therefore they need proper atomic increments. Fixes: 571912c ("net: UDP tunnel encapsulation module for tunnelling different protocols like MPLS, IP, NSH etc.") Signed-off-by: Guillaume Nault <[email protected]> Reviewed-by: Willem de Bruijn <[email protected]> Link: https://patch.msgid.link/04b7b9d0b480158eb3ab4366ec80aa2ab7e41fcb.1725031794.git.gnault@redhat.com Signed-off-by: Jakub Kicinski <[email protected]>
1 parent b6ecc66 commit 4963d23

File tree

1 file changed

+11
-11
lines changed

1 file changed

+11
-11
lines changed

drivers/net/bareudp.c

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ static int bareudp_udp_encap_recv(struct sock *sk, struct sk_buff *skb)
8383

8484
if (skb_copy_bits(skb, BAREUDP_BASE_HLEN, &ipversion,
8585
sizeof(ipversion))) {
86-
bareudp->dev->stats.rx_dropped++;
86+
DEV_STATS_INC(bareudp->dev, rx_dropped);
8787
goto drop;
8888
}
8989
ipversion >>= 4;
@@ -93,7 +93,7 @@ static int bareudp_udp_encap_recv(struct sock *sk, struct sk_buff *skb)
9393
} else if (ipversion == 6 && bareudp->multi_proto_mode) {
9494
proto = htons(ETH_P_IPV6);
9595
} else {
96-
bareudp->dev->stats.rx_dropped++;
96+
DEV_STATS_INC(bareudp->dev, rx_dropped);
9797
goto drop;
9898
}
9999
} else if (bareudp->ethertype == htons(ETH_P_MPLS_UC)) {
@@ -107,7 +107,7 @@ static int bareudp_udp_encap_recv(struct sock *sk, struct sk_buff *skb)
107107
ipv4_is_multicast(tunnel_hdr->daddr)) {
108108
proto = htons(ETH_P_MPLS_MC);
109109
} else {
110-
bareudp->dev->stats.rx_dropped++;
110+
DEV_STATS_INC(bareudp->dev, rx_dropped);
111111
goto drop;
112112
}
113113
} else {
@@ -123,7 +123,7 @@ static int bareudp_udp_encap_recv(struct sock *sk, struct sk_buff *skb)
123123
(addr_type & IPV6_ADDR_MULTICAST)) {
124124
proto = htons(ETH_P_MPLS_MC);
125125
} else {
126-
bareudp->dev->stats.rx_dropped++;
126+
DEV_STATS_INC(bareudp->dev, rx_dropped);
127127
goto drop;
128128
}
129129
}
@@ -135,15 +135,15 @@ static int bareudp_udp_encap_recv(struct sock *sk, struct sk_buff *skb)
135135
proto,
136136
!net_eq(bareudp->net,
137137
dev_net(bareudp->dev)))) {
138-
bareudp->dev->stats.rx_dropped++;
138+
DEV_STATS_INC(bareudp->dev, rx_dropped);
139139
goto drop;
140140
}
141141

142142
__set_bit(IP_TUNNEL_KEY_BIT, key);
143143

144144
tun_dst = udp_tun_rx_dst(skb, family, key, 0, 0);
145145
if (!tun_dst) {
146-
bareudp->dev->stats.rx_dropped++;
146+
DEV_STATS_INC(bareudp->dev, rx_dropped);
147147
goto drop;
148148
}
149149
skb_dst_set(skb, &tun_dst->dst);
@@ -169,8 +169,8 @@ static int bareudp_udp_encap_recv(struct sock *sk, struct sk_buff *skb)
169169
&((struct ipv6hdr *)oiph)->saddr);
170170
}
171171
if (err > 1) {
172-
++bareudp->dev->stats.rx_frame_errors;
173-
++bareudp->dev->stats.rx_errors;
172+
DEV_STATS_INC(bareudp->dev, rx_frame_errors);
173+
DEV_STATS_INC(bareudp->dev, rx_errors);
174174
goto drop;
175175
}
176176
}
@@ -467,11 +467,11 @@ static netdev_tx_t bareudp_xmit(struct sk_buff *skb, struct net_device *dev)
467467
dev_kfree_skb(skb);
468468

469469
if (err == -ELOOP)
470-
dev->stats.collisions++;
470+
DEV_STATS_INC(dev, collisions);
471471
else if (err == -ENETUNREACH)
472-
dev->stats.tx_carrier_errors++;
472+
DEV_STATS_INC(dev, tx_carrier_errors);
473473

474-
dev->stats.tx_errors++;
474+
DEV_STATS_INC(dev, tx_errors);
475475
return NETDEV_TX_OK;
476476
}
477477

0 commit comments

Comments
 (0)