* [PATCH 0/3] scsi trace updates
@ 2016-03-24 10:23 Hannes Reinecke
2016-03-24 10:23 ` [PATCH 1/3] scsi-trace: remove service action definitions Hannes Reinecke
` (2 more replies)
0 siblings, 3 replies; 7+ messages in thread
From: Hannes Reinecke @ 2016-03-24 10:23 UTC (permalink / raw)
To: Martin K. Petersen
Cc: Christoph Hellwig, James Bottomley, linux-scsi, Hannes Reinecke
Hi all,
here are some some small updates to scsi tracing; it fixes the
decoding for MAINTENANCE_IN and MAINTENANCE_OUT and adds definitions
for the new ZBC_IN and ZBC_OUT commands.
As usual, comments and reviews welcome.
Hannes Reinecke (3):
scsi-trace: remove service action definitions
scsi-trace: Decode MAINTENANCE_IN and MAINTENANCE_OUT commands
scsi-trace: define ZBC_IN and ZBC_OUT
drivers/scsi/scsi_trace.c | 183 ++++++++++++++++++++++++++++++++++++++++++++
include/scsi/scsi_proto.h | 9 +++
include/trace/events/scsi.h | 6 +-
3 files changed, 194 insertions(+), 4 deletions(-)
--
1.8.5.6
^ permalink raw reply [flat|nested] 7+ messages in thread* [PATCH 1/3] scsi-trace: remove service action definitions 2016-03-24 10:23 [PATCH 0/3] scsi trace updates Hannes Reinecke @ 2016-03-24 10:23 ` Hannes Reinecke 2016-03-24 13:03 ` Ewan D. Milne 2016-03-24 10:23 ` [PATCH 2/3] scsi-trace: Decode MAINTENANCE_IN and MAINTENANCE_OUT commands Hannes Reinecke 2016-03-24 10:23 ` [PATCH 3/3] scsi-trace: define ZBC_IN and ZBC_OUT Hannes Reinecke 2 siblings, 1 reply; 7+ messages in thread From: Hannes Reinecke @ 2016-03-24 10:23 UTC (permalink / raw) To: Martin K. Petersen Cc: Christoph Hellwig, James Bottomley, linux-scsi, Hannes Reinecke, Hannes Reinecke scsi_opcode_name() is displaying the opcode, not the service action. Signed-off-by: Hannes Reinecke <hare@suse.com> --- include/trace/events/scsi.h | 4 ---- 1 file changed, 4 deletions(-) diff --git a/include/trace/events/scsi.h b/include/trace/events/scsi.h index 079bd10..5c0d91f 100644 --- a/include/trace/events/scsi.h +++ b/include/trace/events/scsi.h @@ -95,10 +95,6 @@ scsi_opcode_name(VERIFY_16), \ scsi_opcode_name(WRITE_SAME_16), \ scsi_opcode_name(SERVICE_ACTION_IN_16), \ - scsi_opcode_name(SAI_READ_CAPACITY_16), \ - scsi_opcode_name(SAI_GET_LBA_STATUS), \ - scsi_opcode_name(MI_REPORT_TARGET_PGS), \ - scsi_opcode_name(MO_SET_TARGET_PGS), \ scsi_opcode_name(READ_32), \ scsi_opcode_name(WRITE_32), \ scsi_opcode_name(WRITE_SAME_32), \ -- 1.8.5.6 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH 1/3] scsi-trace: remove service action definitions 2016-03-24 10:23 ` [PATCH 1/3] scsi-trace: remove service action definitions Hannes Reinecke @ 2016-03-24 13:03 ` Ewan D. Milne 0 siblings, 0 replies; 7+ messages in thread From: Ewan D. Milne @ 2016-03-24 13:03 UTC (permalink / raw) To: Hannes Reinecke Cc: Martin K. Petersen, Christoph Hellwig, James Bottomley, linux-scsi, Hannes Reinecke On Thu, 2016-03-24 at 11:23 +0100, Hannes Reinecke wrote: > scsi_opcode_name() is displaying the opcode, not the service > action. > > Signed-off-by: Hannes Reinecke <hare@suse.com> > --- > include/trace/events/scsi.h | 4 ---- > 1 file changed, 4 deletions(-) > > diff --git a/include/trace/events/scsi.h b/include/trace/events/scsi.h > index 079bd10..5c0d91f 100644 > --- a/include/trace/events/scsi.h > +++ b/include/trace/events/scsi.h > @@ -95,10 +95,6 @@ > scsi_opcode_name(VERIFY_16), \ > scsi_opcode_name(WRITE_SAME_16), \ > scsi_opcode_name(SERVICE_ACTION_IN_16), \ > - scsi_opcode_name(SAI_READ_CAPACITY_16), \ > - scsi_opcode_name(SAI_GET_LBA_STATUS), \ > - scsi_opcode_name(MI_REPORT_TARGET_PGS), \ > - scsi_opcode_name(MO_SET_TARGET_PGS), \ > scsi_opcode_name(READ_32), \ > scsi_opcode_name(WRITE_32), \ > scsi_opcode_name(WRITE_SAME_32), \ Reviewed-by: Ewan D. Milne <emilne@redhat.com> ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 2/3] scsi-trace: Decode MAINTENANCE_IN and MAINTENANCE_OUT commands 2016-03-24 10:23 [PATCH 0/3] scsi trace updates Hannes Reinecke 2016-03-24 10:23 ` [PATCH 1/3] scsi-trace: remove service action definitions Hannes Reinecke @ 2016-03-24 10:23 ` Hannes Reinecke 2016-03-24 13:03 ` Ewan D. Milne 2016-03-24 10:23 ` [PATCH 3/3] scsi-trace: define ZBC_IN and ZBC_OUT Hannes Reinecke 2 siblings, 1 reply; 7+ messages in thread From: Hannes Reinecke @ 2016-03-24 10:23 UTC (permalink / raw) To: Martin K. Petersen Cc: Christoph Hellwig, James Bottomley, linux-scsi, Hannes Reinecke, Hannes Reinecke Signed-off-by: Hannes Reinecke <hare@suse.com> --- drivers/scsi/scsi_trace.c | 96 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) diff --git a/drivers/scsi/scsi_trace.c b/drivers/scsi/scsi_trace.c index 08bb47b..b50cfe8 100644 --- a/drivers/scsi/scsi_trace.c +++ b/drivers/scsi/scsi_trace.c @@ -231,6 +231,98 @@ out: } static const char * +scsi_trace_maintenance_in(struct trace_seq *p, unsigned char *cdb, int len) +{ + const char *ret = trace_seq_buffer_ptr(p), *cmd; + u32 alloc_len = 0; + + switch (SERVICE_ACTION16(cdb)) { + case MI_REPORT_IDENTIFYING_INFORMATION: + cmd = "REPORT_IDENTIFYING_INFORMATION"; + break; + case MI_REPORT_TARGET_PGS: + cmd = "REPORT_TARGET_PORT_GROUPS"; + break; + case MI_REPORT_ALIASES: + cmd = "REPORT_ALIASES"; + break; + case MI_REPORT_SUPPORTED_OPERATION_CODES: + cmd = "REPORT_SUPPORTED_OPERATION_CODES"; + break; + case MI_REPORT_SUPPORTED_TASK_MANAGEMENT_FUNCTIONS: + cmd = "REPORT_SUPPORTED_TASK_MANAGEMENT_FUNCTIONS"; + break; + case MI_REPORT_PRIORITY: + cmd = "REPORT_PRIORITY"; + break; + case MI_REPORT_TIMESTAMP: + cmd = "REPORT_TIMESTAMP"; + break; + case MI_MANAGEMENT_PROTOCOL_IN: + cmd = "MANAGEMENT_PROTOCOL_IN"; + break; + default: + trace_seq_puts(p, "UNKNOWN"); + goto out; + } + + alloc_len |= (cdb[6] << 24); + alloc_len |= (cdb[7] << 16); + alloc_len |= (cdb[8] << 8); + alloc_len |= cdb[9]; + + trace_seq_printf(p, "%s alloc_len=%u", cmd, alloc_len); + +out: + trace_seq_putc(p, 0); + + return ret; +} + +static const char * +scsi_trace_maintenance_out(struct trace_seq *p, unsigned char *cdb, int len) +{ + const char *ret = trace_seq_buffer_ptr(p), *cmd; + u32 alloc_len = 0; + + switch (SERVICE_ACTION16(cdb)) { + case MO_SET_IDENTIFYING_INFORMATION: + cmd = "SET_IDENTIFYING_INFORMATION"; + break; + case MO_SET_TARGET_PGS: + cmd = "SET_TARGET_PORT_GROUPS"; + break; + case MO_CHANGE_ALIASES: + cmd = "CHANGE_ALIASES"; + break; + case MO_SET_PRIORITY: + cmd = "SET_PRIORITY"; + break; + case MO_SET_TIMESTAMP: + cmd = "SET_TIMESTAMP"; + break; + case MO_MANAGEMENT_PROTOCOL_OUT: + cmd = "MANAGEMENT_PROTOCOL_OUT"; + break; + default: + trace_seq_puts(p, "UNKNOWN"); + goto out; + } + + alloc_len |= (cdb[6] << 24); + alloc_len |= (cdb[7] << 16); + alloc_len |= (cdb[8] << 8); + alloc_len |= cdb[9]; + + trace_seq_printf(p, "%s alloc_len=%u", cmd, alloc_len); + +out: + trace_seq_putc(p, 0); + + return ret; +} + +static const char * scsi_trace_varlen(struct trace_seq *p, unsigned char *cdb, int len) { switch (SERVICE_ACTION32(cdb)) { @@ -282,6 +374,10 @@ scsi_trace_parse_cdb(struct trace_seq *p, unsigned char *cdb, int len) return scsi_trace_service_action_in(p, cdb, len); case VARIABLE_LENGTH_CMD: return scsi_trace_varlen(p, cdb, len); + case MAINTENANCE_IN: + return scsi_trace_maintenance_in(p, cdb, len); + case MAINTENANCE_OUT: + return scsi_trace_maintenance_out(p, cdb, len); default: return scsi_trace_misc(p, cdb, len); } -- 1.8.5.6 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH 2/3] scsi-trace: Decode MAINTENANCE_IN and MAINTENANCE_OUT commands 2016-03-24 10:23 ` [PATCH 2/3] scsi-trace: Decode MAINTENANCE_IN and MAINTENANCE_OUT commands Hannes Reinecke @ 2016-03-24 13:03 ` Ewan D. Milne 0 siblings, 0 replies; 7+ messages in thread From: Ewan D. Milne @ 2016-03-24 13:03 UTC (permalink / raw) To: Hannes Reinecke Cc: Martin K. Petersen, Christoph Hellwig, James Bottomley, linux-scsi, Hannes Reinecke On Thu, 2016-03-24 at 11:23 +0100, Hannes Reinecke wrote: > Signed-off-by: Hannes Reinecke <hare@suse.com> > --- > drivers/scsi/scsi_trace.c | 96 +++++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 96 insertions(+) > > diff --git a/drivers/scsi/scsi_trace.c b/drivers/scsi/scsi_trace.c > index 08bb47b..b50cfe8 100644 > --- a/drivers/scsi/scsi_trace.c > +++ b/drivers/scsi/scsi_trace.c > @@ -231,6 +231,98 @@ out: > } > > static const char * > +scsi_trace_maintenance_in(struct trace_seq *p, unsigned char *cdb, int len) > +{ > + const char *ret = trace_seq_buffer_ptr(p), *cmd; > + u32 alloc_len = 0; > + > + switch (SERVICE_ACTION16(cdb)) { > + case MI_REPORT_IDENTIFYING_INFORMATION: > + cmd = "REPORT_IDENTIFYING_INFORMATION"; > + break; > + case MI_REPORT_TARGET_PGS: > + cmd = "REPORT_TARGET_PORT_GROUPS"; > + break; > + case MI_REPORT_ALIASES: > + cmd = "REPORT_ALIASES"; > + break; > + case MI_REPORT_SUPPORTED_OPERATION_CODES: > + cmd = "REPORT_SUPPORTED_OPERATION_CODES"; > + break; > + case MI_REPORT_SUPPORTED_TASK_MANAGEMENT_FUNCTIONS: > + cmd = "REPORT_SUPPORTED_TASK_MANAGEMENT_FUNCTIONS"; > + break; > + case MI_REPORT_PRIORITY: > + cmd = "REPORT_PRIORITY"; > + break; > + case MI_REPORT_TIMESTAMP: > + cmd = "REPORT_TIMESTAMP"; > + break; > + case MI_MANAGEMENT_PROTOCOL_IN: > + cmd = "MANAGEMENT_PROTOCOL_IN"; > + break; > + default: > + trace_seq_puts(p, "UNKNOWN"); > + goto out; > + } > + > + alloc_len |= (cdb[6] << 24); > + alloc_len |= (cdb[7] << 16); > + alloc_len |= (cdb[8] << 8); > + alloc_len |= cdb[9]; You could use get_unaligned_be32() here instead, as well as in scsi_trace_maintenance_out() and similar get_unaligned_XX calls in the other functions in scsi_trace.c > + > + trace_seq_printf(p, "%s alloc_len=%u", cmd, alloc_len); > + > +out: > + trace_seq_putc(p, 0); > + > + return ret; > +} > + > +static const char * > +scsi_trace_maintenance_out(struct trace_seq *p, unsigned char *cdb, int len) > +{ > + const char *ret = trace_seq_buffer_ptr(p), *cmd; > + u32 alloc_len = 0; > + > + switch (SERVICE_ACTION16(cdb)) { > + case MO_SET_IDENTIFYING_INFORMATION: > + cmd = "SET_IDENTIFYING_INFORMATION"; > + break; > + case MO_SET_TARGET_PGS: > + cmd = "SET_TARGET_PORT_GROUPS"; > + break; > + case MO_CHANGE_ALIASES: > + cmd = "CHANGE_ALIASES"; > + break; > + case MO_SET_PRIORITY: > + cmd = "SET_PRIORITY"; > + break; > + case MO_SET_TIMESTAMP: > + cmd = "SET_TIMESTAMP"; > + break; > + case MO_MANAGEMENT_PROTOCOL_OUT: > + cmd = "MANAGEMENT_PROTOCOL_OUT"; > + break; > + default: > + trace_seq_puts(p, "UNKNOWN"); > + goto out; > + } > + > + alloc_len |= (cdb[6] << 24); > + alloc_len |= (cdb[7] << 16); > + alloc_len |= (cdb[8] << 8); > + alloc_len |= cdb[9]; > + > + trace_seq_printf(p, "%s alloc_len=%u", cmd, alloc_len); > + > +out: > + trace_seq_putc(p, 0); > + > + return ret; > +} > + > +static const char * > scsi_trace_varlen(struct trace_seq *p, unsigned char *cdb, int len) > { > switch (SERVICE_ACTION32(cdb)) { > @@ -282,6 +374,10 @@ scsi_trace_parse_cdb(struct trace_seq *p, unsigned char *cdb, int len) > return scsi_trace_service_action_in(p, cdb, len); > case VARIABLE_LENGTH_CMD: > return scsi_trace_varlen(p, cdb, len); > + case MAINTENANCE_IN: > + return scsi_trace_maintenance_in(p, cdb, len); > + case MAINTENANCE_OUT: > + return scsi_trace_maintenance_out(p, cdb, len); > default: > return scsi_trace_misc(p, cdb, len); > } Reviewed-by: Ewan D. Milne <emilne@redhat.com> ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 3/3] scsi-trace: define ZBC_IN and ZBC_OUT 2016-03-24 10:23 [PATCH 0/3] scsi trace updates Hannes Reinecke 2016-03-24 10:23 ` [PATCH 1/3] scsi-trace: remove service action definitions Hannes Reinecke 2016-03-24 10:23 ` [PATCH 2/3] scsi-trace: Decode MAINTENANCE_IN and MAINTENANCE_OUT commands Hannes Reinecke @ 2016-03-24 10:23 ` Hannes Reinecke 2016-03-24 13:40 ` Ewan D. Milne 2 siblings, 1 reply; 7+ messages in thread From: Hannes Reinecke @ 2016-03-24 10:23 UTC (permalink / raw) To: Martin K. Petersen Cc: Christoph Hellwig, James Bottomley, linux-scsi, Hannes Reinecke, Hannes Reinecke Add new trace functions for ZBC_IN and ZBC_OUT. Signed-off-by: Hannes Reinecke <hare@suse.com> --- drivers/scsi/scsi_trace.c | 87 +++++++++++++++++++++++++++++++++++++++++++++ include/scsi/scsi_proto.h | 9 +++++ include/trace/events/scsi.h | 2 ++ 3 files changed, 98 insertions(+) diff --git a/drivers/scsi/scsi_trace.c b/drivers/scsi/scsi_trace.c index b50cfe8..b10ce6c 100644 --- a/drivers/scsi/scsi_trace.c +++ b/drivers/scsi/scsi_trace.c @@ -323,6 +323,89 @@ out: } 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; + sector_t zone_id = 0; + u32 alloc_len = 0; + u8 options; + + switch (SERVICE_ACTION16(cdb)) { + case ZI_REPORT_ZONES: + cmd = "REPORT_ZONES"; + break; + default: + trace_seq_puts(p, "UNKNOWN"); + goto out; + } + + zone_id |= ((u64)cdb[2] << 56); + zone_id |= ((u64)cdb[3] << 48); + zone_id |= ((u64)cdb[4] << 40); + zone_id |= ((u64)cdb[5] << 32); + zone_id |= (cdb[6] << 24); + zone_id |= (cdb[7] << 16); + zone_id |= (cdb[8] << 8); + zone_id |= cdb[9]; + alloc_len |= (cdb[10] << 24); + alloc_len |= (cdb[11] << 16); + alloc_len |= (cdb[12] << 8); + alloc_len |= cdb[13]; + 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; + sector_t zone_id = 0; + + 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 |= ((u64)cdb[2] << 56); + zone_id |= ((u64)cdb[3] << 48); + zone_id |= ((u64)cdb[4] << 40); + zone_id |= ((u64)cdb[5] << 32); + zone_id |= (cdb[6] << 24); + zone_id |= (cdb[7] << 16); + zone_id |= (cdb[8] << 8); + zone_id |= cdb[9]; + + 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) { switch (SERVICE_ACTION32(cdb)) { @@ -378,6 +461,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); } diff --git a/include/scsi/scsi_proto.h b/include/scsi/scsi_proto.h index c2ae21c..086bff9 100644 --- a/include/scsi/scsi_proto.h +++ b/include/scsi/scsi_proto.h @@ -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_OPEN_ZONE 0x02 +#define ZO_FINISH_ZONE 0x03 +#define ZO_RESET_WRITE_POINTER 0x04 /* values for variable length command */ #define XDREAD_32 0x03 #define XDWRITE_32 0x04 diff --git a/include/trace/events/scsi.h b/include/trace/events/scsi.h index 5c0d91f..9a9b3e2 100644 --- a/include/trace/events/scsi.h +++ b/include/trace/events/scsi.h @@ -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), \ -- 1.8.5.6 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH 3/3] scsi-trace: define ZBC_IN and ZBC_OUT 2016-03-24 10:23 ` [PATCH 3/3] scsi-trace: define ZBC_IN and ZBC_OUT Hannes Reinecke @ 2016-03-24 13:40 ` Ewan D. Milne 0 siblings, 0 replies; 7+ messages in thread From: Ewan D. Milne @ 2016-03-24 13:40 UTC (permalink / raw) To: Hannes Reinecke Cc: Martin K. Petersen, Christoph Hellwig, James Bottomley, linux-scsi, Hannes Reinecke On Thu, 2016-03-24 at 11:23 +0100, Hannes Reinecke wrote: > Add new trace functions for ZBC_IN and ZBC_OUT. > > Signed-off-by: Hannes Reinecke <hare@suse.com> > --- > drivers/scsi/scsi_trace.c | 87 +++++++++++++++++++++++++++++++++++++++++++++ > include/scsi/scsi_proto.h | 9 +++++ > include/trace/events/scsi.h | 2 ++ > 3 files changed, 98 insertions(+) > > diff --git a/drivers/scsi/scsi_trace.c b/drivers/scsi/scsi_trace.c > index b50cfe8..b10ce6c 100644 > --- a/drivers/scsi/scsi_trace.c > +++ b/drivers/scsi/scsi_trace.c > @@ -323,6 +323,89 @@ out: > } > > 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; > + sector_t zone_id = 0; > + u32 alloc_len = 0; > + u8 options; > + > + switch (SERVICE_ACTION16(cdb)) { > + case ZI_REPORT_ZONES: > + cmd = "REPORT_ZONES"; > + break; > + default: > + trace_seq_puts(p, "UNKNOWN"); > + goto out; > + } > + > + zone_id |= ((u64)cdb[2] << 56); > + zone_id |= ((u64)cdb[3] << 48); > + zone_id |= ((u64)cdb[4] << 40); > + zone_id |= ((u64)cdb[5] << 32); > + zone_id |= (cdb[6] << 24); > + zone_id |= (cdb[7] << 16); > + zone_id |= (cdb[8] << 8); > + zone_id |= cdb[9]; > + alloc_len |= (cdb[10] << 24); > + alloc_len |= (cdb[11] << 16); > + alloc_len |= (cdb[12] << 8); > + alloc_len |= cdb[13]; > + 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; > + sector_t zone_id = 0; > + > + 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 |= ((u64)cdb[2] << 56); > + zone_id |= ((u64)cdb[3] << 48); > + zone_id |= ((u64)cdb[4] << 40); > + zone_id |= ((u64)cdb[5] << 32); > + zone_id |= (cdb[6] << 24); > + zone_id |= (cdb[7] << 16); > + zone_id |= (cdb[8] << 8); > + zone_id |= cdb[9]; > + > + 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) > { > switch (SERVICE_ACTION32(cdb)) { > @@ -378,6 +461,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); > } > diff --git a/include/scsi/scsi_proto.h b/include/scsi/scsi_proto.h > index c2ae21c..086bff9 100644 > --- a/include/scsi/scsi_proto.h > +++ b/include/scsi/scsi_proto.h > @@ -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_OPEN_ZONE 0x02 > +#define ZO_FINISH_ZONE 0x03 > +#define ZO_RESET_WRITE_POINTER 0x04 > /* values for variable length command */ > #define XDREAD_32 0x03 > #define XDWRITE_32 0x04 > diff --git a/include/trace/events/scsi.h b/include/trace/events/scsi.h > index 5c0d91f..9a9b3e2 100644 > --- a/include/trace/events/scsi.h > +++ b/include/trace/events/scsi.h > @@ -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), \ Reviewed-by: Ewan D. Milne <emilne@redhat.com> ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2016-03-24 13:40 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2016-03-24 10:23 [PATCH 0/3] scsi trace updates Hannes Reinecke 2016-03-24 10:23 ` [PATCH 1/3] scsi-trace: remove service action definitions Hannes Reinecke 2016-03-24 13:03 ` Ewan D. Milne 2016-03-24 10:23 ` [PATCH 2/3] scsi-trace: Decode MAINTENANCE_IN and MAINTENANCE_OUT commands Hannes Reinecke 2016-03-24 13:03 ` Ewan D. Milne 2016-03-24 10:23 ` [PATCH 3/3] scsi-trace: define ZBC_IN and ZBC_OUT Hannes Reinecke 2016-03-24 13:40 ` Ewan D. Milne
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox