public inbox for netdev@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] net: net_failover: Fix the deadlock in slave register
@ 2026-04-23  7:59 Faicker Mo
  2026-04-26  8:10 ` Simon Horman
  0 siblings, 1 reply; 2+ messages in thread
From: Faicker Mo @ 2026-04-23  7:59 UTC (permalink / raw)
  To: sridhar.samudrala@intel.com, andrew+netdev@lunn.ch,
	David S. Miller, Eric Dumazet, Paolo Abeni, sdf@fomichev.me
  Cc: open list:NETWORKING DRIVERS, open list

There is netdev_lock_ops() before the NETDEV_REGISTER notifier
in register_netdevice(), so use the non-locking functions
in net_failover_slave_register().

Call Trace:
 <TASK>
 __schedule+0x30d/0x7a0
 schedule+0x27/0x90
 schedule_preempt_disabled+0x15/0x30
 __mutex_lock.constprop.0+0x538/0x9e0
 __mutex_lock_slowpath+0x13/0x20
 mutex_lock+0x3b/0x50
 dev_set_mtu+0x40/0xe0
 net_failover_slave_register+0x24/0x280
 failover_slave_register+0x103/0x1b0
 failover_event+0x15e/0x210
 ? dropmon_net_event+0xac/0xe0
 notifier_call_chain+0x5e/0xe0
 raw_notifier_call_chain+0x16/0x30
 call_netdevice_notifiers_info+0x52/0xa0
 register_netdevice+0x5f4/0x7c0
 register_netdev+0x1e/0x40
 _mlx5e_probe+0xe2/0x370 [mlx5_core]
 mlx5e_probe+0x59/0x70 [mlx5_core]
 ? __pfx_mlx5e_probe+0x10/0x10 [mlx5_core]

Fixes: 4c975fd70002 ("net: hold instance lock during NETDEV_REGISTER/UP")
Signed-off-by: Faicker Mo <faicker.mo@zenlayer.com>
---
 drivers/net/net_failover.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/net/net_failover.c b/drivers/net/net_failover.c
index d0361aaf25ef..6702490eb4ed 100644
--- a/drivers/net/net_failover.c
+++ b/drivers/net/net_failover.c
@@ -502,7 +502,7 @@ static int net_failover_slave_register(struct net_device *slave_dev,

        /* Align MTU of slave with failover dev */
        orig_mtu = slave_dev->mtu;
-       err = dev_set_mtu(slave_dev, failover_dev->mtu);
+       err = netif_set_mtu(slave_dev, failover_dev->mtu);
        if (err) {
                netdev_err(failover_dev, "unable to change mtu of %s to %u register failed\n",
                           slave_dev->name, failover_dev->mtu);
@@ -512,7 +512,7 @@ static int net_failover_slave_register(struct net_device *slave_dev,
        dev_hold(slave_dev);

        if (netif_running(failover_dev)) {
-               err = dev_open(slave_dev, NULL);
+               err = netif_open(slave_dev, NULL);
                if (err && (err != -EBUSY)) {
                        netdev_err(failover_dev, "Opening slave %s failed err:%d\n",
                                   slave_dev->name, err);
@@ -565,7 +565,7 @@ static int net_failover_slave_register(struct net_device *slave_dev,
        dev_close(slave_dev);
 err_dev_open:
        dev_put(slave_dev);
-       dev_set_mtu(slave_dev, orig_mtu);
+       netif_set_mtu(slave_dev, orig_mtu);
 done:
        return err;
 }
--
2.34.1

^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] net: net_failover: Fix the deadlock in slave register
  2026-04-23  7:59 [PATCH] net: net_failover: Fix the deadlock in slave register Faicker Mo
@ 2026-04-26  8:10 ` Simon Horman
  0 siblings, 0 replies; 2+ messages in thread
From: Simon Horman @ 2026-04-26  8:10 UTC (permalink / raw)
  To: Faicker Mo
  Cc: sridhar.samudrala@intel.com, andrew+netdev@lunn.ch,
	David S. Miller, Eric Dumazet, Paolo Abeni, sdf@fomichev.me,
	open list:NETWORKING DRIVERS, open list

On Thu, Apr 23, 2026 at 07:59:43AM +0000, Faicker Mo wrote:
> There is netdev_lock_ops() before the NETDEV_REGISTER notifier
> in register_netdevice(), so use the non-locking functions
> in net_failover_slave_register().
> 
> Call Trace:
>  <TASK>
>  __schedule+0x30d/0x7a0
>  schedule+0x27/0x90
>  schedule_preempt_disabled+0x15/0x30
>  __mutex_lock.constprop.0+0x538/0x9e0
>  __mutex_lock_slowpath+0x13/0x20
>  mutex_lock+0x3b/0x50
>  dev_set_mtu+0x40/0xe0
>  net_failover_slave_register+0x24/0x280
>  failover_slave_register+0x103/0x1b0
>  failover_event+0x15e/0x210
>  ? dropmon_net_event+0xac/0xe0
>  notifier_call_chain+0x5e/0xe0
>  raw_notifier_call_chain+0x16/0x30
>  call_netdevice_notifiers_info+0x52/0xa0
>  register_netdevice+0x5f4/0x7c0
>  register_netdev+0x1e/0x40
>  _mlx5e_probe+0xe2/0x370 [mlx5_core]
>  mlx5e_probe+0x59/0x70 [mlx5_core]
>  ? __pfx_mlx5e_probe+0x10/0x10 [mlx5_core]
> 
> Fixes: 4c975fd70002 ("net: hold instance lock during NETDEV_REGISTER/UP")
> Signed-off-by: Faicker Mo <faicker.mo@zenlayer.com>

...

Unfortunately this patch does not apply: it seems that somehow all the tabs
were converted into spaces.

> @@ -565,7 +565,7 @@ static int net_failover_slave_register(struct net_device *slave_dev,
>         dev_close(slave_dev);

Claude Code flags that that this needs to be changed to netif_close()

>  err_dev_open:
>         dev_put(slave_dev);
> -       dev_set_mtu(slave_dev, orig_mtu);
> +       netif_set_mtu(slave_dev, orig_mtu);
>  done:
>         return err;
>  }

-- 
pw-bot: changes-requested

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2026-04-26  8:10 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-23  7:59 [PATCH] net: net_failover: Fix the deadlock in slave register Faicker Mo
2026-04-26  8:10 ` Simon Horman

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox