177443f61SDavid Howells /* SPDX-License-Identifier: GPL-2.0-or-later */
277443f61SDavid Howells /* CacheFiles tracepoints
377443f61SDavid Howells  *
477443f61SDavid Howells  * Copyright (C) 2021 Red Hat, Inc. All Rights Reserved.
577443f61SDavid Howells  * Written by David Howells (dhowells@redhat.com)
677443f61SDavid Howells  */
777443f61SDavid Howells #undef TRACE_SYSTEM
877443f61SDavid Howells #define TRACE_SYSTEM cachefiles
977443f61SDavid Howells 
1077443f61SDavid Howells #if !defined(_TRACE_CACHEFILES_H) || defined(TRACE_HEADER_MULTI_READ)
1177443f61SDavid Howells #define _TRACE_CACHEFILES_H
1277443f61SDavid Howells 
1377443f61SDavid Howells #include <linux/tracepoint.h>
1477443f61SDavid Howells 
1577443f61SDavid Howells /*
1677443f61SDavid Howells  * Define enums for tracing information.
1777443f61SDavid Howells  */
1877443f61SDavid Howells #ifndef __CACHEFILES_DECLARE_TRACE_ENUMS_ONCE_ONLY
1977443f61SDavid Howells #define __CACHEFILES_DECLARE_TRACE_ENUMS_ONCE_ONLY
2077443f61SDavid Howells 
21df98e87fSDavid Howells enum cachefiles_obj_ref_trace {
22df98e87fSDavid Howells 	cachefiles_obj_get_ioreq,
23df98e87fSDavid Howells 	cachefiles_obj_new,
24df98e87fSDavid Howells 	cachefiles_obj_put_alloc_fail,
25df98e87fSDavid Howells 	cachefiles_obj_put_detach,
26df98e87fSDavid Howells 	cachefiles_obj_put_ioreq,
27df98e87fSDavid Howells 	cachefiles_obj_see_clean_commit,
28df98e87fSDavid Howells 	cachefiles_obj_see_clean_delete,
29df98e87fSDavid Howells 	cachefiles_obj_see_clean_drop_tmp,
30df98e87fSDavid Howells 	cachefiles_obj_see_lookup_cookie,
31df98e87fSDavid Howells 	cachefiles_obj_see_lookup_failed,
32df98e87fSDavid Howells 	cachefiles_obj_see_withdraw_cookie,
33df98e87fSDavid Howells 	cachefiles_obj_see_withdrawal,
34c8383054SJeffle Xu 	cachefiles_obj_get_ondemand_fd,
35c8383054SJeffle Xu 	cachefiles_obj_put_ondemand_fd,
363958679cSBaokun Li 	cachefiles_obj_get_read_req,
373958679cSBaokun Li 	cachefiles_obj_put_read_req,
38df98e87fSDavid Howells };
39df98e87fSDavid Howells 
4013871badSDavid Howells enum fscache_why_object_killed {
4113871badSDavid Howells 	FSCACHE_OBJECT_IS_STALE,
4213871badSDavid Howells 	FSCACHE_OBJECT_IS_WEIRD,
4313871badSDavid Howells 	FSCACHE_OBJECT_INVALIDATED,
4413871badSDavid Howells 	FSCACHE_OBJECT_NO_SPACE,
4513871badSDavid Howells 	FSCACHE_OBJECT_WAS_RETIRED,
4613871badSDavid Howells 	FSCACHE_OBJECT_WAS_CULLED,
4732e15003SDavid Howells 	FSCACHE_VOLUME_IS_WEIRD,
4813871badSDavid Howells };
4913871badSDavid Howells 
5072b95785SDavid Howells enum cachefiles_coherency_trace {
5172b95785SDavid Howells 	cachefiles_coherency_check_aux,
5272b95785SDavid Howells 	cachefiles_coherency_check_content,
5372b95785SDavid Howells 	cachefiles_coherency_check_dirty,
5472b95785SDavid Howells 	cachefiles_coherency_check_len,
5572b95785SDavid Howells 	cachefiles_coherency_check_objsize,
5672b95785SDavid Howells 	cachefiles_coherency_check_ok,
5772b95785SDavid Howells 	cachefiles_coherency_check_type,
5872b95785SDavid Howells 	cachefiles_coherency_check_xattr,
5972b95785SDavid Howells 	cachefiles_coherency_set_fail,
6072b95785SDavid Howells 	cachefiles_coherency_set_ok,
6132e15003SDavid Howells 	cachefiles_coherency_vol_check_cmp,
6232e15003SDavid Howells 	cachefiles_coherency_vol_check_ok,
63413a4a6bSDavid Howells 	cachefiles_coherency_vol_check_resv,
6432e15003SDavid Howells 	cachefiles_coherency_vol_check_xattr,
6532e15003SDavid Howells 	cachefiles_coherency_vol_set_fail,
6632e15003SDavid Howells 	cachefiles_coherency_vol_set_ok,
6772b95785SDavid Howells };
6872b95785SDavid Howells 
6913871badSDavid Howells enum cachefiles_trunc_trace {
7013871badSDavid Howells 	cachefiles_trunc_dio_adjust,
7113871badSDavid Howells 	cachefiles_trunc_expand_tmpfile,
7213871badSDavid Howells 	cachefiles_trunc_shrink,
7313871badSDavid Howells };
7413871badSDavid Howells 
75047487c9SDavid Howells enum cachefiles_prepare_read_trace {
76047487c9SDavid Howells 	cachefiles_trace_read_after_eof,
77047487c9SDavid Howells 	cachefiles_trace_read_found_hole,
78047487c9SDavid Howells 	cachefiles_trace_read_found_part,
79047487c9SDavid Howells 	cachefiles_trace_read_have_data,
80047487c9SDavid Howells 	cachefiles_trace_read_no_data,
81047487c9SDavid Howells 	cachefiles_trace_read_no_file,
82047487c9SDavid Howells 	cachefiles_trace_read_seek_error,
83047487c9SDavid Howells 	cachefiles_trace_read_seek_nxio,
84047487c9SDavid Howells };
85047487c9SDavid Howells 
86ecf5a6ceSDavid Howells enum cachefiles_error_trace {
87ecf5a6ceSDavid Howells 	cachefiles_trace_fallocate_error,
88ecf5a6ceSDavid Howells 	cachefiles_trace_getxattr_error,
89ecf5a6ceSDavid Howells 	cachefiles_trace_link_error,
90ecf5a6ceSDavid Howells 	cachefiles_trace_lookup_error,
91ecf5a6ceSDavid Howells 	cachefiles_trace_mkdir_error,
92ecf5a6ceSDavid Howells 	cachefiles_trace_notify_change_error,
93ecf5a6ceSDavid Howells 	cachefiles_trace_open_error,
94ecf5a6ceSDavid Howells 	cachefiles_trace_read_error,
95ecf5a6ceSDavid Howells 	cachefiles_trace_remxattr_error,
96ecf5a6ceSDavid Howells 	cachefiles_trace_rename_error,
97ecf5a6ceSDavid Howells 	cachefiles_trace_seek_error,
98ecf5a6ceSDavid Howells 	cachefiles_trace_setxattr_error,
99ecf5a6ceSDavid Howells 	cachefiles_trace_statfs_error,
100ecf5a6ceSDavid Howells 	cachefiles_trace_tmpfile_error,
101ecf5a6ceSDavid Howells 	cachefiles_trace_trunc_error,
102ecf5a6ceSDavid Howells 	cachefiles_trace_unlink_error,
103ecf5a6ceSDavid Howells 	cachefiles_trace_write_error,
104ecf5a6ceSDavid Howells };
105ecf5a6ceSDavid Howells 
10677443f61SDavid Howells #endif
10777443f61SDavid Howells 
10877443f61SDavid Howells /*
10977443f61SDavid Howells  * Define enum -> string mappings for display.
11077443f61SDavid Howells  */
11113871badSDavid Howells #define cachefiles_obj_kill_traces				\
11213871badSDavid Howells 	EM(FSCACHE_OBJECT_IS_STALE,	"stale")		\
11313871badSDavid Howells 	EM(FSCACHE_OBJECT_IS_WEIRD,	"weird")		\
11413871badSDavid Howells 	EM(FSCACHE_OBJECT_INVALIDATED,	"inval")		\
11513871badSDavid Howells 	EM(FSCACHE_OBJECT_NO_SPACE,	"no_space")		\
11613871badSDavid Howells 	EM(FSCACHE_OBJECT_WAS_RETIRED,	"was_retired")		\
11732e15003SDavid Howells 	EM(FSCACHE_OBJECT_WAS_CULLED,	"was_culled")		\
11832e15003SDavid Howells 	E_(FSCACHE_VOLUME_IS_WEIRD,	"volume_weird")
11913871badSDavid Howells 
120df98e87fSDavid Howells #define cachefiles_obj_ref_traces					\
121df98e87fSDavid Howells 	EM(cachefiles_obj_get_ioreq,		"GET ioreq")		\
122df98e87fSDavid Howells 	EM(cachefiles_obj_new,			"NEW obj")		\
123df98e87fSDavid Howells 	EM(cachefiles_obj_put_alloc_fail,	"PUT alloc_fail")	\
124df98e87fSDavid Howells 	EM(cachefiles_obj_put_detach,		"PUT detach")		\
125df98e87fSDavid Howells 	EM(cachefiles_obj_put_ioreq,		"PUT ioreq")		\
126df98e87fSDavid Howells 	EM(cachefiles_obj_see_clean_commit,	"SEE clean_commit")	\
127df98e87fSDavid Howells 	EM(cachefiles_obj_see_clean_delete,	"SEE clean_delete")	\
128df98e87fSDavid Howells 	EM(cachefiles_obj_see_clean_drop_tmp,	"SEE clean_drop_tmp")	\
129df98e87fSDavid Howells 	EM(cachefiles_obj_see_lookup_cookie,	"SEE lookup_cookie")	\
130df98e87fSDavid Howells 	EM(cachefiles_obj_see_lookup_failed,	"SEE lookup_failed")	\
131df98e87fSDavid Howells 	EM(cachefiles_obj_see_withdraw_cookie,	"SEE withdraw_cookie")	\
13219133f53SBaokun Li 	EM(cachefiles_obj_see_withdrawal,	"SEE withdrawal")	\
13319133f53SBaokun Li 	EM(cachefiles_obj_get_ondemand_fd,      "GET ondemand_fd")	\
1343958679cSBaokun Li 	EM(cachefiles_obj_put_ondemand_fd,      "PUT ondemand_fd")	\
1353958679cSBaokun Li 	EM(cachefiles_obj_get_read_req,		"GET read_req")		\
1363958679cSBaokun Li 	E_(cachefiles_obj_put_read_req,		"PUT read_req")
137df98e87fSDavid Howells 
13872b95785SDavid Howells #define cachefiles_coherency_traces					\
13972b95785SDavid Howells 	EM(cachefiles_coherency_check_aux,	"BAD aux ")		\
14072b95785SDavid Howells 	EM(cachefiles_coherency_check_content,	"BAD cont")		\
14172b95785SDavid Howells 	EM(cachefiles_coherency_check_dirty,	"BAD dirt")		\
14272b95785SDavid Howells 	EM(cachefiles_coherency_check_len,	"BAD len ")		\
14372b95785SDavid Howells 	EM(cachefiles_coherency_check_objsize,	"BAD osiz")		\
14472b95785SDavid Howells 	EM(cachefiles_coherency_check_ok,	"OK      ")		\
14572b95785SDavid Howells 	EM(cachefiles_coherency_check_type,	"BAD type")		\
14672b95785SDavid Howells 	EM(cachefiles_coherency_check_xattr,	"BAD xatt")		\
14772b95785SDavid Howells 	EM(cachefiles_coherency_set_fail,	"SET fail")		\
14832e15003SDavid Howells 	EM(cachefiles_coherency_set_ok,		"SET ok  ")		\
14932e15003SDavid Howells 	EM(cachefiles_coherency_vol_check_cmp,	"VOL BAD cmp ")		\
15032e15003SDavid Howells 	EM(cachefiles_coherency_vol_check_ok,	"VOL OK      ")		\
151413a4a6bSDavid Howells 	EM(cachefiles_coherency_vol_check_resv,	"VOL BAD resv")	\
15232e15003SDavid Howells 	EM(cachefiles_coherency_vol_check_xattr,"VOL BAD xatt")		\
15332e15003SDavid Howells 	EM(cachefiles_coherency_vol_set_fail,	"VOL SET fail")		\
15432e15003SDavid Howells 	E_(cachefiles_coherency_vol_set_ok,	"VOL SET ok  ")
15572b95785SDavid Howells 
15613871badSDavid Howells #define cachefiles_trunc_traces						\
15713871badSDavid Howells 	EM(cachefiles_trunc_dio_adjust,		"DIOADJ")		\
15813871badSDavid Howells 	EM(cachefiles_trunc_expand_tmpfile,	"EXPTMP")		\
15913871badSDavid Howells 	E_(cachefiles_trunc_shrink,		"SHRINK")
16013871badSDavid Howells 
161047487c9SDavid Howells #define cachefiles_prepare_read_traces					\
162047487c9SDavid Howells 	EM(cachefiles_trace_read_after_eof,	"after-eof ")		\
163047487c9SDavid Howells 	EM(cachefiles_trace_read_found_hole,	"found-hole")		\
164047487c9SDavid Howells 	EM(cachefiles_trace_read_found_part,	"found-part")		\
165047487c9SDavid Howells 	EM(cachefiles_trace_read_have_data,	"have-data ")		\
166047487c9SDavid Howells 	EM(cachefiles_trace_read_no_data,	"no-data   ")		\
167047487c9SDavid Howells 	EM(cachefiles_trace_read_no_file,	"no-file   ")		\
168047487c9SDavid Howells 	EM(cachefiles_trace_read_seek_error,	"seek-error")		\
169047487c9SDavid Howells 	E_(cachefiles_trace_read_seek_nxio,	"seek-enxio")
170047487c9SDavid Howells 
171ecf5a6ceSDavid Howells #define cachefiles_error_traces						\
172ecf5a6ceSDavid Howells 	EM(cachefiles_trace_fallocate_error,	"fallocate")		\
173ecf5a6ceSDavid Howells 	EM(cachefiles_trace_getxattr_error,	"getxattr")		\
174ecf5a6ceSDavid Howells 	EM(cachefiles_trace_link_error,		"link")			\
175ecf5a6ceSDavid Howells 	EM(cachefiles_trace_lookup_error,	"lookup")		\
176ecf5a6ceSDavid Howells 	EM(cachefiles_trace_mkdir_error,	"mkdir")		\
177ecf5a6ceSDavid Howells 	EM(cachefiles_trace_notify_change_error, "notify_change")	\
178ecf5a6ceSDavid Howells 	EM(cachefiles_trace_open_error,		"open")			\
179ecf5a6ceSDavid Howells 	EM(cachefiles_trace_read_error,		"read")			\
180ecf5a6ceSDavid Howells 	EM(cachefiles_trace_remxattr_error,	"remxattr")		\
181ecf5a6ceSDavid Howells 	EM(cachefiles_trace_rename_error,	"rename")		\
182ecf5a6ceSDavid Howells 	EM(cachefiles_trace_seek_error,		"seek")			\
183ecf5a6ceSDavid Howells 	EM(cachefiles_trace_setxattr_error,	"setxattr")		\
184ecf5a6ceSDavid Howells 	EM(cachefiles_trace_statfs_error,	"statfs")		\
185ecf5a6ceSDavid Howells 	EM(cachefiles_trace_tmpfile_error,	"tmpfile")		\
186ecf5a6ceSDavid Howells 	EM(cachefiles_trace_trunc_error,	"trunc")		\
187ecf5a6ceSDavid Howells 	EM(cachefiles_trace_unlink_error,	"unlink")		\
188ecf5a6ceSDavid Howells 	E_(cachefiles_trace_write_error,	"write")
18977443f61SDavid Howells 
19077443f61SDavid Howells 
19177443f61SDavid Howells /*
19277443f61SDavid Howells  * Export enum symbols via userspace.
19377443f61SDavid Howells  */
19477443f61SDavid Howells #undef EM
19577443f61SDavid Howells #undef E_
19677443f61SDavid Howells #define EM(a, b) TRACE_DEFINE_ENUM(a);
19777443f61SDavid Howells #define E_(a, b) TRACE_DEFINE_ENUM(a);
19877443f61SDavid Howells 
19913871badSDavid Howells cachefiles_obj_kill_traces;
200df98e87fSDavid Howells cachefiles_obj_ref_traces;
20172b95785SDavid Howells cachefiles_coherency_traces;
20213871badSDavid Howells cachefiles_trunc_traces;
203047487c9SDavid Howells cachefiles_prepare_read_traces;
204ecf5a6ceSDavid Howells cachefiles_error_traces;
205ecf5a6ceSDavid Howells 
20677443f61SDavid Howells /*
20777443f61SDavid Howells  * Now redefine the EM() and E_() macros to map the enums to the strings that
20877443f61SDavid Howells  * will be printed in the output.
20977443f61SDavid Howells  */
21077443f61SDavid Howells #undef EM
21177443f61SDavid Howells #undef E_
21277443f61SDavid Howells #define EM(a, b)	{ a, b },
21377443f61SDavid Howells #define E_(a, b)	{ a, b }
21477443f61SDavid Howells 
21577443f61SDavid Howells 
216df98e87fSDavid Howells TRACE_EVENT(cachefiles_ref,
217df98e87fSDavid Howells 	    TP_PROTO(unsigned int object_debug_id,
218df98e87fSDavid Howells 		     unsigned int cookie_debug_id,
219df98e87fSDavid Howells 		     int usage,
220df98e87fSDavid Howells 		     enum cachefiles_obj_ref_trace why),
221df98e87fSDavid Howells 
222df98e87fSDavid Howells 	    TP_ARGS(object_debug_id, cookie_debug_id, usage, why),
223df98e87fSDavid Howells 
224df98e87fSDavid Howells 	    /* Note that obj may be NULL */
225df98e87fSDavid Howells 	    TP_STRUCT__entry(
226df98e87fSDavid Howells 		    __field(unsigned int,			obj		)
227df98e87fSDavid Howells 		    __field(unsigned int,			cookie		)
228df98e87fSDavid Howells 		    __field(enum cachefiles_obj_ref_trace,	why		)
229df98e87fSDavid Howells 		    __field(int,				usage		)
230df98e87fSDavid Howells 			     ),
231df98e87fSDavid Howells 
232df98e87fSDavid Howells 	    TP_fast_assign(
233df98e87fSDavid Howells 		    __entry->obj	= object_debug_id;
234df98e87fSDavid Howells 		    __entry->cookie	= cookie_debug_id;
235df98e87fSDavid Howells 		    __entry->usage	= usage;
236df98e87fSDavid Howells 		    __entry->why	= why;
237df98e87fSDavid Howells 			   ),
238df98e87fSDavid Howells 
239df98e87fSDavid Howells 	    TP_printk("c=%08x o=%08x u=%d %s",
240df98e87fSDavid Howells 		      __entry->cookie, __entry->obj, __entry->usage,
241df98e87fSDavid Howells 		      __print_symbolic(__entry->why, cachefiles_obj_ref_traces))
242df98e87fSDavid Howells 	    );
243df98e87fSDavid Howells 
24413871badSDavid Howells TRACE_EVENT(cachefiles_lookup,
24513871badSDavid Howells 	    TP_PROTO(struct cachefiles_object *obj,
2468c39b8bcSDavid Howells 		     struct dentry *dir,
24713871badSDavid Howells 		     struct dentry *de),
24813871badSDavid Howells 
2498c39b8bcSDavid Howells 	    TP_ARGS(obj, dir, de),
25013871badSDavid Howells 
25113871badSDavid Howells 	    TP_STRUCT__entry(
25213871badSDavid Howells 		    __field(unsigned int,		obj	)
25313871badSDavid Howells 		    __field(short,			error	)
2548c39b8bcSDavid Howells 		    __field(unsigned long,		dino	)
25513871badSDavid Howells 		    __field(unsigned long,		ino	)
25613871badSDavid Howells 			     ),
25713871badSDavid Howells 
25813871badSDavid Howells 	    TP_fast_assign(
2598c39b8bcSDavid Howells 		    __entry->obj	= obj ? obj->debug_id : 0;
2608c39b8bcSDavid Howells 		    __entry->dino	= d_backing_inode(dir)->i_ino;
26113871badSDavid Howells 		    __entry->ino	= (!IS_ERR(de) && d_backing_inode(de) ?
26213871badSDavid Howells 					   d_backing_inode(de)->i_ino : 0);
26313871badSDavid Howells 		    __entry->error	= IS_ERR(de) ? PTR_ERR(de) : 0;
26413871badSDavid Howells 			   ),
26513871badSDavid Howells 
2668c39b8bcSDavid Howells 	    TP_printk("o=%08x dB=%lx B=%lx e=%d",
2678c39b8bcSDavid Howells 		      __entry->obj, __entry->dino, __entry->ino, __entry->error)
2688c39b8bcSDavid Howells 	    );
2698c39b8bcSDavid Howells 
2708c39b8bcSDavid Howells TRACE_EVENT(cachefiles_mkdir,
2718c39b8bcSDavid Howells 	    TP_PROTO(struct dentry *dir, struct dentry *subdir),
2728c39b8bcSDavid Howells 
2738c39b8bcSDavid Howells 	    TP_ARGS(dir, subdir),
2748c39b8bcSDavid Howells 
2758c39b8bcSDavid Howells 	    TP_STRUCT__entry(
2768c39b8bcSDavid Howells 		    __field(unsigned int,			dir	)
2778c39b8bcSDavid Howells 		    __field(unsigned int,			subdir	)
2788c39b8bcSDavid Howells 			     ),
2798c39b8bcSDavid Howells 
2808c39b8bcSDavid Howells 	    TP_fast_assign(
2818c39b8bcSDavid Howells 		    __entry->dir	= d_backing_inode(dir)->i_ino;
2828c39b8bcSDavid Howells 		    __entry->subdir	= d_backing_inode(subdir)->i_ino;
2838c39b8bcSDavid Howells 			   ),
2848c39b8bcSDavid Howells 
2858c39b8bcSDavid Howells 	    TP_printk("dB=%x sB=%x",
2868c39b8bcSDavid Howells 		      __entry->dir,
2878c39b8bcSDavid Howells 		      __entry->subdir)
28813871badSDavid Howells 	    );
28913871badSDavid Howells 
29013871badSDavid Howells TRACE_EVENT(cachefiles_tmpfile,
29113871badSDavid Howells 	    TP_PROTO(struct cachefiles_object *obj, struct inode *backer),
29213871badSDavid Howells 
29313871badSDavid Howells 	    TP_ARGS(obj, backer),
29413871badSDavid Howells 
29513871badSDavid Howells 	    TP_STRUCT__entry(
29613871badSDavid Howells 		    __field(unsigned int,			obj	)
29713871badSDavid Howells 		    __field(unsigned int,			backer	)
29813871badSDavid Howells 			     ),
29913871badSDavid Howells 
30013871badSDavid Howells 	    TP_fast_assign(
30113871badSDavid Howells 		    __entry->obj	= obj->debug_id;
30213871badSDavid Howells 		    __entry->backer	= backer->i_ino;
30313871badSDavid Howells 			   ),
30413871badSDavid Howells 
3058c39b8bcSDavid Howells 	    TP_printk("o=%08x B=%x",
30613871badSDavid Howells 		      __entry->obj,
30713871badSDavid Howells 		      __entry->backer)
30813871badSDavid Howells 	    );
30913871badSDavid Howells 
31013871badSDavid Howells TRACE_EVENT(cachefiles_link,
31113871badSDavid Howells 	    TP_PROTO(struct cachefiles_object *obj, struct inode *backer),
31213871badSDavid Howells 
31313871badSDavid Howells 	    TP_ARGS(obj, backer),
31413871badSDavid Howells 
31513871badSDavid Howells 	    TP_STRUCT__entry(
31613871badSDavid Howells 		    __field(unsigned int,			obj	)
31713871badSDavid Howells 		    __field(unsigned int,			backer	)
31813871badSDavid Howells 			     ),
31913871badSDavid Howells 
32013871badSDavid Howells 	    TP_fast_assign(
32113871badSDavid Howells 		    __entry->obj	= obj->debug_id;
32213871badSDavid Howells 		    __entry->backer	= backer->i_ino;
32313871badSDavid Howells 			   ),
32413871badSDavid Howells 
3258c39b8bcSDavid Howells 	    TP_printk("o=%08x B=%x",
32613871badSDavid Howells 		      __entry->obj,
32713871badSDavid Howells 		      __entry->backer)
32813871badSDavid Howells 	    );
32913871badSDavid Howells 
33013871badSDavid Howells TRACE_EVENT(cachefiles_unlink,
33113871badSDavid Howells 	    TP_PROTO(struct cachefiles_object *obj,
3328c39b8bcSDavid Howells 		     ino_t ino,
33313871badSDavid Howells 		     enum fscache_why_object_killed why),
33413871badSDavid Howells 
3358c39b8bcSDavid Howells 	    TP_ARGS(obj, ino, why),
33613871badSDavid Howells 
33713871badSDavid Howells 	    /* Note that obj may be NULL */
33813871badSDavid Howells 	    TP_STRUCT__entry(
33913871badSDavid Howells 		    __field(unsigned int,		obj		)
3408c39b8bcSDavid Howells 		    __field(unsigned int,		ino		)
34113871badSDavid Howells 		    __field(enum fscache_why_object_killed, why		)
34213871badSDavid Howells 			     ),
34313871badSDavid Howells 
34413871badSDavid Howells 	    TP_fast_assign(
34513871badSDavid Howells 		    __entry->obj	= obj ? obj->debug_id : UINT_MAX;
3468c39b8bcSDavid Howells 		    __entry->ino	= ino;
34713871badSDavid Howells 		    __entry->why	= why;
34813871badSDavid Howells 			   ),
34913871badSDavid Howells 
3508c39b8bcSDavid Howells 	    TP_printk("o=%08x B=%x w=%s",
3518c39b8bcSDavid Howells 		      __entry->obj, __entry->ino,
35213871badSDavid Howells 		      __print_symbolic(__entry->why, cachefiles_obj_kill_traces))
35313871badSDavid Howells 	    );
35413871badSDavid Howells 
35513871badSDavid Howells TRACE_EVENT(cachefiles_rename,
35613871badSDavid Howells 	    TP_PROTO(struct cachefiles_object *obj,
3578c39b8bcSDavid Howells 		     ino_t ino,
35813871badSDavid Howells 		     enum fscache_why_object_killed why),
35913871badSDavid Howells 
3608c39b8bcSDavid Howells 	    TP_ARGS(obj, ino, why),
36113871badSDavid Howells 
36213871badSDavid Howells 	    /* Note that obj may be NULL */
36313871badSDavid Howells 	    TP_STRUCT__entry(
36413871badSDavid Howells 		    __field(unsigned int,		obj		)
3658c39b8bcSDavid Howells 		    __field(unsigned int,		ino		)
36613871badSDavid Howells 		    __field(enum fscache_why_object_killed, why		)
36713871badSDavid Howells 			     ),
36813871badSDavid Howells 
36913871badSDavid Howells 	    TP_fast_assign(
37013871badSDavid Howells 		    __entry->obj	= obj ? obj->debug_id : UINT_MAX;
3718c39b8bcSDavid Howells 		    __entry->ino	= ino;
37213871badSDavid Howells 		    __entry->why	= why;
37313871badSDavid Howells 			   ),
37413871badSDavid Howells 
3758c39b8bcSDavid Howells 	    TP_printk("o=%08x B=%x w=%s",
3768c39b8bcSDavid Howells 		      __entry->obj, __entry->ino,
37713871badSDavid Howells 		      __print_symbolic(__entry->why, cachefiles_obj_kill_traces))
37813871badSDavid Howells 	    );
37913871badSDavid Howells 
38072b95785SDavid Howells TRACE_EVENT(cachefiles_coherency,
38172b95785SDavid Howells 	    TP_PROTO(struct cachefiles_object *obj,
38272b95785SDavid Howells 		     ino_t ino,
38372b95785SDavid Howells 		     enum cachefiles_content content,
38472b95785SDavid Howells 		     enum cachefiles_coherency_trace why),
38572b95785SDavid Howells 
38672b95785SDavid Howells 	    TP_ARGS(obj, ino, content, why),
38772b95785SDavid Howells 
38872b95785SDavid Howells 	    /* Note that obj may be NULL */
38972b95785SDavid Howells 	    TP_STRUCT__entry(
39072b95785SDavid Howells 		    __field(unsigned int,			obj	)
39172b95785SDavid Howells 		    __field(enum cachefiles_coherency_trace,	why	)
39272b95785SDavid Howells 		    __field(enum cachefiles_content,		content	)
39372b95785SDavid Howells 		    __field(u64,				ino	)
39472b95785SDavid Howells 			     ),
39572b95785SDavid Howells 
39672b95785SDavid Howells 	    TP_fast_assign(
39772b95785SDavid Howells 		    __entry->obj	= obj->debug_id;
39872b95785SDavid Howells 		    __entry->why	= why;
39972b95785SDavid Howells 		    __entry->content	= content;
40072b95785SDavid Howells 		    __entry->ino	= ino;
40172b95785SDavid Howells 			   ),
40272b95785SDavid Howells 
4038c39b8bcSDavid Howells 	    TP_printk("o=%08x %s B=%llx c=%u",
40472b95785SDavid Howells 		      __entry->obj,
40572b95785SDavid Howells 		      __print_symbolic(__entry->why, cachefiles_coherency_traces),
40672b95785SDavid Howells 		      __entry->ino,
40772b95785SDavid Howells 		      __entry->content)
40872b95785SDavid Howells 	    );
40972b95785SDavid Howells 
41032e15003SDavid Howells TRACE_EVENT(cachefiles_vol_coherency,
41132e15003SDavid Howells 	    TP_PROTO(struct cachefiles_volume *volume,
41232e15003SDavid Howells 		     ino_t ino,
41332e15003SDavid Howells 		     enum cachefiles_coherency_trace why),
41432e15003SDavid Howells 
41532e15003SDavid Howells 	    TP_ARGS(volume, ino, why),
41632e15003SDavid Howells 
41732e15003SDavid Howells 	    /* Note that obj may be NULL */
41832e15003SDavid Howells 	    TP_STRUCT__entry(
41932e15003SDavid Howells 		    __field(unsigned int,			vol	)
42032e15003SDavid Howells 		    __field(enum cachefiles_coherency_trace,	why	)
42132e15003SDavid Howells 		    __field(u64,				ino	)
42232e15003SDavid Howells 			     ),
42332e15003SDavid Howells 
42432e15003SDavid Howells 	    TP_fast_assign(
42532e15003SDavid Howells 		    __entry->vol	= volume->vcookie->debug_id;
42632e15003SDavid Howells 		    __entry->why	= why;
42732e15003SDavid Howells 		    __entry->ino	= ino;
42832e15003SDavid Howells 			   ),
42932e15003SDavid Howells 
4308c39b8bcSDavid Howells 	    TP_printk("V=%08x %s B=%llx",
43132e15003SDavid Howells 		      __entry->vol,
43232e15003SDavid Howells 		      __print_symbolic(__entry->why, cachefiles_coherency_traces),
43332e15003SDavid Howells 		      __entry->ino)
43432e15003SDavid Howells 	    );
43532e15003SDavid Howells 
436047487c9SDavid Howells TRACE_EVENT(cachefiles_prep_read,
43786692475SJingbo Xu 	    TP_PROTO(struct cachefiles_object *obj,
43886692475SJingbo Xu 		     loff_t start,
43986692475SJingbo Xu 		     size_t len,
44086692475SJingbo Xu 		     unsigned short flags,
4416a19114bSDavid Howells 		     enum netfs_io_source source,
442047487c9SDavid Howells 		     enum cachefiles_prepare_read_trace why,
44386692475SJingbo Xu 		     ino_t cache_inode, ino_t netfs_inode),
444047487c9SDavid Howells 
44586692475SJingbo Xu 	    TP_ARGS(obj, start, len, flags, source, why, cache_inode, netfs_inode),
446047487c9SDavid Howells 
447047487c9SDavid Howells 	    TP_STRUCT__entry(
44886692475SJingbo Xu 		    __field(unsigned int,		obj		)
449047487c9SDavid Howells 		    __field(unsigned short,		flags		)
4506a19114bSDavid Howells 		    __field(enum netfs_io_source,	source		)
451047487c9SDavid Howells 		    __field(enum cachefiles_prepare_read_trace,	why	)
452047487c9SDavid Howells 		    __field(size_t,			len		)
453047487c9SDavid Howells 		    __field(loff_t,			start		)
454047487c9SDavid Howells 		    __field(unsigned int,		netfs_inode	)
455047487c9SDavid Howells 		    __field(unsigned int,		cache_inode	)
456047487c9SDavid Howells 			     ),
457047487c9SDavid Howells 
458047487c9SDavid Howells 	    TP_fast_assign(
45986692475SJingbo Xu 		    __entry->obj	= obj ? obj->debug_id : 0;
46086692475SJingbo Xu 		    __entry->flags	= flags;
461047487c9SDavid Howells 		    __entry->source	= source;
462047487c9SDavid Howells 		    __entry->why	= why;
46386692475SJingbo Xu 		    __entry->len	= len;
46486692475SJingbo Xu 		    __entry->start	= start;
46586692475SJingbo Xu 		    __entry->netfs_inode = netfs_inode;
466047487c9SDavid Howells 		    __entry->cache_inode = cache_inode;
467047487c9SDavid Howells 			   ),
468047487c9SDavid Howells 
46986692475SJingbo Xu 	    TP_printk("o=%08x %s %s f=%02x s=%llx %zx ni=%x B=%x",
47086692475SJingbo Xu 		      __entry->obj,
471047487c9SDavid Howells 		      __print_symbolic(__entry->source, netfs_sreq_sources),
472047487c9SDavid Howells 		      __print_symbolic(__entry->why, cachefiles_prepare_read_traces),
473047487c9SDavid Howells 		      __entry->flags,
474047487c9SDavid Howells 		      __entry->start, __entry->len,
475047487c9SDavid Howells 		      __entry->netfs_inode, __entry->cache_inode)
476047487c9SDavid Howells 	    );
477047487c9SDavid Howells 
478047487c9SDavid Howells TRACE_EVENT(cachefiles_read,
479047487c9SDavid Howells 	    TP_PROTO(struct cachefiles_object *obj,
480047487c9SDavid Howells 		     struct inode *backer,
481047487c9SDavid Howells 		     loff_t start,
482047487c9SDavid Howells 		     size_t len),
483047487c9SDavid Howells 
484047487c9SDavid Howells 	    TP_ARGS(obj, backer, start, len),
485047487c9SDavid Howells 
486047487c9SDavid Howells 	    TP_STRUCT__entry(
487047487c9SDavid Howells 		    __field(unsigned int,			obj	)
488047487c9SDavid Howells 		    __field(unsigned int,			backer	)
489047487c9SDavid Howells 		    __field(size_t,				len	)
490047487c9SDavid Howells 		    __field(loff_t,				start	)
491047487c9SDavid Howells 			     ),
492047487c9SDavid Howells 
493047487c9SDavid Howells 	    TP_fast_assign(
494047487c9SDavid Howells 		    __entry->obj	= obj->debug_id;
495047487c9SDavid Howells 		    __entry->backer	= backer->i_ino;
496047487c9SDavid Howells 		    __entry->start	= start;
497047487c9SDavid Howells 		    __entry->len	= len;
498047487c9SDavid Howells 			   ),
499047487c9SDavid Howells 
5008c39b8bcSDavid Howells 	    TP_printk("o=%08x B=%x s=%llx l=%zx",
501047487c9SDavid Howells 		      __entry->obj,
502047487c9SDavid Howells 		      __entry->backer,
503047487c9SDavid Howells 		      __entry->start,
504047487c9SDavid Howells 		      __entry->len)
505047487c9SDavid Howells 	    );
506047487c9SDavid Howells 
507047487c9SDavid Howells TRACE_EVENT(cachefiles_write,
508047487c9SDavid Howells 	    TP_PROTO(struct cachefiles_object *obj,
509047487c9SDavid Howells 		     struct inode *backer,
510047487c9SDavid Howells 		     loff_t start,
511047487c9SDavid Howells 		     size_t len),
512047487c9SDavid Howells 
513047487c9SDavid Howells 	    TP_ARGS(obj, backer, start, len),
514047487c9SDavid Howells 
515047487c9SDavid Howells 	    TP_STRUCT__entry(
516047487c9SDavid Howells 		    __field(unsigned int,			obj	)
517047487c9SDavid Howells 		    __field(unsigned int,			backer	)
518047487c9SDavid Howells 		    __field(size_t,				len	)
519047487c9SDavid Howells 		    __field(loff_t,				start	)
520047487c9SDavid Howells 			     ),
521047487c9SDavid Howells 
522047487c9SDavid Howells 	    TP_fast_assign(
523047487c9SDavid Howells 		    __entry->obj	= obj->debug_id;
524047487c9SDavid Howells 		    __entry->backer	= backer->i_ino;
525047487c9SDavid Howells 		    __entry->start	= start;
526047487c9SDavid Howells 		    __entry->len	= len;
527047487c9SDavid Howells 			   ),
528047487c9SDavid Howells 
5298c39b8bcSDavid Howells 	    TP_printk("o=%08x B=%x s=%llx l=%zx",
530047487c9SDavid Howells 		      __entry->obj,
531047487c9SDavid Howells 		      __entry->backer,
532047487c9SDavid Howells 		      __entry->start,
533047487c9SDavid Howells 		      __entry->len)
534047487c9SDavid Howells 	    );
535047487c9SDavid Howells 
53613871badSDavid Howells TRACE_EVENT(cachefiles_trunc,
53713871badSDavid Howells 	    TP_PROTO(struct cachefiles_object *obj, struct inode *backer,
53813871badSDavid Howells 		     loff_t from, loff_t to, enum cachefiles_trunc_trace why),
53913871badSDavid Howells 
54013871badSDavid Howells 	    TP_ARGS(obj, backer, from, to, why),
54113871badSDavid Howells 
54213871badSDavid Howells 	    TP_STRUCT__entry(
54313871badSDavid Howells 		    __field(unsigned int,			obj	)
54413871badSDavid Howells 		    __field(unsigned int,			backer	)
54513871badSDavid Howells 		    __field(enum cachefiles_trunc_trace,	why	)
54613871badSDavid Howells 		    __field(loff_t,				from	)
54713871badSDavid Howells 		    __field(loff_t,				to	)
54813871badSDavid Howells 			     ),
54913871badSDavid Howells 
55013871badSDavid Howells 	    TP_fast_assign(
55113871badSDavid Howells 		    __entry->obj	= obj->debug_id;
55213871badSDavid Howells 		    __entry->backer	= backer->i_ino;
55313871badSDavid Howells 		    __entry->from	= from;
55413871badSDavid Howells 		    __entry->to		= to;
55513871badSDavid Howells 		    __entry->why	= why;
55613871badSDavid Howells 			   ),
55713871badSDavid Howells 
5588c39b8bcSDavid Howells 	    TP_printk("o=%08x B=%x %s l=%llx->%llx",
55913871badSDavid Howells 		      __entry->obj,
56013871badSDavid Howells 		      __entry->backer,
56113871badSDavid Howells 		      __print_symbolic(__entry->why, cachefiles_trunc_traces),
56213871badSDavid Howells 		      __entry->from,
56313871badSDavid Howells 		      __entry->to)
56413871badSDavid Howells 	    );
56513871badSDavid Howells 
5661bd9c4e4SDavid Howells TRACE_EVENT(cachefiles_mark_active,
5671bd9c4e4SDavid Howells 	    TP_PROTO(struct cachefiles_object *obj,
5681bd9c4e4SDavid Howells 		     struct inode *inode),
5691bd9c4e4SDavid Howells 
5701bd9c4e4SDavid Howells 	    TP_ARGS(obj, inode),
5711bd9c4e4SDavid Howells 
5721bd9c4e4SDavid Howells 	    /* Note that obj may be NULL */
5731bd9c4e4SDavid Howells 	    TP_STRUCT__entry(
5741bd9c4e4SDavid Howells 		    __field(unsigned int,		obj		)
5751bd9c4e4SDavid Howells 		    __field(ino_t,			inode		)
5761bd9c4e4SDavid Howells 			     ),
5771bd9c4e4SDavid Howells 
5781bd9c4e4SDavid Howells 	    TP_fast_assign(
5791bd9c4e4SDavid Howells 		    __entry->obj	= obj ? obj->debug_id : 0;
5801bd9c4e4SDavid Howells 		    __entry->inode	= inode->i_ino;
5811bd9c4e4SDavid Howells 			   ),
5821bd9c4e4SDavid Howells 
5838c39b8bcSDavid Howells 	    TP_printk("o=%08x B=%lx",
5841bd9c4e4SDavid Howells 		      __entry->obj, __entry->inode)
5851bd9c4e4SDavid Howells 	    );
5861bd9c4e4SDavid Howells 
587b64a3314SDavid Howells TRACE_EVENT(cachefiles_mark_failed,
588b64a3314SDavid Howells 	    TP_PROTO(struct cachefiles_object *obj,
589b64a3314SDavid Howells 		     struct inode *inode),
590b64a3314SDavid Howells 
591b64a3314SDavid Howells 	    TP_ARGS(obj, inode),
592b64a3314SDavid Howells 
593b64a3314SDavid Howells 	    /* Note that obj may be NULL */
594b64a3314SDavid Howells 	    TP_STRUCT__entry(
595b64a3314SDavid Howells 		    __field(unsigned int,		obj		)
596b64a3314SDavid Howells 		    __field(ino_t,			inode		)
597b64a3314SDavid Howells 			     ),
598b64a3314SDavid Howells 
599b64a3314SDavid Howells 	    TP_fast_assign(
600b64a3314SDavid Howells 		    __entry->obj	= obj ? obj->debug_id : 0;
601b64a3314SDavid Howells 		    __entry->inode	= inode->i_ino;
602b64a3314SDavid Howells 			   ),
603b64a3314SDavid Howells 
604b64a3314SDavid Howells 	    TP_printk("o=%08x B=%lx",
605b64a3314SDavid Howells 		      __entry->obj, __entry->inode)
606b64a3314SDavid Howells 	    );
607b64a3314SDavid Howells 
6081bd9c4e4SDavid Howells TRACE_EVENT(cachefiles_mark_inactive,
6091bd9c4e4SDavid Howells 	    TP_PROTO(struct cachefiles_object *obj,
6101bd9c4e4SDavid Howells 		     struct inode *inode),
6111bd9c4e4SDavid Howells 
6121bd9c4e4SDavid Howells 	    TP_ARGS(obj, inode),
6131bd9c4e4SDavid Howells 
6141bd9c4e4SDavid Howells 	    /* Note that obj may be NULL */
6151bd9c4e4SDavid Howells 	    TP_STRUCT__entry(
6161bd9c4e4SDavid Howells 		    __field(unsigned int,		obj		)
6171bd9c4e4SDavid Howells 		    __field(ino_t,			inode		)
6181bd9c4e4SDavid Howells 			     ),
6191bd9c4e4SDavid Howells 
6201bd9c4e4SDavid Howells 	    TP_fast_assign(
6211bd9c4e4SDavid Howells 		    __entry->obj	= obj ? obj->debug_id : 0;
6221bd9c4e4SDavid Howells 		    __entry->inode	= inode->i_ino;
6231bd9c4e4SDavid Howells 			   ),
6241bd9c4e4SDavid Howells 
6258c39b8bcSDavid Howells 	    TP_printk("o=%08x B=%lx",
6261bd9c4e4SDavid Howells 		      __entry->obj, __entry->inode)
6271bd9c4e4SDavid Howells 	    );
6281bd9c4e4SDavid Howells 
629ecf5a6ceSDavid Howells TRACE_EVENT(cachefiles_vfs_error,
630ecf5a6ceSDavid Howells 	    TP_PROTO(struct cachefiles_object *obj, struct inode *backer,
631ecf5a6ceSDavid Howells 		     int error, enum cachefiles_error_trace where),
632ecf5a6ceSDavid Howells 
633ecf5a6ceSDavid Howells 	    TP_ARGS(obj, backer, error, where),
634ecf5a6ceSDavid Howells 
635ecf5a6ceSDavid Howells 	    TP_STRUCT__entry(
636ecf5a6ceSDavid Howells 		    __field(unsigned int,			obj	)
637ecf5a6ceSDavid Howells 		    __field(unsigned int,			backer	)
638ecf5a6ceSDavid Howells 		    __field(enum cachefiles_error_trace,	where	)
639ecf5a6ceSDavid Howells 		    __field(short,				error	)
640ecf5a6ceSDavid Howells 			     ),
641ecf5a6ceSDavid Howells 
642ecf5a6ceSDavid Howells 	    TP_fast_assign(
643ecf5a6ceSDavid Howells 		    __entry->obj	= obj ? obj->debug_id : 0;
644ecf5a6ceSDavid Howells 		    __entry->backer	= backer->i_ino;
645ecf5a6ceSDavid Howells 		    __entry->error	= error;
646ecf5a6ceSDavid Howells 		    __entry->where	= where;
647ecf5a6ceSDavid Howells 			   ),
648ecf5a6ceSDavid Howells 
6498c39b8bcSDavid Howells 	    TP_printk("o=%08x B=%x %s e=%d",
650ecf5a6ceSDavid Howells 		      __entry->obj,
651ecf5a6ceSDavid Howells 		      __entry->backer,
652ecf5a6ceSDavid Howells 		      __print_symbolic(__entry->where, cachefiles_error_traces),
653ecf5a6ceSDavid Howells 		      __entry->error)
654ecf5a6ceSDavid Howells 	    );
655ecf5a6ceSDavid Howells 
656ecf5a6ceSDavid Howells TRACE_EVENT(cachefiles_io_error,
657ecf5a6ceSDavid Howells 	    TP_PROTO(struct cachefiles_object *obj, struct inode *backer,
658ecf5a6ceSDavid Howells 		     int error, enum cachefiles_error_trace where),
659ecf5a6ceSDavid Howells 
660ecf5a6ceSDavid Howells 	    TP_ARGS(obj, backer, error, where),
661ecf5a6ceSDavid Howells 
662ecf5a6ceSDavid Howells 	    TP_STRUCT__entry(
663ecf5a6ceSDavid Howells 		    __field(unsigned int,			obj	)
664ecf5a6ceSDavid Howells 		    __field(unsigned int,			backer	)
665ecf5a6ceSDavid Howells 		    __field(enum cachefiles_error_trace,	where	)
666ecf5a6ceSDavid Howells 		    __field(short,				error	)
667ecf5a6ceSDavid Howells 			     ),
668ecf5a6ceSDavid Howells 
669ecf5a6ceSDavid Howells 	    TP_fast_assign(
670ecf5a6ceSDavid Howells 		    __entry->obj	= obj ? obj->debug_id : 0;
671ecf5a6ceSDavid Howells 		    __entry->backer	= backer->i_ino;
672ecf5a6ceSDavid Howells 		    __entry->error	= error;
673ecf5a6ceSDavid Howells 		    __entry->where	= where;
674ecf5a6ceSDavid Howells 			   ),
675ecf5a6ceSDavid Howells 
6768c39b8bcSDavid Howells 	    TP_printk("o=%08x B=%x %s e=%d",
677ecf5a6ceSDavid Howells 		      __entry->obj,
678ecf5a6ceSDavid Howells 		      __entry->backer,
679ecf5a6ceSDavid Howells 		      __print_symbolic(__entry->where, cachefiles_error_traces),
680ecf5a6ceSDavid Howells 		      __entry->error)
681ecf5a6ceSDavid Howells 	    );
682ecf5a6ceSDavid Howells 
6831519670eSJeffle Xu TRACE_EVENT(cachefiles_ondemand_open,
6841519670eSJeffle Xu 	    TP_PROTO(struct cachefiles_object *obj, struct cachefiles_msg *msg,
6851519670eSJeffle Xu 		     struct cachefiles_open *load),
6861519670eSJeffle Xu 
6871519670eSJeffle Xu 	    TP_ARGS(obj, msg, load),
6881519670eSJeffle Xu 
6891519670eSJeffle Xu 	    TP_STRUCT__entry(
6901519670eSJeffle Xu 		    __field(unsigned int,	obj		)
6911519670eSJeffle Xu 		    __field(unsigned int,	msg_id		)
6921519670eSJeffle Xu 		    __field(unsigned int,	object_id	)
6931519670eSJeffle Xu 		    __field(unsigned int,	fd		)
6941519670eSJeffle Xu 		    __field(unsigned int,	flags		)
6951519670eSJeffle Xu 			     ),
6961519670eSJeffle Xu 
6971519670eSJeffle Xu 	    TP_fast_assign(
6981519670eSJeffle Xu 		    __entry->obj	= obj ? obj->debug_id : 0;
6991519670eSJeffle Xu 		    __entry->msg_id	= msg->msg_id;
7001519670eSJeffle Xu 		    __entry->object_id	= msg->object_id;
7011519670eSJeffle Xu 		    __entry->fd		= load->fd;
7021519670eSJeffle Xu 		    __entry->flags	= load->flags;
7031519670eSJeffle Xu 			   ),
7041519670eSJeffle Xu 
7051519670eSJeffle Xu 	    TP_printk("o=%08x mid=%x oid=%x fd=%d f=%x",
7061519670eSJeffle Xu 		      __entry->obj,
7071519670eSJeffle Xu 		      __entry->msg_id,
7081519670eSJeffle Xu 		      __entry->object_id,
7091519670eSJeffle Xu 		      __entry->fd,
7101519670eSJeffle Xu 		      __entry->flags)
7111519670eSJeffle Xu 	    );
7121519670eSJeffle Xu 
7131519670eSJeffle Xu TRACE_EVENT(cachefiles_ondemand_copen,
7141519670eSJeffle Xu 	    TP_PROTO(struct cachefiles_object *obj, unsigned int msg_id,
7151519670eSJeffle Xu 		     long len),
7161519670eSJeffle Xu 
7171519670eSJeffle Xu 	    TP_ARGS(obj, msg_id, len),
7181519670eSJeffle Xu 
7191519670eSJeffle Xu 	    TP_STRUCT__entry(
7201519670eSJeffle Xu 		    __field(unsigned int,	obj	)
7211519670eSJeffle Xu 		    __field(unsigned int,	msg_id	)
7221519670eSJeffle Xu 		    __field(long,		len	)
7231519670eSJeffle Xu 			     ),
7241519670eSJeffle Xu 
7251519670eSJeffle Xu 	    TP_fast_assign(
7261519670eSJeffle Xu 		    __entry->obj	= obj ? obj->debug_id : 0;
7271519670eSJeffle Xu 		    __entry->msg_id	= msg_id;
7281519670eSJeffle Xu 		    __entry->len	= len;
7291519670eSJeffle Xu 			   ),
7301519670eSJeffle Xu 
7311519670eSJeffle Xu 	    TP_printk("o=%08x mid=%x l=%lx",
7321519670eSJeffle Xu 		      __entry->obj,
7331519670eSJeffle Xu 		      __entry->msg_id,
7341519670eSJeffle Xu 		      __entry->len)
7351519670eSJeffle Xu 	    );
7361519670eSJeffle Xu 
7371519670eSJeffle Xu TRACE_EVENT(cachefiles_ondemand_close,
7381519670eSJeffle Xu 	    TP_PROTO(struct cachefiles_object *obj, struct cachefiles_msg *msg),
7391519670eSJeffle Xu 
7401519670eSJeffle Xu 	    TP_ARGS(obj, msg),
7411519670eSJeffle Xu 
7421519670eSJeffle Xu 	    TP_STRUCT__entry(
7431519670eSJeffle Xu 		    __field(unsigned int,	obj		)
7441519670eSJeffle Xu 		    __field(unsigned int,	msg_id		)
7451519670eSJeffle Xu 		    __field(unsigned int,	object_id	)
7461519670eSJeffle Xu 			     ),
7471519670eSJeffle Xu 
7481519670eSJeffle Xu 	    TP_fast_assign(
7491519670eSJeffle Xu 		    __entry->obj	= obj ? obj->debug_id : 0;
7501519670eSJeffle Xu 		    __entry->msg_id	= msg->msg_id;
7511519670eSJeffle Xu 		    __entry->object_id	= msg->object_id;
7521519670eSJeffle Xu 			   ),
7531519670eSJeffle Xu 
7541519670eSJeffle Xu 	    TP_printk("o=%08x mid=%x oid=%x",
7551519670eSJeffle Xu 		      __entry->obj,
7561519670eSJeffle Xu 		      __entry->msg_id,
7571519670eSJeffle Xu 		      __entry->object_id)
7581519670eSJeffle Xu 	    );
7591519670eSJeffle Xu 
7601519670eSJeffle Xu TRACE_EVENT(cachefiles_ondemand_read,
7611519670eSJeffle Xu 	    TP_PROTO(struct cachefiles_object *obj, struct cachefiles_msg *msg,
7621519670eSJeffle Xu 		     struct cachefiles_read *load),
7631519670eSJeffle Xu 
7641519670eSJeffle Xu 	    TP_ARGS(obj, msg, load),
7651519670eSJeffle Xu 
7661519670eSJeffle Xu 	    TP_STRUCT__entry(
7671519670eSJeffle Xu 		    __field(unsigned int,	obj		)
7681519670eSJeffle Xu 		    __field(unsigned int,	msg_id		)
7691519670eSJeffle Xu 		    __field(unsigned int,	object_id	)
7701519670eSJeffle Xu 		    __field(loff_t,		start		)
7711519670eSJeffle Xu 		    __field(size_t,		len		)
7721519670eSJeffle Xu 			     ),
7731519670eSJeffle Xu 
7741519670eSJeffle Xu 	    TP_fast_assign(
7751519670eSJeffle Xu 		    __entry->obj	= obj ? obj->debug_id : 0;
7761519670eSJeffle Xu 		    __entry->msg_id	= msg->msg_id;
7771519670eSJeffle Xu 		    __entry->object_id	= msg->object_id;
7781519670eSJeffle Xu 		    __entry->start	= load->off;
7791519670eSJeffle Xu 		    __entry->len	= load->len;
7801519670eSJeffle Xu 			   ),
7811519670eSJeffle Xu 
7821519670eSJeffle Xu 	    TP_printk("o=%08x mid=%x oid=%x s=%llx l=%zx",
7831519670eSJeffle Xu 		      __entry->obj,
7841519670eSJeffle Xu 		      __entry->msg_id,
7851519670eSJeffle Xu 		      __entry->object_id,
7861519670eSJeffle Xu 		      __entry->start,
7871519670eSJeffle Xu 		      __entry->len)
7881519670eSJeffle Xu 	    );
7891519670eSJeffle Xu 
7901519670eSJeffle Xu TRACE_EVENT(cachefiles_ondemand_cread,
7911519670eSJeffle Xu 	    TP_PROTO(struct cachefiles_object *obj, unsigned int msg_id),
7921519670eSJeffle Xu 
7931519670eSJeffle Xu 	    TP_ARGS(obj, msg_id),
7941519670eSJeffle Xu 
7951519670eSJeffle Xu 	    TP_STRUCT__entry(
7961519670eSJeffle Xu 		    __field(unsigned int,	obj	)
7971519670eSJeffle Xu 		    __field(unsigned int,	msg_id	)
7981519670eSJeffle Xu 			     ),
7991519670eSJeffle Xu 
8001519670eSJeffle Xu 	    TP_fast_assign(
8011519670eSJeffle Xu 		    __entry->obj	= obj ? obj->debug_id : 0;
8021519670eSJeffle Xu 		    __entry->msg_id	= msg_id;
8031519670eSJeffle Xu 			   ),
8041519670eSJeffle Xu 
8051519670eSJeffle Xu 	    TP_printk("o=%08x mid=%x",
8061519670eSJeffle Xu 		      __entry->obj,
8071519670eSJeffle Xu 		      __entry->msg_id)
8081519670eSJeffle Xu 	    );
8091519670eSJeffle Xu 
8101519670eSJeffle Xu TRACE_EVENT(cachefiles_ondemand_fd_write,
8111519670eSJeffle Xu 	    TP_PROTO(struct cachefiles_object *obj, struct inode *backer,
8121519670eSJeffle Xu 		     loff_t start, size_t len),
8131519670eSJeffle Xu 
8141519670eSJeffle Xu 	    TP_ARGS(obj, backer, start, len),
8151519670eSJeffle Xu 
8161519670eSJeffle Xu 	    TP_STRUCT__entry(
8171519670eSJeffle Xu 		    __field(unsigned int,	obj	)
8181519670eSJeffle Xu 		    __field(unsigned int,	backer	)
8191519670eSJeffle Xu 		    __field(loff_t,		start	)
8201519670eSJeffle Xu 		    __field(size_t,		len	)
8211519670eSJeffle Xu 			     ),
8221519670eSJeffle Xu 
8231519670eSJeffle Xu 	    TP_fast_assign(
8241519670eSJeffle Xu 		    __entry->obj	= obj ? obj->debug_id : 0;
8251519670eSJeffle Xu 		    __entry->backer	= backer->i_ino;
8261519670eSJeffle Xu 		    __entry->start	= start;
8271519670eSJeffle Xu 		    __entry->len	= len;
8281519670eSJeffle Xu 			   ),
8291519670eSJeffle Xu 
8301519670eSJeffle Xu 	    TP_printk("o=%08x iB=%x s=%llx l=%zx",
8311519670eSJeffle Xu 		      __entry->obj,
8321519670eSJeffle Xu 		      __entry->backer,
8331519670eSJeffle Xu 		      __entry->start,
8341519670eSJeffle Xu 		      __entry->len)
8351519670eSJeffle Xu 	    );
8361519670eSJeffle Xu 
8371519670eSJeffle Xu TRACE_EVENT(cachefiles_ondemand_fd_release,
8381519670eSJeffle Xu 	    TP_PROTO(struct cachefiles_object *obj, int object_id),
8391519670eSJeffle Xu 
8401519670eSJeffle Xu 	    TP_ARGS(obj, object_id),
8411519670eSJeffle Xu 
8421519670eSJeffle Xu 	    TP_STRUCT__entry(
8431519670eSJeffle Xu 		    __field(unsigned int,	obj		)
8441519670eSJeffle Xu 		    __field(unsigned int,	object_id	)
8451519670eSJeffle Xu 			     ),
8461519670eSJeffle Xu 
8471519670eSJeffle Xu 	    TP_fast_assign(
8481519670eSJeffle Xu 		    __entry->obj	= obj ? obj->debug_id : 0;
8491519670eSJeffle Xu 		    __entry->object_id	= object_id;
8501519670eSJeffle Xu 			   ),
8511519670eSJeffle Xu 
8521519670eSJeffle Xu 	    TP_printk("o=%08x oid=%x",
8531519670eSJeffle Xu 		      __entry->obj,
8541519670eSJeffle Xu 		      __entry->object_id)
8551519670eSJeffle Xu 	    );
8561519670eSJeffle Xu 
85777443f61SDavid Howells #endif /* _TRACE_CACHEFILES_H */
85877443f61SDavid Howells 
85977443f61SDavid Howells /* This part must be outside protection */
86077443f61SDavid Howells #include <trace/define_trace.h>
861