Commit 218432c6 authored by Mike Christie's avatar Mike Christie Committed by James Bottomley

[SCSI] iscsi tcp: fix iscsi xmit state machine

If iscsi_tcp partially sends a header, it would recalculate the
header size and readd the size of the digest (if header digests
are used).This would cause us to send sizeof(digest) extra bytes
when we sent the rest of the header.
Signed-off-by: default avatarMike Christie <michaelc@cs.wisc.edu>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@SteelEye.com>
parent b2c64167
This diff is collapsed.
...@@ -32,8 +32,8 @@ ...@@ -32,8 +32,8 @@
/* xmit state machine */ /* xmit state machine */
#define XMSTATE_IDLE 0x0 #define XMSTATE_IDLE 0x0
#define XMSTATE_R_HDR 0x1 #define XMSTATE_CMD_HDR_INIT 0x1
#define XMSTATE_W_HDR 0x2 #define XMSTATE_CMD_HDR_XMIT 0x2
#define XMSTATE_IMM_HDR 0x4 #define XMSTATE_IMM_HDR 0x4
#define XMSTATE_IMM_DATA 0x8 #define XMSTATE_IMM_DATA 0x8
#define XMSTATE_UNS_INIT 0x10 #define XMSTATE_UNS_INIT 0x10
...@@ -44,6 +44,8 @@ ...@@ -44,6 +44,8 @@
#define XMSTATE_W_PAD 0x200 #define XMSTATE_W_PAD 0x200
#define XMSTATE_W_RESEND_PAD 0x400 #define XMSTATE_W_RESEND_PAD 0x400
#define XMSTATE_W_RESEND_DATA_DIGEST 0x800 #define XMSTATE_W_RESEND_DATA_DIGEST 0x800
#define XMSTATE_IMM_HDR_INIT 0x1000
#define XMSTATE_SOL_HDR_INIT 0x2000
#define ISCSI_PAD_LEN 4 #define ISCSI_PAD_LEN 4
#define ISCSI_SG_TABLESIZE SG_ALL #define ISCSI_SG_TABLESIZE SG_ALL
......
...@@ -125,6 +125,7 @@ static void iscsi_prep_scsi_cmd_pdu(struct iscsi_cmd_task *ctask) ...@@ -125,6 +125,7 @@ static void iscsi_prep_scsi_cmd_pdu(struct iscsi_cmd_task *ctask)
MAX_COMMAND_SIZE - sc->cmd_len); MAX_COMMAND_SIZE - sc->cmd_len);
ctask->data_count = 0; ctask->data_count = 0;
ctask->imm_count = 0;
if (sc->sc_data_direction == DMA_TO_DEVICE) { if (sc->sc_data_direction == DMA_TO_DEVICE) {
hdr->flags |= ISCSI_FLAG_CMD_WRITE; hdr->flags |= ISCSI_FLAG_CMD_WRITE;
/* /*
...@@ -141,7 +142,6 @@ static void iscsi_prep_scsi_cmd_pdu(struct iscsi_cmd_task *ctask) ...@@ -141,7 +142,6 @@ static void iscsi_prep_scsi_cmd_pdu(struct iscsi_cmd_task *ctask)
* *
* pad_count bytes to be sent as zero-padding * pad_count bytes to be sent as zero-padding
*/ */
ctask->imm_count = 0;
ctask->unsol_count = 0; ctask->unsol_count = 0;
ctask->unsol_offset = 0; ctask->unsol_offset = 0;
ctask->unsol_datasn = 0; ctask->unsol_datasn = 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment