diff options
author | Boaz Harrosh <bharrosh@panasas.com> | 2007-12-13 13:43:23 -0500 |
---|---|---|
committer | James Bottomley <James.Bottomley@HansenPartnership.com> | 2008-01-11 19:28:23 -0500 |
commit | 004d6530f83bee43a55b51bb5960db96e7ae0ffa (patch) | |
tree | a7bb6ffb3e6e89ca6ee9b164d5f19899a0c100dd /drivers/scsi/iscsi_tcp.h | |
parent | 7207fea452cfdd2d4e2f4419e2c31f570edbade3 (diff) |
[SCSI] iscsi_tcp, libiscsi: initial AHS Support
at libiscsi generic code
- currently code assumes a storage space of pdu header is allocated
at llds ctask and is pointed to by iscsi_cmd_task->hdr. Here I add
a hdr_max field pertaining to that storage, and an hdr_len that
accumulates the current use of the pdu-header.
- Add an iscsi_next_hdr() inline which returns the next free space
to write new Header at. Also iscsi_next_hdr() is used to retrieve
the address at which to write the header-digest.
- Add iscsi_add_hdr(length). What the user do is calls iscsi_next_hdr()
for address of the new header, than calls iscsi_add_hdr(length) with
the size of the new header. iscsi_add_hdr() will check if space is
available and update to the new size. length must be padded according
to standard.
- Add 2 padding inline helpers thanks to Olaf. Current patch does not
use them but Following patches will.
Also moved definition of ISCSI_PAD_LEN to iscsi_proto.h which had
PAD_WORD_LEN that was never used anywhere.
- Let iscsi_prep_scsi_cmd_pdu() signal an Error return since now it is
possible that it will fail.
- I was tired of yet again writing a "this is a digest" comment next to
sizeof(__u32) so I defined a new ISCSI_DIGEST_SIZE. Now I don't need
any comments. Changed all places that used sizeof(__u32) or "4" in
connection to a digest.
iscsi_tcp specific code
- At struct iscsi_tcp_cmd_task allocate maximum space allowed in
standard for all headers following the iscsi_cmd header. and mark
it so in iscsi_tcp_session_create()
- At iscsi_send_cmd_hdr() retrieve the correct headers size and
write header digest at iscsi_next_hdr().
Signed-off-by: Boaz Harrosh <bharrosh@panasas.com>
Signed-off-by: Olaf Kirch <olaf.kirch@oracle.com>
Signed-off-by: Mike Christie <michaelc@cs.wisc.edu>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Diffstat (limited to 'drivers/scsi/iscsi_tcp.h')
-rw-r--r-- | drivers/scsi/iscsi_tcp.h | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/drivers/scsi/iscsi_tcp.h b/drivers/scsi/iscsi_tcp.h index f1c541151100..eb3784f949fd 100644 --- a/drivers/scsi/iscsi_tcp.h +++ b/drivers/scsi/iscsi_tcp.h | |||
@@ -41,7 +41,6 @@ | |||
41 | #define XMSTATE_IMM_HDR_INIT 0x1000 | 41 | #define XMSTATE_IMM_HDR_INIT 0x1000 |
42 | #define XMSTATE_SOL_HDR_INIT 0x2000 | 42 | #define XMSTATE_SOL_HDR_INIT 0x2000 |
43 | 43 | ||
44 | #define ISCSI_PAD_LEN 4 | ||
45 | #define ISCSI_SG_TABLESIZE SG_ALL | 44 | #define ISCSI_SG_TABLESIZE SG_ALL |
46 | #define ISCSI_TCP_MAX_CMD_LEN 16 | 45 | #define ISCSI_TCP_MAX_CMD_LEN 16 |
47 | 46 | ||
@@ -130,14 +129,14 @@ struct iscsi_buf { | |||
130 | 129 | ||
131 | struct iscsi_data_task { | 130 | struct iscsi_data_task { |
132 | struct iscsi_data hdr; /* PDU */ | 131 | struct iscsi_data hdr; /* PDU */ |
133 | char hdrext[sizeof(__u32)]; /* Header-Digest */ | 132 | char hdrext[ISCSI_DIGEST_SIZE];/* Header-Digest */ |
134 | struct iscsi_buf digestbuf; /* digest buffer */ | 133 | struct iscsi_buf digestbuf; /* digest buffer */ |
135 | uint32_t digest; /* data digest */ | 134 | uint32_t digest; /* data digest */ |
136 | }; | 135 | }; |
137 | 136 | ||
138 | struct iscsi_tcp_mgmt_task { | 137 | struct iscsi_tcp_mgmt_task { |
139 | struct iscsi_hdr hdr; | 138 | struct iscsi_hdr hdr; |
140 | char hdrext[sizeof(__u32)]; /* Header-Digest */ | 139 | char hdrext[ISCSI_DIGEST_SIZE]; /* Header-Digest */ |
141 | int xmstate; /* mgmt xmit progress */ | 140 | int xmstate; /* mgmt xmit progress */ |
142 | struct iscsi_buf headbuf; /* header buffer */ | 141 | struct iscsi_buf headbuf; /* header buffer */ |
143 | struct iscsi_buf sendbuf; /* in progress buffer */ | 142 | struct iscsi_buf sendbuf; /* in progress buffer */ |
@@ -159,9 +158,11 @@ struct iscsi_r2t_info { | |||
159 | }; | 158 | }; |
160 | 159 | ||
161 | struct iscsi_tcp_cmd_task { | 160 | struct iscsi_tcp_cmd_task { |
162 | struct iscsi_cmd hdr; | 161 | struct iscsi_hdr_buff { |
163 | char hdrext[4*sizeof(__u16)+ /* AHS */ | 162 | struct iscsi_cmd cmd_hdr; |
164 | sizeof(__u32)]; /* HeaderDigest */ | 163 | char hdrextbuf[ISCSI_MAX_AHS_SIZE + |
164 | ISCSI_DIGEST_SIZE]; | ||
165 | } hdr; | ||
165 | char pad[ISCSI_PAD_LEN]; | 166 | char pad[ISCSI_PAD_LEN]; |
166 | int pad_count; /* padded bytes */ | 167 | int pad_count; /* padded bytes */ |
167 | struct iscsi_buf headbuf; /* header buf (xmit) */ | 168 | struct iscsi_buf headbuf; /* header buf (xmit) */ |