#if !defined(_TRACE_ANDROID_FS_TEMPLATE_H) || defined(TRACE_HEADER_MULTI_READ)
#define _TRACE_ANDROID_FS_TEMPLATE_H

#include <linux/tracepoint.h>

DECLARE_EVENT_CLASS(android_fs_data_start_template,
	TP_PROTO(struct inode *inode, loff_t offset, int bytes,
		 pid_t pid, char *pathname, char *command),
	TP_ARGS(inode, offset, bytes, pid, pathname, command),
	TP_STRUCT__entry(
		__string(pathbuf, pathname)
		__field(loff_t,	offset)
		__field(int,	bytes)
		__field(loff_t,	i_size)
		__string(cmdline, command)
		__field(pid_t,	pid)
		__field(ino_t,	ino)
	),
	TP_fast_assign(
		{
			/*
			 * Replace the spaces in filenames and cmdlines
			 * because this screws up the tooling that parses
			 * the traces.
			 */
			__assign_str(pathbuf, pathname);
			(void)strreplace(__get_str(pathbuf), ' ', '_');
			__entry->offset		= offset;
			__entry->bytes		= bytes;
			__entry->i_size		= i_size_read(inode);
			__assign_str(cmdline, command);
			(void)strreplace(__get_str(cmdline), ' ', '_');
			__entry->pid		= pid;
			__entry->ino		= inode->i_ino;
		}
	),
	TP_printk("entry_name %s, offset %llu, bytes %d, cmdline %s,"
		  " pid %d, i_size %llu, ino %lu",
		  __get_str(pathbuf), __entry->offset, __entry->bytes,
		  __get_str(cmdline), __entry->pid, __entry->i_size,
		  (unsigned long) __entry->ino)
);

DECLARE_EVENT_CLASS(android_fs_data_end_template,
	TP_PROTO(struct inode *inode, loff_t offset, int bytes),
	TP_ARGS(inode, offset, bytes),
	TP_STRUCT__entry(
		__field(ino_t,	ino)
		__field(loff_t,	offset)
		__field(int,	bytes)
	),
	TP_fast_assign(
		{
			__entry->ino		= inode->i_ino;
			__entry->offset		= offset;
			__entry->bytes		= bytes;
		}
	),
	TP_printk("ino %lu, offset %llu, bytes %d",
		  (unsigned long) __entry->ino,
		  __entry->offset, __entry->bytes)
);

#endif /* _TRACE_ANDROID_FS_TEMPLATE_H */
