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 7f479447aSSteven Rostedt (Red Hat) #include <linux/tracepoint.h> 8455b2864SDave Chinner #include <linux/backing-dev.h> 9455b2864SDave Chinner #include <linux/writeback.h> 10455b2864SDave Chinner 11251d6a47SWu Fengguang #define show_inode_state(state) \ 12251d6a47SWu Fengguang __print_flags(state, "|", \ 13251d6a47SWu Fengguang {I_DIRTY_SYNC, "I_DIRTY_SYNC"}, \ 14251d6a47SWu Fengguang {I_DIRTY_DATASYNC, "I_DIRTY_DATASYNC"}, \ 15251d6a47SWu Fengguang {I_DIRTY_PAGES, "I_DIRTY_PAGES"}, \ 16251d6a47SWu Fengguang {I_NEW, "I_NEW"}, \ 17251d6a47SWu Fengguang {I_WILL_FREE, "I_WILL_FREE"}, \ 18251d6a47SWu Fengguang {I_FREEING, "I_FREEING"}, \ 19251d6a47SWu Fengguang {I_CLEAR, "I_CLEAR"}, \ 20251d6a47SWu Fengguang {I_SYNC, "I_SYNC"}, \ 210ae45f63STheodore Ts'o {I_DIRTY_TIME, "I_DIRTY_TIME"}, \ 220ae45f63STheodore Ts'o {I_DIRTY_TIME_EXPIRED, "I_DIRTY_TIME_EXPIRED"}, \ 23251d6a47SWu Fengguang {I_REFERENCED, "I_REFERENCED"} \ 24251d6a47SWu Fengguang ) 25251d6a47SWu Fengguang 2691df6089SSteven Rostedt (Red Hat) /* enums need to be exported to user space */ 2791df6089SSteven Rostedt (Red Hat) #undef EM 2891df6089SSteven Rostedt (Red Hat) #undef EMe 2991df6089SSteven Rostedt (Red Hat) #define EM(a,b) TRACE_DEFINE_ENUM(a); 3091df6089SSteven Rostedt (Red Hat) #define EMe(a,b) TRACE_DEFINE_ENUM(a); 3191df6089SSteven Rostedt (Red Hat) 32b3bba872SWu Fengguang #define WB_WORK_REASON \ 3391df6089SSteven Rostedt (Red Hat) EM( WB_REASON_BACKGROUND, "background") \ 3491df6089SSteven Rostedt (Red Hat) EM( WB_REASON_TRY_TO_FREE_PAGES, "try_to_free_pages") \ 3591df6089SSteven Rostedt (Red Hat) EM( WB_REASON_SYNC, "sync") \ 3691df6089SSteven Rostedt (Red Hat) EM( WB_REASON_PERIODIC, "periodic") \ 3791df6089SSteven Rostedt (Red Hat) EM( WB_REASON_LAPTOP_TIMER, "laptop_timer") \ 3891df6089SSteven Rostedt (Red Hat) EM( WB_REASON_FREE_MORE_MEM, "free_more_memory") \ 3991df6089SSteven Rostedt (Red Hat) EM( WB_REASON_FS_FREE_SPACE, "fs_free_space") \ 4091df6089SSteven Rostedt (Red Hat) EMe(WB_REASON_FORKER_THREAD, "forker_thread") 4191df6089SSteven Rostedt (Red Hat) 4291df6089SSteven Rostedt (Red Hat) WB_WORK_REASON 4391df6089SSteven Rostedt (Red Hat) 4491df6089SSteven Rostedt (Red Hat) /* 4591df6089SSteven Rostedt (Red Hat) * Now redefine the EM() and EMe() macros to map the enums to the strings 4691df6089SSteven Rostedt (Red Hat) * that will be printed in the output. 4791df6089SSteven Rostedt (Red Hat) */ 4891df6089SSteven Rostedt (Red Hat) #undef EM 4991df6089SSteven Rostedt (Red Hat) #undef EMe 5091df6089SSteven Rostedt (Red Hat) #define EM(a,b) { a, b }, 5191df6089SSteven Rostedt (Red Hat) #define EMe(a,b) { a, b } 52b3bba872SWu Fengguang 53455b2864SDave Chinner struct wb_writeback_work; 54455b2864SDave Chinner 559fb0a7daSTejun Heo TRACE_EVENT(writeback_dirty_page, 569fb0a7daSTejun Heo 579fb0a7daSTejun Heo TP_PROTO(struct page *page, struct address_space *mapping), 589fb0a7daSTejun Heo 599fb0a7daSTejun Heo TP_ARGS(page, mapping), 609fb0a7daSTejun Heo 619fb0a7daSTejun Heo TP_STRUCT__entry ( 629fb0a7daSTejun Heo __array(char, name, 32) 639fb0a7daSTejun Heo __field(unsigned long, ino) 649fb0a7daSTejun Heo __field(pgoff_t, index) 659fb0a7daSTejun Heo ), 669fb0a7daSTejun Heo 679fb0a7daSTejun Heo TP_fast_assign( 689fb0a7daSTejun Heo strncpy(__entry->name, 69de1414a6SChristoph Hellwig mapping ? dev_name(inode_to_bdi(mapping->host)->dev) : "(unknown)", 32); 709fb0a7daSTejun Heo __entry->ino = mapping ? mapping->host->i_ino : 0; 719fb0a7daSTejun Heo __entry->index = page->index; 729fb0a7daSTejun Heo ), 739fb0a7daSTejun Heo 749fb0a7daSTejun Heo TP_printk("bdi %s: ino=%lu index=%lu", 759fb0a7daSTejun Heo __entry->name, 769fb0a7daSTejun Heo __entry->ino, 779fb0a7daSTejun Heo __entry->index 789fb0a7daSTejun Heo ) 799fb0a7daSTejun Heo ); 809fb0a7daSTejun Heo 819fb0a7daSTejun Heo DECLARE_EVENT_CLASS(writeback_dirty_inode_template, 829fb0a7daSTejun Heo 839fb0a7daSTejun Heo TP_PROTO(struct inode *inode, int flags), 849fb0a7daSTejun Heo 859fb0a7daSTejun Heo TP_ARGS(inode, flags), 869fb0a7daSTejun Heo 879fb0a7daSTejun Heo TP_STRUCT__entry ( 889fb0a7daSTejun Heo __array(char, name, 32) 899fb0a7daSTejun Heo __field(unsigned long, ino) 900ae45f63STheodore Ts'o __field(unsigned long, state) 919fb0a7daSTejun Heo __field(unsigned long, flags) 929fb0a7daSTejun Heo ), 939fb0a7daSTejun Heo 949fb0a7daSTejun Heo TP_fast_assign( 95de1414a6SChristoph Hellwig struct backing_dev_info *bdi = inode_to_bdi(inode); 969fb0a7daSTejun Heo 979fb0a7daSTejun Heo /* may be called for files on pseudo FSes w/ unregistered bdi */ 989fb0a7daSTejun Heo strncpy(__entry->name, 999fb0a7daSTejun Heo bdi->dev ? dev_name(bdi->dev) : "(unknown)", 32); 1009fb0a7daSTejun Heo __entry->ino = inode->i_ino; 1010ae45f63STheodore Ts'o __entry->state = inode->i_state; 1029fb0a7daSTejun Heo __entry->flags = flags; 1039fb0a7daSTejun Heo ), 1049fb0a7daSTejun Heo 1050ae45f63STheodore Ts'o TP_printk("bdi %s: ino=%lu state=%s flags=%s", 1069fb0a7daSTejun Heo __entry->name, 1079fb0a7daSTejun Heo __entry->ino, 1080ae45f63STheodore Ts'o show_inode_state(__entry->state), 1099fb0a7daSTejun Heo show_inode_state(__entry->flags) 1109fb0a7daSTejun Heo ) 1119fb0a7daSTejun Heo ); 1129fb0a7daSTejun Heo 1130ae45f63STheodore Ts'o DEFINE_EVENT(writeback_dirty_inode_template, writeback_mark_inode_dirty, 1140ae45f63STheodore Ts'o 1150ae45f63STheodore Ts'o TP_PROTO(struct inode *inode, int flags), 1160ae45f63STheodore Ts'o 1170ae45f63STheodore Ts'o TP_ARGS(inode, flags) 1180ae45f63STheodore Ts'o ); 1190ae45f63STheodore Ts'o 1209fb0a7daSTejun Heo DEFINE_EVENT(writeback_dirty_inode_template, writeback_dirty_inode_start, 1219fb0a7daSTejun Heo 1229fb0a7daSTejun Heo TP_PROTO(struct inode *inode, int flags), 1239fb0a7daSTejun Heo 1249fb0a7daSTejun Heo TP_ARGS(inode, flags) 1259fb0a7daSTejun Heo ); 1269fb0a7daSTejun Heo 1279fb0a7daSTejun Heo DEFINE_EVENT(writeback_dirty_inode_template, writeback_dirty_inode, 1289fb0a7daSTejun Heo 1299fb0a7daSTejun Heo TP_PROTO(struct inode *inode, int flags), 1309fb0a7daSTejun Heo 1319fb0a7daSTejun Heo TP_ARGS(inode, flags) 1329fb0a7daSTejun Heo ); 1339fb0a7daSTejun Heo 1345634cc2aSTejun Heo #ifdef CREATE_TRACE_POINTS 1355634cc2aSTejun Heo #ifdef CONFIG_CGROUP_WRITEBACK 1365634cc2aSTejun Heo 137a664edb3SYang Shi static inline unsigned int __trace_wb_assign_cgroup(struct bdi_writeback *wb) 1385634cc2aSTejun Heo { 139a664edb3SYang Shi return wb->memcg_css->cgroup->kn->ino; 1405634cc2aSTejun Heo } 1415634cc2aSTejun Heo 142a664edb3SYang Shi static inline unsigned int __trace_wbc_assign_cgroup(struct writeback_control *wbc) 1435634cc2aSTejun Heo { 1445634cc2aSTejun Heo if (wbc->wb) 145a664edb3SYang Shi return __trace_wb_assign_cgroup(wbc->wb); 1465634cc2aSTejun Heo else 147a664edb3SYang Shi return -1U; 1485634cc2aSTejun Heo } 1495634cc2aSTejun Heo #else /* CONFIG_CGROUP_WRITEBACK */ 1505634cc2aSTejun Heo 151a664edb3SYang Shi static inline unsigned int __trace_wb_assign_cgroup(struct bdi_writeback *wb) 1525634cc2aSTejun Heo { 153a664edb3SYang Shi return -1U; 1545634cc2aSTejun Heo } 1555634cc2aSTejun Heo 156a664edb3SYang Shi static inline unsigned int __trace_wbc_assign_cgroup(struct writeback_control *wbc) 1575634cc2aSTejun Heo { 158a664edb3SYang Shi return -1U; 1595634cc2aSTejun Heo } 1605634cc2aSTejun Heo 1615634cc2aSTejun Heo #endif /* CONFIG_CGROUP_WRITEBACK */ 1625634cc2aSTejun Heo #endif /* CREATE_TRACE_POINTS */ 1635634cc2aSTejun Heo 1649fb0a7daSTejun Heo DECLARE_EVENT_CLASS(writeback_write_inode_template, 1659fb0a7daSTejun Heo 1669fb0a7daSTejun Heo TP_PROTO(struct inode *inode, struct writeback_control *wbc), 1679fb0a7daSTejun Heo 1689fb0a7daSTejun Heo TP_ARGS(inode, wbc), 1699fb0a7daSTejun Heo 1709fb0a7daSTejun Heo TP_STRUCT__entry ( 1719fb0a7daSTejun Heo __array(char, name, 32) 1729fb0a7daSTejun Heo __field(unsigned long, ino) 1739fb0a7daSTejun Heo __field(int, sync_mode) 174a664edb3SYang Shi __field(unsigned int, cgroup_ino) 1759fb0a7daSTejun Heo ), 1769fb0a7daSTejun Heo 1779fb0a7daSTejun Heo TP_fast_assign( 1789fb0a7daSTejun Heo strncpy(__entry->name, 179de1414a6SChristoph Hellwig dev_name(inode_to_bdi(inode)->dev), 32); 1809fb0a7daSTejun Heo __entry->ino = inode->i_ino; 1819fb0a7daSTejun Heo __entry->sync_mode = wbc->sync_mode; 182a664edb3SYang Shi __entry->cgroup_ino = __trace_wbc_assign_cgroup(wbc); 1839fb0a7daSTejun Heo ), 1849fb0a7daSTejun Heo 185a664edb3SYang Shi TP_printk("bdi %s: ino=%lu sync_mode=%d cgroup_ino=%u", 1869fb0a7daSTejun Heo __entry->name, 1879fb0a7daSTejun Heo __entry->ino, 1885634cc2aSTejun Heo __entry->sync_mode, 189a664edb3SYang Shi __entry->cgroup_ino 1909fb0a7daSTejun Heo ) 1919fb0a7daSTejun Heo ); 1929fb0a7daSTejun Heo 1939fb0a7daSTejun Heo DEFINE_EVENT(writeback_write_inode_template, writeback_write_inode_start, 1949fb0a7daSTejun Heo 1959fb0a7daSTejun Heo TP_PROTO(struct inode *inode, struct writeback_control *wbc), 1969fb0a7daSTejun Heo 1979fb0a7daSTejun Heo TP_ARGS(inode, wbc) 1989fb0a7daSTejun Heo ); 1999fb0a7daSTejun Heo 2009fb0a7daSTejun Heo DEFINE_EVENT(writeback_write_inode_template, writeback_write_inode, 2019fb0a7daSTejun Heo 2029fb0a7daSTejun Heo TP_PROTO(struct inode *inode, struct writeback_control *wbc), 2039fb0a7daSTejun Heo 2049fb0a7daSTejun Heo TP_ARGS(inode, wbc) 2059fb0a7daSTejun Heo ); 2069fb0a7daSTejun Heo 207455b2864SDave Chinner DECLARE_EVENT_CLASS(writeback_work_class, 2085634cc2aSTejun Heo TP_PROTO(struct bdi_writeback *wb, struct wb_writeback_work *work), 2095634cc2aSTejun Heo TP_ARGS(wb, work), 210455b2864SDave Chinner TP_STRUCT__entry( 211455b2864SDave Chinner __array(char, name, 32) 212455b2864SDave Chinner __field(long, nr_pages) 213455b2864SDave Chinner __field(dev_t, sb_dev) 214455b2864SDave Chinner __field(int, sync_mode) 215455b2864SDave Chinner __field(int, for_kupdate) 216455b2864SDave Chinner __field(int, range_cyclic) 217455b2864SDave Chinner __field(int, for_background) 2180e175a18SCurt Wohlgemuth __field(int, reason) 219a664edb3SYang Shi __field(unsigned int, cgroup_ino) 220455b2864SDave Chinner ), 221455b2864SDave Chinner TP_fast_assign( 222df0ce26cSChristoph Hellwig strncpy(__entry->name, 2235634cc2aSTejun Heo wb->bdi->dev ? dev_name(wb->bdi->dev) : "(unknown)", 32); 224455b2864SDave Chinner __entry->nr_pages = work->nr_pages; 225455b2864SDave Chinner __entry->sb_dev = work->sb ? work->sb->s_dev : 0; 226455b2864SDave Chinner __entry->sync_mode = work->sync_mode; 227455b2864SDave Chinner __entry->for_kupdate = work->for_kupdate; 228455b2864SDave Chinner __entry->range_cyclic = work->range_cyclic; 229455b2864SDave Chinner __entry->for_background = work->for_background; 2300e175a18SCurt Wohlgemuth __entry->reason = work->reason; 231a664edb3SYang Shi __entry->cgroup_ino = __trace_wb_assign_cgroup(wb); 232455b2864SDave Chinner ), 233455b2864SDave Chinner TP_printk("bdi %s: sb_dev %d:%d nr_pages=%ld sync_mode=%d " 234a664edb3SYang Shi "kupdate=%d range_cyclic=%d background=%d reason=%s cgroup_ino=%u", 235455b2864SDave Chinner __entry->name, 236455b2864SDave Chinner MAJOR(__entry->sb_dev), MINOR(__entry->sb_dev), 237455b2864SDave Chinner __entry->nr_pages, 238455b2864SDave Chinner __entry->sync_mode, 239455b2864SDave Chinner __entry->for_kupdate, 240455b2864SDave Chinner __entry->range_cyclic, 2410e175a18SCurt Wohlgemuth __entry->for_background, 2425634cc2aSTejun Heo __print_symbolic(__entry->reason, WB_WORK_REASON), 243a664edb3SYang Shi __entry->cgroup_ino 244455b2864SDave Chinner ) 245455b2864SDave Chinner ); 246455b2864SDave Chinner #define DEFINE_WRITEBACK_WORK_EVENT(name) \ 247455b2864SDave Chinner DEFINE_EVENT(writeback_work_class, name, \ 2485634cc2aSTejun Heo TP_PROTO(struct bdi_writeback *wb, struct wb_writeback_work *work), \ 2495634cc2aSTejun Heo TP_ARGS(wb, work)) 250455b2864SDave Chinner DEFINE_WRITEBACK_WORK_EVENT(writeback_queue); 251455b2864SDave Chinner DEFINE_WRITEBACK_WORK_EVENT(writeback_exec); 252d46db3d5SWu Fengguang DEFINE_WRITEBACK_WORK_EVENT(writeback_start); 253d46db3d5SWu Fengguang DEFINE_WRITEBACK_WORK_EVENT(writeback_written); 254d46db3d5SWu Fengguang DEFINE_WRITEBACK_WORK_EVENT(writeback_wait); 255455b2864SDave Chinner 256455b2864SDave Chinner TRACE_EVENT(writeback_pages_written, 257455b2864SDave Chinner TP_PROTO(long pages_written), 258455b2864SDave Chinner TP_ARGS(pages_written), 259455b2864SDave Chinner TP_STRUCT__entry( 260455b2864SDave Chinner __field(long, pages) 261455b2864SDave Chinner ), 262455b2864SDave Chinner TP_fast_assign( 263455b2864SDave Chinner __entry->pages = pages_written; 264455b2864SDave Chinner ), 265455b2864SDave Chinner TP_printk("%ld", __entry->pages) 266455b2864SDave Chinner ); 267455b2864SDave Chinner 268455b2864SDave Chinner DECLARE_EVENT_CLASS(writeback_class, 2695634cc2aSTejun Heo TP_PROTO(struct bdi_writeback *wb), 2705634cc2aSTejun Heo TP_ARGS(wb), 2715634cc2aSTejun Heo TP_STRUCT__entry( 2725634cc2aSTejun Heo __array(char, name, 32) 273a664edb3SYang Shi __field(unsigned int, cgroup_ino) 2745634cc2aSTejun Heo ), 2755634cc2aSTejun Heo TP_fast_assign( 2765634cc2aSTejun Heo strncpy(__entry->name, dev_name(wb->bdi->dev), 32); 277a664edb3SYang Shi __entry->cgroup_ino = __trace_wb_assign_cgroup(wb); 2785634cc2aSTejun Heo ), 279a664edb3SYang Shi TP_printk("bdi %s: cgroup_ino=%u", 2805634cc2aSTejun Heo __entry->name, 281a664edb3SYang Shi __entry->cgroup_ino 2825634cc2aSTejun Heo ) 2835634cc2aSTejun Heo ); 2845634cc2aSTejun Heo #define DEFINE_WRITEBACK_EVENT(name) \ 2855634cc2aSTejun Heo DEFINE_EVENT(writeback_class, name, \ 2865634cc2aSTejun Heo TP_PROTO(struct bdi_writeback *wb), \ 2875634cc2aSTejun Heo TP_ARGS(wb)) 2885634cc2aSTejun Heo 2895634cc2aSTejun Heo DEFINE_WRITEBACK_EVENT(writeback_nowork); 2905634cc2aSTejun Heo DEFINE_WRITEBACK_EVENT(writeback_wake_background); 2915634cc2aSTejun Heo 2925634cc2aSTejun Heo TRACE_EVENT(writeback_bdi_register, 293455b2864SDave Chinner TP_PROTO(struct backing_dev_info *bdi), 294455b2864SDave Chinner TP_ARGS(bdi), 295455b2864SDave Chinner TP_STRUCT__entry( 296455b2864SDave Chinner __array(char, name, 32) 297455b2864SDave Chinner ), 298455b2864SDave Chinner TP_fast_assign( 299455b2864SDave Chinner strncpy(__entry->name, dev_name(bdi->dev), 32); 300455b2864SDave Chinner ), 301455b2864SDave Chinner TP_printk("bdi %s", 302455b2864SDave Chinner __entry->name 303455b2864SDave Chinner ) 304455b2864SDave Chinner ); 305455b2864SDave Chinner 306028c2dd1SDave Chinner DECLARE_EVENT_CLASS(wbc_class, 307028c2dd1SDave Chinner TP_PROTO(struct writeback_control *wbc, struct backing_dev_info *bdi), 308028c2dd1SDave Chinner TP_ARGS(wbc, bdi), 309028c2dd1SDave Chinner TP_STRUCT__entry( 310028c2dd1SDave Chinner __array(char, name, 32) 311028c2dd1SDave Chinner __field(long, nr_to_write) 312028c2dd1SDave Chinner __field(long, pages_skipped) 313028c2dd1SDave Chinner __field(int, sync_mode) 314028c2dd1SDave Chinner __field(int, for_kupdate) 315028c2dd1SDave Chinner __field(int, for_background) 316028c2dd1SDave Chinner __field(int, for_reclaim) 317028c2dd1SDave Chinner __field(int, range_cyclic) 318028c2dd1SDave Chinner __field(long, range_start) 319028c2dd1SDave Chinner __field(long, range_end) 320a664edb3SYang Shi __field(unsigned int, cgroup_ino) 321028c2dd1SDave Chinner ), 322028c2dd1SDave Chinner 323028c2dd1SDave Chinner TP_fast_assign( 324028c2dd1SDave Chinner strncpy(__entry->name, dev_name(bdi->dev), 32); 325028c2dd1SDave Chinner __entry->nr_to_write = wbc->nr_to_write; 326028c2dd1SDave Chinner __entry->pages_skipped = wbc->pages_skipped; 327028c2dd1SDave Chinner __entry->sync_mode = wbc->sync_mode; 328028c2dd1SDave Chinner __entry->for_kupdate = wbc->for_kupdate; 329028c2dd1SDave Chinner __entry->for_background = wbc->for_background; 330028c2dd1SDave Chinner __entry->for_reclaim = wbc->for_reclaim; 331028c2dd1SDave Chinner __entry->range_cyclic = wbc->range_cyclic; 332028c2dd1SDave Chinner __entry->range_start = (long)wbc->range_start; 333028c2dd1SDave Chinner __entry->range_end = (long)wbc->range_end; 334a664edb3SYang Shi __entry->cgroup_ino = __trace_wbc_assign_cgroup(wbc); 335028c2dd1SDave Chinner ), 336028c2dd1SDave Chinner 337028c2dd1SDave Chinner TP_printk("bdi %s: towrt=%ld skip=%ld mode=%d kupd=%d " 338d46db3d5SWu Fengguang "bgrd=%d reclm=%d cyclic=%d " 339a664edb3SYang Shi "start=0x%lx end=0x%lx cgroup_ino=%u", 340028c2dd1SDave Chinner __entry->name, 341028c2dd1SDave Chinner __entry->nr_to_write, 342028c2dd1SDave Chinner __entry->pages_skipped, 343028c2dd1SDave Chinner __entry->sync_mode, 344028c2dd1SDave Chinner __entry->for_kupdate, 345028c2dd1SDave Chinner __entry->for_background, 346028c2dd1SDave Chinner __entry->for_reclaim, 347028c2dd1SDave Chinner __entry->range_cyclic, 348028c2dd1SDave Chinner __entry->range_start, 3495634cc2aSTejun Heo __entry->range_end, 350a664edb3SYang Shi __entry->cgroup_ino 3515634cc2aSTejun Heo ) 352028c2dd1SDave Chinner ) 353028c2dd1SDave Chinner 354028c2dd1SDave Chinner #define DEFINE_WBC_EVENT(name) \ 355028c2dd1SDave Chinner DEFINE_EVENT(wbc_class, name, \ 356028c2dd1SDave Chinner TP_PROTO(struct writeback_control *wbc, struct backing_dev_info *bdi), \ 357028c2dd1SDave Chinner TP_ARGS(wbc, bdi)) 3589e094383SDave Chinner DEFINE_WBC_EVENT(wbc_writepage); 359028c2dd1SDave Chinner 360e84d0a4fSWu Fengguang TRACE_EVENT(writeback_queue_io, 361e84d0a4fSWu Fengguang TP_PROTO(struct bdi_writeback *wb, 362ad4e38ddSCurt Wohlgemuth struct wb_writeback_work *work, 363e84d0a4fSWu Fengguang int moved), 364ad4e38ddSCurt Wohlgemuth TP_ARGS(wb, work, moved), 365e84d0a4fSWu Fengguang TP_STRUCT__entry( 366e84d0a4fSWu Fengguang __array(char, name, 32) 367e84d0a4fSWu Fengguang __field(unsigned long, older) 368e84d0a4fSWu Fengguang __field(long, age) 369e84d0a4fSWu Fengguang __field(int, moved) 3700e175a18SCurt Wohlgemuth __field(int, reason) 371a664edb3SYang Shi __field(unsigned int, cgroup_ino) 372e84d0a4fSWu Fengguang ), 373e84d0a4fSWu Fengguang TP_fast_assign( 3740dc83bd3SJan Kara unsigned long *older_than_this = work->older_than_this; 375e84d0a4fSWu Fengguang strncpy(__entry->name, dev_name(wb->bdi->dev), 32); 3760dc83bd3SJan Kara __entry->older = older_than_this ? *older_than_this : 0; 377e84d0a4fSWu Fengguang __entry->age = older_than_this ? 3780dc83bd3SJan Kara (jiffies - *older_than_this) * 1000 / HZ : -1; 379e84d0a4fSWu Fengguang __entry->moved = moved; 3800e175a18SCurt Wohlgemuth __entry->reason = work->reason; 381a664edb3SYang Shi __entry->cgroup_ino = __trace_wb_assign_cgroup(wb); 382e84d0a4fSWu Fengguang ), 383a664edb3SYang Shi TP_printk("bdi %s: older=%lu age=%ld enqueue=%d reason=%s cgroup_ino=%u", 384e84d0a4fSWu Fengguang __entry->name, 385e84d0a4fSWu Fengguang __entry->older, /* older_than_this in jiffies */ 386e84d0a4fSWu Fengguang __entry->age, /* older_than_this in relative milliseconds */ 3870e175a18SCurt Wohlgemuth __entry->moved, 3885634cc2aSTejun Heo __print_symbolic(__entry->reason, WB_WORK_REASON), 389a664edb3SYang Shi __entry->cgroup_ino 390b3bba872SWu Fengguang ) 391e84d0a4fSWu Fengguang ); 392e84d0a4fSWu Fengguang 393e1cbe236SWu Fengguang TRACE_EVENT(global_dirty_state, 394e1cbe236SWu Fengguang 395e1cbe236SWu Fengguang TP_PROTO(unsigned long background_thresh, 396e1cbe236SWu Fengguang unsigned long dirty_thresh 397e1cbe236SWu Fengguang ), 398e1cbe236SWu Fengguang 399e1cbe236SWu Fengguang TP_ARGS(background_thresh, 400e1cbe236SWu Fengguang dirty_thresh 401e1cbe236SWu Fengguang ), 402e1cbe236SWu Fengguang 403e1cbe236SWu Fengguang TP_STRUCT__entry( 404e1cbe236SWu Fengguang __field(unsigned long, nr_dirty) 405e1cbe236SWu Fengguang __field(unsigned long, nr_writeback) 406e1cbe236SWu Fengguang __field(unsigned long, nr_unstable) 407e1cbe236SWu Fengguang __field(unsigned long, background_thresh) 408e1cbe236SWu Fengguang __field(unsigned long, dirty_thresh) 409e1cbe236SWu Fengguang __field(unsigned long, dirty_limit) 410e1cbe236SWu Fengguang __field(unsigned long, nr_dirtied) 411e1cbe236SWu Fengguang __field(unsigned long, nr_written) 412e1cbe236SWu Fengguang ), 413e1cbe236SWu Fengguang 414e1cbe236SWu Fengguang TP_fast_assign( 415*11fb9989SMel Gorman __entry->nr_dirty = global_node_page_state(NR_FILE_DIRTY); 416*11fb9989SMel Gorman __entry->nr_writeback = global_node_page_state(NR_WRITEBACK); 417*11fb9989SMel Gorman __entry->nr_unstable = global_node_page_state(NR_UNSTABLE_NFS); 418e1cbe236SWu Fengguang __entry->nr_dirtied = global_page_state(NR_DIRTIED); 419e1cbe236SWu Fengguang __entry->nr_written = global_page_state(NR_WRITTEN); 420e1cbe236SWu Fengguang __entry->background_thresh = background_thresh; 421e1cbe236SWu Fengguang __entry->dirty_thresh = dirty_thresh; 422dcc25ae7STejun Heo __entry->dirty_limit = global_wb_domain.dirty_limit; 423e1cbe236SWu Fengguang ), 424e1cbe236SWu Fengguang 425e1cbe236SWu Fengguang TP_printk("dirty=%lu writeback=%lu unstable=%lu " 426e1cbe236SWu Fengguang "bg_thresh=%lu thresh=%lu limit=%lu " 427e1cbe236SWu Fengguang "dirtied=%lu written=%lu", 428e1cbe236SWu Fengguang __entry->nr_dirty, 429e1cbe236SWu Fengguang __entry->nr_writeback, 430e1cbe236SWu Fengguang __entry->nr_unstable, 431e1cbe236SWu Fengguang __entry->background_thresh, 432e1cbe236SWu Fengguang __entry->dirty_thresh, 433e1cbe236SWu Fengguang __entry->dirty_limit, 434e1cbe236SWu Fengguang __entry->nr_dirtied, 435e1cbe236SWu Fengguang __entry->nr_written 436e1cbe236SWu Fengguang ) 437e1cbe236SWu Fengguang ); 438e1cbe236SWu Fengguang 439b48c104dSWu Fengguang #define KBps(x) ((x) << (PAGE_SHIFT - 10)) 440b48c104dSWu Fengguang 441b48c104dSWu Fengguang TRACE_EVENT(bdi_dirty_ratelimit, 442b48c104dSWu Fengguang 4435634cc2aSTejun Heo TP_PROTO(struct bdi_writeback *wb, 444b48c104dSWu Fengguang unsigned long dirty_rate, 445b48c104dSWu Fengguang unsigned long task_ratelimit), 446b48c104dSWu Fengguang 4475634cc2aSTejun Heo TP_ARGS(wb, dirty_rate, task_ratelimit), 448b48c104dSWu Fengguang 449b48c104dSWu Fengguang TP_STRUCT__entry( 450b48c104dSWu Fengguang __array(char, bdi, 32) 451b48c104dSWu Fengguang __field(unsigned long, write_bw) 452b48c104dSWu Fengguang __field(unsigned long, avg_write_bw) 453b48c104dSWu Fengguang __field(unsigned long, dirty_rate) 454b48c104dSWu Fengguang __field(unsigned long, dirty_ratelimit) 455b48c104dSWu Fengguang __field(unsigned long, task_ratelimit) 456b48c104dSWu Fengguang __field(unsigned long, balanced_dirty_ratelimit) 457a664edb3SYang Shi __field(unsigned int, cgroup_ino) 458b48c104dSWu Fengguang ), 459b48c104dSWu Fengguang 460b48c104dSWu Fengguang TP_fast_assign( 4615634cc2aSTejun Heo strlcpy(__entry->bdi, dev_name(wb->bdi->dev), 32); 4625634cc2aSTejun Heo __entry->write_bw = KBps(wb->write_bandwidth); 4635634cc2aSTejun Heo __entry->avg_write_bw = KBps(wb->avg_write_bandwidth); 464b48c104dSWu Fengguang __entry->dirty_rate = KBps(dirty_rate); 4655634cc2aSTejun Heo __entry->dirty_ratelimit = KBps(wb->dirty_ratelimit); 466b48c104dSWu Fengguang __entry->task_ratelimit = KBps(task_ratelimit); 467b48c104dSWu Fengguang __entry->balanced_dirty_ratelimit = 4685634cc2aSTejun Heo KBps(wb->balanced_dirty_ratelimit); 469a664edb3SYang Shi __entry->cgroup_ino = __trace_wb_assign_cgroup(wb); 470b48c104dSWu Fengguang ), 471b48c104dSWu Fengguang 472b48c104dSWu Fengguang TP_printk("bdi %s: " 473b48c104dSWu Fengguang "write_bw=%lu awrite_bw=%lu dirty_rate=%lu " 474b48c104dSWu Fengguang "dirty_ratelimit=%lu task_ratelimit=%lu " 475a664edb3SYang Shi "balanced_dirty_ratelimit=%lu cgroup_ino=%u", 476b48c104dSWu Fengguang __entry->bdi, 477b48c104dSWu Fengguang __entry->write_bw, /* write bandwidth */ 478b48c104dSWu Fengguang __entry->avg_write_bw, /* avg write bandwidth */ 479b48c104dSWu Fengguang __entry->dirty_rate, /* bdi dirty rate */ 480b48c104dSWu Fengguang __entry->dirty_ratelimit, /* base ratelimit */ 481b48c104dSWu Fengguang __entry->task_ratelimit, /* ratelimit with position control */ 4825634cc2aSTejun Heo __entry->balanced_dirty_ratelimit, /* the balanced ratelimit */ 483a664edb3SYang Shi __entry->cgroup_ino 484b48c104dSWu Fengguang ) 485b48c104dSWu Fengguang ); 486b48c104dSWu Fengguang 487ece13ac3SWu Fengguang TRACE_EVENT(balance_dirty_pages, 488ece13ac3SWu Fengguang 4895634cc2aSTejun Heo TP_PROTO(struct bdi_writeback *wb, 490ece13ac3SWu Fengguang unsigned long thresh, 491ece13ac3SWu Fengguang unsigned long bg_thresh, 492ece13ac3SWu Fengguang unsigned long dirty, 493ece13ac3SWu Fengguang unsigned long bdi_thresh, 494ece13ac3SWu Fengguang unsigned long bdi_dirty, 495ece13ac3SWu Fengguang unsigned long dirty_ratelimit, 496ece13ac3SWu Fengguang unsigned long task_ratelimit, 497ece13ac3SWu Fengguang unsigned long dirtied, 49883712358SWu Fengguang unsigned long period, 499ece13ac3SWu Fengguang long pause, 500ece13ac3SWu Fengguang unsigned long start_time), 501ece13ac3SWu Fengguang 5025634cc2aSTejun Heo TP_ARGS(wb, thresh, bg_thresh, dirty, bdi_thresh, bdi_dirty, 503ece13ac3SWu Fengguang dirty_ratelimit, task_ratelimit, 50483712358SWu Fengguang dirtied, period, pause, start_time), 505ece13ac3SWu Fengguang 506ece13ac3SWu Fengguang TP_STRUCT__entry( 507ece13ac3SWu Fengguang __array( char, bdi, 32) 508ece13ac3SWu Fengguang __field(unsigned long, limit) 509ece13ac3SWu Fengguang __field(unsigned long, setpoint) 510ece13ac3SWu Fengguang __field(unsigned long, dirty) 511ece13ac3SWu Fengguang __field(unsigned long, bdi_setpoint) 512ece13ac3SWu Fengguang __field(unsigned long, bdi_dirty) 513ece13ac3SWu Fengguang __field(unsigned long, dirty_ratelimit) 514ece13ac3SWu Fengguang __field(unsigned long, task_ratelimit) 515ece13ac3SWu Fengguang __field(unsigned int, dirtied) 516ece13ac3SWu Fengguang __field(unsigned int, dirtied_pause) 517ece13ac3SWu Fengguang __field(unsigned long, paused) 518ece13ac3SWu Fengguang __field( long, pause) 51983712358SWu Fengguang __field(unsigned long, period) 52083712358SWu Fengguang __field( long, think) 521a664edb3SYang Shi __field(unsigned int, cgroup_ino) 522ece13ac3SWu Fengguang ), 523ece13ac3SWu Fengguang 524ece13ac3SWu Fengguang TP_fast_assign( 525ece13ac3SWu Fengguang unsigned long freerun = (thresh + bg_thresh) / 2; 5265634cc2aSTejun Heo strlcpy(__entry->bdi, dev_name(wb->bdi->dev), 32); 527ece13ac3SWu Fengguang 528dcc25ae7STejun Heo __entry->limit = global_wb_domain.dirty_limit; 529dcc25ae7STejun Heo __entry->setpoint = (global_wb_domain.dirty_limit + 530dcc25ae7STejun Heo freerun) / 2; 531ece13ac3SWu Fengguang __entry->dirty = dirty; 532ece13ac3SWu Fengguang __entry->bdi_setpoint = __entry->setpoint * 533ece13ac3SWu Fengguang bdi_thresh / (thresh + 1); 534ece13ac3SWu Fengguang __entry->bdi_dirty = bdi_dirty; 535ece13ac3SWu Fengguang __entry->dirty_ratelimit = KBps(dirty_ratelimit); 536ece13ac3SWu Fengguang __entry->task_ratelimit = KBps(task_ratelimit); 537ece13ac3SWu Fengguang __entry->dirtied = dirtied; 538ece13ac3SWu Fengguang __entry->dirtied_pause = current->nr_dirtied_pause; 53983712358SWu Fengguang __entry->think = current->dirty_paused_when == 0 ? 0 : 54083712358SWu Fengguang (long)(jiffies - current->dirty_paused_when) * 1000/HZ; 54183712358SWu Fengguang __entry->period = period * 1000 / HZ; 542ece13ac3SWu Fengguang __entry->pause = pause * 1000 / HZ; 543ece13ac3SWu Fengguang __entry->paused = (jiffies - start_time) * 1000 / HZ; 544a664edb3SYang Shi __entry->cgroup_ino = __trace_wb_assign_cgroup(wb); 545ece13ac3SWu Fengguang ), 546ece13ac3SWu Fengguang 547ece13ac3SWu Fengguang 548ece13ac3SWu Fengguang TP_printk("bdi %s: " 549ece13ac3SWu Fengguang "limit=%lu setpoint=%lu dirty=%lu " 550ece13ac3SWu Fengguang "bdi_setpoint=%lu bdi_dirty=%lu " 551ece13ac3SWu Fengguang "dirty_ratelimit=%lu task_ratelimit=%lu " 552ece13ac3SWu Fengguang "dirtied=%u dirtied_pause=%u " 553a664edb3SYang Shi "paused=%lu pause=%ld period=%lu think=%ld cgroup_ino=%u", 554ece13ac3SWu Fengguang __entry->bdi, 555ece13ac3SWu Fengguang __entry->limit, 556ece13ac3SWu Fengguang __entry->setpoint, 557ece13ac3SWu Fengguang __entry->dirty, 558ece13ac3SWu Fengguang __entry->bdi_setpoint, 559ece13ac3SWu Fengguang __entry->bdi_dirty, 560ece13ac3SWu Fengguang __entry->dirty_ratelimit, 561ece13ac3SWu Fengguang __entry->task_ratelimit, 562ece13ac3SWu Fengguang __entry->dirtied, 563ece13ac3SWu Fengguang __entry->dirtied_pause, 564ece13ac3SWu Fengguang __entry->paused, /* ms */ 56583712358SWu Fengguang __entry->pause, /* ms */ 56683712358SWu Fengguang __entry->period, /* ms */ 5675634cc2aSTejun Heo __entry->think, /* ms */ 568a664edb3SYang Shi __entry->cgroup_ino 569ece13ac3SWu Fengguang ) 570ece13ac3SWu Fengguang ); 571ece13ac3SWu Fengguang 572cc1676d9SJan Kara TRACE_EVENT(writeback_sb_inodes_requeue, 573cc1676d9SJan Kara 574cc1676d9SJan Kara TP_PROTO(struct inode *inode), 575cc1676d9SJan Kara TP_ARGS(inode), 576cc1676d9SJan Kara 577cc1676d9SJan Kara TP_STRUCT__entry( 578cc1676d9SJan Kara __array(char, name, 32) 579cc1676d9SJan Kara __field(unsigned long, ino) 580cc1676d9SJan Kara __field(unsigned long, state) 581cc1676d9SJan Kara __field(unsigned long, dirtied_when) 582a664edb3SYang Shi __field(unsigned int, cgroup_ino) 583cc1676d9SJan Kara ), 584cc1676d9SJan Kara 585cc1676d9SJan Kara TP_fast_assign( 586cc1676d9SJan Kara strncpy(__entry->name, 587cc1676d9SJan Kara dev_name(inode_to_bdi(inode)->dev), 32); 588cc1676d9SJan Kara __entry->ino = inode->i_ino; 589cc1676d9SJan Kara __entry->state = inode->i_state; 590cc1676d9SJan Kara __entry->dirtied_when = inode->dirtied_when; 591a664edb3SYang Shi __entry->cgroup_ino = __trace_wb_assign_cgroup(inode_to_wb(inode)); 592cc1676d9SJan Kara ), 593cc1676d9SJan Kara 594a664edb3SYang Shi TP_printk("bdi %s: ino=%lu state=%s dirtied_when=%lu age=%lu cgroup_ino=%u", 595cc1676d9SJan Kara __entry->name, 596cc1676d9SJan Kara __entry->ino, 597cc1676d9SJan Kara show_inode_state(__entry->state), 598cc1676d9SJan Kara __entry->dirtied_when, 5995634cc2aSTejun Heo (jiffies - __entry->dirtied_when) / HZ, 600a664edb3SYang Shi __entry->cgroup_ino 601cc1676d9SJan Kara ) 602cc1676d9SJan Kara ); 603cc1676d9SJan Kara 60452bb9198SMel Gorman DECLARE_EVENT_CLASS(writeback_congest_waited_template, 60552bb9198SMel Gorman 60652bb9198SMel Gorman TP_PROTO(unsigned int usec_timeout, unsigned int usec_delayed), 60752bb9198SMel Gorman 60852bb9198SMel Gorman TP_ARGS(usec_timeout, usec_delayed), 60952bb9198SMel Gorman 61052bb9198SMel Gorman TP_STRUCT__entry( 61152bb9198SMel Gorman __field( unsigned int, usec_timeout ) 61252bb9198SMel Gorman __field( unsigned int, usec_delayed ) 61352bb9198SMel Gorman ), 61452bb9198SMel Gorman 61552bb9198SMel Gorman TP_fast_assign( 61652bb9198SMel Gorman __entry->usec_timeout = usec_timeout; 61752bb9198SMel Gorman __entry->usec_delayed = usec_delayed; 61852bb9198SMel Gorman ), 61952bb9198SMel Gorman 62052bb9198SMel Gorman TP_printk("usec_timeout=%u usec_delayed=%u", 62152bb9198SMel Gorman __entry->usec_timeout, 62252bb9198SMel Gorman __entry->usec_delayed) 62352bb9198SMel Gorman ); 62452bb9198SMel Gorman 62552bb9198SMel Gorman DEFINE_EVENT(writeback_congest_waited_template, writeback_congestion_wait, 62652bb9198SMel Gorman 62752bb9198SMel Gorman TP_PROTO(unsigned int usec_timeout, unsigned int usec_delayed), 62852bb9198SMel Gorman 62952bb9198SMel Gorman TP_ARGS(usec_timeout, usec_delayed) 63052bb9198SMel Gorman ); 63152bb9198SMel Gorman 6320e093d99SMel Gorman DEFINE_EVENT(writeback_congest_waited_template, writeback_wait_iff_congested, 6330e093d99SMel Gorman 6340e093d99SMel Gorman TP_PROTO(unsigned int usec_timeout, unsigned int usec_delayed), 6350e093d99SMel Gorman 6360e093d99SMel Gorman TP_ARGS(usec_timeout, usec_delayed) 6370e093d99SMel Gorman ); 6380e093d99SMel Gorman 639251d6a47SWu Fengguang DECLARE_EVENT_CLASS(writeback_single_inode_template, 640251d6a47SWu Fengguang 641251d6a47SWu Fengguang TP_PROTO(struct inode *inode, 642251d6a47SWu Fengguang struct writeback_control *wbc, 643251d6a47SWu Fengguang unsigned long nr_to_write 644251d6a47SWu Fengguang ), 645251d6a47SWu Fengguang 646251d6a47SWu Fengguang TP_ARGS(inode, wbc, nr_to_write), 647251d6a47SWu Fengguang 648251d6a47SWu Fengguang TP_STRUCT__entry( 649251d6a47SWu Fengguang __array(char, name, 32) 650251d6a47SWu Fengguang __field(unsigned long, ino) 651251d6a47SWu Fengguang __field(unsigned long, state) 652c8ad6206SWu Fengguang __field(unsigned long, dirtied_when) 653251d6a47SWu Fengguang __field(unsigned long, writeback_index) 654251d6a47SWu Fengguang __field(long, nr_to_write) 655251d6a47SWu Fengguang __field(unsigned long, wrote) 656a664edb3SYang Shi __field(unsigned int, cgroup_ino) 657251d6a47SWu Fengguang ), 658251d6a47SWu Fengguang 659251d6a47SWu Fengguang TP_fast_assign( 660251d6a47SWu Fengguang strncpy(__entry->name, 66115eb77a0SWu Fengguang dev_name(inode_to_bdi(inode)->dev), 32); 662251d6a47SWu Fengguang __entry->ino = inode->i_ino; 663251d6a47SWu Fengguang __entry->state = inode->i_state; 664c8ad6206SWu Fengguang __entry->dirtied_when = inode->dirtied_when; 665251d6a47SWu Fengguang __entry->writeback_index = inode->i_mapping->writeback_index; 666251d6a47SWu Fengguang __entry->nr_to_write = nr_to_write; 667251d6a47SWu Fengguang __entry->wrote = nr_to_write - wbc->nr_to_write; 668a664edb3SYang Shi __entry->cgroup_ino = __trace_wbc_assign_cgroup(wbc); 669251d6a47SWu Fengguang ), 670251d6a47SWu Fengguang 671c8ad6206SWu Fengguang TP_printk("bdi %s: ino=%lu state=%s dirtied_when=%lu age=%lu " 672a664edb3SYang Shi "index=%lu to_write=%ld wrote=%lu cgroup_ino=%u", 673251d6a47SWu Fengguang __entry->name, 674251d6a47SWu Fengguang __entry->ino, 675251d6a47SWu Fengguang show_inode_state(__entry->state), 676c8ad6206SWu Fengguang __entry->dirtied_when, 677c8ad6206SWu Fengguang (jiffies - __entry->dirtied_when) / HZ, 678251d6a47SWu Fengguang __entry->writeback_index, 679251d6a47SWu Fengguang __entry->nr_to_write, 6805634cc2aSTejun Heo __entry->wrote, 681a664edb3SYang Shi __entry->cgroup_ino 682251d6a47SWu Fengguang ) 683251d6a47SWu Fengguang ); 684251d6a47SWu Fengguang 6859fb0a7daSTejun Heo DEFINE_EVENT(writeback_single_inode_template, writeback_single_inode_start, 6869fb0a7daSTejun Heo TP_PROTO(struct inode *inode, 6879fb0a7daSTejun Heo struct writeback_control *wbc, 6889fb0a7daSTejun Heo unsigned long nr_to_write), 6899fb0a7daSTejun Heo TP_ARGS(inode, wbc, nr_to_write) 6909fb0a7daSTejun Heo ); 6919fb0a7daSTejun Heo 692251d6a47SWu Fengguang DEFINE_EVENT(writeback_single_inode_template, writeback_single_inode, 693251d6a47SWu Fengguang TP_PROTO(struct inode *inode, 694251d6a47SWu Fengguang struct writeback_control *wbc, 695251d6a47SWu Fengguang unsigned long nr_to_write), 696251d6a47SWu Fengguang TP_ARGS(inode, wbc, nr_to_write) 697251d6a47SWu Fengguang ); 698251d6a47SWu Fengguang 6999a46b04fSBrian Foster DECLARE_EVENT_CLASS(writeback_inode_template, 7000ae45f63STheodore Ts'o TP_PROTO(struct inode *inode), 7010ae45f63STheodore Ts'o 7020ae45f63STheodore Ts'o TP_ARGS(inode), 7030ae45f63STheodore Ts'o 7040ae45f63STheodore Ts'o TP_STRUCT__entry( 7050ae45f63STheodore Ts'o __field( dev_t, dev ) 7060ae45f63STheodore Ts'o __field(unsigned long, ino ) 7070ae45f63STheodore Ts'o __field(unsigned long, state ) 7080ae45f63STheodore Ts'o __field( __u16, mode ) 7090ae45f63STheodore Ts'o __field(unsigned long, dirtied_when ) 7100ae45f63STheodore Ts'o ), 7110ae45f63STheodore Ts'o 7120ae45f63STheodore Ts'o TP_fast_assign( 7130ae45f63STheodore Ts'o __entry->dev = inode->i_sb->s_dev; 7140ae45f63STheodore Ts'o __entry->ino = inode->i_ino; 7150ae45f63STheodore Ts'o __entry->state = inode->i_state; 7160ae45f63STheodore Ts'o __entry->mode = inode->i_mode; 7170ae45f63STheodore Ts'o __entry->dirtied_when = inode->dirtied_when; 7180ae45f63STheodore Ts'o ), 7190ae45f63STheodore Ts'o 7200ae45f63STheodore Ts'o TP_printk("dev %d,%d ino %lu dirtied %lu state %s mode 0%o", 7210ae45f63STheodore Ts'o MAJOR(__entry->dev), MINOR(__entry->dev), 7220ae45f63STheodore Ts'o __entry->ino, __entry->dirtied_when, 7230ae45f63STheodore Ts'o show_inode_state(__entry->state), __entry->mode) 7240ae45f63STheodore Ts'o ); 7250ae45f63STheodore Ts'o 7269a46b04fSBrian Foster DEFINE_EVENT(writeback_inode_template, writeback_lazytime, 7270ae45f63STheodore Ts'o TP_PROTO(struct inode *inode), 7280ae45f63STheodore Ts'o 7290ae45f63STheodore Ts'o TP_ARGS(inode) 7300ae45f63STheodore Ts'o ); 7310ae45f63STheodore Ts'o 7329a46b04fSBrian Foster DEFINE_EVENT(writeback_inode_template, writeback_lazytime_iput, 7330ae45f63STheodore Ts'o TP_PROTO(struct inode *inode), 7340ae45f63STheodore Ts'o 7350ae45f63STheodore Ts'o TP_ARGS(inode) 7360ae45f63STheodore Ts'o ); 7370ae45f63STheodore Ts'o 7389a46b04fSBrian Foster DEFINE_EVENT(writeback_inode_template, writeback_dirty_inode_enqueue, 7390ae45f63STheodore Ts'o 7400ae45f63STheodore Ts'o TP_PROTO(struct inode *inode), 7410ae45f63STheodore Ts'o 7420ae45f63STheodore Ts'o TP_ARGS(inode) 7430ae45f63STheodore Ts'o ); 7440ae45f63STheodore Ts'o 7459a46b04fSBrian Foster /* 7469a46b04fSBrian Foster * Inode writeback list tracking. 7479a46b04fSBrian Foster */ 7489a46b04fSBrian Foster 7499a46b04fSBrian Foster DEFINE_EVENT(writeback_inode_template, sb_mark_inode_writeback, 7509a46b04fSBrian Foster TP_PROTO(struct inode *inode), 7519a46b04fSBrian Foster TP_ARGS(inode) 7529a46b04fSBrian Foster ); 7539a46b04fSBrian Foster 7549a46b04fSBrian Foster DEFINE_EVENT(writeback_inode_template, sb_clear_inode_writeback, 7559a46b04fSBrian Foster TP_PROTO(struct inode *inode), 7569a46b04fSBrian Foster TP_ARGS(inode) 7579a46b04fSBrian Foster ); 7589a46b04fSBrian Foster 759455b2864SDave Chinner #endif /* _TRACE_WRITEBACK_H */ 760455b2864SDave Chinner 761455b2864SDave Chinner /* This part must be outside protection */ 762455b2864SDave Chinner #include <trace/define_trace.h> 763