diff options
| -rw-r--r-- | drivers/infiniband/ulp/iser/iser_memory.c | 7 | ||||
| -rw-r--r-- | drivers/infiniband/ulp/iser/iser_verbs.c | 8 |
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, ¶ms); | 244 | ib_conn->fmr_pool = ib_create_fmr_pool(device->pd, ¶ms); |
| 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); |
