Message ID | 20250110004505.3210140-1-kuba@kernel.org (mailing list archive) |
---|---|
State | New |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net-next] net: warn during dump if NAPI list is not sorted | expand |
On Thu, Jan 09, 2025 at 04:45:04PM -0800, Jakub Kicinski wrote: > Dump continuation depends on the NAPI list being sorted. > Broken netlink dump continuation may be rare and hard to debug > so add a warning if we notice the potential problem while walking > the list. > > Signed-off-by: Jakub Kicinski <kuba@kernel.org> > --- > This is really a follow up to commit d6c7b03497ee ("net: make sure > we retain NAPI ordering on netdev->napi_list") but I had to wait > for some fixes to make it to net-next. > > CC: jdamato@fastly.com > CC: almasrymina@google.com > --- > net/core/netdev-genl.c | 7 +++++++ > 1 file changed, 7 insertions(+) > > diff --git a/net/core/netdev-genl.c b/net/core/netdev-genl.c > index a3bdaf075b6b..c59619a2ec23 100644 > --- a/net/core/netdev-genl.c > +++ b/net/core/netdev-genl.c > @@ -263,14 +263,21 @@ netdev_nl_napi_dump_one(struct net_device *netdev, struct sk_buff *rsp, > struct netdev_nl_dump_ctx *ctx) > { > struct napi_struct *napi; > + unsigned int prev_id; > int err = 0; > > if (!(netdev->flags & IFF_UP)) > return err; > > + prev_id = UINT_MAX; > list_for_each_entry(napi, &netdev->napi_list, dev_list) { > if (napi->napi_id < MIN_NAPI_ID) > continue; > + > + /* Dump continuation below depends on the list being sorted */ > + WARN_ON_ONCE(napi->napi_id >= prev_id); > + prev_id = napi->napi_id; > + > if (ctx->napi_id && napi->napi_id >= ctx->napi_id) > continue; > Reviewed-by: Michal Swiatkowski <michal.swiatkowski@linux.intel.com> > -- > 2.47.1
diff --git a/net/core/netdev-genl.c b/net/core/netdev-genl.c index a3bdaf075b6b..c59619a2ec23 100644 --- a/net/core/netdev-genl.c +++ b/net/core/netdev-genl.c @@ -263,14 +263,21 @@ netdev_nl_napi_dump_one(struct net_device *netdev, struct sk_buff *rsp, struct netdev_nl_dump_ctx *ctx) { struct napi_struct *napi; + unsigned int prev_id; int err = 0; if (!(netdev->flags & IFF_UP)) return err; + prev_id = UINT_MAX; list_for_each_entry(napi, &netdev->napi_list, dev_list) { if (napi->napi_id < MIN_NAPI_ID) continue; + + /* Dump continuation below depends on the list being sorted */ + WARN_ON_ONCE(napi->napi_id >= prev_id); + prev_id = napi->napi_id; + if (ctx->napi_id && napi->napi_id >= ctx->napi_id) continue;
Dump continuation depends on the NAPI list being sorted. Broken netlink dump continuation may be rare and hard to debug so add a warning if we notice the potential problem while walking the list. Signed-off-by: Jakub Kicinski <kuba@kernel.org> --- This is really a follow up to commit d6c7b03497ee ("net: make sure we retain NAPI ordering on netdev->napi_list") but I had to wait for some fixes to make it to net-next. CC: jdamato@fastly.com CC: almasrymina@google.com --- net/core/netdev-genl.c | 7 +++++++ 1 file changed, 7 insertions(+)