mlx5ib: Make sure the congestion work timer does not escape the drain procedure.

If the mlx5_ib_read_cong_stats() function was running when mlx5ib was unloaded,
because this function unconditionally restarts the timer, the timer can still
be pending after the delayed work has been cancelled. To fix this simply loop
on the delayed work cancel procedure as long as it returns non-zero.

Submitted by:   hselasky@
Approved by:    hselasky (mentor)
MFC after:      1 week
Sponsored by:   Mellanox Technologies
This commit is contained in:
Slava Shwartsman 2018-12-05 13:48:39 +00:00
parent ac2fdeb4e7
commit d3300d4aed
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=341570

View File

@ -393,7 +393,8 @@ void
mlx5_ib_cleanup_congestion(struct mlx5_ib_dev *dev)
{
cancel_delayed_work_sync(&dev->congestion.dwork);
while (cancel_delayed_work_sync(&dev->congestion.dwork))
;
sysctl_ctx_free(&dev->congestion.ctx);
sx_destroy(&dev->congestion.lock);
}