RDMA/netdev: Use priv_destructor for netdev cleanup
Now that the unregister_netdev flow for IPoIB no longer relies on external code we can now introduce the use of priv_destructor and needs_free_netdev. The rdma_netdev flow is switched to use the netdev common priv_destructor instead of the special free_rdma_netdev and the IPOIB ULP adjusted: - priv_destructor needs to switch to point to the ULP's destructor which will then call the rdma_ndev's in the right order - We need to be careful around the error unwind of register_netdev as it sometimes calls priv_destructor on failure - ULPs need to use ndo_init/uninit to ensure proper ordering of failures around register_netdev Switching to priv_destructor is a necessary pre-requisite to using the rtnl new_link mechanism. The VNIC user for rdma_netdev should also be revised, but that is left for another patch. Signed-off-by: Jason Gunthorpe <jgg@mellanox.com> Signed-off-by: Denis Drozdov <denisd@mellanox.com> Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
This commit is contained in:
@@ -5157,11 +5157,6 @@ done:
|
||||
return num_counters;
|
||||
}
|
||||
|
||||
static void mlx5_ib_free_rdma_netdev(struct net_device *netdev)
|
||||
{
|
||||
return mlx5_rdma_netdev_free(netdev);
|
||||
}
|
||||
|
||||
static struct net_device*
|
||||
mlx5_ib_alloc_rdma_netdev(struct ib_device *hca,
|
||||
u8 port_num,
|
||||
@@ -5171,17 +5166,12 @@ mlx5_ib_alloc_rdma_netdev(struct ib_device *hca,
|
||||
void (*setup)(struct net_device *))
|
||||
{
|
||||
struct net_device *netdev;
|
||||
struct rdma_netdev *rn;
|
||||
|
||||
if (type != RDMA_NETDEV_IPOIB)
|
||||
return ERR_PTR(-EOPNOTSUPP);
|
||||
|
||||
netdev = mlx5_rdma_netdev_alloc(to_mdev(hca)->mdev, hca,
|
||||
name, setup);
|
||||
if (likely(!IS_ERR_OR_NULL(netdev))) {
|
||||
rn = netdev_priv(netdev);
|
||||
rn->free_rdma_netdev = mlx5_ib_free_rdma_netdev;
|
||||
}
|
||||
return netdev;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user