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

lightnvm: pblk: add tracing for chunk resets

Trace state of chunk resets.

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>

authored by

Hans Holmberg and committed by
Jens Axboe
4209c31c 1b0dd0bf

+49
+12
drivers/lightnvm/pblk-core.c
··· 90 90 atomic_dec(&line->left_seblks); 91 91 92 92 if (rqd->error) { 93 + trace_pblk_chunk_reset(pblk_disk_name(pblk), 94 + &rqd->ppa_addr, PBLK_CHUNK_RESET_FAILED); 95 + 93 96 chunk->state = NVM_CHK_ST_OFFLINE; 94 97 pblk_mark_bb(pblk, line, rqd->ppa_addr); 95 98 } else { 99 + trace_pblk_chunk_reset(pblk_disk_name(pblk), 100 + &rqd->ppa_addr, PBLK_CHUNK_RESET_DONE); 101 + 96 102 chunk->state = NVM_CHK_ST_FREE; 97 103 } 98 104 ··· 929 923 struct nvm_rq rqd = {NULL}; 930 924 int ret; 931 925 926 + trace_pblk_chunk_reset(pblk_disk_name(pblk), &ppa, 927 + PBLK_CHUNK_RESET_START); 928 + 932 929 pblk_setup_e_rq(pblk, &rqd, ppa); 933 930 934 931 /* The write thread schedules erases so that it minimizes disturbances ··· 1744 1735 1745 1736 rqd->end_io = pblk_end_io_erase; 1746 1737 rqd->private = pblk; 1738 + 1739 + trace_pblk_chunk_reset(pblk_disk_name(pblk), 1740 + &ppa, PBLK_CHUNK_RESET_START); 1747 1741 1748 1742 /* The write thread schedules erases so that it minimizes disturbances 1749 1743 * with writes. Thus, there is no need to take the LUN semaphore.
+31
drivers/lightnvm/pblk-trace.h
··· 31 31 { PBLK_STATE_RECOVERING, "RECOVERING", }, \ 32 32 { PBLK_STATE_STOPPED, "STOPPED" }) 33 33 34 + #define show_chunk_erase_state(state) __print_symbolic(state, \ 35 + { PBLK_CHUNK_RESET_START, "START", }, \ 36 + { PBLK_CHUNK_RESET_DONE, "OK", }, \ 37 + { PBLK_CHUNK_RESET_FAILED, "FAILED" }) 38 + 39 + 40 + TRACE_EVENT(pblk_chunk_reset, 41 + 42 + TP_PROTO(const char *name, struct ppa_addr *ppa, int state), 43 + 44 + TP_ARGS(name, ppa, state), 45 + 46 + TP_STRUCT__entry( 47 + __string(name, name) 48 + __field(u64, ppa) 49 + __field(int, state); 50 + ), 51 + 52 + TP_fast_assign( 53 + __assign_str(name, name); 54 + __entry->ppa = ppa->ppa; 55 + __entry->state = state; 56 + ), 57 + 58 + TP_printk("dev=%s grp=%llu pu=%llu chk=%llu state=%s", __get_str(name), 59 + (u64)(((struct ppa_addr *)(&__entry->ppa))->m.grp), 60 + (u64)(((struct ppa_addr *)(&__entry->ppa))->m.pu), 61 + (u64)(((struct ppa_addr *)(&__entry->ppa))->m.chk), 62 + show_chunk_erase_state((int)__entry->state)) 63 + 64 + ); 34 65 35 66 TRACE_EVENT(pblk_chunk_state, 36 67
+6
drivers/lightnvm/pblk.h
··· 79 79 PBLK_BLK_ST_CLOSED = 0x2, 80 80 }; 81 81 82 + enum { 83 + PBLK_CHUNK_RESET_START, 84 + PBLK_CHUNK_RESET_DONE, 85 + PBLK_CHUNK_RESET_FAILED, 86 + }; 87 + 82 88 struct pblk_sec_meta { 83 89 u64 reserved; 84 90 __le64 lba;