OSDN Git Service

lightnvm: pblk: add trace events for pblk state changes
authorHans Holmberg <hans.holmberg@cnexlabs.com>
Tue, 9 Oct 2018 11:11:54 +0000 (13:11 +0200)
committerJens Axboe <axboe@kernel.dk>
Tue, 9 Oct 2018 14:25:07 +0000 (08:25 -0600)
Add trace events for tracking pblk state changes.

Signed-off-by: Hans Holmberg <hans.holmberg@cnexlabs.com>
Signed-off-by: Matias Bjørling <mb@lightnvm.io>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/lightnvm/pblk-core.c
drivers/lightnvm/pblk-init.c
drivers/lightnvm/pblk-trace.h

index ef52c16..c482ef7 100644 (file)
@@ -1503,6 +1503,7 @@ static void pblk_stop_writes(struct pblk *pblk, struct pblk_line *line)
 
        pblk_set_space_limit(pblk);
        pblk->state = PBLK_STATE_STOPPING;
+       trace_pblk_state(pblk_disk_name(pblk), pblk->state);
 }
 
 static void pblk_line_close_meta_sync(struct pblk *pblk)
@@ -1552,6 +1553,7 @@ void __pblk_pipeline_flush(struct pblk *pblk)
                return;
        }
        pblk->state = PBLK_STATE_RECOVERING;
+       trace_pblk_state(pblk_disk_name(pblk), pblk->state);
        spin_unlock(&l_mg->free_lock);
 
        pblk_flush_writer(pblk);
@@ -1573,6 +1575,7 @@ void __pblk_pipeline_stop(struct pblk *pblk)
 
        spin_lock(&l_mg->free_lock);
        pblk->state = PBLK_STATE_STOPPED;
+       trace_pblk_state(pblk_disk_name(pblk), pblk->state);
        l_mg->data_line = NULL;
        l_mg->data_next = NULL;
        spin_unlock(&l_mg->free_lock);
index fca37da..9aebdee 100644 (file)
@@ -1109,6 +1109,7 @@ static void *pblk_init(struct nvm_tgt_dev *dev, struct gendisk *tdisk,
        pblk->dev = dev;
        pblk->disk = tdisk;
        pblk->state = PBLK_STATE_RUNNING;
+       trace_pblk_state(pblk_disk_name(pblk), pblk->state);
        pblk->gc.gc_enabled = 0;
 
        if (!(geo->version == NVM_OCSSD_SPEC_12 ||
index f9aa9e2..c171d04 100644 (file)
@@ -25,6 +25,13 @@ struct ppa_addr;
        { PBLK_LINESTATE_CORRUPT,       "CORRUPT"       })
 
 
+#define show_pblk_state(state) __print_symbolic(state,         \
+       { PBLK_STATE_RUNNING,           "RUNNING",      },      \
+       { PBLK_STATE_STOPPING,          "STOPPING",     },      \
+       { PBLK_STATE_RECOVERING,        "RECOVERING",   },      \
+       { PBLK_STATE_STOPPED,           "STOPPED"       })
+
+
 TRACE_EVENT(pblk_chunk_state,
 
        TP_PROTO(const char *name, struct ppa_addr *ppa, int state),
@@ -75,6 +82,27 @@ TRACE_EVENT(pblk_line_state,
 
 );
 
+TRACE_EVENT(pblk_state,
+
+       TP_PROTO(const char *name, int state),
+
+       TP_ARGS(name, state),
+
+       TP_STRUCT__entry(
+               __string(name, name)
+               __field(int, state);
+       ),
+
+       TP_fast_assign(
+               __assign_str(name, name);
+               __entry->state = state;
+       ),
+
+       TP_printk("dev=%s state=%s", __get_str(name),
+                       show_pblk_state((int)__entry->state))
+
+);
+
 #endif /* !defined(_TRACE_PBLK_H) || defined(TRACE_HEADER_MULTI_READ) */
 
 /* This part must be outside protection */