Hello Jay, On Tue, Sep 09, 2025 at 05:18:26PM -0700, Jay Vosburgh wrote: > Second, I'm a bit unsure what's going on with the struct netpoll > *np parameter of __netpoll_setup for the second and subsequent netpoll > instances (i.e., second and later call), as the function will > unconditionally do > > npinfo->netpoll = np; > > which it seems like would overwrite the "np" supplied by any > prior calls to __netpoll_setup.
This is clearly a bug. Trying to understand where this field is used, it seems it is not used at all. I was not able to find any usage of it, and removing it and compiling with `allyesconfig` didn't complain about any other users also. I think we should remove it. commit 5da5611575ce94ca557c194d4147ae3011cedb6f Author: Breno Leitao <lei...@debian.org> Date: Wed Sep 10 06:32:25 2025 -0700 netpoll: remove unused netpoll pointer from netpoll_info The netpoll_info structure contained a useless pointer back to its associated netpoll. This field is never used, and the assignment in __netpoll_setup() is does not comtemplate multiple instances, as reported by Jay[1]. Drop both the member and its initialization to simplify the structure. Link: https://lore.kernel.org/all/2930648.1757463506@famine/ [1] Reported-by: Jay Vosburgh <j...@jvosburgh.net> Signed-off-by: Breno Leitao <lei...@debian.org> diff --git a/include/linux/netpoll.h b/include/linux/netpoll.h index b5ea9882eda8b..f22eec4660405 100644 --- a/include/linux/netpoll.h +++ b/include/linux/netpoll.h @@ -55,7 +55,6 @@ struct netpoll_info { struct delayed_work tx_work; - struct netpoll *netpoll; struct rcu_head rcu; }; diff --git a/net/core/netpoll.c b/net/core/netpoll.c index 5f65b62346d4e..c58faa7471650 100644 --- a/net/core/netpoll.c +++ b/net/core/netpoll.c @@ -591,7 +591,6 @@ int __netpoll_setup(struct netpoll *np, struct net_device *ndev) np->dev = ndev; strscpy(np->dev_name, ndev->name, IFNAMSIZ); - npinfo->netpoll = np; /* fill up the skb queue */ refill_skbs(np);