Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Hannes Reinecke and committed by
Martin K. Petersen
0008f1e7 5141f16a

+81
+70
drivers/scsi/scsi_trace.c
··· 318 318 } 319 319 320 320 static const char * 321 + scsi_trace_zbc_in(struct trace_seq *p, unsigned char *cdb, int len) 322 + { 323 + const char *ret = trace_seq_buffer_ptr(p), *cmd; 324 + u64 zone_id; 325 + u32 alloc_len; 326 + u8 options; 327 + 328 + switch (SERVICE_ACTION16(cdb)) { 329 + case ZI_REPORT_ZONES: 330 + cmd = "REPORT_ZONES"; 331 + break; 332 + default: 333 + trace_seq_puts(p, "UNKNOWN"); 334 + goto out; 335 + } 336 + 337 + zone_id = get_unaligned_be64(&cdb[2]); 338 + alloc_len = get_unaligned_be32(&cdb[10]); 339 + options = cdb[14] & 0x3f; 340 + 341 + trace_seq_printf(p, "%s zone=%llu alloc_len=%u options=%u partial=%u", 342 + cmd, (unsigned long long)zone_id, alloc_len, 343 + options, (cdb[14] >> 7) & 1); 344 + 345 + out: 346 + trace_seq_putc(p, 0); 347 + 348 + return ret; 349 + } 350 + 351 + static const char * 352 + scsi_trace_zbc_out(struct trace_seq *p, unsigned char *cdb, int len) 353 + { 354 + const char *ret = trace_seq_buffer_ptr(p), *cmd; 355 + u64 zone_id; 356 + 357 + switch (SERVICE_ACTION16(cdb)) { 358 + case ZO_CLOSE_ZONE: 359 + cmd = "CLOSE_ZONE"; 360 + break; 361 + case ZO_FINISH_ZONE: 362 + cmd = "FINISH_ZONE"; 363 + break; 364 + case ZO_OPEN_ZONE: 365 + cmd = "OPEN_ZONE"; 366 + break; 367 + case ZO_RESET_WRITE_POINTER: 368 + cmd = "RESET_WRITE_POINTER"; 369 + break; 370 + default: 371 + trace_seq_puts(p, "UNKNOWN"); 372 + goto out; 373 + } 374 + 375 + zone_id = get_unaligned_be64(&cdb[2]); 376 + 377 + trace_seq_printf(p, "%s zone=%llu all=%u", cmd, 378 + (unsigned long long)zone_id, cdb[14] & 1); 379 + 380 + out: 381 + trace_seq_putc(p, 0); 382 + 383 + return ret; 384 + } 385 + 386 + static const char * 321 387 scsi_trace_varlen(struct trace_seq *p, unsigned char *cdb, int len) 322 388 { 323 389 switch (SERVICE_ACTION32(cdb)) { ··· 439 373 return scsi_trace_maintenance_in(p, cdb, len); 440 374 case MAINTENANCE_OUT: 441 375 return scsi_trace_maintenance_out(p, cdb, len); 376 + case ZBC_IN: 377 + return scsi_trace_zbc_in(p, cdb, len); 378 + case ZBC_OUT: 379 + return scsi_trace_zbc_out(p, cdb, len); 442 380 default: 443 381 return scsi_trace_misc(p, cdb, len); 444 382 }
+9
include/scsi/scsi_proto.h
··· 115 115 #define VERIFY_16 0x8f 116 116 #define SYNCHRONIZE_CACHE_16 0x91 117 117 #define WRITE_SAME_16 0x93 118 + #define ZBC_OUT 0x94 119 + #define ZBC_IN 0x95 118 120 #define SERVICE_ACTION_BIDIRECTIONAL 0x9d 119 121 #define SERVICE_ACTION_IN_16 0x9e 120 122 #define SERVICE_ACTION_OUT_16 0x9f ··· 145 143 #define MO_SET_PRIORITY 0x0e 146 144 #define MO_SET_TIMESTAMP 0x0f 147 145 #define MO_MANAGEMENT_PROTOCOL_OUT 0x10 146 + /* values for ZBC_IN */ 147 + #define ZI_REPORT_ZONES 0x00 148 + /* values for ZBC_OUT */ 149 + #define ZO_CLOSE_ZONE 0x01 150 + #define ZO_FINISH_ZONE 0x02 151 + #define ZO_OPEN_ZONE 0x03 152 + #define ZO_RESET_WRITE_POINTER 0x04 148 153 /* values for variable length command */ 149 154 #define XDREAD_32 0x03 150 155 #define XDWRITE_32 0x04
+2
include/trace/events/scsi.h
··· 94 94 scsi_opcode_name(WRITE_16), \ 95 95 scsi_opcode_name(VERIFY_16), \ 96 96 scsi_opcode_name(WRITE_SAME_16), \ 97 + scsi_opcode_name(ZBC_OUT), \ 98 + scsi_opcode_name(ZBC_IN), \ 97 99 scsi_opcode_name(SERVICE_ACTION_IN_16), \ 98 100 scsi_opcode_name(READ_32), \ 99 101 scsi_opcode_name(WRITE_32), \