nvmet: trace: parse Get LBA Status command in detail
authorMinwoo Im <minwoo.im.dev@gmail.com>
Sun, 4 Aug 2019 07:50:50 +0000 (16:50 +0900)
committerSagi Grimberg <sagi@grimberg.me>
Thu, 29 Aug 2019 19:55:01 +0000 (12:55 -0700)
Four different fields are in CDWs of Get LBA Status command which means
it would be great if we can see in detail when tracing in target side
also.

Signed-off-by: Minwoo Im <minwoo.im.dev@gmail.com>
Signed-off-by: Sagi Grimberg <sagi@grimberg.me>
drivers/nvme/target/trace.c

index 6af11d49327183457845c8abb1e4769aeeff1846..1373a3c67962a8e3cf2355fa9a147da441452f6b 100644 (file)
@@ -33,6 +33,22 @@ static const char *nvmet_trace_admin_get_features(struct trace_seq *p,
        return ret;
 }
 
+static const char *nvmet_trace_get_lba_status(struct trace_seq *p,
+                                            u8 *cdw10)
+{
+       const char *ret = trace_seq_buffer_ptr(p);
+       u64 slba = get_unaligned_le64(cdw10);
+       u32 mndw = get_unaligned_le32(cdw10 + 8);
+       u16 rl = get_unaligned_le16(cdw10 + 12);
+       u8 atype = cdw10[15];
+
+       trace_seq_printf(p, "slba=0x%llx, mndw=0x%x, rl=0x%x, atype=%u",
+                       slba, mndw, rl, atype);
+       trace_seq_putc(p, 0);
+
+       return ret;
+}
+
 static const char *nvmet_trace_read_write(struct trace_seq *p, u8 *cdw10)
 {
        const char *ret = trace_seq_buffer_ptr(p);
@@ -80,6 +96,8 @@ const char *nvmet_trace_parse_admin_cmd(struct trace_seq *p,
                return nvmet_trace_admin_identify(p, cdw10);
        case nvme_admin_get_features:
                return nvmet_trace_admin_get_features(p, cdw10);
+       case nvme_admin_get_lba_status:
+               return nvmet_trace_get_lba_status(p, cdw10);
        default:
                return nvmet_trace_common(p, cdw10);
        }