diff options
author | David Dillow <dillowda@ornl.gov> | 2010-10-08 14:40:47 -0400 |
---|---|---|
committer | Roland Dreier <rolandd@cisco.com> | 2010-10-22 22:19:10 -0700 |
commit | bb12588a38e6db85e01dceadff7bc161fc92e7d2 (patch) | |
tree | 6cf9f3b90cc1118aa2fcd716537916524384d428 /include/scsi | |
parent | dd5e6e38b2b8bd8bf71cae800e2b613e85ef1522 (diff) | |
download | linux-3.10-bb12588a38e6db85e01dceadff7bc161fc92e7d2.tar.gz linux-3.10-bb12588a38e6db85e01dceadff7bc161fc92e7d2.tar.bz2 linux-3.10-bb12588a38e6db85e01dceadff7bc161fc92e7d2.zip |
IB/srp: Implement SRP_CRED_REQ and SRP_AER_REQ
This patch adds support for SRP_CRED_REQ to avoid a lockup by targets
that use that mechanism to return credits to the initiator. This
prevents a lockup observed in the field where we would never add the
credits from the SRP_CRED_REQ to our current count, and would therefore
never send another command to the target.
Minimal support for SRP_AER_REQ is also added, as these messages can
also be used to convey additional credits to the initiator.
Based upon extensive debugging and code by Bart Van Assche and a bug
report by Chris Worley.
Signed-off-by: David Dillow <dillowda@ornl.gov>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
Diffstat (limited to 'include/scsi')
-rw-r--r-- | include/scsi/srp.h | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/include/scsi/srp.h b/include/scsi/srp.h index ad178fa78f6..1ae84db4c9f 100644 --- a/include/scsi/srp.h +++ b/include/scsi/srp.h @@ -239,4 +239,42 @@ struct srp_rsp { u8 data[0]; } __attribute__((packed)); +struct srp_cred_req { + u8 opcode; + u8 sol_not; + u8 reserved[2]; + __be32 req_lim_delta; + u64 tag; +}; + +struct srp_cred_rsp { + u8 opcode; + u8 reserved[7]; + u64 tag; +}; + +/* + * The SRP spec defines the fixed portion of the AER_REQ structure to be + * 36 bytes, so it needs to be packed to avoid having it padded to 40 bytes + * on 64-bit architectures. + */ +struct srp_aer_req { + u8 opcode; + u8 sol_not; + u8 reserved[2]; + __be32 req_lim_delta; + u64 tag; + u32 reserved2; + __be64 lun; + __be32 sense_data_len; + u32 reserved3; + u8 sense_data[0]; +} __attribute__((packed)); + +struct srp_aer_rsp { + u8 opcode; + u8 reserved[7]; + u64 tag; +}; + #endif /* SCSI_SRP_H */ |