aboutsummaryrefslogtreecommitdiffstats
path: root/include/scsi
diff options
context:
space:
mode:
authorDavid Dillow <dillowda@ornl.gov>2010-10-08 14:40:47 -0400
committerRoland Dreier <rolandd@cisco.com>2010-10-22 22:19:10 -0700
commitbb12588a38e6db85e01dceadff7bc161fc92e7d2 (patch)
tree6cf9f3b90cc1118aa2fcd716537916524384d428 /include/scsi
parentdd5e6e38b2b8bd8bf71cae800e2b613e85ef1522 (diff)
downloadkernel_samsung_smdk4412-bb12588a38e6db85e01dceadff7bc161fc92e7d2.zip
kernel_samsung_smdk4412-bb12588a38e6db85e01dceadff7bc161fc92e7d2.tar.gz
kernel_samsung_smdk4412-bb12588a38e6db85e01dceadff7bc161fc92e7d2.tar.bz2
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.h38
1 files changed, 38 insertions, 0 deletions
diff --git a/include/scsi/srp.h b/include/scsi/srp.h
index ad178fa..1ae84db 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 */