X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=include%2Finstrumentation%2Fevents%2Fwriteback.h;h=b5fbda9e03af70d8f659ad95fcedd3fe47f5c863;hb=05355f0bf8b4292ab7b8dc93571a568833b0a3c2;hp=3d5df91f916465a6a9840646157cceacdccccc0f;hpb=cc584d6692836e86ca05df7cf58a1873b11fca56;p=lttng-modules.git diff --git a/include/instrumentation/events/writeback.h b/include/instrumentation/events/writeback.h index 3d5df91f..b5fbda9e 100644 --- a/include/instrumentation/events/writeback.h +++ b/include/instrumentation/events/writeback.h @@ -14,6 +14,25 @@ #ifndef _TRACE_WRITEBACK_DEF_ #define _TRACE_WRITEBACK_DEF_ +/* + * Use the GPL-exported bdi_dev_name introduced in kernel 5.7. Do not use + * static inline bdi_dev_name in prior kernels because it uses the bdi_unknown_name + * symbol which is not exported to GPL modules. + */ +#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,7,0)) +static inline const char *lttng_bdi_dev_name(struct backing_dev_info *bdi) +{ + return bdi_dev_name(bdi); +} +#else +static inline const char *lttng_bdi_dev_name(struct backing_dev_info *bdi) +{ + if (!bdi || !bdi->dev) + return "(unknown)"; + return dev_name(bdi->dev); +} +#endif + /* * Vanilla kernels before 4.0 do not implement inode_to_bdi * RHEL kernels before 3.10.0-327.10.1 do not implement inode_to_bdi @@ -46,7 +65,18 @@ static inline struct backing_dev_info *lttng_inode_to_bdi(struct inode *inode) #endif -#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,9,0)) +/* + * Keep this macro around to track changes in the valid values for `state`. + * Eventually, we will have a enum to describe that field. If the macro is + * changed by an upstream kernel, the fact that we have a redefinition here + * will generate a compiler warning. + */ +#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,9,0) || \ + LTTNG_KERNEL_RANGE(4,14,218, 4,15,0) || \ + LTTNG_KERNEL_RANGE(4,19,172, 4,20,0) || \ + LTTNG_KERNEL_RANGE(5,4,94, 5,5,0) || \ + LTTNG_UBUNTU_KERNEL_RANGE(4,15,18,141, 4,16,0,0) || \ + LTTNG_RHEL_KERNEL_RANGE(4,18,0,240,0,0, 4,19,0,0,0,0)) #define show_inode_state(state) \ __print_flags(state, "|", \ {I_DIRTY_SYNC, "I_DIRTY_SYNC"}, \ @@ -96,8 +126,7 @@ LTTNG_TRACEPOINT_EVENT(writeback_dirty_page, TP_PROTO(struct page *page, struct address_space *mapping), TP_ARGS(page, mapping), TP_FIELDS( - ctf_string(name, - mapping ? dev_name(lttng_inode_to_bdi(mapping->host)->dev) : "(unknown)") + 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) ) @@ -108,9 +137,7 @@ LTTNG_TRACEPOINT_EVENT_CLASS(writeback_dirty_inode_template, TP_ARGS(inode, flags), TP_FIELDS( /* may be called for files on pseudo FSes w/ unregistered bdi */ - ctf_string(name, - lttng_inode_to_bdi(inode)->dev ? - dev_name(lttng_inode_to_bdi(inode)->dev) : "(unknown)") + 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) @@ -128,8 +155,7 @@ 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, - dev_name(lttng_inode_to_bdi(inode)->dev)) + 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) ) @@ -148,8 +174,7 @@ LTTNG_TRACEPOINT_EVENT(writeback_dirty_page, TP_PROTO(struct page *page, struct address_space *mapping), TP_ARGS(page, mapping), TP_FIELDS( - ctf_string(name, - mapping ? dev_name(mapping->backing_dev_info->dev) : "(unknown)") + 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) ) @@ -160,10 +185,7 @@ LTTNG_TRACEPOINT_EVENT_CLASS(writeback_dirty_inode_template, TP_ARGS(inode, flags), TP_FIELDS( /* may be called for files on pseudo FSes w/ unregistered bdi */ - ctf_string(name, - inode->i_mapping->backing_dev_info->dev ? - dev_name(inode->i_mapping->backing_dev_info->dev) - : "(unknown)") + 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) ) @@ -179,8 +201,7 @@ 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, - dev_name(inode->i_mapping->backing_dev_info->dev)) + 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) ) @@ -201,35 +222,21 @@ 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, wb->bdi->dev ? dev_name(wb->bdi->dev) : - "(unknown)") + ctf_string(name, lttng_bdi_dev_name(wb->bdi)) ) ) -#elif (LTTNG_LINUX_VERSION_CODE >= LTTNG_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_FIELDS( - ctf_string(name, bdi->dev ? dev_name(bdi->dev) : - "(unknown)") - ) -) - -#else /* #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,0,0)) */ +#else LTTNG_TRACEPOINT_EVENT_CLASS(writeback_work_class, TP_PROTO(struct backing_dev_info *bdi, struct wb_writeback_work *work), TP_ARGS(bdi, work), TP_FIELDS( - ctf_string(name, - dev_name(bdi->dev ? bdi->dev : - default_backing_dev_info.dev)) + ctf_string(name, lttng_bdi_dev_name(bdi)) ) ) -#endif /* #else #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,0,0)) */ +#endif /* #else if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,3,0)) */ #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,3,0)) @@ -270,8 +277,7 @@ LTTNG_TRACEPOINT_EVENT_CLASS(writeback_class, TP_PROTO(struct bdi_writeback *wb), TP_ARGS(wb), TP_FIELDS( - ctf_string(name, - dev_name(wb->bdi->dev)) + ctf_string(name, lttng_bdi_dev_name(wb->bdi)) ) ) @@ -290,8 +296,7 @@ LTTNG_TRACEPOINT_EVENT(writeback_bdi_register, TP_PROTO(struct backing_dev_info *bdi), TP_ARGS(bdi), TP_FIELDS( - ctf_string(name, - dev_name(bdi->dev)) + ctf_string(name, lttng_bdi_dev_name(bdi)) ) ) @@ -301,8 +306,7 @@ LTTNG_TRACEPOINT_EVENT_CLASS(writeback_class, TP_PROTO(struct backing_dev_info *bdi), TP_ARGS(bdi), TP_FIELDS( - ctf_string(name, - dev_name(bdi->dev)) + ctf_string(name, lttng_bdi_dev_name(bdi)) ) ) @@ -341,7 +345,7 @@ LTTNG_TRACEPOINT_EVENT_MAP(balance_dirty_written, TP_ARGS(bdi, written), TP_FIELDS( - ctf_string(name, dev_name(bdi->dev)) + ctf_string(name, lttng_bdi_dev_name(bdi)) ctf_integer(int, written, written) ) ) @@ -351,7 +355,7 @@ LTTNG_TRACEPOINT_EVENT_CLASS(writeback_wbc_class, TP_PROTO(struct writeback_control *wbc, struct backing_dev_info *bdi), TP_ARGS(wbc, bdi), TP_FIELDS( - ctf_string(name, dev_name(bdi->dev)) + ctf_string(name, lttng_bdi_dev_name(bdi)) ctf_integer(long, nr_to_write, wbc->nr_to_write) ctf_integer(long, pages_skipped, wbc->pages_skipped) ctf_integer(int, sync_mode, wbc->sync_mode) @@ -391,7 +395,8 @@ LTTNG_TRACEPOINT_EVENT_WBC_INSTANCE(wbc_writepage, writeback_wbc_writepage) LTTNG_KERNEL_RANGE(4,14,196, 4,15,0) || \ LTTNG_KERNEL_RANGE(4,9,235, 4,10,0) || \ LTTNG_KERNEL_RANGE(4,4,235, 4,5,0) || \ - LTTNG_UBUNTU_KERNEL_RANGE(4,15,18,119, 4,16,0,0)) + LTTNG_UBUNTU_KERNEL_RANGE(4,15,18,119, 4,16,0,0) || \ + LTTNG_RHEL_KERNEL_RANGE(4,18,0,240,0,0, 4,19,0,0,0,0)) LTTNG_TRACEPOINT_EVENT(writeback_queue_io, TP_PROTO(struct bdi_writeback *wb, struct wb_writeback_work *work, @@ -399,7 +404,7 @@ LTTNG_TRACEPOINT_EVENT(writeback_queue_io, int moved), TP_ARGS(wb, work, dirtied_before, moved), TP_FIELDS( - ctf_string(name, dev_name(wb->bdi->dev)) + ctf_string(name, lttng_bdi_dev_name(wb->bdi)) ctf_integer(unsigned long, older, dirtied_before) ctf_integer(int, moved, moved) ) @@ -411,7 +416,7 @@ LTTNG_TRACEPOINT_EVENT(writeback_queue_io, int moved), TP_ARGS(wb, work, moved), TP_FIELDS( - ctf_string(name, dev_name(wb->bdi->dev)) + ctf_string(name, lttng_bdi_dev_name(wb->bdi)) ctf_integer(int, moved, moved) ) ) @@ -422,7 +427,7 @@ LTTNG_TRACEPOINT_EVENT(writeback_queue_io, int moved), TP_ARGS(wb, older_than_this, moved), TP_FIELDS( - ctf_string(name, dev_name(wb->bdi->dev)) + ctf_string(name, lttng_bdi_dev_name(wb->bdi)) ctf_integer(unsigned long, older, older_than_this ? *older_than_this : 0) ctf_integer(long, age, @@ -524,7 +529,7 @@ LTTNG_TRACEPOINT_EVENT_MAP(bdi_dirty_ratelimit, TP_ARGS(wb, dirty_rate, task_ratelimit), TP_FIELDS( - ctf_string(bdi, dev_name(wb->bdi->dev)) + ctf_string(bdi, lttng_bdi_dev_name(wb->bdi)) ctf_integer(unsigned long, write_bw, KBps(wb->bdi->wb.write_bandwidth)) ctf_integer(unsigned long, avg_write_bw, KBps(wb->bdi->wb.avg_write_bandwidth)) ctf_integer(unsigned long, dirty_rate, KBps(dirty_rate)) @@ -548,7 +553,7 @@ LTTNG_TRACEPOINT_EVENT_MAP(bdi_dirty_ratelimit, TP_ARGS(bdi, dirty_rate, task_ratelimit), TP_FIELDS( - ctf_string(bdi, dev_name(bdi->dev)) + ctf_string(bdi, lttng_bdi_dev_name(bdi)) ctf_integer(unsigned long, write_bw, KBps(bdi->wb.write_bandwidth)) ctf_integer(unsigned long, avg_write_bw, KBps(bdi->wb.avg_write_bandwidth)) ctf_integer(unsigned long, dirty_rate, KBps(dirty_rate)) @@ -572,7 +577,7 @@ LTTNG_TRACEPOINT_EVENT_MAP(bdi_dirty_ratelimit, TP_ARGS(bdi, dirty_rate, task_ratelimit), TP_FIELDS( - ctf_string(bdi, dev_name(bdi->dev)) + ctf_string(bdi, lttng_bdi_dev_name(bdi)) ctf_integer(unsigned long, write_bw, KBps(bdi->write_bandwidth)) ctf_integer(unsigned long, avg_write_bw, KBps(bdi->avg_write_bandwidth)) ctf_integer(unsigned long, dirty_rate, KBps(dirty_rate)) @@ -610,7 +615,7 @@ LTTNG_TRACEPOINT_EVENT_MAP(balance_dirty_pages, ), TP_FIELDS( - ctf_string(bdi, dev_name(wb->bdi->dev)) + ctf_string(bdi, lttng_bdi_dev_name(wb->bdi)) ctf_integer(unsigned long, limit, global_dirty_limit) ctf_integer(unsigned long, setpoint, (global_dirty_limit + (thresh + bg_thresh) / 2) / 2) @@ -668,7 +673,7 @@ LTTNG_TRACEPOINT_EVENT_MAP(balance_dirty_pages, ), TP_FIELDS( - ctf_string(bdi, dev_name(bdi->dev)) + ctf_string(bdi, lttng_bdi_dev_name(bdi)) ctf_integer(unsigned long, limit, global_dirty_limit) ctf_integer(unsigned long, setpoint, (global_dirty_limit + (thresh + bg_thresh) / 2) / 2) @@ -707,8 +712,7 @@ LTTNG_TRACEPOINT_EVENT(writeback_sb_inodes_requeue, TP_ARGS(inode), TP_FIELDS( - ctf_string(name, - dev_name(lttng_inode_to_bdi(inode)->dev)) + 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, dirtied_when, inode->dirtied_when) @@ -753,8 +757,7 @@ LTTNG_TRACEPOINT_EVENT_CLASS(writeback_single_inode_template, TP_ARGS(inode, wbc, nr_to_write), TP_FIELDS( - ctf_string(name, - dev_name(lttng_inode_to_bdi(inode)->dev)) + 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, dirtied_when, inode->dirtied_when)