1 /* SPDX-License-Identifier: GPL-2.0 */ 2 #undef TRACE_SYSTEM 3 #define TRACE_SYSTEM filemap 4 5 #if !defined(_TRACE_FILEMAP_H) || defined(TRACE_HEADER_MULTI_READ) 6 #define _TRACE_FILEMAP_H 7 8 #include <linux/types.h> 9 #include <linux/tracepoint.h> 10 #include <linux/mm.h> 11 #include <linux/memcontrol.h> 12 #include <linux/device.h> 13 #include <linux/kdev_t.h> 14 #include <linux/errseq.h> 15 16 DECLARE_EVENT_CLASS(mm_filemap_op_page_cache, 17 18 TP_PROTO(struct folio *folio), 19 20 TP_ARGS(folio), 21 22 TP_STRUCT__entry( 23 __field(unsigned long, pfn) 24 __field(unsigned long, i_ino) 25 __field(unsigned long, index) 26 __field(dev_t, s_dev) 27 __field(unsigned char, order) 28 ), 29 30 TP_fast_assign( 31 __entry->pfn = folio_pfn(folio); 32 __entry->i_ino = folio->mapping->host->i_ino; 33 __entry->index = folio->index; 34 if (folio->mapping->host->i_sb) 35 __entry->s_dev = folio->mapping->host->i_sb->s_dev; 36 else 37 __entry->s_dev = folio->mapping->host->i_rdev; 38 __entry->order = folio_order(folio); 39 ), 40 41 TP_printk("dev %d:%d ino %lx pfn=0x%lx ofs=%lu order=%u", 42 MAJOR(__entry->s_dev), MINOR(__entry->s_dev), 43 __entry->i_ino, 44 __entry->pfn, 45 __entry->index << PAGE_SHIFT, 46 __entry->order) 47 ); 48 49 DEFINE_EVENT(mm_filemap_op_page_cache, mm_filemap_delete_from_page_cache, 50 TP_PROTO(struct folio *folio), 51 TP_ARGS(folio) 52 ); 53 54 DEFINE_EVENT(mm_filemap_op_page_cache, mm_filemap_add_to_page_cache, 55 TP_PROTO(struct folio *folio), 56 TP_ARGS(folio) 57 ); 58 59 TRACE_EVENT(filemap_set_wb_err, 60 TP_PROTO(struct address_space *mapping, errseq_t eseq), 61 62 TP_ARGS(mapping, eseq), 63 64 TP_STRUCT__entry( 65 __field(unsigned long, i_ino) 66 __field(dev_t, s_dev) 67 __field(errseq_t, errseq) 68 ), 69 70 TP_fast_assign( 71 __entry->i_ino = mapping->host->i_ino; 72 __entry->errseq = eseq; 73 if (mapping->host->i_sb) 74 __entry->s_dev = mapping->host->i_sb->s_dev; 75 else 76 __entry->s_dev = mapping->host->i_rdev; 77 ), 78 79 TP_printk("dev=%d:%d ino=0x%lx errseq=0x%x", 80 MAJOR(__entry->s_dev), MINOR(__entry->s_dev), 81 __entry->i_ino, __entry->errseq) 82 ); 83 84 TRACE_EVENT(file_check_and_advance_wb_err, 85 TP_PROTO(struct file *file, errseq_t old), 86 87 TP_ARGS(file, old), 88 89 TP_STRUCT__entry( 90 __field(struct file *, file) 91 __field(unsigned long, i_ino) 92 __field(dev_t, s_dev) 93 __field(errseq_t, old) 94 __field(errseq_t, new) 95 ), 96 97 TP_fast_assign( 98 __entry->file = file; 99 __entry->i_ino = file->f_mapping->host->i_ino; 100 if (file->f_mapping->host->i_sb) 101 __entry->s_dev = 102 file->f_mapping->host->i_sb->s_dev; 103 else 104 __entry->s_dev = 105 file->f_mapping->host->i_rdev; 106 __entry->old = old; 107 __entry->new = file->f_wb_err; 108 ), 109 110 TP_printk("file=%p dev=%d:%d ino=0x%lx old=0x%x new=0x%x", 111 __entry->file, MAJOR(__entry->s_dev), 112 MINOR(__entry->s_dev), __entry->i_ino, __entry->old, 113 __entry->new) 114 ); 115 #endif /* _TRACE_FILEMAP_H */ 116 117 /* This part must be outside protection */ 118 #include <trace/define_trace.h> 119