diff --git a/libnvme/src/nvme/lib.h b/libnvme/src/nvme/lib.h index 4c9bfa70b6..f731df4057 100644 --- a/libnvme/src/nvme/lib.h +++ b/libnvme/src/nvme/lib.h @@ -14,10 +14,11 @@ #include enum libnvme_log_level { - LIBNVME_LOG_ERR = 0, - LIBNVME_LOG_WARN = 1, - LIBNVME_LOG_INFO = 2, - LIBNVME_LOG_DEBUG = 3, + LIBNVME_LOG_ERR = 0, + LIBNVME_LOG_WARN = 1, + LIBNVME_LOG_INFO = 2, + LIBNVME_LOG_DEBUG = 3, + LIBNVME_LOG_VERBOSE = 4, }; #define LIBNVME_DEFAULT_LOGLEVEL LIBNVME_LOG_WARN diff --git a/logging.c b/logging.c index 667150c00c..f574beeeeb 100644 --- a/logging.c +++ b/logging.c @@ -33,13 +33,21 @@ bool is_printable_at_level(int level) int map_log_level(int verbose, bool quiet) { - if (verbose == 0 || quiet) + if (quiet) return LIBNVME_LOG_ERR; - if (verbose == 1) + switch (verbose) { + case 0: + return LIBNVME_LOG_ERR; + case 1: return LIBNVME_LOG_INFO; + case 2: + return LIBNVME_LOG_DEBUG; + default: + break; + } - return LIBNVME_LOG_DEBUG; + return LIBNVME_LOG_VERBOSE; } static void nvme_show_common(struct libnvme_passthru_cmd *cmd) @@ -77,6 +85,20 @@ static void nvme_show_latency(struct timeval start, struct timeval end) (end.tv_usec - start.tv_usec))); } +static void nvme_show_data(const char *data, uintptr_t addr, int len) +{ + if (len) { + nvme_show_key_value(data, "%lu bytes", len); + d((unsigned char *)addr, len, 16, 1); + } +} + +static void nvme_show_datum(struct libnvme_passthru_cmd *cmd) +{ + nvme_show_data("data", (uintptr_t)cmd->addr, cmd->data_len); + nvme_show_data("metadata", (uintptr_t)cmd->metadata, cmd->metadata_len); +} + static void nvme_log_retry(int errnum) { if (log_level < LIBNVME_LOG_DEBUG) @@ -105,6 +127,7 @@ void nvme_submit_exit(struct libnvme_transport_handle *hdl, gettimeofday(&sb->end, NULL); nvme_show_command(cmd, err); nvme_show_latency(sb->start, sb->end); + nvme_show_datum(cmd); } } diff --git a/nvme-print-stdout.c b/nvme-print-stdout.c index 4f8845f1a0..470c314165 100644 --- a/nvme-print-stdout.c +++ b/nvme-print-stdout.c @@ -5085,7 +5085,7 @@ static void stdout_lba_status_info(__u64 result) static bool line_equal(unsigned char *buf, int len, int width, int offset) { - if (!offset || len < offset + width || log_level >= LIBNVME_LOG_DEBUG) + if (!offset || len < offset + width || log_level >= LIBNVME_LOG_VERBOSE) return false; return !memcmp(buf + offset - width, buf + offset, width);