mirror of
https://github.com/torvalds/linux.git
synced 2026-07-28 10:09:10 +02:00
RDMA/mlx5: Fix state and counter desync on loopback enable failure
In mlx5_ib_enable_lb(), dev->lb.enabled was unconditionally set to true even if mlx5_nic_vport_update_local_lb() failed. Fix this by only setting dev->lb.enabled on success. On failure, roll back the reference counters and return the error. Link: https://patch.msgid.link/r/20260601095818.2227-1-lirongqing@baidu.com Signed-off-by: Li RongQing <lirongqing@baidu.com> Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
This commit is contained in:
parent
309cacf953
commit
0d32eabccb
|
|
@ -2024,6 +2024,9 @@ int mlx5_ib_enable_lb(struct mlx5_ib_dev *dev, bool td, bool qp)
|
|||
dev->lb.qps == 1) {
|
||||
if (!dev->lb.enabled) {
|
||||
err = mlx5_nic_vport_update_local_lb(dev->mdev, true);
|
||||
if (err)
|
||||
goto err_rollback;
|
||||
|
||||
dev->lb.enabled = true;
|
||||
}
|
||||
}
|
||||
|
|
@ -2031,6 +2034,14 @@ int mlx5_ib_enable_lb(struct mlx5_ib_dev *dev, bool td, bool qp)
|
|||
mutex_unlock(&dev->lb.mutex);
|
||||
|
||||
return err;
|
||||
|
||||
err_rollback:
|
||||
if (td)
|
||||
dev->lb.user_td--;
|
||||
if (qp)
|
||||
dev->lb.qps--;
|
||||
mutex_unlock(&dev->lb.mutex);
|
||||
return err;
|
||||
}
|
||||
|
||||
void mlx5_ib_disable_lb(struct mlx5_ib_dev *dev, bool td, bool qp)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user