scsi-trace: define ZBC_IN and ZBC_OUT

Add new trace functions for ZBC_IN and ZBC_OUT.

Reviewed-by: Doug Gilbert <dgilbert@interlog.com>
Reviewed-by: Ewan D. Milne <emilne@redhat.com>
Signed-off-by: Hannes Reinecke <hare@suse.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
Hannes Reinecke 2016-03-24 17:23:56 +01:00 committed by Martin K. Petersen
parent 5141f16a8a
commit 0008f1e723
3 changed files with 81 additions and 0 deletions

View File

@ -317,6 +317,72 @@ scsi_trace_maintenance_out(struct trace_seq *p, unsigned char *cdb, int len)
return ret;
}
static const char *
scsi_trace_zbc_in(struct trace_seq *p, unsigned char *cdb, int len)
{
const char *ret = trace_seq_buffer_ptr(p), *cmd;
u64 zone_id;
u32 alloc_len;
u8 options;
switch (SERVICE_ACTION16(cdb)) {
case ZI_REPORT_ZONES:
cmd = "REPORT_ZONES";
break;
default:
trace_seq_puts(p, "UNKNOWN");
goto out;
}
zone_id = get_unaligned_be64(&cdb[2]);
alloc_len = get_unaligned_be32(&cdb[10]);
options = cdb[14] & 0x3f;
trace_seq_printf(p, "%s zone=%llu alloc_len=%u options=%u partial=%u",
cmd, (unsigned long long)zone_id, alloc_len,
options, (cdb[14] >> 7) & 1);
out:
trace_seq_putc(p, 0);
return ret;
}
static const char *
scsi_trace_zbc_out(struct trace_seq *p, unsigned char *cdb, int len)
{
const char *ret = trace_seq_buffer_ptr(p), *cmd;
u64 zone_id;
switch (SERVICE_ACTION16(cdb)) {
case ZO_CLOSE_ZONE:
cmd = "CLOSE_ZONE";
break;
case ZO_FINISH_ZONE:
cmd = "FINISH_ZONE";
break;
case ZO_OPEN_ZONE:
cmd = "OPEN_ZONE";
break;
case ZO_RESET_WRITE_POINTER:
cmd = "RESET_WRITE_POINTER";
break;
default:
trace_seq_puts(p, "UNKNOWN");
goto out;
}
zone_id = get_unaligned_be64(&cdb[2]);
trace_seq_printf(p, "%s zone=%llu all=%u", cmd,
(unsigned long long)zone_id, cdb[14] & 1);
out:
trace_seq_putc(p, 0);
return ret;
}
static const char *
scsi_trace_varlen(struct trace_seq *p, unsigned char *cdb, int len)
{
@ -373,6 +439,10 @@ scsi_trace_parse_cdb(struct trace_seq *p, unsigned char *cdb, int len)
return scsi_trace_maintenance_in(p, cdb, len);
case MAINTENANCE_OUT:
return scsi_trace_maintenance_out(p, cdb, len);
case ZBC_IN:
return scsi_trace_zbc_in(p, cdb, len);
case ZBC_OUT:
return scsi_trace_zbc_out(p, cdb, len);
default:
return scsi_trace_misc(p, cdb, len);
}

View File

@ -115,6 +115,8 @@
#define VERIFY_16 0x8f
#define SYNCHRONIZE_CACHE_16 0x91
#define WRITE_SAME_16 0x93
#define ZBC_OUT 0x94
#define ZBC_IN 0x95
#define SERVICE_ACTION_BIDIRECTIONAL 0x9d
#define SERVICE_ACTION_IN_16 0x9e
#define SERVICE_ACTION_OUT_16 0x9f
@ -143,6 +145,13 @@
#define MO_SET_PRIORITY 0x0e
#define MO_SET_TIMESTAMP 0x0f
#define MO_MANAGEMENT_PROTOCOL_OUT 0x10
/* values for ZBC_IN */
#define ZI_REPORT_ZONES 0x00
/* values for ZBC_OUT */
#define ZO_CLOSE_ZONE 0x01
#define ZO_FINISH_ZONE 0x02
#define ZO_OPEN_ZONE 0x03
#define ZO_RESET_WRITE_POINTER 0x04
/* values for variable length command */
#define XDREAD_32 0x03
#define XDWRITE_32 0x04

View File

@ -94,6 +94,8 @@
scsi_opcode_name(WRITE_16), \
scsi_opcode_name(VERIFY_16), \
scsi_opcode_name(WRITE_SAME_16), \
scsi_opcode_name(ZBC_OUT), \
scsi_opcode_name(ZBC_IN), \
scsi_opcode_name(SERVICE_ACTION_IN_16), \
scsi_opcode_name(READ_32), \
scsi_opcode_name(WRITE_32), \