-DECLARE_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)
- __field(long, nr_pages)
- __field(dev_t, sb_dev)
- __field(int, sync_mode)
- __field(int, for_kupdate)
- __field(int, range_cyclic)
- __field(int, for_background)
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0))
- __field(int, reason)
-#endif
- ),
- TP_fast_assign(
- tp_memcpy(name, dev_name(bdi->dev ? bdi->dev :
- default_backing_dev_info.dev), 32)
- tp_assign(nr_pages, work->nr_pages)
- tp_assign(sb_dev, work->sb ? work->sb->s_dev : 0)
- tp_assign(sync_mode, work->sync_mode)
- tp_assign(for_kupdate, work->for_kupdate)
- tp_assign(range_cyclic, work->range_cyclic)
- tp_assign(for_background, work->for_background)
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0))
- tp_assign(reason, work->reason)
-#endif
- ),
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0))
- TP_printk("bdi %s: sb_dev %d:%d nr_pages=%ld sync_mode=%d "
- "kupdate=%d range_cyclic=%d background=%d reason=%s",
- __entry->name,
- MAJOR(__entry->sb_dev), MINOR(__entry->sb_dev),
- __entry->nr_pages,
- __entry->sync_mode,
- __entry->for_kupdate,
- __entry->range_cyclic,
- __entry->for_background,
- __print_symbolic(__entry->reason, WB_WORK_REASON)
+LTTNG_TRACEPOINT_EVENT(writeback_dirty_page,
+ TP_PROTO(struct page *page, struct address_space *mapping),
+ TP_ARGS(page, mapping),
+ TP_FIELDS(
+ ctf_string(name, lttng_bdi_dev_name(mapping ? lttng_inode_to_bdi(mapping->host) : NULL))
+ ctf_integer(unsigned long, ino, mapping ? mapping->host->i_ino : 0)
+ ctf_integer(pgoff_t, index, page->index)
+ )
+)
+
+LTTNG_TRACEPOINT_EVENT_CLASS(writeback_dirty_inode_template,
+ TP_PROTO(struct inode *inode, int flags),
+ TP_ARGS(inode, flags),
+ TP_FIELDS(
+ /* may be called for files on pseudo FSes w/ unregistered bdi */
+ ctf_string(name, lttng_bdi_dev_name(lttng_inode_to_bdi(inode)))
+ ctf_integer(unsigned long, ino, inode->i_ino)
+ ctf_integer(unsigned long, state, inode->i_state)
+ ctf_integer(unsigned long, flags, 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_FIELDS(
+ ctf_string(name, lttng_bdi_dev_name(lttng_inode_to_bdi(inode)))
+ ctf_integer(unsigned long, ino, inode->i_ino)
+ ctf_integer(int, sync_mode, wbc->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 (LTTNG_LINUX_VERSION_CODE >= LTTNG_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_FIELDS(
+ ctf_string(name, lttng_bdi_dev_name(mapping ? mapping->backing_dev_info : NULL))
+ ctf_integer(unsigned long, ino, mapping ? mapping->host->i_ino : 0)
+ ctf_integer(pgoff_t, index, page->index)
+ )
+)
+
+LTTNG_TRACEPOINT_EVENT_CLASS(writeback_dirty_inode_template,
+ TP_PROTO(struct inode *inode, int flags),
+ TP_ARGS(inode, flags),
+ TP_FIELDS(
+ /* may be called for files on pseudo FSes w/ unregistered bdi */
+ ctf_string(name, lttng_bdi_dev_name(inode->i_mapping->backing_dev_info))
+ ctf_integer(unsigned long, ino, inode->i_ino)
+ ctf_integer(unsigned long, flags, 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_FIELDS(
+ ctf_string(name, lttng_bdi_dev_name(inode->i_mapping->backing_dev_info))
+ ctf_integer(unsigned long, ino, inode->i_ino)
+ ctf_integer(int, sync_mode, wbc->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 /* (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,9,0)) */
+
+#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_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_FIELDS(
+ ctf_string(name, lttng_bdi_dev_name(wb->bdi))