|
@@ -554,9 +554,6 @@ static int srp_create_ch_ib(struct srp_rdma_ch *ch)
|
|
|
"FR pool allocation failed (%d)\n", ret);
|
|
|
goto err_qp;
|
|
|
}
|
|
|
- if (ch->fr_pool)
|
|
|
- srp_destroy_fr_pool(ch->fr_pool);
|
|
|
- ch->fr_pool = fr_pool;
|
|
|
} else if (dev->use_fmr) {
|
|
|
fmr_pool = srp_alloc_fmr_pool(target);
|
|
|
if (IS_ERR(fmr_pool)) {
|
|
@@ -565,9 +562,6 @@ static int srp_create_ch_ib(struct srp_rdma_ch *ch)
|
|
|
"FMR pool allocation failed (%d)\n", ret);
|
|
|
goto err_qp;
|
|
|
}
|
|
|
- if (ch->fmr_pool)
|
|
|
- ib_destroy_fmr_pool(ch->fmr_pool);
|
|
|
- ch->fmr_pool = fmr_pool;
|
|
|
}
|
|
|
|
|
|
if (ch->qp)
|
|
@@ -581,6 +575,16 @@ static int srp_create_ch_ib(struct srp_rdma_ch *ch)
|
|
|
ch->recv_cq = recv_cq;
|
|
|
ch->send_cq = send_cq;
|
|
|
|
|
|
+ if (dev->use_fast_reg) {
|
|
|
+ if (ch->fr_pool)
|
|
|
+ srp_destroy_fr_pool(ch->fr_pool);
|
|
|
+ ch->fr_pool = fr_pool;
|
|
|
+ } else if (dev->use_fmr) {
|
|
|
+ if (ch->fmr_pool)
|
|
|
+ ib_destroy_fmr_pool(ch->fmr_pool);
|
|
|
+ ch->fmr_pool = fmr_pool;
|
|
|
+ }
|
|
|
+
|
|
|
kfree(init_attr);
|
|
|
return 0;
|
|
|
|