1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 2fe0bfaafSRobert Jarzmik #undef TRACE_SYSTEM 3fe0bfaafSRobert Jarzmik #define TRACE_SYSTEM filemap 4fe0bfaafSRobert Jarzmik 5fe0bfaafSRobert Jarzmik #if !defined(_TRACE_FILEMAP_H) || defined(TRACE_HEADER_MULTI_READ) 6fe0bfaafSRobert Jarzmik #define _TRACE_FILEMAP_H 7fe0bfaafSRobert Jarzmik 8fe0bfaafSRobert Jarzmik #include <linux/types.h> 9fe0bfaafSRobert Jarzmik #include <linux/tracepoint.h> 10fe0bfaafSRobert Jarzmik #include <linux/mm.h> 11fe0bfaafSRobert Jarzmik #include <linux/memcontrol.h> 12fe0bfaafSRobert Jarzmik #include <linux/device.h> 13fe0bfaafSRobert Jarzmik #include <linux/kdev_t.h> 145660e13dSJeff Layton #include <linux/errseq.h> 15fe0bfaafSRobert Jarzmik 16fe0bfaafSRobert Jarzmik DECLARE_EVENT_CLASS(mm_filemap_op_page_cache, 17fe0bfaafSRobert Jarzmik 18*a0580c6fSMatthew Wilcox (Oracle) TP_PROTO(struct folio *folio), 19fe0bfaafSRobert Jarzmik 20*a0580c6fSMatthew Wilcox (Oracle) TP_ARGS(folio), 21fe0bfaafSRobert Jarzmik 22fe0bfaafSRobert Jarzmik TP_STRUCT__entry( 239fdd8a87SNamhyung Kim __field(unsigned long, pfn) 24fe0bfaafSRobert Jarzmik __field(unsigned long, i_ino) 25fe0bfaafSRobert Jarzmik __field(unsigned long, index) 26fe0bfaafSRobert Jarzmik __field(dev_t, s_dev) 27*a0580c6fSMatthew Wilcox (Oracle) __field(unsigned char, order) 28fe0bfaafSRobert Jarzmik ), 29fe0bfaafSRobert Jarzmik 30fe0bfaafSRobert Jarzmik TP_fast_assign( 31*a0580c6fSMatthew Wilcox (Oracle) __entry->pfn = folio_pfn(folio); 32*a0580c6fSMatthew Wilcox (Oracle) __entry->i_ino = folio->mapping->host->i_ino; 33*a0580c6fSMatthew Wilcox (Oracle) __entry->index = folio->index; 34*a0580c6fSMatthew Wilcox (Oracle) if (folio->mapping->host->i_sb) 35*a0580c6fSMatthew Wilcox (Oracle) __entry->s_dev = folio->mapping->host->i_sb->s_dev; 36fe0bfaafSRobert Jarzmik else 37*a0580c6fSMatthew Wilcox (Oracle) __entry->s_dev = folio->mapping->host->i_rdev; 38*a0580c6fSMatthew Wilcox (Oracle) __entry->order = folio_order(folio); 39fe0bfaafSRobert Jarzmik ), 40fe0bfaafSRobert Jarzmik 41*a0580c6fSMatthew Wilcox (Oracle) TP_printk("dev %d:%d ino %lx pfn=0x%lx ofs=%lu order=%u", 42fe0bfaafSRobert Jarzmik MAJOR(__entry->s_dev), MINOR(__entry->s_dev), 43fe0bfaafSRobert Jarzmik __entry->i_ino, 449fdd8a87SNamhyung Kim __entry->pfn, 45*a0580c6fSMatthew Wilcox (Oracle) __entry->index << PAGE_SHIFT, 46*a0580c6fSMatthew Wilcox (Oracle) __entry->order) 47fe0bfaafSRobert Jarzmik ); 48fe0bfaafSRobert Jarzmik 49fe0bfaafSRobert Jarzmik DEFINE_EVENT(mm_filemap_op_page_cache, mm_filemap_delete_from_page_cache, 50*a0580c6fSMatthew Wilcox (Oracle) TP_PROTO(struct folio *folio), 51*a0580c6fSMatthew Wilcox (Oracle) TP_ARGS(folio) 52fe0bfaafSRobert Jarzmik ); 53fe0bfaafSRobert Jarzmik 54fe0bfaafSRobert Jarzmik DEFINE_EVENT(mm_filemap_op_page_cache, mm_filemap_add_to_page_cache, 55*a0580c6fSMatthew Wilcox (Oracle) TP_PROTO(struct folio *folio), 56*a0580c6fSMatthew Wilcox (Oracle) TP_ARGS(folio) 57fe0bfaafSRobert Jarzmik ); 58fe0bfaafSRobert Jarzmik 595660e13dSJeff Layton TRACE_EVENT(filemap_set_wb_err, 605660e13dSJeff Layton TP_PROTO(struct address_space *mapping, errseq_t eseq), 615660e13dSJeff Layton 625660e13dSJeff Layton TP_ARGS(mapping, eseq), 635660e13dSJeff Layton 645660e13dSJeff Layton TP_STRUCT__entry( 655660e13dSJeff Layton __field(unsigned long, i_ino) 665660e13dSJeff Layton __field(dev_t, s_dev) 675660e13dSJeff Layton __field(errseq_t, errseq) 685660e13dSJeff Layton ), 695660e13dSJeff Layton 705660e13dSJeff Layton TP_fast_assign( 715660e13dSJeff Layton __entry->i_ino = mapping->host->i_ino; 725660e13dSJeff Layton __entry->errseq = eseq; 735660e13dSJeff Layton if (mapping->host->i_sb) 745660e13dSJeff Layton __entry->s_dev = mapping->host->i_sb->s_dev; 755660e13dSJeff Layton else 765660e13dSJeff Layton __entry->s_dev = mapping->host->i_rdev; 775660e13dSJeff Layton ), 785660e13dSJeff Layton 795660e13dSJeff Layton TP_printk("dev=%d:%d ino=0x%lx errseq=0x%x", 805660e13dSJeff Layton MAJOR(__entry->s_dev), MINOR(__entry->s_dev), 815660e13dSJeff Layton __entry->i_ino, __entry->errseq) 825660e13dSJeff Layton ); 835660e13dSJeff Layton 845660e13dSJeff Layton TRACE_EVENT(file_check_and_advance_wb_err, 855660e13dSJeff Layton TP_PROTO(struct file *file, errseq_t old), 865660e13dSJeff Layton 875660e13dSJeff Layton TP_ARGS(file, old), 885660e13dSJeff Layton 895660e13dSJeff Layton TP_STRUCT__entry( 9004ae87a5SPeter Zijlstra __field(struct file *, file) 915660e13dSJeff Layton __field(unsigned long, i_ino) 925660e13dSJeff Layton __field(dev_t, s_dev) 935660e13dSJeff Layton __field(errseq_t, old) 945660e13dSJeff Layton __field(errseq_t, new) 955660e13dSJeff Layton ), 965660e13dSJeff Layton 975660e13dSJeff Layton TP_fast_assign( 985660e13dSJeff Layton __entry->file = file; 995660e13dSJeff Layton __entry->i_ino = file->f_mapping->host->i_ino; 1005660e13dSJeff Layton if (file->f_mapping->host->i_sb) 1015660e13dSJeff Layton __entry->s_dev = 1025660e13dSJeff Layton file->f_mapping->host->i_sb->s_dev; 1035660e13dSJeff Layton else 1045660e13dSJeff Layton __entry->s_dev = 1055660e13dSJeff Layton file->f_mapping->host->i_rdev; 1065660e13dSJeff Layton __entry->old = old; 1075660e13dSJeff Layton __entry->new = file->f_wb_err; 1085660e13dSJeff Layton ), 1095660e13dSJeff Layton 1105660e13dSJeff Layton TP_printk("file=%p dev=%d:%d ino=0x%lx old=0x%x new=0x%x", 1115660e13dSJeff Layton __entry->file, MAJOR(__entry->s_dev), 1125660e13dSJeff Layton MINOR(__entry->s_dev), __entry->i_ino, __entry->old, 1135660e13dSJeff Layton __entry->new) 1145660e13dSJeff Layton ); 115fe0bfaafSRobert Jarzmik #endif /* _TRACE_FILEMAP_H */ 116fe0bfaafSRobert Jarzmik 117fe0bfaafSRobert Jarzmik /* This part must be outside protection */ 118fe0bfaafSRobert Jarzmik #include <trace/define_trace.h> 119