diff options
Diffstat (limited to 'drivers/s390/scsi/zfcp_dbf.c')
| -rw-r--r-- | drivers/s390/scsi/zfcp_dbf.c | 42 | 
1 files changed, 16 insertions, 26 deletions
diff --git a/drivers/s390/scsi/zfcp_dbf.c b/drivers/s390/scsi/zfcp_dbf.c index 060f5f2352e..31012d58cfb 100644 --- a/drivers/s390/scsi/zfcp_dbf.c +++ b/drivers/s390/scsi/zfcp_dbf.c @@ -30,7 +30,7 @@ static void zfcp_dbf_hexdump(debug_info_t *dbf, void *to, int to_len,  		dump->offset = offset;  		dump->size = min(from_len - offset, room);  		memcpy(dump->data, from + offset, dump->size); -		debug_event(dbf, level, dump, dump->size); +		debug_event(dbf, level, dump, dump->size + sizeof(*dump));  	}  } @@ -108,7 +108,7 @@ static int zfcp_dbf_view_header(debug_info_t *id, struct debug_view *view,  			     t.tv_sec, t.tv_nsec);  		zfcp_dbf_out(&p, "cpu", "%02i", entry->id.fields.cpuid);  	} else	{ -		zfcp_dbf_outd(&p, NULL, dump->data, dump->size, dump->offset, +		zfcp_dbf_outd(&p, "", dump->data, dump->size, dump->offset,  			      dump->total_size);  		if ((dump->offset + dump->size) == dump->total_size)  			p += sprintf(p, "\n"); @@ -366,6 +366,7 @@ static void zfcp_hba_dbf_view_response(char **p,  			break;  		zfcp_dbf_out(p, "scsi_cmnd", "0x%0Lx", r->u.fcp.cmnd);  		zfcp_dbf_out(p, "scsi_serial", "0x%016Lx", r->u.fcp.serial); +		p += sprintf(*p, "\n");  		break;  	case FSF_QTCB_OPEN_PORT_WITH_DID: @@ -465,7 +466,8 @@ static int zfcp_hba_dbf_view_format(debug_info_t *id, struct debug_view *view,  	else if (strncmp(r->tag, "berr", ZFCP_DBF_TAG_SIZE) == 0)  		zfcp_hba_dbf_view_berr(&p, &r->u.berr); -	p += sprintf(p, "\n"); +	if (strncmp(r->tag, "resp", ZFCP_DBF_TAG_SIZE) != 0) +		p += sprintf(p, "\n");  	return p - out_buf;  } @@ -880,6 +882,7 @@ void zfcp_san_dbf_event_ct_request(struct zfcp_fsf_req *fsf_req)  	struct ct_hdr *hdr = sg_virt(ct->req);  	struct zfcp_san_dbf_record *r = &adapter->san_dbf_buf;  	struct zfcp_san_dbf_record_ct_request *oct = &r->u.ct_req; +	int level = 3;  	unsigned long flags;  	spin_lock_irqsave(&adapter->san_dbf_lock, flags); @@ -896,9 +899,10 @@ void zfcp_san_dbf_event_ct_request(struct zfcp_fsf_req *fsf_req)  	oct->options = hdr->options;  	oct->max_res_size = hdr->max_res_size;  	oct->len = min((int)ct->req->length - (int)sizeof(struct ct_hdr), -		       ZFCP_DBF_CT_PAYLOAD); -	memcpy(oct->payload, (void *)hdr + sizeof(struct ct_hdr), oct->len); -	debug_event(adapter->san_dbf, 3, r, sizeof(*r)); +		       ZFCP_DBF_SAN_MAX_PAYLOAD); +	debug_event(adapter->san_dbf, level, r, sizeof(*r)); +	zfcp_dbf_hexdump(adapter->san_dbf, r, sizeof(*r), level, +			 (void *)hdr + sizeof(struct ct_hdr), oct->len);  	spin_unlock_irqrestore(&adapter->san_dbf_lock, flags);  } @@ -914,6 +918,7 @@ void zfcp_san_dbf_event_ct_response(struct zfcp_fsf_req *fsf_req)  	struct ct_hdr *hdr = sg_virt(ct->resp);  	struct zfcp_san_dbf_record *r = &adapter->san_dbf_buf;  	struct zfcp_san_dbf_record_ct_response *rct = &r->u.ct_resp; +	int level = 3;  	unsigned long flags;  	spin_lock_irqsave(&adapter->san_dbf_lock, flags); @@ -929,9 +934,10 @@ void zfcp_san_dbf_event_ct_response(struct zfcp_fsf_req *fsf_req)  	rct->expl = hdr->reason_code_expl;  	rct->vendor_unique = hdr->vendor_unique;  	rct->len = min((int)ct->resp->length - (int)sizeof(struct ct_hdr), -		       ZFCP_DBF_CT_PAYLOAD); -	memcpy(rct->payload, (void *)hdr + sizeof(struct ct_hdr), rct->len); -	debug_event(adapter->san_dbf, 3, r, sizeof(*r)); +		       ZFCP_DBF_SAN_MAX_PAYLOAD); +	debug_event(adapter->san_dbf, level, r, sizeof(*r)); +	zfcp_dbf_hexdump(adapter->san_dbf, r, sizeof(*r), level, +			 (void *)hdr + sizeof(struct ct_hdr), rct->len);  	spin_unlock_irqrestore(&adapter->san_dbf_lock, flags);  } @@ -954,7 +960,7 @@ static void zfcp_san_dbf_event_els(const char *tag, int level,  	rec->u.els.ls_code = ls_code;  	debug_event(adapter->san_dbf, level, rec, sizeof(*rec));  	zfcp_dbf_hexdump(adapter->san_dbf, rec, sizeof(*rec), level, -			 buffer, min(buflen, ZFCP_DBF_ELS_MAX_PAYLOAD)); +			 buffer, min(buflen, ZFCP_DBF_SAN_MAX_PAYLOAD));  	spin_unlock_irqrestore(&adapter->san_dbf_lock, flags);  } @@ -1008,8 +1014,6 @@ static int zfcp_san_dbf_view_format(debug_info_t *id, struct debug_view *view,  				    char *out_buf, const char *in_buf)  {  	struct zfcp_san_dbf_record *r = (struct zfcp_san_dbf_record *)in_buf; -	char *buffer = NULL; -	int buflen = 0, total = 0;  	char *p = out_buf;  	if (strncmp(r->tag, "dump", ZFCP_DBF_TAG_SIZE) == 0) @@ -1029,9 +1033,6 @@ static int zfcp_san_dbf_view_format(debug_info_t *id, struct debug_view *view,  		zfcp_dbf_out(&p, "gs_subtype", "0x%02x", ct->gs_subtype);  		zfcp_dbf_out(&p, "options", "0x%02x", ct->options);  		zfcp_dbf_out(&p, "max_res_size", "0x%04x", ct->max_res_size); -		total = ct->len; -		buffer = ct->payload; -		buflen = min(total, ZFCP_DBF_CT_PAYLOAD);  	} else if (strncmp(r->tag, "rctc", ZFCP_DBF_TAG_SIZE) == 0) {  		struct zfcp_san_dbf_record_ct_response *ct = &r->u.ct_resp;  		zfcp_dbf_out(&p, "cmd_rsp_code", "0x%04x", ct->cmd_rsp_code); @@ -1039,23 +1040,12 @@ static int zfcp_san_dbf_view_format(debug_info_t *id, struct debug_view *view,  		zfcp_dbf_out(&p, "reason_code", "0x%02x", ct->reason_code);  		zfcp_dbf_out(&p, "reason_code_expl", "0x%02x", ct->expl);  		zfcp_dbf_out(&p, "vendor_unique", "0x%02x", ct->vendor_unique); -		total = ct->len; -		buffer = ct->payload; -		buflen = min(total, ZFCP_DBF_CT_PAYLOAD);  	} else if (strncmp(r->tag, "oels", ZFCP_DBF_TAG_SIZE) == 0 ||  		   strncmp(r->tag, "rels", ZFCP_DBF_TAG_SIZE) == 0 ||  		   strncmp(r->tag, "iels", ZFCP_DBF_TAG_SIZE) == 0) {  		struct zfcp_san_dbf_record_els *els = &r->u.els;  		zfcp_dbf_out(&p, "ls_code", "0x%02x", els->ls_code); -		total = els->len; -		buffer = els->payload; -		buflen = min(total, ZFCP_DBF_ELS_PAYLOAD);  	} - -	zfcp_dbf_outd(&p, "payload", buffer, buflen, 0, total); -	if (buflen == total) -		p += sprintf(p, "\n"); -  	return p - out_buf;  }  |