mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-21 08:19:28 +00:00
rdma/cxgb4: Fix memory leaks during module exit
Fix memory leaks of iw_cxgb4 module in the exit path Signed-off-by: Raju Rangoju <rajur@chelsio.com> Reviewed-by: Steve Wise <swise@opengridcomputing.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:
parent
4542d66bb2
commit
d470264583
1 changed files with 7 additions and 3 deletions
|
@ -767,7 +767,7 @@ void c4iw_release_dev_ucontext(struct c4iw_rdev *rdev,
|
||||||
kfree(entry);
|
kfree(entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
list_for_each_safe(pos, nxt, &uctx->qpids) {
|
list_for_each_safe(pos, nxt, &uctx->cqids) {
|
||||||
entry = list_entry(pos, struct c4iw_qid_list, entry);
|
entry = list_entry(pos, struct c4iw_qid_list, entry);
|
||||||
list_del_init(&entry->entry);
|
list_del_init(&entry->entry);
|
||||||
kfree(entry);
|
kfree(entry);
|
||||||
|
@ -880,13 +880,15 @@ static int c4iw_rdev_open(struct c4iw_rdev *rdev)
|
||||||
rdev->free_workq = create_singlethread_workqueue("iw_cxgb4_free");
|
rdev->free_workq = create_singlethread_workqueue("iw_cxgb4_free");
|
||||||
if (!rdev->free_workq) {
|
if (!rdev->free_workq) {
|
||||||
err = -ENOMEM;
|
err = -ENOMEM;
|
||||||
goto err_free_status_page;
|
goto err_free_status_page_and_wr_log;
|
||||||
}
|
}
|
||||||
|
|
||||||
rdev->status_page->db_off = 0;
|
rdev->status_page->db_off = 0;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
err_free_status_page:
|
err_free_status_page_and_wr_log:
|
||||||
|
if (c4iw_wr_log && rdev->wr_log)
|
||||||
|
kfree(rdev->wr_log);
|
||||||
free_page((unsigned long)rdev->status_page);
|
free_page((unsigned long)rdev->status_page);
|
||||||
destroy_ocqp_pool:
|
destroy_ocqp_pool:
|
||||||
c4iw_ocqp_pool_destroy(rdev);
|
c4iw_ocqp_pool_destroy(rdev);
|
||||||
|
@ -903,9 +905,11 @@ static void c4iw_rdev_close(struct c4iw_rdev *rdev)
|
||||||
{
|
{
|
||||||
destroy_workqueue(rdev->free_workq);
|
destroy_workqueue(rdev->free_workq);
|
||||||
kfree(rdev->wr_log);
|
kfree(rdev->wr_log);
|
||||||
|
c4iw_release_dev_ucontext(rdev, &rdev->uctx);
|
||||||
free_page((unsigned long)rdev->status_page);
|
free_page((unsigned long)rdev->status_page);
|
||||||
c4iw_pblpool_destroy(rdev);
|
c4iw_pblpool_destroy(rdev);
|
||||||
c4iw_rqtpool_destroy(rdev);
|
c4iw_rqtpool_destroy(rdev);
|
||||||
|
c4iw_ocqp_pool_destroy(rdev);
|
||||||
c4iw_destroy_resource(&rdev->resource);
|
c4iw_destroy_resource(&rdev->resource);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue