203 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2#undef TRACE_SYSTEM3#define TRACE_SYSTEM filemap4 5#if !defined(_TRACE_FILEMAP_H) || defined(TRACE_HEADER_MULTI_READ)6#define _TRACE_FILEMAP_H7 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 16DECLARE_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 else37 __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 49DEFINE_EVENT(mm_filemap_op_page_cache, mm_filemap_delete_from_page_cache,50 TP_PROTO(struct folio *folio),51 TP_ARGS(folio)52 );53 54DEFINE_EVENT(mm_filemap_op_page_cache, mm_filemap_add_to_page_cache,55 TP_PROTO(struct folio *folio),56 TP_ARGS(folio)57 );58 59DECLARE_EVENT_CLASS(mm_filemap_op_page_cache_range,60 61 TP_PROTO(62 struct address_space *mapping,63 pgoff_t index,64 pgoff_t last_index65 ),66 67 TP_ARGS(mapping, index, last_index),68 69 TP_STRUCT__entry(70 __field(unsigned long, i_ino)71 __field(dev_t, s_dev)72 __field(unsigned long, index)73 __field(unsigned long, last_index)74 ),75 76 TP_fast_assign(77 __entry->i_ino = mapping->host->i_ino;78 if (mapping->host->i_sb)79 __entry->s_dev =80 mapping->host->i_sb->s_dev;81 else82 __entry->s_dev = mapping->host->i_rdev;83 __entry->index = index;84 __entry->last_index = last_index;85 ),86 87 TP_printk(88 "dev=%d:%d ino=%lx ofs=%lld-%lld",89 MAJOR(__entry->s_dev),90 MINOR(__entry->s_dev), __entry->i_ino,91 ((loff_t)__entry->index) << PAGE_SHIFT,92 ((((loff_t)__entry->last_index + 1) << PAGE_SHIFT) - 1)93 )94);95 96DEFINE_EVENT(mm_filemap_op_page_cache_range, mm_filemap_get_pages,97 TP_PROTO(98 struct address_space *mapping,99 pgoff_t index,100 pgoff_t last_index101 ),102 TP_ARGS(mapping, index, last_index)103);104 105DEFINE_EVENT(mm_filemap_op_page_cache_range, mm_filemap_map_pages,106 TP_PROTO(107 struct address_space *mapping,108 pgoff_t index,109 pgoff_t last_index110 ),111 TP_ARGS(mapping, index, last_index)112);113 114TRACE_EVENT(mm_filemap_fault,115 TP_PROTO(struct address_space *mapping, pgoff_t index),116 117 TP_ARGS(mapping, index),118 119 TP_STRUCT__entry(120 __field(unsigned long, i_ino)121 __field(dev_t, s_dev)122 __field(unsigned long, index)123 ),124 125 TP_fast_assign(126 __entry->i_ino = mapping->host->i_ino;127 if (mapping->host->i_sb)128 __entry->s_dev =129 mapping->host->i_sb->s_dev;130 else131 __entry->s_dev = mapping->host->i_rdev;132 __entry->index = index;133 ),134 135 TP_printk(136 "dev=%d:%d ino=%lx ofs=%lld",137 MAJOR(__entry->s_dev),138 MINOR(__entry->s_dev), __entry->i_ino,139 ((loff_t)__entry->index) << PAGE_SHIFT140 )141);142 143TRACE_EVENT(filemap_set_wb_err,144 TP_PROTO(struct address_space *mapping, errseq_t eseq),145 146 TP_ARGS(mapping, eseq),147 148 TP_STRUCT__entry(149 __field(unsigned long, i_ino)150 __field(dev_t, s_dev)151 __field(errseq_t, errseq)152 ),153 154 TP_fast_assign(155 __entry->i_ino = mapping->host->i_ino;156 __entry->errseq = eseq;157 if (mapping->host->i_sb)158 __entry->s_dev = mapping->host->i_sb->s_dev;159 else160 __entry->s_dev = mapping->host->i_rdev;161 ),162 163 TP_printk("dev=%d:%d ino=0x%lx errseq=0x%x",164 MAJOR(__entry->s_dev), MINOR(__entry->s_dev),165 __entry->i_ino, __entry->errseq)166);167 168TRACE_EVENT(file_check_and_advance_wb_err,169 TP_PROTO(struct file *file, errseq_t old),170 171 TP_ARGS(file, old),172 173 TP_STRUCT__entry(174 __field(struct file *, file)175 __field(unsigned long, i_ino)176 __field(dev_t, s_dev)177 __field(errseq_t, old)178 __field(errseq_t, new)179 ),180 181 TP_fast_assign(182 __entry->file = file;183 __entry->i_ino = file->f_mapping->host->i_ino;184 if (file->f_mapping->host->i_sb)185 __entry->s_dev =186 file->f_mapping->host->i_sb->s_dev;187 else188 __entry->s_dev =189 file->f_mapping->host->i_rdev;190 __entry->old = old;191 __entry->new = file->f_wb_err;192 ),193 194 TP_printk("file=%p dev=%d:%d ino=0x%lx old=0x%x new=0x%x",195 __entry->file, MAJOR(__entry->s_dev),196 MINOR(__entry->s_dev), __entry->i_ino, __entry->old,197 __entry->new)198);199#endif /* _TRACE_FILEMAP_H */200 201/* This part must be outside protection */202#include <trace/define_trace.h>203