|
@@ -317,6 +317,72 @@ out:
|
|
|
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);
|
|
|
}
|