aboutsummaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/s390/scsi/zfcp_dbf.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/drivers/s390/scsi/zfcp_dbf.c b/drivers/s390/scsi/zfcp_dbf.c
index 5019d7b738bc..658053c74707 100644
--- a/drivers/s390/scsi/zfcp_dbf.c
+++ b/drivers/s390/scsi/zfcp_dbf.c
@@ -179,6 +179,9 @@ void zfcp_hba_dbf_event_fsf_response(struct zfcp_fsf_req *fsf_req)
(fsf_req->fsf_command == FSF_QTCB_OPEN_LUN)) {
strncpy(rec->tag2, "open", ZFCP_DBF_TAG_SIZE);
level = 4;
+ } else if (qtcb->header.log_length) {
+ strncpy(rec->tag2, "qtcb", ZFCP_DBF_TAG_SIZE);
+ level = 5;
} else {
strncpy(rec->tag2, "norm", ZFCP_DBF_TAG_SIZE);
level = 6;
@@ -250,6 +253,17 @@ void zfcp_hba_dbf_event_fsf_response(struct zfcp_fsf_req *fsf_req)
debug_event(adapter->hba_dbf, level,
rec, sizeof(struct zfcp_hba_dbf_record));
+
+ /* have fcp channel microcode fixed to use as little as possible */
+ if (fsf_req->fsf_command != FSF_QTCB_FCP_CMND) {
+ /* adjust length skipping trailing zeros */
+ char *buf = (char *)qtcb + qtcb->header.log_start;
+ int len = qtcb->header.log_length;
+ for (; len && !buf[len - 1]; len--);
+ zfcp_dbf_hexdump(adapter->hba_dbf, rec, sizeof(*rec), level,
+ buf, len);
+ }
+
spin_unlock_irqrestore(&adapter->hba_dbf_lock, flags);
}