Skip to content

Commit d2ccd05

Browse files
Stanislav Fomichevkuba-moo
authored andcommitted
net: switch to netif_disable_lro in inetdev_init
Cosmin reports the following deadlock: dump_stack_lvl+0x62/0x90 print_deadlock_bug+0x274/0x3b0 __lock_acquire+0x1229/0x2470 lock_acquire+0xb7/0x2b0 __mutex_lock+0xa6/0xd20 dev_disable_lro+0x20/0x80 inetdev_init+0x12f/0x1f0 inetdev_event+0x48b/0x870 notifier_call_chain+0x38/0xf0 netif_change_net_namespace+0x72e/0x9f0 do_setlink.isra.0+0xd5/0x1220 rtnl_newlink+0x7ea/0xb50 rtnetlink_rcv_msg+0x459/0x5e0 netlink_rcv_skb+0x54/0x100 netlink_unicast+0x193/0x270 netlink_sendmsg+0x204/0x450 Switch to netif_disable_lro which assumes the caller holds the instance lock. inetdev_init is called for blackhole device (which sw device and doesn't grab instance lock) and from REGISTER/UNREGISTER notifiers. We already hold the instance lock for REGISTER notifier during netns change and we'll soon hold the lock during other paths. Reviewed-by: Jakub Kicinski <[email protected]> Reported-by: Cosmin Ratiu <[email protected]> Fixes: ad7c7b2 ("net: hold netdev instance lock during sysfs operations") Signed-off-by: Stanislav Fomichev <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
1 parent 09bccf5 commit d2ccd05

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

net/ipv4/devinet.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,7 @@ static struct in_device *inetdev_init(struct net_device *dev)
281281
if (!in_dev->arp_parms)
282282
goto out_kfree;
283283
if (IPV4_DEVCONF(in_dev->cnf, FORWARDING))
284-
dev_disable_lro(dev);
284+
netif_disable_lro(dev);
285285
/* Reference in_dev->dev */
286286
netdev_hold(dev, &in_dev->dev_tracker, GFP_KERNEL);
287287
/* Account for reference dev->ip_ptr (below) */

0 commit comments

Comments
 (0)