Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5525d210 authored by Or Gerlitz's avatar Or Gerlitz Committed by Roland Dreier
Browse files

IB/iser: Enable iser when FMRs are not supported



Reuse the "SG unaligned for FMR" driver flow to make the initiator
functional when running over driver instance which doesn't support
FMRs, such as a mlx4 virtual function.

Signed-off-by: default avatarOr Gerlitz <ogerlitz@mellanox.com>
Signed-off-by: default avatarAlex Tabachnik <alext@mellanox.com>
Signed-off-by: default avatarRoland Dreier <roland@purestorage.com>
parent 819a0873
Loading
Loading
Loading
Loading
+4 −3
Original line number Original line Diff line number Diff line
@@ -369,9 +369,10 @@ int iser_reg_rdma_mem(struct iscsi_iser_task *iser_task,
	regd_buf = &iser_task->rdma_regd[cmd_dir];
	regd_buf = &iser_task->rdma_regd[cmd_dir];


	aligned_len = iser_data_buf_aligned_len(mem, ibdev);
	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++;
		iscsi_conn->fmr_unalign_cnt++;
		iser_warn("rdma alignment violation %d/%d aligned\n",
		iser_warn("rdma alignment violation (%d/%d aligned) or FMR not supported\n",
			  aligned_len, mem->size);
			  aligned_len, mem->size);
		iser_data_buf_dump(mem, ibdev);
		iser_data_buf_dump(mem, ibdev);


+6 −2
Original line number Original line Diff line number Diff line
@@ -242,10 +242,14 @@ static int iser_create_ib_conn_res(struct iser_conn *ib_conn)
				    IB_ACCESS_REMOTE_READ);
				    IB_ACCESS_REMOTE_READ);


	ib_conn->fmr_pool = ib_create_fmr_pool(device->pd, &params);
	ib_conn->fmr_pool = ib_create_fmr_pool(device->pd, &params);
	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;
		ib_conn->fmr_pool = NULL;
		goto out_err;
		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);
	memset(&init_attr, 0, sizeof init_attr);