1455b2864SDave Chinner #undef TRACE_SYSTEM 2455b2864SDave Chinner #define TRACE_SYSTEM writeback 3455b2864SDave Chinner 4455b2864SDave Chinner #if !defined(_TRACE_WRITEBACK_H) || defined(TRACE_HEADER_MULTI_READ) 5455b2864SDave Chinner #define _TRACE_WRITEBACK_H 6455b2864SDave Chinner 7455b2864SDave Chinner #include <linux/backing-dev.h> 8455b2864SDave Chinner #include <linux/writeback.h> 9455b2864SDave Chinner 10455b2864SDave Chinner struct wb_writeback_work; 11455b2864SDave Chinner 12455b2864SDave Chinner DECLARE_EVENT_CLASS(writeback_work_class, 13455b2864SDave Chinner TP_PROTO(struct backing_dev_info *bdi, struct wb_writeback_work *work), 14455b2864SDave Chinner TP_ARGS(bdi, work), 15455b2864SDave Chinner TP_STRUCT__entry( 16455b2864SDave Chinner __array(char, name, 32) 17455b2864SDave Chinner __field(long, nr_pages) 18455b2864SDave Chinner __field(dev_t, sb_dev) 19455b2864SDave Chinner __field(int, sync_mode) 20455b2864SDave Chinner __field(int, for_kupdate) 21455b2864SDave Chinner __field(int, range_cyclic) 22455b2864SDave Chinner __field(int, for_background) 23455b2864SDave Chinner ), 24455b2864SDave Chinner TP_fast_assign( 25455b2864SDave Chinner strncpy(__entry->name, dev_name(bdi->dev), 32); 26455b2864SDave Chinner __entry->nr_pages = work->nr_pages; 27455b2864SDave Chinner __entry->sb_dev = work->sb ? work->sb->s_dev : 0; 28455b2864SDave Chinner __entry->sync_mode = work->sync_mode; 29455b2864SDave Chinner __entry->for_kupdate = work->for_kupdate; 30455b2864SDave Chinner __entry->range_cyclic = work->range_cyclic; 31455b2864SDave Chinner __entry->for_background = work->for_background; 32455b2864SDave Chinner ), 33455b2864SDave Chinner TP_printk("bdi %s: sb_dev %d:%d nr_pages=%ld sync_mode=%d " 34455b2864SDave Chinner "kupdate=%d range_cyclic=%d background=%d", 35455b2864SDave Chinner __entry->name, 36455b2864SDave Chinner MAJOR(__entry->sb_dev), MINOR(__entry->sb_dev), 37455b2864SDave Chinner __entry->nr_pages, 38455b2864SDave Chinner __entry->sync_mode, 39455b2864SDave Chinner __entry->for_kupdate, 40455b2864SDave Chinner __entry->range_cyclic, 41455b2864SDave Chinner __entry->for_background 42455b2864SDave Chinner ) 43455b2864SDave Chinner ); 44455b2864SDave Chinner #define DEFINE_WRITEBACK_WORK_EVENT(name) \ 45455b2864SDave Chinner DEFINE_EVENT(writeback_work_class, name, \ 46455b2864SDave Chinner TP_PROTO(struct backing_dev_info *bdi, struct wb_writeback_work *work), \ 47455b2864SDave Chinner TP_ARGS(bdi, work)) 48455b2864SDave Chinner DEFINE_WRITEBACK_WORK_EVENT(writeback_nothread); 49455b2864SDave Chinner DEFINE_WRITEBACK_WORK_EVENT(writeback_queue); 50455b2864SDave Chinner DEFINE_WRITEBACK_WORK_EVENT(writeback_exec); 51455b2864SDave Chinner 52455b2864SDave Chinner TRACE_EVENT(writeback_pages_written, 53455b2864SDave Chinner TP_PROTO(long pages_written), 54455b2864SDave Chinner TP_ARGS(pages_written), 55455b2864SDave Chinner TP_STRUCT__entry( 56455b2864SDave Chinner __field(long, pages) 57455b2864SDave Chinner ), 58455b2864SDave Chinner TP_fast_assign( 59455b2864SDave Chinner __entry->pages = pages_written; 60455b2864SDave Chinner ), 61455b2864SDave Chinner TP_printk("%ld", __entry->pages) 62455b2864SDave Chinner ); 63455b2864SDave Chinner 64455b2864SDave Chinner DECLARE_EVENT_CLASS(writeback_class, 65455b2864SDave Chinner TP_PROTO(struct backing_dev_info *bdi), 66455b2864SDave Chinner TP_ARGS(bdi), 67455b2864SDave Chinner TP_STRUCT__entry( 68455b2864SDave Chinner __array(char, name, 32) 69455b2864SDave Chinner ), 70455b2864SDave Chinner TP_fast_assign( 71455b2864SDave Chinner strncpy(__entry->name, dev_name(bdi->dev), 32); 72455b2864SDave Chinner ), 73455b2864SDave Chinner TP_printk("bdi %s", 74455b2864SDave Chinner __entry->name 75455b2864SDave Chinner ) 76455b2864SDave Chinner ); 77455b2864SDave Chinner #define DEFINE_WRITEBACK_EVENT(name) \ 78455b2864SDave Chinner DEFINE_EVENT(writeback_class, name, \ 79455b2864SDave Chinner TP_PROTO(struct backing_dev_info *bdi), \ 80455b2864SDave Chinner TP_ARGS(bdi)) 81455b2864SDave Chinner 82455b2864SDave Chinner DEFINE_WRITEBACK_EVENT(writeback_nowork); 83455b2864SDave Chinner DEFINE_WRITEBACK_EVENT(writeback_bdi_register); 84455b2864SDave Chinner DEFINE_WRITEBACK_EVENT(writeback_bdi_unregister); 85455b2864SDave Chinner DEFINE_WRITEBACK_EVENT(writeback_thread_start); 86455b2864SDave Chinner DEFINE_WRITEBACK_EVENT(writeback_thread_stop); 87455b2864SDave Chinner 88*028c2dd1SDave Chinner DECLARE_EVENT_CLASS(wbc_class, 89*028c2dd1SDave Chinner TP_PROTO(struct writeback_control *wbc, struct backing_dev_info *bdi), 90*028c2dd1SDave Chinner TP_ARGS(wbc, bdi), 91*028c2dd1SDave Chinner TP_STRUCT__entry( 92*028c2dd1SDave Chinner __array(char, name, 32) 93*028c2dd1SDave Chinner __field(long, nr_to_write) 94*028c2dd1SDave Chinner __field(long, pages_skipped) 95*028c2dd1SDave Chinner __field(int, sync_mode) 96*028c2dd1SDave Chinner __field(int, nonblocking) 97*028c2dd1SDave Chinner __field(int, encountered_congestion) 98*028c2dd1SDave Chinner __field(int, for_kupdate) 99*028c2dd1SDave Chinner __field(int, for_background) 100*028c2dd1SDave Chinner __field(int, for_reclaim) 101*028c2dd1SDave Chinner __field(int, range_cyclic) 102*028c2dd1SDave Chinner __field(int, more_io) 103*028c2dd1SDave Chinner __field(unsigned long, older_than_this) 104*028c2dd1SDave Chinner __field(long, range_start) 105*028c2dd1SDave Chinner __field(long, range_end) 106*028c2dd1SDave Chinner ), 107*028c2dd1SDave Chinner 108*028c2dd1SDave Chinner TP_fast_assign( 109*028c2dd1SDave Chinner strncpy(__entry->name, dev_name(bdi->dev), 32); 110*028c2dd1SDave Chinner __entry->nr_to_write = wbc->nr_to_write; 111*028c2dd1SDave Chinner __entry->pages_skipped = wbc->pages_skipped; 112*028c2dd1SDave Chinner __entry->sync_mode = wbc->sync_mode; 113*028c2dd1SDave Chinner __entry->for_kupdate = wbc->for_kupdate; 114*028c2dd1SDave Chinner __entry->for_background = wbc->for_background; 115*028c2dd1SDave Chinner __entry->for_reclaim = wbc->for_reclaim; 116*028c2dd1SDave Chinner __entry->range_cyclic = wbc->range_cyclic; 117*028c2dd1SDave Chinner __entry->more_io = wbc->more_io; 118*028c2dd1SDave Chinner __entry->older_than_this = wbc->older_than_this ? 119*028c2dd1SDave Chinner *wbc->older_than_this : 0; 120*028c2dd1SDave Chinner __entry->range_start = (long)wbc->range_start; 121*028c2dd1SDave Chinner __entry->range_end = (long)wbc->range_end; 122*028c2dd1SDave Chinner ), 123*028c2dd1SDave Chinner 124*028c2dd1SDave Chinner TP_printk("bdi %s: towrt=%ld skip=%ld mode=%d kupd=%d " 125*028c2dd1SDave Chinner "bgrd=%d reclm=%d cyclic=%d more=%d older=0x%lx " 126*028c2dd1SDave Chinner "start=0x%lx end=0x%lx", 127*028c2dd1SDave Chinner __entry->name, 128*028c2dd1SDave Chinner __entry->nr_to_write, 129*028c2dd1SDave Chinner __entry->pages_skipped, 130*028c2dd1SDave Chinner __entry->sync_mode, 131*028c2dd1SDave Chinner __entry->for_kupdate, 132*028c2dd1SDave Chinner __entry->for_background, 133*028c2dd1SDave Chinner __entry->for_reclaim, 134*028c2dd1SDave Chinner __entry->range_cyclic, 135*028c2dd1SDave Chinner __entry->more_io, 136*028c2dd1SDave Chinner __entry->older_than_this, 137*028c2dd1SDave Chinner __entry->range_start, 138*028c2dd1SDave Chinner __entry->range_end) 139*028c2dd1SDave Chinner ) 140*028c2dd1SDave Chinner 141*028c2dd1SDave Chinner #define DEFINE_WBC_EVENT(name) \ 142*028c2dd1SDave Chinner DEFINE_EVENT(wbc_class, name, \ 143*028c2dd1SDave Chinner TP_PROTO(struct writeback_control *wbc, struct backing_dev_info *bdi), \ 144*028c2dd1SDave Chinner TP_ARGS(wbc, bdi)) 145*028c2dd1SDave Chinner DEFINE_WBC_EVENT(wbc_writeback_start); 146*028c2dd1SDave Chinner DEFINE_WBC_EVENT(wbc_writeback_written); 147*028c2dd1SDave Chinner DEFINE_WBC_EVENT(wbc_writeback_wait); 148*028c2dd1SDave Chinner DEFINE_WBC_EVENT(wbc_balance_dirty_start); 149*028c2dd1SDave Chinner DEFINE_WBC_EVENT(wbc_balance_dirty_written); 150*028c2dd1SDave Chinner DEFINE_WBC_EVENT(wbc_balance_dirty_wait); 151*028c2dd1SDave Chinner 152455b2864SDave Chinner #endif /* _TRACE_WRITEBACK_H */ 153455b2864SDave Chinner 154455b2864SDave Chinner /* This part must be outside protection */ 155455b2864SDave Chinner #include <trace/define_trace.h> 156