diff options
| author | Mike Marciniszyn <mike.marciniszyn@intel.com> | 2014-04-07 13:58:35 -0400 |
|---|---|---|
| committer | Nicholas Bellinger <nab@linux-iscsi.org> | 2014-04-11 18:31:20 -0400 |
| commit | b076808051f2c80d38e03fb2f1294f525c7a446d (patch) | |
| tree | a3c4e85a78642f1bbb7632cee0c01c62dc8b83e9 | |
| parent | e3d4440cdccd4702225f519c9613a11e6fa49c65 (diff) | |
ib_srpt: Use correct ib_sg_dma primitives
The code was incorrectly using sg_dma_address() and
sg_dma_len() instead of ib_sg_dma_address() and
ib_sg_dma_len().
This prevents srpt from functioning with the
Intel HCA and indeed will corrupt memory
badly.
Cc: Bart Van Assche <bvanassche@acm.org>
Reviewed-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Tested-by: Vinod Kumar <vinod.kumar@intel.com>
Signed-off-by: Mike Marciniszyn <mike.marciniszyn@intel.com>
Cc: stable@vger.kernel.org # 3.3+
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
| -rw-r--r-- | drivers/infiniband/ulp/srpt/ib_srpt.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/drivers/infiniband/ulp/srpt/ib_srpt.c b/drivers/infiniband/ulp/srpt/ib_srpt.c index bcfb398a6639..fe09f2788b15 100644 --- a/drivers/infiniband/ulp/srpt/ib_srpt.c +++ b/drivers/infiniband/ulp/srpt/ib_srpt.c | |||
| @@ -1078,6 +1078,7 @@ static void srpt_unmap_sg_to_ib_sge(struct srpt_rdma_ch *ch, | |||
| 1078 | static int srpt_map_sg_to_ib_sge(struct srpt_rdma_ch *ch, | 1078 | static int srpt_map_sg_to_ib_sge(struct srpt_rdma_ch *ch, |
| 1079 | struct srpt_send_ioctx *ioctx) | 1079 | struct srpt_send_ioctx *ioctx) |
| 1080 | { | 1080 | { |
| 1081 | struct ib_device *dev = ch->sport->sdev->device; | ||
| 1081 | struct se_cmd *cmd; | 1082 | struct se_cmd *cmd; |
| 1082 | struct scatterlist *sg, *sg_orig; | 1083 | struct scatterlist *sg, *sg_orig; |
| 1083 | int sg_cnt; | 1084 | int sg_cnt; |
| @@ -1124,7 +1125,7 @@ static int srpt_map_sg_to_ib_sge(struct srpt_rdma_ch *ch, | |||
| 1124 | 1125 | ||
| 1125 | db = ioctx->rbufs; | 1126 | db = ioctx->rbufs; |
| 1126 | tsize = cmd->data_length; | 1127 | tsize = cmd->data_length; |
| 1127 | dma_len = sg_dma_len(&sg[0]); | 1128 | dma_len = ib_sg_dma_len(dev, &sg[0]); |
| 1128 | riu = ioctx->rdma_ius; | 1129 | riu = ioctx->rdma_ius; |
| 1129 | 1130 | ||
| 1130 | /* | 1131 | /* |
| @@ -1155,7 +1156,8 @@ static int srpt_map_sg_to_ib_sge(struct srpt_rdma_ch *ch, | |||
| 1155 | ++j; | 1156 | ++j; |
| 1156 | if (j < count) { | 1157 | if (j < count) { |
| 1157 | sg = sg_next(sg); | 1158 | sg = sg_next(sg); |
| 1158 | dma_len = sg_dma_len(sg); | 1159 | dma_len = ib_sg_dma_len( |
| 1160 | dev, sg); | ||
| 1159 | } | 1161 | } |
| 1160 | } | 1162 | } |
| 1161 | } else { | 1163 | } else { |
| @@ -1192,8 +1194,8 @@ static int srpt_map_sg_to_ib_sge(struct srpt_rdma_ch *ch, | |||
| 1192 | tsize = cmd->data_length; | 1194 | tsize = cmd->data_length; |
| 1193 | riu = ioctx->rdma_ius; | 1195 | riu = ioctx->rdma_ius; |
| 1194 | sg = sg_orig; | 1196 | sg = sg_orig; |
| 1195 | dma_len = sg_dma_len(&sg[0]); | 1197 | dma_len = ib_sg_dma_len(dev, &sg[0]); |
| 1196 | dma_addr = sg_dma_address(&sg[0]); | 1198 | dma_addr = ib_sg_dma_address(dev, &sg[0]); |
| 1197 | 1199 | ||
| 1198 | /* this second loop is really mapped sg_addres to rdma_iu->ib_sge */ | 1200 | /* this second loop is really mapped sg_addres to rdma_iu->ib_sge */ |
| 1199 | for (i = 0, j = 0; | 1201 | for (i = 0, j = 0; |
| @@ -1216,8 +1218,10 @@ static int srpt_map_sg_to_ib_sge(struct srpt_rdma_ch *ch, | |||
| 1216 | ++j; | 1218 | ++j; |
| 1217 | if (j < count) { | 1219 | if (j < count) { |
| 1218 | sg = sg_next(sg); | 1220 | sg = sg_next(sg); |
| 1219 | dma_len = sg_dma_len(sg); | 1221 | dma_len = ib_sg_dma_len( |
| 1220 | dma_addr = sg_dma_address(sg); | 1222 | dev, sg); |
| 1223 | dma_addr = ib_sg_dma_address( | ||
| 1224 | dev, sg); | ||
| 1221 | } | 1225 | } |
| 1222 | } | 1226 | } |
| 1223 | } else { | 1227 | } else { |
