提交 ffbf4c34 编写于 作者: R Roland Dreier 提交者: Roland Dreier

[PATCH] IB: unmap FMRs when destroying FMR pool

Make sure that all FMRs are unmapped before we deallocate them so that
we don't leak references to our protection domain when destroying an
FMR pool.  (Bug reported by Guy German <guyg@voltaire.com>)
Signed-off-by: NRoland Dreier <rolandd@cisco.com>
上级 2e8b981c
...@@ -334,6 +334,7 @@ void ib_destroy_fmr_pool(struct ib_fmr_pool *pool) ...@@ -334,6 +334,7 @@ void ib_destroy_fmr_pool(struct ib_fmr_pool *pool)
{ {
struct ib_pool_fmr *fmr; struct ib_pool_fmr *fmr;
struct ib_pool_fmr *tmp; struct ib_pool_fmr *tmp;
LIST_HEAD(fmr_list);
int i; int i;
kthread_stop(pool->thread); kthread_stop(pool->thread);
...@@ -341,6 +342,11 @@ void ib_destroy_fmr_pool(struct ib_fmr_pool *pool) ...@@ -341,6 +342,11 @@ void ib_destroy_fmr_pool(struct ib_fmr_pool *pool)
i = 0; i = 0;
list_for_each_entry_safe(fmr, tmp, &pool->free_list, list) { list_for_each_entry_safe(fmr, tmp, &pool->free_list, list) {
if (fmr->remap_count) {
INIT_LIST_HEAD(&fmr_list);
list_add_tail(&fmr->fmr->list, &fmr_list);
ib_unmap_fmr(&fmr_list);
}
ib_dealloc_fmr(fmr->fmr); ib_dealloc_fmr(fmr->fmr);
list_del(&fmr->list); list_del(&fmr->list);
kfree(fmr); kfree(fmr);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册