162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci
362306a36Sopenharmony_ci#undef TRACE_SYSTEM
462306a36Sopenharmony_ci#define TRACE_SYSTEM ext2
562306a36Sopenharmony_ci
662306a36Sopenharmony_ci#if !defined(_EXT2_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
762306a36Sopenharmony_ci#define _EXT2_TRACE_H
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#include <linux/tracepoint.h>
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ciDECLARE_EVENT_CLASS(ext2_dio_class,
1262306a36Sopenharmony_ci	TP_PROTO(struct kiocb *iocb, struct iov_iter *iter, ssize_t ret),
1362306a36Sopenharmony_ci	TP_ARGS(iocb, iter, ret),
1462306a36Sopenharmony_ci	TP_STRUCT__entry(
1562306a36Sopenharmony_ci		__field(dev_t,	dev)
1662306a36Sopenharmony_ci		__field(ino_t,	ino)
1762306a36Sopenharmony_ci		__field(loff_t, isize)
1862306a36Sopenharmony_ci		__field(loff_t, pos)
1962306a36Sopenharmony_ci		__field(size_t,	count)
2062306a36Sopenharmony_ci		__field(int,	ki_flags)
2162306a36Sopenharmony_ci		__field(bool,	aio)
2262306a36Sopenharmony_ci		__field(ssize_t, ret)
2362306a36Sopenharmony_ci	),
2462306a36Sopenharmony_ci	TP_fast_assign(
2562306a36Sopenharmony_ci		__entry->dev = file_inode(iocb->ki_filp)->i_sb->s_dev;
2662306a36Sopenharmony_ci		__entry->ino = file_inode(iocb->ki_filp)->i_ino;
2762306a36Sopenharmony_ci		__entry->isize = file_inode(iocb->ki_filp)->i_size;
2862306a36Sopenharmony_ci		__entry->pos = iocb->ki_pos;
2962306a36Sopenharmony_ci		__entry->count = iov_iter_count(iter);
3062306a36Sopenharmony_ci		__entry->ki_flags = iocb->ki_flags;
3162306a36Sopenharmony_ci		__entry->aio = !is_sync_kiocb(iocb);
3262306a36Sopenharmony_ci		__entry->ret = ret;
3362306a36Sopenharmony_ci	),
3462306a36Sopenharmony_ci	TP_printk("dev %d:%d ino 0x%lx isize 0x%llx pos 0x%llx len %zu flags %s aio %d ret %zd",
3562306a36Sopenharmony_ci		  MAJOR(__entry->dev), MINOR(__entry->dev),
3662306a36Sopenharmony_ci		  __entry->ino,
3762306a36Sopenharmony_ci		  __entry->isize,
3862306a36Sopenharmony_ci		  __entry->pos,
3962306a36Sopenharmony_ci		  __entry->count,
4062306a36Sopenharmony_ci		  __print_flags(__entry->ki_flags, "|", TRACE_IOCB_STRINGS),
4162306a36Sopenharmony_ci		  __entry->aio,
4262306a36Sopenharmony_ci		  __entry->ret)
4362306a36Sopenharmony_ci);
4462306a36Sopenharmony_ci
4562306a36Sopenharmony_ci#define DEFINE_DIO_RW_EVENT(name)					  \
4662306a36Sopenharmony_ciDEFINE_EVENT(ext2_dio_class, name,					  \
4762306a36Sopenharmony_ci	TP_PROTO(struct kiocb *iocb, struct iov_iter *iter, ssize_t ret), \
4862306a36Sopenharmony_ci	TP_ARGS(iocb, iter, ret))
4962306a36Sopenharmony_ciDEFINE_DIO_RW_EVENT(ext2_dio_write_begin);
5062306a36Sopenharmony_ciDEFINE_DIO_RW_EVENT(ext2_dio_write_end);
5162306a36Sopenharmony_ciDEFINE_DIO_RW_EVENT(ext2_dio_write_buff_end);
5262306a36Sopenharmony_ciDEFINE_DIO_RW_EVENT(ext2_dio_read_begin);
5362306a36Sopenharmony_ciDEFINE_DIO_RW_EVENT(ext2_dio_read_end);
5462306a36Sopenharmony_ci
5562306a36Sopenharmony_ciTRACE_EVENT(ext2_dio_write_endio,
5662306a36Sopenharmony_ci	TP_PROTO(struct kiocb *iocb, ssize_t size, int ret),
5762306a36Sopenharmony_ci	TP_ARGS(iocb, size, ret),
5862306a36Sopenharmony_ci	TP_STRUCT__entry(
5962306a36Sopenharmony_ci		__field(dev_t,	dev)
6062306a36Sopenharmony_ci		__field(ino_t,	ino)
6162306a36Sopenharmony_ci		__field(loff_t, isize)
6262306a36Sopenharmony_ci		__field(loff_t, pos)
6362306a36Sopenharmony_ci		__field(ssize_t, size)
6462306a36Sopenharmony_ci		__field(int,	ki_flags)
6562306a36Sopenharmony_ci		__field(bool,	aio)
6662306a36Sopenharmony_ci		__field(int,	ret)
6762306a36Sopenharmony_ci	),
6862306a36Sopenharmony_ci	TP_fast_assign(
6962306a36Sopenharmony_ci		__entry->dev = file_inode(iocb->ki_filp)->i_sb->s_dev;
7062306a36Sopenharmony_ci		__entry->ino = file_inode(iocb->ki_filp)->i_ino;
7162306a36Sopenharmony_ci		__entry->isize = file_inode(iocb->ki_filp)->i_size;
7262306a36Sopenharmony_ci		__entry->pos = iocb->ki_pos;
7362306a36Sopenharmony_ci		__entry->size = size;
7462306a36Sopenharmony_ci		__entry->ki_flags = iocb->ki_flags;
7562306a36Sopenharmony_ci		__entry->aio = !is_sync_kiocb(iocb);
7662306a36Sopenharmony_ci		__entry->ret = ret;
7762306a36Sopenharmony_ci	),
7862306a36Sopenharmony_ci	TP_printk("dev %d:%d ino 0x%lx isize 0x%llx pos 0x%llx len %zd flags %s aio %d ret %d",
7962306a36Sopenharmony_ci		  MAJOR(__entry->dev), MINOR(__entry->dev),
8062306a36Sopenharmony_ci		  __entry->ino,
8162306a36Sopenharmony_ci		  __entry->isize,
8262306a36Sopenharmony_ci		  __entry->pos,
8362306a36Sopenharmony_ci		  __entry->size,
8462306a36Sopenharmony_ci		  __print_flags(__entry->ki_flags, "|", TRACE_IOCB_STRINGS),
8562306a36Sopenharmony_ci		  __entry->aio,
8662306a36Sopenharmony_ci		  __entry->ret)
8762306a36Sopenharmony_ci);
8862306a36Sopenharmony_ci
8962306a36Sopenharmony_ci#endif /* _EXT2_TRACE_H */
9062306a36Sopenharmony_ci
9162306a36Sopenharmony_ci#undef TRACE_INCLUDE_PATH
9262306a36Sopenharmony_ci#define TRACE_INCLUDE_PATH .
9362306a36Sopenharmony_ci#define TRACE_INCLUDE_FILE trace
9462306a36Sopenharmony_ci#include <trace/define_trace.h>
95