mirror of https://gitee.com/openkylin/linux.git
IB/mlx4: Move rtnl locking to the right place
On the one hand, the invocation of netdev_master_upper_dev_get() within mlx4_ib_scan_netdevs() must be done with rtnl lock held. On the other hand, it's wrong to call rtnl_lock() from within this function since it's also called by our netdev notifier callback. Therefore move the locking to mlx4_ib_add() so that both cases are covered. Signed-off-by: Moni Shoua <monis@mellanox.co.il> Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com> Signed-off-by: Roland Dreier <roland@purestorage.com>
This commit is contained in:
parent
acc4fccf4e
commit
4ce5a5744a
|
@ -1707,10 +1707,8 @@ static void mlx4_ib_scan_netdevs(struct mlx4_ib_dev *ibdev)
|
||||||
iboe->netdevs[port - 1], port);
|
iboe->netdevs[port - 1], port);
|
||||||
if (iboe->netdevs[port - 1] &&
|
if (iboe->netdevs[port - 1] &&
|
||||||
netif_is_bond_slave(iboe->netdevs[port - 1])) {
|
netif_is_bond_slave(iboe->netdevs[port - 1])) {
|
||||||
rtnl_lock();
|
|
||||||
iboe->masters[port - 1] = netdev_master_upper_dev_get(
|
iboe->masters[port - 1] = netdev_master_upper_dev_get(
|
||||||
iboe->netdevs[port - 1]);
|
iboe->netdevs[port - 1]);
|
||||||
rtnl_unlock();
|
|
||||||
}
|
}
|
||||||
curr_master = iboe->masters[port - 1];
|
curr_master = iboe->masters[port - 1];
|
||||||
|
|
||||||
|
@ -2100,7 +2098,9 @@ static void *mlx4_ib_add(struct mlx4_dev *dev)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
rtnl_lock();
|
||||||
mlx4_ib_scan_netdevs(ibdev);
|
mlx4_ib_scan_netdevs(ibdev);
|
||||||
|
rtnl_unlock();
|
||||||
mlx4_ib_init_gid_table(ibdev);
|
mlx4_ib_init_gid_table(ibdev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue