Message ID | 1705409818-28292-1-git-send-email-wangyunjian@huawei.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net,v2] tun: add missing rx stats accounting in tun_xdp_act | expand |
Yunjian Wang wrote: > There are few places on the receive path where packet receives and packet > drops were not accounted for. This patch fixes that issue. > > Fixes: 8ae1aff0b331 ("tuntap: split out XDP logic") Before this commit this_cpu_inc(tun->pcpu_stats->rx_dropped) would get called, so that is indeed a regression in that patch. Please add that to the commit message. This commit also adds new accounting of successfully received bytes with dev_sw_netstats_rx_add. I don't know off the top of my head if other devices account XDP_TX and XDP_REDIRECT in that counter. Either way, good to be explicit about such subtle details. Oddly, before 8ae1aff0b331 those, too, would be attributed to rx_dropped, because after the out: label. > Signed-off-by: Yunjian Wang <wangyunjian@huawei.com> > --- > v2: add Fixes tag > --- > drivers/net/tun.c | 12 ++++++++---- > 1 file changed, 8 insertions(+), 4 deletions(-) > > diff --git a/drivers/net/tun.c b/drivers/net/tun.c > index afa5497f7c35..232e5319ac77 100644 > --- a/drivers/net/tun.c > +++ b/drivers/net/tun.c > @@ -1626,17 +1626,14 @@ static int tun_xdp_act(struct tun_struct *tun, struct bpf_prog *xdp_prog, > struct xdp_buff *xdp, u32 act) > { > int err; > + unsigned int datasize = xdp->data_end - xdp->data; > > switch (act) { > case XDP_REDIRECT: > err = xdp_do_redirect(tun->dev, xdp, xdp_prog); > - if (err) > - return err; > break; > case XDP_TX: > err = tun_xdp_tx(tun->dev, xdp); > - if (err < 0) > - return err; > break; > case XDP_PASS: > break; err is uninitialized in this case? > @@ -1651,6 +1648,13 @@ static int tun_xdp_act(struct tun_struct *tun, struct bpf_prog *xdp_prog, > break; > } > > + if (err < 0) { > + act = err; > + dev_core_stats_rx_dropped_inc(tun->dev); > + } else if (act == XDP_REDIRECT || act == XDP_TX) { > + dev_sw_netstats_rx_add(tun->dev, datasize); > + } > + > return act; > } > > -- > 2.41.0 >
On Tue, Jan 16, 2024 at 08:56:58PM +0800, Yunjian Wang wrote: > There are few places on the receive path where packet receives and packet > drops were not accounted for. This patch fixes that issue. > > Fixes: 8ae1aff0b331 ("tuntap: split out XDP logic") > Signed-off-by: Yunjian Wang <wangyunjian@huawei.com> > --- > v2: add Fixes tag > --- > drivers/net/tun.c | 12 ++++++++---- > 1 file changed, 8 insertions(+), 4 deletions(-) > > diff --git a/drivers/net/tun.c b/drivers/net/tun.c > index afa5497f7c35..232e5319ac77 100644 > --- a/drivers/net/tun.c > +++ b/drivers/net/tun.c > @@ -1626,17 +1626,14 @@ static int tun_xdp_act(struct tun_struct *tun, struct bpf_prog *xdp_prog, > struct xdp_buff *xdp, u32 act) > { > int err; > + unsigned int datasize = xdp->data_end - xdp->data; nit: if you post a v3 for some other reason then, as this is Networking code, please consider arranging local variables in reverse xmas tree order - longest line to shortest. unsigned int datasize = xdp->data_end - xdp->data; int err; ...
diff --git a/drivers/net/tun.c b/drivers/net/tun.c index afa5497f7c35..232e5319ac77 100644 --- a/drivers/net/tun.c +++ b/drivers/net/tun.c @@ -1626,17 +1626,14 @@ static int tun_xdp_act(struct tun_struct *tun, struct bpf_prog *xdp_prog, struct xdp_buff *xdp, u32 act) { int err; + unsigned int datasize = xdp->data_end - xdp->data; switch (act) { case XDP_REDIRECT: err = xdp_do_redirect(tun->dev, xdp, xdp_prog); - if (err) - return err; break; case XDP_TX: err = tun_xdp_tx(tun->dev, xdp); - if (err < 0) - return err; break; case XDP_PASS: break; @@ -1651,6 +1648,13 @@ static int tun_xdp_act(struct tun_struct *tun, struct bpf_prog *xdp_prog, break; } + if (err < 0) { + act = err; + dev_core_stats_rx_dropped_inc(tun->dev); + } else if (act == XDP_REDIRECT || act == XDP_TX) { + dev_sw_netstats_rx_add(tun->dev, datasize); + } + return act; }
There are few places on the receive path where packet receives and packet drops were not accounted for. This patch fixes that issue. Fixes: 8ae1aff0b331 ("tuntap: split out XDP logic") Signed-off-by: Yunjian Wang <wangyunjian@huawei.com> --- v2: add Fixes tag --- drivers/net/tun.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-)