aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/infiniband/ulp/iser/iser_memory.c7
-rw-r--r--drivers/infiniband/ulp/iser/iser_verbs.c8
2 files changed, 10 insertions, 5 deletions
diff --git a/drivers/infiniband/ulp/iser/iser_memory.c b/drivers/infiniband/ulp/iser/iser_memory.c
index 79c4f35ba0c9..be1edb04b085 100644
--- a/drivers/infiniband/ulp/iser/iser_memory.c
+++ b/drivers/infiniband/ulp/iser/iser_memory.c
@@ -369,10 +369,11 @@ int iser_reg_rdma_mem(struct iscsi_iser_task *iser_task,
369 regd_buf = &iser_task->rdma_regd[cmd_dir]; 369 regd_buf = &iser_task->rdma_regd[cmd_dir];
370 370
371 aligned_len = iser_data_buf_aligned_len(mem, ibdev); 371 aligned_len = iser_data_buf_aligned_len(mem, ibdev);
372 if (aligned_len != mem->dma_nents) { 372 if (aligned_len != mem->dma_nents ||
373 (!ib_conn->fmr_pool && mem->dma_nents > 1)) {
373 iscsi_conn->fmr_unalign_cnt++; 374 iscsi_conn->fmr_unalign_cnt++;
374 iser_warn("rdma alignment violation %d/%d aligned\n", 375 iser_warn("rdma alignment violation (%d/%d aligned) or FMR not supported\n",
375 aligned_len, mem->size); 376 aligned_len, mem->size);
376 iser_data_buf_dump(mem, ibdev); 377 iser_data_buf_dump(mem, ibdev);
377 378
378 /* unmap the command data before accessing it */ 379 /* unmap the command data before accessing it */
diff --git a/drivers/infiniband/ulp/iser/iser_verbs.c b/drivers/infiniband/ulp/iser/iser_verbs.c
index 95a49affee44..4debadc53106 100644
--- a/drivers/infiniband/ulp/iser/iser_verbs.c
+++ b/drivers/infiniband/ulp/iser/iser_verbs.c
@@ -242,10 +242,14 @@ static int iser_create_ib_conn_res(struct iser_conn *ib_conn)
242 IB_ACCESS_REMOTE_READ); 242 IB_ACCESS_REMOTE_READ);
243 243
244 ib_conn->fmr_pool = ib_create_fmr_pool(device->pd, &params); 244 ib_conn->fmr_pool = ib_create_fmr_pool(device->pd, &params);
245 if (IS_ERR(ib_conn->fmr_pool)) { 245 ret = PTR_ERR(ib_conn->fmr_pool);
246 ret = PTR_ERR(ib_conn->fmr_pool); 246 if (IS_ERR(ib_conn->fmr_pool) && ret != -ENOSYS) {
247 ib_conn->fmr_pool = NULL; 247 ib_conn->fmr_pool = NULL;
248 goto out_err; 248 goto out_err;
249 } else if (ret == -ENOSYS) {
250 ib_conn->fmr_pool = NULL;
251 iser_warn("FMRs are not supported, using unaligned mode\n");
252 ret = 0;
249 } 253 }
250 254
251 memset(&init_attr, 0, sizeof init_attr); 255 memset(&init_attr, 0, sizeof init_attr);