| From: Xin Long <lucien.xin@gmail.com> |
| Date: Sun, 22 Apr 2018 19:11:50 +0800 |
| Subject: bonding: do not set slave_dev npinfo before slave_enable_netpoll in |
| bond_enslave |
| |
| commit ddea788c63094f7c483783265563dd5b50052e28 upstream. |
| |
| After Commit 8a8efa22f51b ("bonding: sync netpoll code with bridge"), it |
| would set slave_dev npinfo in slave_enable_netpoll when enslaving a dev |
| if bond->dev->npinfo was set. |
| |
| However now slave_dev npinfo is set with bond->dev->npinfo before calling |
| slave_enable_netpoll. With slave_dev npinfo set, __netpoll_setup called |
| in slave_enable_netpoll will not call slave dev's .ndo_netpoll_setup(). |
| It causes that the lower dev of this slave dev can't set its npinfo. |
| |
| One way to reproduce it: |
| |
| # modprobe bonding |
| # brctl addbr br0 |
| # brctl addif br0 eth1 |
| # ifconfig bond0 192.168.122.1/24 up |
| # ifenslave bond0 eth2 |
| # systemctl restart netconsole |
| # ifenslave bond0 br0 |
| # ifconfig eth2 down |
| # systemctl restart netconsole |
| |
| The netpoll won't really work. |
| |
| This patch is to remove that slave_dev npinfo setting in bond_enslave(). |
| |
| Fixes: 8a8efa22f51b ("bonding: sync netpoll code with bridge") |
| Signed-off-by: Xin Long <lucien.xin@gmail.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| --- |
| drivers/net/bonding/bond_main.c | 3 +-- |
| 1 file changed, 1 insertion(+), 2 deletions(-) |
| |
| --- a/drivers/net/bonding/bond_main.c |
| +++ b/drivers/net/bonding/bond_main.c |
| @@ -1535,8 +1535,7 @@ int bond_enslave(struct net_device *bond |
| } /* switch(bond_mode) */ |
| |
| #ifdef CONFIG_NET_POLL_CONTROLLER |
| - slave_dev->npinfo = bond->dev->npinfo; |
| - if (slave_dev->npinfo) { |
| + if (bond->dev->npinfo) { |
| if (slave_enable_netpoll(new_slave)) { |
| pr_info("Error, %s: master_dev is using netpoll, but new slave device does not support netpoll\n", |
| bond_dev->name); |