#define LTTNG_TRACE_WRITEBACK_H
#include "../../../probes/lttng-tracepoint-event.h"
+#include <linux/tracepoint.h>
#include <linux/backing-dev.h>
#include <linux/writeback.h>
#include <linux/version.h>
#ifndef _TRACE_WRITEBACK_DEF_
#define _TRACE_WRITEBACK_DEF_
+
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,0,0))
static inline struct backing_dev_info *inode_to_bdi(struct inode *inode)
{
struct super_block *sb = inode->i_sb;
return sb->s_bdi;
}
+#endif /* #if (LINUX_VERSION_CODE < KERNEL_VERSION(4,0,0)) */
+
#endif
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,0,0))
+#define show_inode_state(state) \
+ __print_flags(state, "|", \
+ {I_DIRTY_SYNC, "I_DIRTY_SYNC"}, \
+ {I_DIRTY_DATASYNC, "I_DIRTY_DATASYNC"}, \
+ {I_DIRTY_PAGES, "I_DIRTY_PAGES"}, \
+ {I_NEW, "I_NEW"}, \
+ {I_WILL_FREE, "I_WILL_FREE"}, \
+ {I_FREEING, "I_FREEING"}, \
+ {I_CLEAR, "I_CLEAR"}, \
+ {I_SYNC, "I_SYNC"}, \
+ {I_DIRTY_TIME, "I_DIRTY_TIME"}, \
+ {I_DIRTY_TIME_EXPIRED, "I_DIRTY_TIME_EXPIRED"}, \
+ {I_REFERENCED, "I_REFERENCED"} \
+ )
+#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,0,0)) */
#define show_inode_state(state) \
__print_flags(state, "|", \
{I_DIRTY_SYNC, "I_DIRTY_SYNC"}, \
{I_SYNC, "I_SYNC"}, \
{I_REFERENCED, "I_REFERENCED"} \
)
+#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,0,0)) */
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0))
-#define WB_WORK_REASON \
- {WB_REASON_BACKGROUND, "background"}, \
- {WB_REASON_TRY_TO_FREE_PAGES, "try_to_free_pages"}, \
- {WB_REASON_SYNC, "sync"}, \
- {WB_REASON_PERIODIC, "periodic"}, \
- {WB_REASON_LAPTOP_TIMER, "laptop_timer"}, \
- {WB_REASON_FREE_MORE_MEM, "free_more_memory"}, \
- {WB_REASON_FS_FREE_SPACE, "fs_free_space"}, \
- {WB_REASON_FORKER_THREAD, "forker_thread"}
-#endif
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,0,0))
+
+LTTNG_TRACEPOINT_EVENT(writeback_dirty_page,
+ TP_PROTO(struct page *page, struct address_space *mapping),
+ TP_ARGS(page, mapping),
+ TP_STRUCT__entry (
+ __array_text(char, name, 32)
+ __field(unsigned long, ino)
+ __field(pgoff_t, index)
+ ),
+ TP_fast_assign(
+ tp_memcpy(name,
+ mapping ? dev_name(inode_to_bdi(mapping->host)->dev) : "(unknown)", 32)
+ tp_assign(ino, mapping ? mapping->host->i_ino : 0)
+ tp_assign(index, page->index)
+ ),
+ TP_printk("bdi %s: ino=%lu index=%lu",
+ __entry->name,
+ __entry->ino,
+ __entry->index
+ )
+)
+
+LTTNG_TRACEPOINT_EVENT_CLASS(writeback_dirty_inode_template,
+ TP_PROTO(struct inode *inode, int flags),
+ TP_ARGS(inode, flags),
+ TP_STRUCT__entry (
+ __array_text(char, name, 32)
+ __field(unsigned long, ino)
+ __field(unsigned long, state)
+ __field(unsigned long, flags)
+ ),
+ TP_fast_assign(
+ /* may be called for files on pseudo FSes w/ unregistered bdi */
+ tp_memcpy(name,
+ inode_to_bdi(inode)->dev ?
+ dev_name(inode_to_bdi(inode)->dev) : "(unknown)", 32)
+ tp_assign(ino, inode->i_ino)
+ tp_assign(state, inode->i_state)
+ tp_assign(flags, flags)
+ ),
+ TP_printk("bdi %s: ino=%lu flags=%s",
+ __entry->name,
+ __entry->ino,
+ show_inode_state(__entry->flags)
+ )
+)
+#define LTTNG_TRACEPOINT_EVENT_WRITEBACK_DIRTY_INODE_TEMPLATE(name) \
+LTTNG_TRACEPOINT_EVENT_INSTANCE(writeback_dirty_inode_template, name, \
+ TP_PROTO(struct inode *inode, int flags), \
+ TP_ARGS(inode, flags))
+LTTNG_TRACEPOINT_EVENT_WRITEBACK_DIRTY_INODE_TEMPLATE(writeback_dirty_inode_start)
+LTTNG_TRACEPOINT_EVENT_WRITEBACK_DIRTY_INODE_TEMPLATE(writeback_dirty_inode)
+LTTNG_TRACEPOINT_EVENT_WRITEBACK_DIRTY_INODE_TEMPLATE(writeback_mark_inode_dirty)
+
+LTTNG_TRACEPOINT_EVENT_CLASS(writeback_write_inode_template,
+ TP_PROTO(struct inode *inode, struct writeback_control *wbc),
+ TP_ARGS(inode, wbc),
+ TP_STRUCT__entry (
+ __array_text(char, name, 32)
+ __field(unsigned long, ino)
+ __field(int, sync_mode)
+ ),
+ TP_fast_assign(
+ tp_memcpy(name,
+ dev_name(inode_to_bdi(inode)->dev), 32)
+ tp_assign(ino, inode->i_ino)
+ tp_assign(sync_mode, wbc->sync_mode)
+ ),
+ TP_printk("bdi %s: ino=%lu sync_mode=%d",
+ __entry->name,
+ __entry->ino,
+ __entry->sync_mode
+ )
+)
+
+#define LTTNG_TRACEPOINT_EVENT_WRITEBACK_WRITE_INODE(name) \
+LTTNG_TRACEPOINT_EVENT_INSTANCE(writeback_write_inode_template, name, \
+ TP_PROTO(struct inode *inode, struct writeback_control *wbc), \
+ TP_ARGS(inode, wbc))
+LTTNG_TRACEPOINT_EVENT_WRITEBACK_WRITE_INODE(writeback_write_inode_start)
+LTTNG_TRACEPOINT_EVENT_WRITEBACK_WRITE_INODE(writeback_write_inode)
+
+#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0))
+
+LTTNG_TRACEPOINT_EVENT(writeback_dirty_page,
+ TP_PROTO(struct page *page, struct address_space *mapping),
+ TP_ARGS(page, mapping),
+ TP_STRUCT__entry (
+ __array_text(char, name, 32)
+ __field(unsigned long, ino)
+ __field(pgoff_t, index)
+ ),
+ TP_fast_assign(
+ tp_memcpy(name,
+ mapping ? dev_name(mapping->backing_dev_info->dev) : "(unknown)", 32)
+ tp_assign(ino, mapping ? mapping->host->i_ino : 0)
+ tp_assign(index, page->index)
+ ),
+ TP_printk("bdi %s: ino=%lu index=%lu",
+ __entry->name,
+ __entry->ino,
+ __entry->index
+ )
+)
+
+LTTNG_TRACEPOINT_EVENT_CLASS(writeback_dirty_inode_template,
+ TP_PROTO(struct inode *inode, int flags),
+ TP_ARGS(inode, flags),
+ TP_STRUCT__entry (
+ __array_text(char, name, 32)
+ __field(unsigned long, ino)
+ __field(unsigned long, flags)
+ ),
+ TP_fast_assign(
+ /* may be called for files on pseudo FSes w/ unregistered bdi */
+ tp_memcpy(name,
+ inode->i_mapping->backing_dev_info->dev ?
+ dev_name(inode->i_mapping->backing_dev_info->dev) : "(unknown)", 32)
+ tp_assign(ino, inode->i_ino)
+ tp_assign(flags, flags)
+ ),
+ TP_printk("bdi %s: ino=%lu flags=%s",
+ __entry->name,
+ __entry->ino,
+ show_inode_state(__entry->flags)
+ )
+)
+#define LTTNG_TRACEPOINT_EVENT_WRITEBACK_DIRTY_INODE_TEMPLATE(name) \
+LTTNG_TRACEPOINT_EVENT_INSTANCE(writeback_dirty_inode_template, name, \
+ TP_PROTO(struct inode *inode, int flags), \
+ TP_ARGS(inode, flags))
+LTTNG_TRACEPOINT_EVENT_WRITEBACK_DIRTY_INODE_TEMPLATE(writeback_dirty_inode_start)
+LTTNG_TRACEPOINT_EVENT_WRITEBACK_DIRTY_INODE_TEMPLATE(writeback_dirty_inode)
+
+LTTNG_TRACEPOINT_EVENT_CLASS(writeback_write_inode_template,
+ TP_PROTO(struct inode *inode, struct writeback_control *wbc),
+ TP_ARGS(inode, wbc),
+ TP_STRUCT__entry (
+ __array_text(char, name, 32)
+ __field(unsigned long, ino)
+ __field(int, sync_mode)
+ ),
+ TP_fast_assign(
+ tp_memcpy(name,
+ dev_name(inode->i_mapping->backing_dev_info->dev), 32)
+ tp_assign(ino, inode->i_ino)
+ tp_assign(sync_mode, wbc->sync_mode)
+ ),
+ TP_printk("bdi %s: ino=%lu sync_mode=%d",
+ __entry->name,
+ __entry->ino,
+ __entry->sync_mode
+ )
+)
+
+#define LTTNG_TRACEPOINT_EVENT_WRITEBACK_WRITE_INODE(name) \
+LTTNG_TRACEPOINT_EVENT_INSTANCE(writeback_write_inode_template, name, \
+ TP_PROTO(struct inode *inode, struct writeback_control *wbc), \
+ TP_ARGS(inode, wbc))
+LTTNG_TRACEPOINT_EVENT_WRITEBACK_WRITE_INODE(writeback_write_inode_start)
+LTTNG_TRACEPOINT_EVENT_WRITEBACK_WRITE_INODE(writeback_write_inode)
+
+#endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0)) */
+
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,3,0))
+
+LTTNG_TRACEPOINT_EVENT_CLASS(writeback_work_class,
+ TP_PROTO(struct bdi_writeback *wb, struct wb_writeback_work *work),
+ TP_ARGS(wb, work),
+ TP_STRUCT__entry(
+ __array_text(char, name, 32)
+ ),
+ TP_fast_assign(
+ tp_memcpy(name, wb->bdi->dev ? dev_name(wb->bdi->dev) :
+ "(unknown)", 32)
+ ),
+ TP_printk("bdi %s",
+ __entry->name
+ )
+)
+
+#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,0,0))
+
+LTTNG_TRACEPOINT_EVENT_CLASS(writeback_work_class,
+ TP_PROTO(struct backing_dev_info *bdi, struct wb_writeback_work *work),
+ TP_ARGS(bdi, work),
+ TP_STRUCT__entry(
+ __array_text(char, name, 32)
+ ),
+ TP_fast_assign(
+ tp_memcpy(name, bdi->dev ? dev_name(bdi->dev) :
+ "(unknown)", 32)
+ ),
+ TP_printk("bdi %s",
+ __entry->name
+ )
+)
+
+#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,0,0)) */
LTTNG_TRACEPOINT_EVENT_CLASS(writeback_work_class,
TP_PROTO(struct backing_dev_info *bdi, struct wb_writeback_work *work),
TP_ARGS(bdi, work),
TP_STRUCT__entry(
- __array(char, name, 32)
+ __array_text(char, name, 32)
),
TP_fast_assign(
tp_memcpy(name, dev_name(bdi->dev ? bdi->dev :
__entry->name
)
)
+
+#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,0,0)) */
+
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,3,0))
+
+#define LTTNG_TRACEPOINT_EVENT_WRITEBACK_WORK_INSTANCE(name) \
+LTTNG_TRACEPOINT_EVENT_INSTANCE(writeback_work_class, name, \
+ TP_PROTO(struct bdi_writeback *wb, struct wb_writeback_work *work), \
+ TP_ARGS(wb, work))
+
+#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,3,0)) */
+
#define LTTNG_TRACEPOINT_EVENT_WRITEBACK_WORK_INSTANCE(name) \
LTTNG_TRACEPOINT_EVENT_INSTANCE(writeback_work_class, name, \
TP_PROTO(struct backing_dev_info *bdi, struct wb_writeback_work *work), \
TP_ARGS(bdi, work))
+
+#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,3,0)) */
+
LTTNG_TRACEPOINT_EVENT_WRITEBACK_WORK_INSTANCE(writeback_nothread)
LTTNG_TRACEPOINT_EVENT_WRITEBACK_WORK_INSTANCE(writeback_queue)
LTTNG_TRACEPOINT_EVENT_WRITEBACK_WORK_INSTANCE(writeback_exec)
TP_printk("%ld", __entry->pages)
)
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,3,0))
+
LTTNG_TRACEPOINT_EVENT_CLASS(writeback_class,
+ TP_PROTO(struct bdi_writeback *wb),
+ TP_ARGS(wb),
+ TP_STRUCT__entry(
+ __array_text(char, name, 32)
+ ),
+ TP_fast_assign(
+ tp_memcpy(name, dev_name(wb->bdi->dev), 32)
+ ),
+ TP_printk("bdi %s",
+ __entry->name
+ )
+)
+
+#undef DEFINE_WRITEBACK_EVENT
+#define DEFINE_WRITEBACK_EVENT(name) \
+LTTNG_TRACEPOINT_EVENT_INSTANCE(writeback_class, name, \
+ TP_PROTO(struct bdi_writeback *wb), \
+ TP_ARGS(wb))
+
+#define DEFINE_WRITEBACK_EVENT_MAP(name, map) \
+LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(writeback_class, name, map, \
+ TP_PROTO(struct bdi_writeback *wb), \
+ TP_ARGS(wb))
+
+LTTNG_TRACEPOINT_EVENT(writeback_bdi_register,
TP_PROTO(struct backing_dev_info *bdi),
TP_ARGS(bdi),
TP_STRUCT__entry(
- __array(char, name, 32)
+ __array_text(char, name, 32)
),
TP_fast_assign(
tp_memcpy(name, dev_name(bdi->dev), 32)
__entry->name
)
)
+
+#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,3,0)) */
+
+LTTNG_TRACEPOINT_EVENT_CLASS(writeback_class,
+ TP_PROTO(struct backing_dev_info *bdi),
+ TP_ARGS(bdi),
+ TP_STRUCT__entry(
+ __array_text(char, name, 32)
+ ),
+ TP_fast_assign(
+ tp_memcpy(name, dev_name(bdi->dev), 32)
+ ),
+ TP_printk("bdi %s",
+ __entry->name
+ )
+)
+
+#undef DEFINE_WRITEBACK_EVENT
#define DEFINE_WRITEBACK_EVENT(name) \
LTTNG_TRACEPOINT_EVENT_INSTANCE(writeback_class, name, \
TP_PROTO(struct backing_dev_info *bdi), \
TP_PROTO(struct backing_dev_info *bdi), \
TP_ARGS(bdi))
+DEFINE_WRITEBACK_EVENT(writeback_bdi_register)
+
+#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,3,0)) */
+
DEFINE_WRITEBACK_EVENT(writeback_nowork)
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38))
DEFINE_WRITEBACK_EVENT(writeback_wake_background)
#endif
DEFINE_WRITEBACK_EVENT(writeback_wake_thread)
DEFINE_WRITEBACK_EVENT(writeback_wake_forker_thread)
-DEFINE_WRITEBACK_EVENT(writeback_bdi_register)
DEFINE_WRITEBACK_EVENT(writeback_bdi_unregister)
DEFINE_WRITEBACK_EVENT(writeback_thread_start)
DEFINE_WRITEBACK_EVENT(writeback_thread_stop)
TP_PROTO(struct writeback_control *wbc, struct backing_dev_info *bdi),
TP_ARGS(wbc, bdi),
TP_STRUCT__entry(
- __array(char, name, 32)
+ __array_text(char, name, 32)
__field(long, nr_to_write)
__field(long, pages_skipped)
__field(int, sync_mode)
#define KBps(x) ((x) << (PAGE_SHIFT - 10))
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,3,0))
+
+LTTNG_TRACEPOINT_EVENT_MAP(bdi_dirty_ratelimit,
+
+ writeback_bdi_dirty_ratelimit,
+
+ TP_PROTO(struct bdi_writeback *wb,
+ unsigned long dirty_rate,
+ unsigned long task_ratelimit),
+
+ TP_ARGS(wb, dirty_rate, task_ratelimit),
+
+ TP_STRUCT__entry(
+ __array(char, bdi, 32)
+ __field(unsigned long, write_bw)
+ __field(unsigned long, avg_write_bw)
+ __field(unsigned long, dirty_rate)
+ __field(unsigned long, dirty_ratelimit)
+ __field(unsigned long, task_ratelimit)
+ __field(unsigned long, balanced_dirty_ratelimit)
+ ),
+
+ TP_fast_assign(
+ tp_memcpy(bdi, dev_name(wb->bdi->dev), 32)
+ tp_assign(write_bw, KBps(wb->bdi->wb.write_bandwidth))
+ tp_assign(avg_write_bw, KBps(wb->bdi->wb.avg_write_bandwidth))
+ tp_assign(dirty_rate, KBps(dirty_rate))
+ tp_assign(dirty_ratelimit, KBps(wb->bdi->wb.dirty_ratelimit))
+ tp_assign(task_ratelimit, KBps(task_ratelimit))
+ tp_assign(balanced_dirty_ratelimit,
+ KBps(wb->bdi->wb.balanced_dirty_ratelimit))
+ ),
+
+ TP_printk("bdi %s: "
+ "write_bw=%lu awrite_bw=%lu dirty_rate=%lu "
+ "dirty_ratelimit=%lu task_ratelimit=%lu "
+ "balanced_dirty_ratelimit=%lu",
+ __entry->bdi,
+ __entry->write_bw, /* write bandwidth */
+ __entry->avg_write_bw, /* avg write bandwidth */
+ __entry->dirty_rate, /* bdi dirty rate */
+ __entry->dirty_ratelimit, /* base ratelimit */
+ __entry->task_ratelimit, /* ratelimit with position control */
+ __entry->balanced_dirty_ratelimit /* the balanced ratelimit */
+ )
+)
+
+#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,2,0))
+
+LTTNG_TRACEPOINT_EVENT_MAP(bdi_dirty_ratelimit,
+
+ writeback_bdi_dirty_ratelimit,
+
+ TP_PROTO(struct backing_dev_info *bdi,
+ unsigned long dirty_rate,
+ unsigned long task_ratelimit),
+
+ TP_ARGS(bdi, dirty_rate, task_ratelimit),
+
+ TP_STRUCT__entry(
+ __array(char, bdi, 32)
+ __field(unsigned long, write_bw)
+ __field(unsigned long, avg_write_bw)
+ __field(unsigned long, dirty_rate)
+ __field(unsigned long, dirty_ratelimit)
+ __field(unsigned long, task_ratelimit)
+ __field(unsigned long, balanced_dirty_ratelimit)
+ ),
+
+ TP_fast_assign(
+ tp_memcpy(bdi, dev_name(bdi->dev), 32)
+ tp_assign(write_bw, KBps(bdi->wb.write_bandwidth))
+ tp_assign(avg_write_bw, KBps(bdi->wb.avg_write_bandwidth))
+ tp_assign(dirty_rate, KBps(dirty_rate))
+ tp_assign(dirty_ratelimit, KBps(bdi->wb.dirty_ratelimit))
+ tp_assign(task_ratelimit, KBps(task_ratelimit))
+ tp_assign(balanced_dirty_ratelimit,
+ KBps(bdi->wb.balanced_dirty_ratelimit))
+ ),
+
+ TP_printk("bdi %s: "
+ "write_bw=%lu awrite_bw=%lu dirty_rate=%lu "
+ "dirty_ratelimit=%lu task_ratelimit=%lu "
+ "balanced_dirty_ratelimit=%lu",
+ __entry->bdi,
+ __entry->write_bw, /* write bandwidth */
+ __entry->avg_write_bw, /* avg write bandwidth */
+ __entry->dirty_rate, /* bdi dirty rate */
+ __entry->dirty_ratelimit, /* base ratelimit */
+ __entry->task_ratelimit, /* ratelimit with position control */
+ __entry->balanced_dirty_ratelimit /* the balanced ratelimit */
+ )
+)
+
+#else
+
LTTNG_TRACEPOINT_EVENT_MAP(bdi_dirty_ratelimit,
writeback_bdi_dirty_ratelimit,
)
)
+#endif
+
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,3,0))
+
+LTTNG_TRACEPOINT_EVENT_MAP(balance_dirty_pages,
+
+ writeback_balance_dirty_pages,
+
+ TP_PROTO(struct bdi_writeback *wb,
+ unsigned long thresh,
+ unsigned long bg_thresh,
+ unsigned long dirty,
+ unsigned long bdi_thresh,
+ unsigned long bdi_dirty,
+ unsigned long dirty_ratelimit,
+ unsigned long task_ratelimit,
+ unsigned long dirtied,
+ unsigned long period,
+ long pause,
+ unsigned long start_time),
+
+ TP_ARGS(wb, thresh, bg_thresh, dirty, bdi_thresh, bdi_dirty,
+ dirty_ratelimit, task_ratelimit,
+ dirtied, period, pause, start_time
+ ),
+
+ TP_STRUCT__entry(
+ __array( char, bdi, 32)
+ __field(unsigned long, limit)
+ __field(unsigned long, setpoint)
+ __field(unsigned long, dirty)
+ __field(unsigned long, bdi_setpoint)
+ __field(unsigned long, bdi_dirty)
+ __field(unsigned long, dirty_ratelimit)
+ __field(unsigned long, task_ratelimit)
+ __field(unsigned int, dirtied)
+ __field(unsigned int, dirtied_pause)
+ __field(unsigned long, paused)
+ __field( long, pause)
+ __field(unsigned long, period)
+ __field( long, think)
+ ),
+
+ TP_fast_assign(
+ tp_memcpy(bdi, dev_name(wb->bdi->dev), 32)
+ tp_assign(limit, global_dirty_limit)
+ tp_assign(setpoint,
+ (global_dirty_limit + (thresh + bg_thresh) / 2) / 2)
+ tp_assign(dirty, dirty)
+ tp_assign(bdi_setpoint,
+ ((global_dirty_limit + (thresh + bg_thresh) / 2) / 2) *
+ bdi_thresh / (thresh + 1))
+ tp_assign(bdi_dirty, bdi_dirty)
+ tp_assign(dirty_ratelimit, KBps(dirty_ratelimit))
+ tp_assign(task_ratelimit, KBps(task_ratelimit))
+ tp_assign(dirtied, dirtied)
+ tp_assign(dirtied_pause, current->nr_dirtied_pause)
+ tp_assign(think, current->dirty_paused_when == 0 ? 0 :
+ (long)(jiffies - current->dirty_paused_when) * 1000/HZ)
+ tp_assign(period, period * 1000 / HZ)
+ tp_assign(pause, pause * 1000 / HZ)
+ tp_assign(paused, (jiffies - start_time) * 1000 / HZ)
+ ),
+
+
+ TP_printk("bdi %s: "
+ "limit=%lu setpoint=%lu dirty=%lu "
+ "bdi_setpoint=%lu bdi_dirty=%lu "
+ "dirty_ratelimit=%lu task_ratelimit=%lu "
+ "dirtied=%u dirtied_pause=%u "
+ "paused=%lu pause=%ld period=%lu think=%ld",
+ __entry->bdi,
+ __entry->limit,
+ __entry->setpoint,
+ __entry->dirty,
+ __entry->bdi_setpoint,
+ __entry->bdi_dirty,
+ __entry->dirty_ratelimit,
+ __entry->task_ratelimit,
+ __entry->dirtied,
+ __entry->dirtied_pause,
+ __entry->paused, /* ms */
+ __entry->pause, /* ms */
+ __entry->period, /* ms */
+ __entry->think /* ms */
+ )
+)
+
+#else /* #if LINUX_VERSION_CODE >= KERNEL_VERSION(4,3,0)) */
+
LTTNG_TRACEPOINT_EVENT_MAP(balance_dirty_pages,
writeback_balance_dirty_pages,
)
#endif
)
-#endif
+#endif /* #else #if LINUX_VERSION_CODE >= KERNEL_VERSION(4,3,0)) */
+
+#endif /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0)) */
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0))
LTTNG_TRACEPOINT_EVENT(writeback_sb_inodes_requeue,
TP_ARGS(inode),
TP_STRUCT__entry(
- __array(char, name, 32)
+ __array_text(char, name, 32)
__field(unsigned long, ino)
__field(unsigned long, state)
__field(unsigned long, dirtied_when)
TP_ARGS(inode, wbc, nr_to_write),
TP_STRUCT__entry(
- __array(char, name, 32)
+ __array_text(char, name, 32)
__field(unsigned long, ino)
__field(unsigned long, state)
__field(unsigned long, dirtied_when)