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 leitao@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 jv@jvosburgh.net Signed-off-by: Breno Leitao leitao@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);