mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-22 23:04:43 +00:00
[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>
This commit is contained in:
parent
7207fea452
commit
004d6530f8
5 changed files with 94 additions and 19 deletions
|
@ -41,7 +41,6 @@
|
|||
#define XMSTATE_IMM_HDR_INIT 0x1000
|
||||
#define XMSTATE_SOL_HDR_INIT 0x2000
|
||||
|
||||
#define ISCSI_PAD_LEN 4
|
||||
#define ISCSI_SG_TABLESIZE SG_ALL
|
||||
#define ISCSI_TCP_MAX_CMD_LEN 16
|
||||
|
||||
|
@ -130,14 +129,14 @@ struct iscsi_buf {
|
|||
|
||||
struct iscsi_data_task {
|
||||
struct iscsi_data hdr; /* PDU */
|
||||
char hdrext[sizeof(__u32)]; /* Header-Digest */
|
||||
char hdrext[ISCSI_DIGEST_SIZE];/* Header-Digest */
|
||||
struct iscsi_buf digestbuf; /* digest buffer */
|
||||
uint32_t digest; /* data digest */
|
||||
};
|
||||
|
||||
struct iscsi_tcp_mgmt_task {
|
||||
struct iscsi_hdr hdr;
|
||||
char hdrext[sizeof(__u32)]; /* Header-Digest */
|
||||
char hdrext[ISCSI_DIGEST_SIZE]; /* Header-Digest */
|
||||
int xmstate; /* mgmt xmit progress */
|
||||
struct iscsi_buf headbuf; /* header buffer */
|
||||
struct iscsi_buf sendbuf; /* in progress buffer */
|
||||
|
@ -159,9 +158,11 @@ struct iscsi_r2t_info {
|
|||
};
|
||||
|
||||
struct iscsi_tcp_cmd_task {
|
||||
struct iscsi_cmd hdr;
|
||||
char hdrext[4*sizeof(__u16)+ /* AHS */
|
||||
sizeof(__u32)]; /* HeaderDigest */
|
||||
struct iscsi_hdr_buff {
|
||||
struct iscsi_cmd cmd_hdr;
|
||||
char hdrextbuf[ISCSI_MAX_AHS_SIZE +
|
||||
ISCSI_DIGEST_SIZE];
|
||||
} hdr;
|
||||
char pad[ISCSI_PAD_LEN];
|
||||
int pad_count; /* padded bytes */
|
||||
struct iscsi_buf headbuf; /* header buf (xmit) */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue