linux/include/trace/events/writeback.h
<<
>>
Prefs
   1#undef TRACE_SYSTEM
   2#define TRACE_SYSTEM writeback
   3
   4#if !defined(_TRACE_WRITEBACK_H) || defined(TRACE_HEADER_MULTI_READ)
   5#define _TRACE_WRITEBACK_H
   6
   7#include <linux/backing-dev.h>
   8#include <linux/device.h>
   9#include <linux/writeback.h>
  10
  11struct wb_writeback_work;
  12
  13DECLARE_EVENT_CLASS(writeback_work_class,
  14        TP_PROTO(struct backing_dev_info *bdi, struct wb_writeback_work *work),
  15        TP_ARGS(bdi, work),
  16        TP_STRUCT__entry(
  17                __array(char, name, 32)
  18                __field(long, nr_pages)
  19                __field(dev_t, sb_dev)
  20                __field(int, sync_mode)
  21                __field(int, for_kupdate)
  22                __field(int, range_cyclic)
  23                __field(int, for_background)
  24        ),
  25        TP_fast_assign(
  26                strncpy(__entry->name, dev_name(bdi->dev), 32);
  27                __entry->nr_pages = work->nr_pages;
  28                __entry->sb_dev = work->sb ? work->sb->s_dev : 0;
  29                __entry->sync_mode = work->sync_mode;
  30                __entry->for_kupdate = work->for_kupdate;
  31                __entry->range_cyclic = work->range_cyclic;
  32                __entry->for_background = work->for_background;
  33        ),
  34        TP_printk("bdi %s: sb_dev %d:%d nr_pages=%ld sync_mode=%d "
  35                  "kupdate=%d range_cyclic=%d background=%d",
  36                  __entry->name,
  37                  MAJOR(__entry->sb_dev), MINOR(__entry->sb_dev),
  38                  __entry->nr_pages,
  39                  __entry->sync_mode,
  40                  __entry->for_kupdate,
  41                  __entry->range_cyclic,
  42                  __entry->for_background
  43        )
  44);
  45#define DEFINE_WRITEBACK_WORK_EVENT(name) \
  46DEFINE_EVENT(writeback_work_class, name, \
  47        TP_PROTO(struct backing_dev_info *bdi, struct wb_writeback_work *work), \
  48        TP_ARGS(bdi, work))
  49DEFINE_WRITEBACK_WORK_EVENT(writeback_nothread);
  50DEFINE_WRITEBACK_WORK_EVENT(writeback_queue);
  51DEFINE_WRITEBACK_WORK_EVENT(writeback_exec);
  52
  53TRACE_EVENT(writeback_pages_written,
  54        TP_PROTO(long pages_written),
  55        TP_ARGS(pages_written),
  56        TP_STRUCT__entry(
  57                __field(long,           pages)
  58        ),
  59        TP_fast_assign(
  60                __entry->pages          = pages_written;
  61        ),
  62        TP_printk("%ld", __entry->pages)
  63);
  64
  65DECLARE_EVENT_CLASS(writeback_class,
  66        TP_PROTO(struct backing_dev_info *bdi),
  67        TP_ARGS(bdi),
  68        TP_STRUCT__entry(
  69                __array(char, name, 32)
  70        ),
  71        TP_fast_assign(
  72                strncpy(__entry->name, dev_name(bdi->dev), 32);
  73        ),
  74        TP_printk("bdi %s",
  75                  __entry->name
  76        )
  77);
  78#define DEFINE_WRITEBACK_EVENT(name) \
  79DEFINE_EVENT(writeback_class, name, \
  80        TP_PROTO(struct backing_dev_info *bdi), \
  81        TP_ARGS(bdi))
  82
  83DEFINE_WRITEBACK_EVENT(writeback_nowork);
  84DEFINE_WRITEBACK_EVENT(writeback_wake_background);
  85DEFINE_WRITEBACK_EVENT(writeback_wake_thread);
  86DEFINE_WRITEBACK_EVENT(writeback_wake_forker_thread);
  87DEFINE_WRITEBACK_EVENT(writeback_bdi_register);
  88DEFINE_WRITEBACK_EVENT(writeback_bdi_unregister);
  89DEFINE_WRITEBACK_EVENT(writeback_thread_start);
  90DEFINE_WRITEBACK_EVENT(writeback_thread_stop);
  91
  92DECLARE_EVENT_CLASS(wbc_class,
  93        TP_PROTO(struct writeback_control *wbc, struct backing_dev_info *bdi),
  94        TP_ARGS(wbc, bdi),
  95        TP_STRUCT__entry(
  96                __array(char, name, 32)
  97                __field(long, nr_to_write)
  98                __field(long, pages_skipped)
  99                __field(int, sync_mode)
 100                __field(int, for_kupdate)
 101                __field(int, for_background)
 102                __field(int, for_reclaim)
 103                __field(int, range_cyclic)
 104                __field(int, more_io)
 105                __field(unsigned long, older_than_this)
 106                __field(long, range_start)
 107                __field(long, range_end)
 108        ),
 109
 110        TP_fast_assign(
 111                strncpy(__entry->name, dev_name(bdi->dev), 32);
 112                __entry->nr_to_write    = wbc->nr_to_write;
 113                __entry->pages_skipped  = wbc->pages_skipped;
 114                __entry->sync_mode      = wbc->sync_mode;
 115                __entry->for_kupdate    = wbc->for_kupdate;
 116                __entry->for_background = wbc->for_background;
 117                __entry->for_reclaim    = wbc->for_reclaim;
 118                __entry->range_cyclic   = wbc->range_cyclic;
 119                __entry->more_io        = wbc->more_io;
 120                __entry->older_than_this = wbc->older_than_this ?
 121                                                *wbc->older_than_this : 0;
 122                __entry->range_start    = (long)wbc->range_start;
 123                __entry->range_end      = (long)wbc->range_end;
 124        ),
 125
 126        TP_printk("bdi %s: towrt=%ld skip=%ld mode=%d kupd=%d "
 127                "bgrd=%d reclm=%d cyclic=%d more=%d older=0x%lx "
 128                "start=0x%lx end=0x%lx",
 129                __entry->name,
 130                __entry->nr_to_write,
 131                __entry->pages_skipped,
 132                __entry->sync_mode,
 133                __entry->for_kupdate,
 134                __entry->for_background,
 135                __entry->for_reclaim,
 136                __entry->range_cyclic,
 137                __entry->more_io,
 138                __entry->older_than_this,
 139                __entry->range_start,
 140                __entry->range_end)
 141)
 142
 143#define DEFINE_WBC_EVENT(name) \
 144DEFINE_EVENT(wbc_class, name, \
 145        TP_PROTO(struct writeback_control *wbc, struct backing_dev_info *bdi), \
 146        TP_ARGS(wbc, bdi))
 147DEFINE_WBC_EVENT(wbc_writeback_start);
 148DEFINE_WBC_EVENT(wbc_writeback_written);
 149DEFINE_WBC_EVENT(wbc_writeback_wait);
 150DEFINE_WBC_EVENT(wbc_balance_dirty_start);
 151DEFINE_WBC_EVENT(wbc_balance_dirty_written);
 152DEFINE_WBC_EVENT(wbc_balance_dirty_wait);
 153DEFINE_WBC_EVENT(wbc_writepage);
 154
 155DECLARE_EVENT_CLASS(writeback_congest_waited_template,
 156
 157        TP_PROTO(unsigned int usec_timeout, unsigned int usec_delayed),
 158
 159        TP_ARGS(usec_timeout, usec_delayed),
 160
 161        TP_STRUCT__entry(
 162                __field(        unsigned int,   usec_timeout    )
 163                __field(        unsigned int,   usec_delayed    )
 164        ),
 165
 166        TP_fast_assign(
 167                __entry->usec_timeout   = usec_timeout;
 168                __entry->usec_delayed   = usec_delayed;
 169        ),
 170
 171        TP_printk("usec_timeout=%u usec_delayed=%u",
 172                        __entry->usec_timeout,
 173                        __entry->usec_delayed)
 174);
 175
 176DEFINE_EVENT(writeback_congest_waited_template, writeback_congestion_wait,
 177
 178        TP_PROTO(unsigned int usec_timeout, unsigned int usec_delayed),
 179
 180        TP_ARGS(usec_timeout, usec_delayed)
 181);
 182
 183DEFINE_EVENT(writeback_congest_waited_template, writeback_wait_iff_congested,
 184
 185        TP_PROTO(unsigned int usec_timeout, unsigned int usec_delayed),
 186
 187        TP_ARGS(usec_timeout, usec_delayed)
 188);
 189
 190#endif /* _TRACE_WRITEBACK_H */
 191
 192/* This part must be outside protection */
 193#include <trace/define_trace.h>
 194