net/core/rtnetlink.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
Gathering interface statistics can be a relatively expensive operation
on certain systems as it requires iterating over all the cpus.
RTEXT_FILTER_SKIP_STATS was first introduced [1] to skip AF_INET6
statistics from interface dumps and it was then extended [2] to
also exclude IFLA_VF_INFO.
The semantics of the flag does not seem to be limited to AF_INET
or VF statistics and having a way to query the interface status
(e.g: carrier, address) without retrieving its statistics seems
reasonable. So this patch extends the use RTEXT_FILTER_SKIP_STATS
to also affect IFLA_STATS.
[1] https://lore.kernel.org/all/20150911204848.GC9687@oracle.com/
[2] https://lore.kernel.org/all/20230611105108.122586-1-gal@nvidia.com/
Signed-off-by: Adrian Moreno <amorenoz@redhat.com>
---
net/core/rtnetlink.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
index 8040ff7c356e..88d52157ef1c 100644
--- a/net/core/rtnetlink.c
+++ b/net/core/rtnetlink.c
@@ -2123,7 +2123,8 @@ static int rtnl_fill_ifinfo(struct sk_buff *skb,
if (rtnl_phys_switch_id_fill(skb, dev))
goto nla_put_failure;
- if (rtnl_fill_stats(skb, dev))
+ if (~ext_filter_mask & RTEXT_FILTER_SKIP_STATS &&
+ rtnl_fill_stats(skb, dev))
goto nla_put_failure;
if (rtnl_fill_vf(skb, dev, ext_filter_mask))
--
2.51.0
Adrian Moreno <amorenoz@redhat.com> writes: > Gathering interface statistics can be a relatively expensive operation > on certain systems as it requires iterating over all the cpus. > > RTEXT_FILTER_SKIP_STATS was first introduced [1] to skip AF_INET6 > statistics from interface dumps and it was then extended [2] to > also exclude IFLA_VF_INFO. > > The semantics of the flag does not seem to be limited to AF_INET > or VF statistics and having a way to query the interface status > (e.g: carrier, address) without retrieving its statistics seems > reasonable. So this patch extends the use RTEXT_FILTER_SKIP_STATS > to also affect IFLA_STATS. > > [1] https://lore.kernel.org/all/20150911204848.GC9687@oracle.com/ > [2] https://lore.kernel.org/all/20230611105108.122586-1-gal@nvidia.com/ > > Signed-off-by: Adrian Moreno <amorenoz@redhat.com> > --- > net/core/rtnetlink.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c > index 8040ff7c356e..88d52157ef1c 100644 > --- a/net/core/rtnetlink.c > +++ b/net/core/rtnetlink.c > @@ -2123,7 +2123,8 @@ static int rtnl_fill_ifinfo(struct sk_buff *skb, > if (rtnl_phys_switch_id_fill(skb, dev)) > goto nla_put_failure; > > - if (rtnl_fill_stats(skb, dev)) > + if (~ext_filter_mask & RTEXT_FILTER_SKIP_STATS && > + rtnl_fill_stats(skb, dev)) Nit: I find this: if (!(ext_filter_mask & RTEXT_FILTER_SKIP_STATS) && rtnl_fill_stats(skb, dev)) more readable. It's a logical operation, so the bitwise negation is less clear IMO. -Toke
On Fri, Oct 24, 2025 at 7:20 AM Toke Høiland-Jørgensen <toke@redhat.com> wrote: > > Adrian Moreno <amorenoz@redhat.com> writes: > > > Gathering interface statistics can be a relatively expensive operation > > on certain systems as it requires iterating over all the cpus. > > > > RTEXT_FILTER_SKIP_STATS was first introduced [1] to skip AF_INET6 > > statistics from interface dumps and it was then extended [2] to > > also exclude IFLA_VF_INFO. > > > > The semantics of the flag does not seem to be limited to AF_INET > > or VF statistics and having a way to query the interface status > > (e.g: carrier, address) without retrieving its statistics seems > > reasonable. So this patch extends the use RTEXT_FILTER_SKIP_STATS > > to also affect IFLA_STATS. > > > > [1] https://lore.kernel.org/all/20150911204848.GC9687@oracle.com/ > > [2] https://lore.kernel.org/all/20230611105108.122586-1-gal@nvidia.com/ > > > > Signed-off-by: Adrian Moreno <amorenoz@redhat.com> > > --- > > net/core/rtnetlink.c | 3 ++- > > 1 file changed, 2 insertions(+), 1 deletion(-) > > > > diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c > > index 8040ff7c356e..88d52157ef1c 100644 > > --- a/net/core/rtnetlink.c > > +++ b/net/core/rtnetlink.c > > @@ -2123,7 +2123,8 @@ static int rtnl_fill_ifinfo(struct sk_buff *skb, > > if (rtnl_phys_switch_id_fill(skb, dev)) > > goto nla_put_failure; > > > > - if (rtnl_fill_stats(skb, dev)) > > + if (~ext_filter_mask & RTEXT_FILTER_SKIP_STATS && > > + rtnl_fill_stats(skb, dev)) > > Nit: I find this: > > if (!(ext_filter_mask & RTEXT_FILTER_SKIP_STATS) && > rtnl_fill_stats(skb, dev)) > > more readable. It's a logical operation, so the bitwise negation is less > clear IMO. > Same for me. I guess it is copy/pasted from line 1162 (in rtnl_vfinfo_size())
Le 24/10/2025 à 16:35, Eric Dumazet a écrit : > On Fri, Oct 24, 2025 at 7:20 AM Toke Høiland-Jørgensen <toke@redhat.com> wrote: >> >> Adrian Moreno <amorenoz@redhat.com> writes: >> >>> Gathering interface statistics can be a relatively expensive operation >>> on certain systems as it requires iterating over all the cpus. >>> >>> RTEXT_FILTER_SKIP_STATS was first introduced [1] to skip AF_INET6 >>> statistics from interface dumps and it was then extended [2] to >>> also exclude IFLA_VF_INFO. >>> >>> The semantics of the flag does not seem to be limited to AF_INET >>> or VF statistics and having a way to query the interface status >>> (e.g: carrier, address) without retrieving its statistics seems >>> reasonable. So this patch extends the use RTEXT_FILTER_SKIP_STATS >>> to also affect IFLA_STATS. >>> >>> [1] https://lore.kernel.org/all/20150911204848.GC9687@oracle.com/ >>> [2] https://lore.kernel.org/all/20230611105108.122586-1-gal@nvidia.com/ >>> >>> Signed-off-by: Adrian Moreno <amorenoz@redhat.com> >>> --- >>> net/core/rtnetlink.c | 3 ++- >>> 1 file changed, 2 insertions(+), 1 deletion(-) >>> >>> diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c >>> index 8040ff7c356e..88d52157ef1c 100644 >>> --- a/net/core/rtnetlink.c >>> +++ b/net/core/rtnetlink.c >>> @@ -2123,7 +2123,8 @@ static int rtnl_fill_ifinfo(struct sk_buff *skb, >>> if (rtnl_phys_switch_id_fill(skb, dev)) >>> goto nla_put_failure; >>> >>> - if (rtnl_fill_stats(skb, dev)) >>> + if (~ext_filter_mask & RTEXT_FILTER_SKIP_STATS && >>> + rtnl_fill_stats(skb, dev)) >> >> Nit: I find this: >> >> if (!(ext_filter_mask & RTEXT_FILTER_SKIP_STATS) && >> rtnl_fill_stats(skb, dev)) >> >> more readable. It's a logical operation, so the bitwise negation is less >> clear IMO. >> > > Same for me. I guess it is copy/pasted from line 1162 (in rtnl_vfinfo_size()) I agree. I didn't point it out because there are several occurrences in this file (line 1599 / rtnl_fill_vfinfo()).
On Fri, Oct 24, 2025 at 04:59:26PM +0200, Nicolas Dichtel wrote: > > > Le 24/10/2025 à 16:35, Eric Dumazet a écrit : > > On Fri, Oct 24, 2025 at 7:20 AM Toke Høiland-Jørgensen <toke@redhat.com> wrote: > >> > >> Adrian Moreno <amorenoz@redhat.com> writes: > >> > >>> Gathering interface statistics can be a relatively expensive operation > >>> on certain systems as it requires iterating over all the cpus. > >>> > >>> RTEXT_FILTER_SKIP_STATS was first introduced [1] to skip AF_INET6 > >>> statistics from interface dumps and it was then extended [2] to > >>> also exclude IFLA_VF_INFO. > >>> > >>> The semantics of the flag does not seem to be limited to AF_INET > >>> or VF statistics and having a way to query the interface status > >>> (e.g: carrier, address) without retrieving its statistics seems > >>> reasonable. So this patch extends the use RTEXT_FILTER_SKIP_STATS > >>> to also affect IFLA_STATS. > >>> > >>> [1] https://lore.kernel.org/all/20150911204848.GC9687@oracle.com/ > >>> [2] https://lore.kernel.org/all/20230611105108.122586-1-gal@nvidia.com/ > >>> > >>> Signed-off-by: Adrian Moreno <amorenoz@redhat.com> > >>> --- > >>> net/core/rtnetlink.c | 3 ++- > >>> 1 file changed, 2 insertions(+), 1 deletion(-) > >>> > >>> diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c > >>> index 8040ff7c356e..88d52157ef1c 100644 > >>> --- a/net/core/rtnetlink.c > >>> +++ b/net/core/rtnetlink.c > >>> @@ -2123,7 +2123,8 @@ static int rtnl_fill_ifinfo(struct sk_buff *skb, > >>> if (rtnl_phys_switch_id_fill(skb, dev)) > >>> goto nla_put_failure; > >>> > >>> - if (rtnl_fill_stats(skb, dev)) > >>> + if (~ext_filter_mask & RTEXT_FILTER_SKIP_STATS && > >>> + rtnl_fill_stats(skb, dev)) > >> > >> Nit: I find this: > >> > >> if (!(ext_filter_mask & RTEXT_FILTER_SKIP_STATS) && > >> rtnl_fill_stats(skb, dev)) > >> > >> more readable. It's a logical operation, so the bitwise negation is less > >> clear IMO. > >> > > > > Same for me. I guess it is copy/pasted from line 1162 (in rtnl_vfinfo_size()) > I agree. I didn't point it out because there are several occurrences in this > file (line 1599 / rtnl_fill_vfinfo()). > I glanced through this file and assumed it was the agreed style but looking at other flags, RTEXT_FILTER_SKIP_STATS seems to be the exception. I'll change it, and also send another patch changing the style of the other ocurrances. Thanks. Adrián
Le 23/10/2025 à 10:34, Adrian Moreno a écrit : > Gathering interface statistics can be a relatively expensive operation > on certain systems as it requires iterating over all the cpus. > > RTEXT_FILTER_SKIP_STATS was first introduced [1] to skip AF_INET6 > statistics from interface dumps and it was then extended [2] to > also exclude IFLA_VF_INFO. > > The semantics of the flag does not seem to be limited to AF_INET > or VF statistics and having a way to query the interface status > (e.g: carrier, address) without retrieving its statistics seems > reasonable. So this patch extends the use RTEXT_FILTER_SKIP_STATS > to also affect IFLA_STATS. > > [1] https://lore.kernel.org/all/20150911204848.GC9687@oracle.com/ > [2] https://lore.kernel.org/all/20230611105108.122586-1-gal@nvidia.com/ > > Signed-off-by: Adrian Moreno <amorenoz@redhat.com> > --- > net/core/rtnetlink.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c > index 8040ff7c356e..88d52157ef1c 100644 > --- a/net/core/rtnetlink.c > +++ b/net/core/rtnetlink.c > @@ -2123,7 +2123,8 @@ static int rtnl_fill_ifinfo(struct sk_buff *skb, > if (rtnl_phys_switch_id_fill(skb, dev)) > goto nla_put_failure; > > - if (rtnl_fill_stats(skb, dev)) > + if (~ext_filter_mask & RTEXT_FILTER_SKIP_STATS && Maybe parentheses around this first condition? The size could be adjusted accordingly in if_nlmsg_size(). > + rtnl_fill_stats(skb, dev)) > goto nla_put_failure; > > if (rtnl_fill_vf(skb, dev, ext_filter_mask))
© 2016 - 2026 Red Hat, Inc.