Commit 32927e28 authored by Mark Bloch's avatar Mark Bloch Committed by Jason Gunthorpe
Browse files

IB/mlx5: Don't clean uninitialized UMR resources



In case we failed to create UMR resources, mark them as invalid so we
won't try to destroy them on the unwind path.

Add the relevant checks to destroy_umrc_res(), this is done for the
unlikely event ib_register_device() or create_umr_res() err out and we
try to destroy invalid objects.

Fixes: 42cea83f ("IB/mlx5: Fix cleanup order on unload")
Signed-off-by: default avatarMark Bloch <markb@mellanox.com>
Signed-off-by: default avatarLeon Romanovsky <leonro@mellanox.com>
Signed-off-by: default avatarJason Gunthorpe <jgg@mellanox.com>
parent e8980d67
Loading
Loading
Loading
Loading
+9 −3
Original line number Diff line number Diff line
@@ -3448,8 +3448,11 @@ static void destroy_umrc_res(struct mlx5_ib_dev *dev)
	if (err)
		mlx5_ib_warn(dev, "mr cache cleanup failed\n");

	if (dev->umrc.qp)
		mlx5_ib_destroy_qp(dev->umrc.qp);
	if (dev->umrc.cq)
		ib_free_cq(dev->umrc.cq);
	if (dev->umrc.pd)
		ib_dealloc_pd(dev->umrc.pd);
}

@@ -3552,12 +3555,15 @@ static int create_umr_res(struct mlx5_ib_dev *dev)

error_4:
	mlx5_ib_destroy_qp(qp);
	dev->umrc.qp = NULL;

error_3:
	ib_free_cq(cq);
	dev->umrc.cq = NULL;

error_2:
	ib_dealloc_pd(pd);
	dev->umrc.pd = NULL;

error_0:
	kfree(attr);
+3 −0
Original line number Diff line number Diff line
@@ -739,6 +739,9 @@ int mlx5_mr_cache_cleanup(struct mlx5_ib_dev *dev)
{
	int i;

	if (!dev->cache.wq)
		return 0;

	dev->cache.stopped = 1;
	flush_workqueue(dev->cache.wq);