From 141182116b5442f582414b7914b75f9268e60942 Mon Sep 17 00:00:00 2001 From: Or Gerlitz Date: Thu, 21 Feb 2013 14:50:10 +0000 Subject: [PATCH] --- yaml --- r: 358871 b: refs/heads/master c: 5525d210fd55952262f30ba45b2acceb4a6a50e9 h: refs/heads/master i: 358869: 31258db62dda0e6e5128bb67ff03725d28fb6cad 358867: 3bd64a64e6e04c332f794aa706a5760d2e196c67 358863: d00bba61751608cbe1fdaa2e7f6a27729bdbf455 v: v3 --- [refs] | 2 +- trunk/drivers/infiniband/ulp/iser/iser_memory.c | 7 ++++--- trunk/drivers/infiniband/ulp/iser/iser_verbs.c | 8 ++++++-- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/[refs] b/[refs] index 68ecf63dcca0..23ede499b018 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 819a087316a63ef7d60e7b816d18c4e29a05861a +refs/heads/master: 5525d210fd55952262f30ba45b2acceb4a6a50e9 diff --git a/trunk/drivers/infiniband/ulp/iser/iser_memory.c b/trunk/drivers/infiniband/ulp/iser/iser_memory.c index 79c4f35ba0c9..be1edb04b085 100644 --- a/trunk/drivers/infiniband/ulp/iser/iser_memory.c +++ b/trunk/drivers/infiniband/ulp/iser/iser_memory.c @@ -369,10 +369,11 @@ int iser_reg_rdma_mem(struct iscsi_iser_task *iser_task, regd_buf = &iser_task->rdma_regd[cmd_dir]; aligned_len = iser_data_buf_aligned_len(mem, ibdev); - if (aligned_len != mem->dma_nents) { + if (aligned_len != mem->dma_nents || + (!ib_conn->fmr_pool && mem->dma_nents > 1)) { iscsi_conn->fmr_unalign_cnt++; - iser_warn("rdma alignment violation %d/%d aligned\n", - aligned_len, mem->size); + iser_warn("rdma alignment violation (%d/%d aligned) or FMR not supported\n", + aligned_len, mem->size); iser_data_buf_dump(mem, ibdev); /* unmap the command data before accessing it */ diff --git a/trunk/drivers/infiniband/ulp/iser/iser_verbs.c b/trunk/drivers/infiniband/ulp/iser/iser_verbs.c index 95a49affee44..4debadc53106 100644 --- a/trunk/drivers/infiniband/ulp/iser/iser_verbs.c +++ b/trunk/drivers/infiniband/ulp/iser/iser_verbs.c @@ -242,10 +242,14 @@ static int iser_create_ib_conn_res(struct iser_conn *ib_conn) IB_ACCESS_REMOTE_READ); ib_conn->fmr_pool = ib_create_fmr_pool(device->pd, ¶ms); - if (IS_ERR(ib_conn->fmr_pool)) { - ret = PTR_ERR(ib_conn->fmr_pool); + ret = PTR_ERR(ib_conn->fmr_pool); + if (IS_ERR(ib_conn->fmr_pool) && ret != -ENOSYS) { ib_conn->fmr_pool = NULL; goto out_err; + } else if (ret == -ENOSYS) { + ib_conn->fmr_pool = NULL; + iser_warn("FMRs are not supported, using unaligned mode\n"); + ret = 0; } memset(&init_attr, 0, sizeof init_attr);