diff options
author | Mike Christie <michaelc@cs.wisc.edu> | 2006-08-31 18:09:24 -0400 |
---|---|---|
committer | James Bottomley <jejb@mulgrave.il.steeleye.com> | 2006-09-02 14:37:04 -0400 |
commit | ffd0436ed2e5a741c8d30062b489b989acf0a526 (patch) | |
tree | 037433a76a116c67d3f074c5a83305be8241a8e5 /drivers/infiniband/ulp | |
parent | e5b3cd42960a10c1bc3701d4f00767463c88ec9d (diff) |
[SCSI] libiscsi, iscsi_tcp, iscsi_iser: check that burst lengths are valid.
iSCSI RFC states that the first burst length must be smaller than the
max burst length. We currently assume targets will be good, but that may
not be the case, so this patch adds a check.
This patch also moves the unsol data out offset to the lib so the LLDs
do not have to track it.
Signed-off-by: Mike Christie <michaelc@cs.wisc.edu>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
Diffstat (limited to 'drivers/infiniband/ulp')
-rw-r--r-- | drivers/infiniband/ulp/iser/iscsi_iser.c | 18 | ||||
-rw-r--r-- | drivers/infiniband/ulp/iser/iscsi_iser.h | 1 |
2 files changed, 4 insertions, 15 deletions
diff --git a/drivers/infiniband/ulp/iser/iscsi_iser.c b/drivers/infiniband/ulp/iser/iscsi_iser.c index 1437d7ee3b19..101e407eaa43 100644 --- a/drivers/infiniband/ulp/iser/iscsi_iser.c +++ b/drivers/infiniband/ulp/iser/iscsi_iser.c | |||
@@ -141,18 +141,11 @@ iscsi_iser_cmd_init(struct iscsi_cmd_task *ctask) | |||
141 | 141 | ||
142 | if (sc->sc_data_direction == DMA_TO_DEVICE) { | 142 | if (sc->sc_data_direction == DMA_TO_DEVICE) { |
143 | BUG_ON(ctask->total_length == 0); | 143 | BUG_ON(ctask->total_length == 0); |
144 | /* bytes to be sent via RDMA operations */ | ||
145 | iser_ctask->rdma_data_count = ctask->total_length - | ||
146 | ctask->imm_count - | ||
147 | ctask->unsol_count; | ||
148 | 144 | ||
149 | debug_scsi("cmd [itt %x total %d imm %d unsol_data %d " | 145 | debug_scsi("cmd [itt %x total %d imm %d unsol_data %d\n", |
150 | "rdma_data %d]\n", | ||
151 | ctask->itt, ctask->total_length, ctask->imm_count, | 146 | ctask->itt, ctask->total_length, ctask->imm_count, |
152 | ctask->unsol_count, iser_ctask->rdma_data_count); | 147 | ctask->unsol_count); |
153 | } else | 148 | } |
154 | /* bytes to be sent via RDMA operations */ | ||
155 | iser_ctask->rdma_data_count = ctask->total_length; | ||
156 | 149 | ||
157 | iser_ctask_rdma_init(iser_ctask); | 150 | iser_ctask_rdma_init(iser_ctask); |
158 | } | 151 | } |
@@ -196,13 +189,10 @@ iscsi_iser_ctask_xmit_unsol_data(struct iscsi_conn *conn, | |||
196 | { | 189 | { |
197 | struct iscsi_data hdr; | 190 | struct iscsi_data hdr; |
198 | int error = 0; | 191 | int error = 0; |
199 | struct iscsi_iser_cmd_task *iser_ctask = ctask->dd_data; | ||
200 | 192 | ||
201 | /* Send data-out PDUs while there's still unsolicited data to send */ | 193 | /* Send data-out PDUs while there's still unsolicited data to send */ |
202 | while (ctask->unsol_count > 0) { | 194 | while (ctask->unsol_count > 0) { |
203 | iscsi_prep_unsolicit_data_pdu(ctask, &hdr, | 195 | iscsi_prep_unsolicit_data_pdu(ctask, &hdr); |
204 | iser_ctask->rdma_data_count); | ||
205 | |||
206 | debug_scsi("Sending data-out: itt 0x%x, data count %d\n", | 196 | debug_scsi("Sending data-out: itt 0x%x, data count %d\n", |
207 | hdr.itt, ctask->data_count); | 197 | hdr.itt, ctask->data_count); |
208 | 198 | ||
diff --git a/drivers/infiniband/ulp/iser/iscsi_iser.h b/drivers/infiniband/ulp/iser/iscsi_iser.h index 3350ba690cfe..7c3d0c96d889 100644 --- a/drivers/infiniband/ulp/iser/iscsi_iser.h +++ b/drivers/infiniband/ulp/iser/iscsi_iser.h | |||
@@ -257,7 +257,6 @@ struct iscsi_iser_conn { | |||
257 | struct iscsi_iser_cmd_task { | 257 | struct iscsi_iser_cmd_task { |
258 | struct iser_desc desc; | 258 | struct iser_desc desc; |
259 | struct iscsi_iser_conn *iser_conn; | 259 | struct iscsi_iser_conn *iser_conn; |
260 | int rdma_data_count;/* RDMA bytes */ | ||
261 | enum iser_task_status status; | 260 | enum iser_task_status status; |
262 | int command_sent; /* set if command sent */ | 261 | int command_sent; /* set if command sent */ |
263 | int dir[ISER_DIRS_NUM]; /* set if dir use*/ | 262 | int dir[ISER_DIRS_NUM]; /* set if dir use*/ |