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/iser/iscsi_iser.c | |
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/iser/iscsi_iser.c')
-rw-r--r-- | drivers/infiniband/ulp/iser/iscsi_iser.c | 18 |
1 files changed, 4 insertions, 14 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 | ||