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 /drivers/infiniband | |
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>
Diffstat (limited to 'drivers/infiniband')
-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 { |