diff options
-rw-r--r-- | drivers/infiniband/ulp/isert/ib_isert.c | 28 |
1 files changed, 12 insertions, 16 deletions
diff --git a/drivers/infiniband/ulp/isert/ib_isert.c b/drivers/infiniband/ulp/isert/ib_isert.c index 9ef919341557..421182be6e3f 100644 --- a/drivers/infiniband/ulp/isert/ib_isert.c +++ b/drivers/infiniband/ulp/isert/ib_isert.c | |||
@@ -2169,26 +2169,22 @@ isert_map_fr_pagelist(struct ib_device *ib_dev, | |||
2169 | 2169 | ||
2170 | static int | 2170 | static int |
2171 | isert_fast_reg_mr(struct fast_reg_descriptor *fr_desc, | 2171 | isert_fast_reg_mr(struct fast_reg_descriptor *fr_desc, |
2172 | struct isert_cmd *isert_cmd, struct isert_conn *isert_conn, | 2172 | struct isert_conn *isert_conn, struct scatterlist *sg_start, |
2173 | struct ib_sge *ib_sge, u32 offset, unsigned int data_len) | 2173 | struct ib_sge *ib_sge, u32 sg_nents, u32 offset, |
2174 | unsigned int data_len) | ||
2174 | { | 2175 | { |
2175 | struct iscsi_cmd *cmd = isert_cmd->iscsi_cmd; | ||
2176 | struct ib_device *ib_dev = isert_conn->conn_cm_id->device; | 2176 | struct ib_device *ib_dev = isert_conn->conn_cm_id->device; |
2177 | struct scatterlist *sg_start; | ||
2178 | u32 sg_off, page_off; | ||
2179 | struct ib_send_wr fr_wr, inv_wr; | 2177 | struct ib_send_wr fr_wr, inv_wr; |
2180 | struct ib_send_wr *bad_wr, *wr = NULL; | 2178 | struct ib_send_wr *bad_wr, *wr = NULL; |
2179 | int ret, pagelist_len; | ||
2180 | u32 page_off; | ||
2181 | u8 key; | 2181 | u8 key; |
2182 | int ret, sg_nents, pagelist_len; | ||
2183 | 2182 | ||
2184 | sg_off = offset / PAGE_SIZE; | 2183 | sg_nents = min_t(unsigned int, sg_nents, ISCSI_ISER_SG_TABLESIZE); |
2185 | sg_start = &cmd->se_cmd.t_data_sg[sg_off]; | ||
2186 | sg_nents = min_t(unsigned int, cmd->se_cmd.t_data_nents - sg_off, | ||
2187 | ISCSI_ISER_SG_TABLESIZE); | ||
2188 | page_off = offset % PAGE_SIZE; | 2184 | page_off = offset % PAGE_SIZE; |
2189 | 2185 | ||
2190 | pr_debug("Cmd: %p use fr_desc %p sg_nents %d sg_off %d offset %u\n", | 2186 | pr_debug("Use fr_desc %p sg_nents %d offset %u\n", |
2191 | isert_cmd, fr_desc, sg_nents, sg_off, offset); | 2187 | fr_desc, sg_nents, offset); |
2192 | 2188 | ||
2193 | pagelist_len = isert_map_fr_pagelist(ib_dev, sg_start, sg_nents, | 2189 | pagelist_len = isert_map_fr_pagelist(ib_dev, sg_start, sg_nents, |
2194 | &fr_desc->data_frpl->page_list[0]); | 2190 | &fr_desc->data_frpl->page_list[0]); |
@@ -2257,9 +2253,9 @@ isert_reg_rdma(struct iscsi_conn *conn, struct iscsi_cmd *cmd, | |||
2257 | if (wr->iser_ib_op == ISER_IB_RDMA_WRITE) { | 2253 | if (wr->iser_ib_op == ISER_IB_RDMA_WRITE) { |
2258 | data_left = se_cmd->data_length; | 2254 | data_left = se_cmd->data_length; |
2259 | } else { | 2255 | } else { |
2260 | sg_off = cmd->write_data_done / PAGE_SIZE; | ||
2261 | data_left = se_cmd->data_length - cmd->write_data_done; | ||
2262 | offset = cmd->write_data_done; | 2256 | offset = cmd->write_data_done; |
2257 | sg_off = offset / PAGE_SIZE; | ||
2258 | data_left = se_cmd->data_length - cmd->write_data_done; | ||
2263 | isert_cmd->tx_desc.isert_cmd = isert_cmd; | 2259 | isert_cmd->tx_desc.isert_cmd = isert_cmd; |
2264 | } | 2260 | } |
2265 | 2261 | ||
@@ -2323,8 +2319,8 @@ isert_reg_rdma(struct iscsi_conn *conn, struct iscsi_cmd *cmd, | |||
2323 | spin_unlock_irqrestore(&isert_conn->conn_lock, flags); | 2319 | spin_unlock_irqrestore(&isert_conn->conn_lock, flags); |
2324 | wr->fr_desc = fr_desc; | 2320 | wr->fr_desc = fr_desc; |
2325 | 2321 | ||
2326 | ret = isert_fast_reg_mr(fr_desc, isert_cmd, isert_conn, | 2322 | ret = isert_fast_reg_mr(fr_desc, isert_conn, sg_start, |
2327 | ib_sge, offset, data_len); | 2323 | ib_sge, sg_nents, offset, data_len); |
2328 | if (ret) { | 2324 | if (ret) { |
2329 | list_add_tail(&fr_desc->list, &isert_conn->conn_fr_pool); | 2325 | list_add_tail(&fr_desc->list, &isert_conn->conn_fr_pool); |
2330 | goto unmap_sg; | 2326 | goto unmap_sg; |