18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci#undef TRACE_SYSTEM
38c2ecf20Sopenharmony_ci#define TRACE_SYSTEM filemap
48c2ecf20Sopenharmony_ci
58c2ecf20Sopenharmony_ci#if !defined(_TRACE_FILEMAP_H) || defined(TRACE_HEADER_MULTI_READ)
68c2ecf20Sopenharmony_ci#define _TRACE_FILEMAP_H
78c2ecf20Sopenharmony_ci
88c2ecf20Sopenharmony_ci#include <linux/types.h>
98c2ecf20Sopenharmony_ci#include <linux/tracepoint.h>
108c2ecf20Sopenharmony_ci#include <linux/mm.h>
118c2ecf20Sopenharmony_ci#include <linux/memcontrol.h>
128c2ecf20Sopenharmony_ci#include <linux/device.h>
138c2ecf20Sopenharmony_ci#include <linux/kdev_t.h>
148c2ecf20Sopenharmony_ci#include <linux/errseq.h>
158c2ecf20Sopenharmony_ci
168c2ecf20Sopenharmony_ciDECLARE_EVENT_CLASS(mm_filemap_op_page_cache,
178c2ecf20Sopenharmony_ci
188c2ecf20Sopenharmony_ci	TP_PROTO(struct page *page),
198c2ecf20Sopenharmony_ci
208c2ecf20Sopenharmony_ci	TP_ARGS(page),
218c2ecf20Sopenharmony_ci
228c2ecf20Sopenharmony_ci	TP_STRUCT__entry(
238c2ecf20Sopenharmony_ci		__field(unsigned long, pfn)
248c2ecf20Sopenharmony_ci		__field(unsigned long, i_ino)
258c2ecf20Sopenharmony_ci		__field(unsigned long, index)
268c2ecf20Sopenharmony_ci		__field(dev_t, s_dev)
278c2ecf20Sopenharmony_ci	),
288c2ecf20Sopenharmony_ci
298c2ecf20Sopenharmony_ci	TP_fast_assign(
308c2ecf20Sopenharmony_ci		__entry->pfn = page_to_pfn(page);
318c2ecf20Sopenharmony_ci		__entry->i_ino = page->mapping->host->i_ino;
328c2ecf20Sopenharmony_ci		__entry->index = page->index;
338c2ecf20Sopenharmony_ci		if (page->mapping->host->i_sb)
348c2ecf20Sopenharmony_ci			__entry->s_dev = page->mapping->host->i_sb->s_dev;
358c2ecf20Sopenharmony_ci		else
368c2ecf20Sopenharmony_ci			__entry->s_dev = page->mapping->host->i_rdev;
378c2ecf20Sopenharmony_ci	),
388c2ecf20Sopenharmony_ci
398c2ecf20Sopenharmony_ci	TP_printk("dev %d:%d ino %lx page=%p pfn=%lu ofs=%lu",
408c2ecf20Sopenharmony_ci		MAJOR(__entry->s_dev), MINOR(__entry->s_dev),
418c2ecf20Sopenharmony_ci		__entry->i_ino,
428c2ecf20Sopenharmony_ci		pfn_to_page(__entry->pfn),
438c2ecf20Sopenharmony_ci		__entry->pfn,
448c2ecf20Sopenharmony_ci		__entry->index << PAGE_SHIFT)
458c2ecf20Sopenharmony_ci);
468c2ecf20Sopenharmony_ci
478c2ecf20Sopenharmony_ciDEFINE_EVENT(mm_filemap_op_page_cache, mm_filemap_delete_from_page_cache,
488c2ecf20Sopenharmony_ci	TP_PROTO(struct page *page),
498c2ecf20Sopenharmony_ci	TP_ARGS(page)
508c2ecf20Sopenharmony_ci	);
518c2ecf20Sopenharmony_ci
528c2ecf20Sopenharmony_ciDEFINE_EVENT(mm_filemap_op_page_cache, mm_filemap_add_to_page_cache,
538c2ecf20Sopenharmony_ci	TP_PROTO(struct page *page),
548c2ecf20Sopenharmony_ci	TP_ARGS(page)
558c2ecf20Sopenharmony_ci	);
568c2ecf20Sopenharmony_ci
578c2ecf20Sopenharmony_ciTRACE_EVENT(filemap_set_wb_err,
588c2ecf20Sopenharmony_ci		TP_PROTO(struct address_space *mapping, errseq_t eseq),
598c2ecf20Sopenharmony_ci
608c2ecf20Sopenharmony_ci		TP_ARGS(mapping, eseq),
618c2ecf20Sopenharmony_ci
628c2ecf20Sopenharmony_ci		TP_STRUCT__entry(
638c2ecf20Sopenharmony_ci			__field(unsigned long, i_ino)
648c2ecf20Sopenharmony_ci			__field(dev_t, s_dev)
658c2ecf20Sopenharmony_ci			__field(errseq_t, errseq)
668c2ecf20Sopenharmony_ci		),
678c2ecf20Sopenharmony_ci
688c2ecf20Sopenharmony_ci		TP_fast_assign(
698c2ecf20Sopenharmony_ci			__entry->i_ino = mapping->host->i_ino;
708c2ecf20Sopenharmony_ci			__entry->errseq = eseq;
718c2ecf20Sopenharmony_ci			if (mapping->host->i_sb)
728c2ecf20Sopenharmony_ci				__entry->s_dev = mapping->host->i_sb->s_dev;
738c2ecf20Sopenharmony_ci			else
748c2ecf20Sopenharmony_ci				__entry->s_dev = mapping->host->i_rdev;
758c2ecf20Sopenharmony_ci		),
768c2ecf20Sopenharmony_ci
778c2ecf20Sopenharmony_ci		TP_printk("dev=%d:%d ino=0x%lx errseq=0x%x",
788c2ecf20Sopenharmony_ci			MAJOR(__entry->s_dev), MINOR(__entry->s_dev),
798c2ecf20Sopenharmony_ci			__entry->i_ino, __entry->errseq)
808c2ecf20Sopenharmony_ci);
818c2ecf20Sopenharmony_ci
828c2ecf20Sopenharmony_ciTRACE_EVENT(file_check_and_advance_wb_err,
838c2ecf20Sopenharmony_ci		TP_PROTO(struct file *file, errseq_t old),
848c2ecf20Sopenharmony_ci
858c2ecf20Sopenharmony_ci		TP_ARGS(file, old),
868c2ecf20Sopenharmony_ci
878c2ecf20Sopenharmony_ci		TP_STRUCT__entry(
888c2ecf20Sopenharmony_ci			__field(struct file *, file)
898c2ecf20Sopenharmony_ci			__field(unsigned long, i_ino)
908c2ecf20Sopenharmony_ci			__field(dev_t, s_dev)
918c2ecf20Sopenharmony_ci			__field(errseq_t, old)
928c2ecf20Sopenharmony_ci			__field(errseq_t, new)
938c2ecf20Sopenharmony_ci		),
948c2ecf20Sopenharmony_ci
958c2ecf20Sopenharmony_ci		TP_fast_assign(
968c2ecf20Sopenharmony_ci			__entry->file = file;
978c2ecf20Sopenharmony_ci			__entry->i_ino = file->f_mapping->host->i_ino;
988c2ecf20Sopenharmony_ci			if (file->f_mapping->host->i_sb)
998c2ecf20Sopenharmony_ci				__entry->s_dev =
1008c2ecf20Sopenharmony_ci					file->f_mapping->host->i_sb->s_dev;
1018c2ecf20Sopenharmony_ci			else
1028c2ecf20Sopenharmony_ci				__entry->s_dev =
1038c2ecf20Sopenharmony_ci					file->f_mapping->host->i_rdev;
1048c2ecf20Sopenharmony_ci			__entry->old = old;
1058c2ecf20Sopenharmony_ci			__entry->new = file->f_wb_err;
1068c2ecf20Sopenharmony_ci		),
1078c2ecf20Sopenharmony_ci
1088c2ecf20Sopenharmony_ci		TP_printk("file=%p dev=%d:%d ino=0x%lx old=0x%x new=0x%x",
1098c2ecf20Sopenharmony_ci			__entry->file, MAJOR(__entry->s_dev),
1108c2ecf20Sopenharmony_ci			MINOR(__entry->s_dev), __entry->i_ino, __entry->old,
1118c2ecf20Sopenharmony_ci			__entry->new)
1128c2ecf20Sopenharmony_ci);
1138c2ecf20Sopenharmony_ci#endif /* _TRACE_FILEMAP_H */
1148c2ecf20Sopenharmony_ci
1158c2ecf20Sopenharmony_ci/* This part must be outside protection */
1168c2ecf20Sopenharmony_ci#include <trace/define_trace.h>
117