aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/iscsi_tcp.h
diff options
context:
space:
mode:
authorBoaz Harrosh <bharrosh@panasas.com>2007-12-13 13:43:23 -0500
committerJames Bottomley <James.Bottomley@HansenPartnership.com>2008-01-11 19:28:23 -0500
commit004d6530f83bee43a55b51bb5960db96e7ae0ffa (patch)
treea7bb6ffb3e6e89ca6ee9b164d5f19899a0c100dd /drivers/scsi/iscsi_tcp.h
parent7207fea452cfdd2d4e2f4419e2c31f570edbade3 (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.h13
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
131struct iscsi_data_task { 130struct 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
138struct iscsi_tcp_mgmt_task { 137struct 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
161struct iscsi_tcp_cmd_task { 160struct 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) */