xref: /openbmc/linux/include/trace/events/afs.h (revision 160cb9574b550426122422444b8f19d614505f81)
18e8d7f13SDavid Howells /* AFS tracepoints
28e8d7f13SDavid Howells  *
38e8d7f13SDavid Howells  * Copyright (C) 2016 Red Hat, Inc. All Rights Reserved.
48e8d7f13SDavid Howells  * Written by David Howells (dhowells@redhat.com)
58e8d7f13SDavid Howells  *
68e8d7f13SDavid Howells  * This program is free software; you can redistribute it and/or
78e8d7f13SDavid Howells  * modify it under the terms of the GNU General Public Licence
88e8d7f13SDavid Howells  * as published by the Free Software Foundation; either version
98e8d7f13SDavid Howells  * 2 of the Licence, or (at your option) any later version.
108e8d7f13SDavid Howells  */
118e8d7f13SDavid Howells #undef TRACE_SYSTEM
128e8d7f13SDavid Howells #define TRACE_SYSTEM afs
138e8d7f13SDavid Howells 
148e8d7f13SDavid Howells #if !defined(_TRACE_AFS_H) || defined(TRACE_HEADER_MULTI_READ)
158e8d7f13SDavid Howells #define _TRACE_AFS_H
168e8d7f13SDavid Howells 
178e8d7f13SDavid Howells #include <linux/tracepoint.h>
188e8d7f13SDavid Howells 
19341f741fSDavid Howells /*
20341f741fSDavid Howells  * Define enums for tracing information.
21341f741fSDavid Howells  */
22341f741fSDavid Howells #ifndef __AFS_DECLARE_TRACE_ENUMS_ONCE_ONLY
23341f741fSDavid Howells #define __AFS_DECLARE_TRACE_ENUMS_ONCE_ONLY
24341f741fSDavid Howells 
25341f741fSDavid Howells enum afs_call_trace {
26341f741fSDavid Howells 	afs_call_trace_alloc,
27341f741fSDavid Howells 	afs_call_trace_free,
28341f741fSDavid Howells 	afs_call_trace_put,
29341f741fSDavid Howells 	afs_call_trace_wake,
30341f741fSDavid Howells 	afs_call_trace_work,
31341f741fSDavid Howells };
32341f741fSDavid Howells 
33025db80cSDavid Howells enum afs_fs_operation {
34025db80cSDavid Howells 	afs_FS_FetchData		= 130,	/* AFS Fetch file data */
35025db80cSDavid Howells 	afs_FS_FetchStatus		= 132,	/* AFS Fetch file status */
36025db80cSDavid Howells 	afs_FS_StoreData		= 133,	/* AFS Store file data */
37025db80cSDavid Howells 	afs_FS_StoreStatus		= 135,	/* AFS Store file status */
38025db80cSDavid Howells 	afs_FS_RemoveFile		= 136,	/* AFS Remove a file */
39025db80cSDavid Howells 	afs_FS_CreateFile		= 137,	/* AFS Create a file */
40025db80cSDavid Howells 	afs_FS_Rename			= 138,	/* AFS Rename or move a file or directory */
41025db80cSDavid Howells 	afs_FS_Symlink			= 139,	/* AFS Create a symbolic link */
42025db80cSDavid Howells 	afs_FS_Link			= 140,	/* AFS Create a hard link */
43025db80cSDavid Howells 	afs_FS_MakeDir			= 141,	/* AFS Create a directory */
44025db80cSDavid Howells 	afs_FS_RemoveDir		= 142,	/* AFS Remove a directory */
45025db80cSDavid Howells 	afs_FS_GetVolumeInfo		= 148,	/* AFS Get information about a volume */
46025db80cSDavid Howells 	afs_FS_GetVolumeStatus		= 149,	/* AFS Get volume status information */
47025db80cSDavid Howells 	afs_FS_GetRootVolume		= 151,	/* AFS Get root volume name */
48025db80cSDavid Howells 	afs_FS_SetLock			= 156,	/* AFS Request a file lock */
49025db80cSDavid Howells 	afs_FS_ExtendLock		= 157,	/* AFS Extend a file lock */
50025db80cSDavid Howells 	afs_FS_ReleaseLock		= 158,	/* AFS Release a file lock */
51025db80cSDavid Howells 	afs_FS_Lookup			= 161,	/* AFS lookup file in directory */
525cf9dd55SDavid Howells 	afs_FS_InlineBulkStatus		= 65536, /* AFS Fetch multiple file statuses with errors */
53025db80cSDavid Howells 	afs_FS_FetchData64		= 65537, /* AFS Fetch file data */
54025db80cSDavid Howells 	afs_FS_StoreData64		= 65538, /* AFS Store file data */
55025db80cSDavid Howells 	afs_FS_GiveUpAllCallBacks	= 65539, /* AFS Give up all our callbacks on a server */
56025db80cSDavid Howells 	afs_FS_GetCapabilities		= 65540, /* AFS Get FS server capabilities */
57025db80cSDavid Howells };
58025db80cSDavid Howells 
59025db80cSDavid Howells enum afs_vl_operation {
60025db80cSDavid Howells 	afs_VL_GetEntryByNameU	= 527,		/* AFS Get Vol Entry By Name operation ID */
61025db80cSDavid Howells 	afs_VL_GetAddrsU	= 533,		/* AFS Get FS server addresses */
62025db80cSDavid Howells 	afs_YFSVL_GetEndpoints	= 64002,	/* YFS Get FS & Vol server addresses */
63025db80cSDavid Howells 	afs_VL_GetCapabilities	= 65537,	/* AFS Get VL server capabilities */
64025db80cSDavid Howells };
65025db80cSDavid Howells 
6663a4681fSDavid Howells enum afs_edit_dir_op {
6763a4681fSDavid Howells 	afs_edit_dir_create,
6863a4681fSDavid Howells 	afs_edit_dir_create_error,
6963a4681fSDavid Howells 	afs_edit_dir_create_inval,
7063a4681fSDavid Howells 	afs_edit_dir_create_nospc,
7163a4681fSDavid Howells 	afs_edit_dir_delete,
7263a4681fSDavid Howells 	afs_edit_dir_delete_error,
7363a4681fSDavid Howells 	afs_edit_dir_delete_inval,
7463a4681fSDavid Howells 	afs_edit_dir_delete_noent,
7563a4681fSDavid Howells };
7663a4681fSDavid Howells 
7763a4681fSDavid Howells enum afs_edit_dir_reason {
7863a4681fSDavid Howells 	afs_edit_dir_for_create,
7963a4681fSDavid Howells 	afs_edit_dir_for_link,
8063a4681fSDavid Howells 	afs_edit_dir_for_mkdir,
8163a4681fSDavid Howells 	afs_edit_dir_for_rename,
8263a4681fSDavid Howells 	afs_edit_dir_for_rmdir,
8363a4681fSDavid Howells 	afs_edit_dir_for_symlink,
8463a4681fSDavid Howells 	afs_edit_dir_for_unlink,
8563a4681fSDavid Howells };
8663a4681fSDavid Howells 
87*160cb957SDavid Howells enum afs_eproto_cause {
88*160cb957SDavid Howells 	afs_eproto_bad_status,
89*160cb957SDavid Howells 	afs_eproto_cb_count,
90*160cb957SDavid Howells 	afs_eproto_cb_fid_count,
91*160cb957SDavid Howells 	afs_eproto_file_type,
92*160cb957SDavid Howells 	afs_eproto_ibulkst_cb_count,
93*160cb957SDavid Howells 	afs_eproto_ibulkst_count,
94*160cb957SDavid Howells 	afs_eproto_motd_len,
95*160cb957SDavid Howells 	afs_eproto_offline_msg_len,
96*160cb957SDavid Howells 	afs_eproto_volname_len,
97*160cb957SDavid Howells 	afs_eproto_yvl_fsendpt4_len,
98*160cb957SDavid Howells 	afs_eproto_yvl_fsendpt6_len,
99*160cb957SDavid Howells 	afs_eproto_yvl_fsendpt_num,
100*160cb957SDavid Howells 	afs_eproto_yvl_fsendpt_type,
101*160cb957SDavid Howells 	afs_eproto_yvl_vlendpt4_len,
102*160cb957SDavid Howells 	afs_eproto_yvl_vlendpt6_len,
103*160cb957SDavid Howells 	afs_eproto_yvl_vlendpt_type,
104*160cb957SDavid Howells };
105*160cb957SDavid Howells 
106341f741fSDavid Howells #endif /* end __AFS_DECLARE_TRACE_ENUMS_ONCE_ONLY */
107341f741fSDavid Howells 
108341f741fSDavid Howells /*
109341f741fSDavid Howells  * Declare tracing information enums and their string mappings for display.
110341f741fSDavid Howells  */
111341f741fSDavid Howells #define afs_call_traces \
112341f741fSDavid Howells 	EM(afs_call_trace_alloc,		"ALLOC") \
113341f741fSDavid Howells 	EM(afs_call_trace_free,			"FREE ") \
114341f741fSDavid Howells 	EM(afs_call_trace_put,			"PUT  ") \
115341f741fSDavid Howells 	EM(afs_call_trace_wake,			"WAKE ") \
116341f741fSDavid Howells 	E_(afs_call_trace_work,			"WORK ")
117341f741fSDavid Howells 
118025db80cSDavid Howells #define afs_fs_operations \
119025db80cSDavid Howells 	EM(afs_FS_FetchData,			"FS.FetchData") \
120025db80cSDavid Howells 	EM(afs_FS_FetchStatus,			"FS.FetchStatus") \
121025db80cSDavid Howells 	EM(afs_FS_StoreData,			"FS.StoreData") \
122025db80cSDavid Howells 	EM(afs_FS_StoreStatus,			"FS.StoreStatus") \
123025db80cSDavid Howells 	EM(afs_FS_RemoveFile,			"FS.RemoveFile") \
124025db80cSDavid Howells 	EM(afs_FS_CreateFile,			"FS.CreateFile") \
125025db80cSDavid Howells 	EM(afs_FS_Rename,			"FS.Rename") \
126025db80cSDavid Howells 	EM(afs_FS_Symlink,			"FS.Symlink") \
127025db80cSDavid Howells 	EM(afs_FS_Link,				"FS.Link") \
128025db80cSDavid Howells 	EM(afs_FS_MakeDir,			"FS.MakeDir") \
129025db80cSDavid Howells 	EM(afs_FS_RemoveDir,			"FS.RemoveDir") \
130025db80cSDavid Howells 	EM(afs_FS_GetVolumeInfo,		"FS.GetVolumeInfo") \
131025db80cSDavid Howells 	EM(afs_FS_GetVolumeStatus,		"FS.GetVolumeStatus") \
132025db80cSDavid Howells 	EM(afs_FS_GetRootVolume,		"FS.GetRootVolume") \
133025db80cSDavid Howells 	EM(afs_FS_SetLock,			"FS.SetLock") \
134025db80cSDavid Howells 	EM(afs_FS_ExtendLock,			"FS.ExtendLock") \
135025db80cSDavid Howells 	EM(afs_FS_ReleaseLock,			"FS.ReleaseLock") \
136025db80cSDavid Howells 	EM(afs_FS_Lookup,			"FS.Lookup") \
1375cf9dd55SDavid Howells 	EM(afs_FS_InlineBulkStatus,		"FS.InlineBulkStatus") \
138025db80cSDavid Howells 	EM(afs_FS_FetchData64,			"FS.FetchData64") \
139025db80cSDavid Howells 	EM(afs_FS_StoreData64,			"FS.StoreData64") \
140025db80cSDavid Howells 	EM(afs_FS_GiveUpAllCallBacks,		"FS.GiveUpAllCallBacks") \
141025db80cSDavid Howells 	E_(afs_FS_GetCapabilities,		"FS.GetCapabilities")
142025db80cSDavid Howells 
143025db80cSDavid Howells #define afs_vl_operations \
144025db80cSDavid Howells 	EM(afs_VL_GetEntryByNameU,		"VL.GetEntryByNameU") \
145025db80cSDavid Howells 	EM(afs_VL_GetAddrsU,			"VL.GetAddrsU") \
146025db80cSDavid Howells 	EM(afs_YFSVL_GetEndpoints,		"YFSVL.GetEndpoints") \
147025db80cSDavid Howells 	E_(afs_VL_GetCapabilities,		"VL.GetCapabilities")
148025db80cSDavid Howells 
14963a4681fSDavid Howells #define afs_edit_dir_ops				  \
15063a4681fSDavid Howells 	EM(afs_edit_dir_create,			"create") \
15163a4681fSDavid Howells 	EM(afs_edit_dir_create_error,		"c_fail") \
15263a4681fSDavid Howells 	EM(afs_edit_dir_create_inval,		"c_invl") \
15363a4681fSDavid Howells 	EM(afs_edit_dir_create_nospc,		"c_nspc") \
15463a4681fSDavid Howells 	EM(afs_edit_dir_delete,			"delete") \
15563a4681fSDavid Howells 	EM(afs_edit_dir_delete_error,		"d_err ") \
15663a4681fSDavid Howells 	EM(afs_edit_dir_delete_inval,		"d_invl") \
15763a4681fSDavid Howells 	E_(afs_edit_dir_delete_noent,		"d_nent")
15863a4681fSDavid Howells 
15963a4681fSDavid Howells #define afs_edit_dir_reasons				  \
16063a4681fSDavid Howells 	EM(afs_edit_dir_for_create,		"Create") \
16163a4681fSDavid Howells 	EM(afs_edit_dir_for_link,		"Link  ") \
16263a4681fSDavid Howells 	EM(afs_edit_dir_for_mkdir,		"MkDir ") \
16363a4681fSDavid Howells 	EM(afs_edit_dir_for_rename,		"Rename") \
16463a4681fSDavid Howells 	EM(afs_edit_dir_for_rmdir,		"RmDir ") \
16563a4681fSDavid Howells 	EM(afs_edit_dir_for_symlink,		"Symlnk") \
16663a4681fSDavid Howells 	E_(afs_edit_dir_for_unlink,		"Unlink")
16763a4681fSDavid Howells 
168*160cb957SDavid Howells #define afs_eproto_causes			\
169*160cb957SDavid Howells 	EM(afs_eproto_bad_status,	"BadStatus") \
170*160cb957SDavid Howells 	EM(afs_eproto_cb_count,		"CbCount") \
171*160cb957SDavid Howells 	EM(afs_eproto_cb_fid_count,	"CbFidCount") \
172*160cb957SDavid Howells 	EM(afs_eproto_file_type,	"FileTYpe") \
173*160cb957SDavid Howells 	EM(afs_eproto_ibulkst_cb_count,	"IBS.CbCount") \
174*160cb957SDavid Howells 	EM(afs_eproto_ibulkst_count,	"IBS.FidCount") \
175*160cb957SDavid Howells 	EM(afs_eproto_motd_len,		"MotdLen") \
176*160cb957SDavid Howells 	EM(afs_eproto_offline_msg_len,	"OfflineMsgLen") \
177*160cb957SDavid Howells 	EM(afs_eproto_volname_len,	"VolNameLen") \
178*160cb957SDavid Howells 	EM(afs_eproto_yvl_fsendpt4_len,	"YVL.FsEnd4Len") \
179*160cb957SDavid Howells 	EM(afs_eproto_yvl_fsendpt6_len,	"YVL.FsEnd6Len") \
180*160cb957SDavid Howells 	EM(afs_eproto_yvl_fsendpt_num,	"YVL.FsEndCount") \
181*160cb957SDavid Howells 	EM(afs_eproto_yvl_fsendpt_type,	"YVL.FsEndType") \
182*160cb957SDavid Howells 	EM(afs_eproto_yvl_vlendpt4_len,	"YVL.VlEnd4Len") \
183*160cb957SDavid Howells 	EM(afs_eproto_yvl_vlendpt6_len,	"YVL.VlEnd6Len") \
184*160cb957SDavid Howells 	E_(afs_eproto_yvl_vlendpt_type,	"YVL.VlEndType")
185*160cb957SDavid Howells 
186025db80cSDavid Howells 
187341f741fSDavid Howells /*
188341f741fSDavid Howells  * Export enum symbols via userspace.
189341f741fSDavid Howells  */
190341f741fSDavid Howells #undef EM
191341f741fSDavid Howells #undef E_
192341f741fSDavid Howells #define EM(a, b) TRACE_DEFINE_ENUM(a);
193341f741fSDavid Howells #define E_(a, b) TRACE_DEFINE_ENUM(a);
194341f741fSDavid Howells 
195341f741fSDavid Howells afs_call_traces;
196025db80cSDavid Howells afs_fs_operations;
197025db80cSDavid Howells afs_vl_operations;
19863a4681fSDavid Howells afs_edit_dir_ops;
19963a4681fSDavid Howells afs_edit_dir_reasons;
200341f741fSDavid Howells 
201341f741fSDavid Howells /*
202341f741fSDavid Howells  * Now redefine the EM() and E_() macros to map the enums to the strings that
203341f741fSDavid Howells  * will be printed in the output.
204341f741fSDavid Howells  */
205341f741fSDavid Howells #undef EM
206341f741fSDavid Howells #undef E_
207341f741fSDavid Howells #define EM(a, b)	{ a, b },
208341f741fSDavid Howells #define E_(a, b)	{ a, b }
209341f741fSDavid Howells 
2108e8d7f13SDavid Howells TRACE_EVENT(afs_recv_data,
2118e8d7f13SDavid Howells 	    TP_PROTO(struct afs_call *call, unsigned count, unsigned offset,
2128e8d7f13SDavid Howells 		     bool want_more, int ret),
2138e8d7f13SDavid Howells 
2148e8d7f13SDavid Howells 	    TP_ARGS(call, count, offset, want_more, ret),
2158e8d7f13SDavid Howells 
2168e8d7f13SDavid Howells 	    TP_STRUCT__entry(
217a25e21f0SDavid Howells 		    __field(unsigned int,		call		)
2188e8d7f13SDavid Howells 		    __field(enum afs_call_state,	state		)
2198e8d7f13SDavid Howells 		    __field(unsigned int,		count		)
2208e8d7f13SDavid Howells 		    __field(unsigned int,		offset		)
2218e8d7f13SDavid Howells 		    __field(unsigned short,		unmarshall	)
2228e8d7f13SDavid Howells 		    __field(bool,			want_more	)
2238e8d7f13SDavid Howells 		    __field(int,			ret		)
2248e8d7f13SDavid Howells 			     ),
2258e8d7f13SDavid Howells 
2268e8d7f13SDavid Howells 	    TP_fast_assign(
227a25e21f0SDavid Howells 		    __entry->call	= call->debug_id;
2288e8d7f13SDavid Howells 		    __entry->state	= call->state;
2298e8d7f13SDavid Howells 		    __entry->unmarshall	= call->unmarshall;
2308e8d7f13SDavid Howells 		    __entry->count	= count;
2318e8d7f13SDavid Howells 		    __entry->offset	= offset;
2328e8d7f13SDavid Howells 		    __entry->want_more	= want_more;
2338e8d7f13SDavid Howells 		    __entry->ret	= ret;
2348e8d7f13SDavid Howells 			   ),
2358e8d7f13SDavid Howells 
236a25e21f0SDavid Howells 	    TP_printk("c=%08x s=%u u=%u %u/%u wm=%u ret=%d",
2378e8d7f13SDavid Howells 		      __entry->call,
2388e8d7f13SDavid Howells 		      __entry->state, __entry->unmarshall,
2398e8d7f13SDavid Howells 		      __entry->offset, __entry->count,
2408e8d7f13SDavid Howells 		      __entry->want_more, __entry->ret)
2418e8d7f13SDavid Howells 	    );
2428e8d7f13SDavid Howells 
2438e8d7f13SDavid Howells TRACE_EVENT(afs_notify_call,
2448e8d7f13SDavid Howells 	    TP_PROTO(struct rxrpc_call *rxcall, struct afs_call *call),
2458e8d7f13SDavid Howells 
2468e8d7f13SDavid Howells 	    TP_ARGS(rxcall, call),
2478e8d7f13SDavid Howells 
2488e8d7f13SDavid Howells 	    TP_STRUCT__entry(
249a25e21f0SDavid Howells 		    __field(unsigned int,		call		)
2508e8d7f13SDavid Howells 		    __field(enum afs_call_state,	state		)
2518e8d7f13SDavid Howells 		    __field(unsigned short,		unmarshall	)
2528e8d7f13SDavid Howells 			     ),
2538e8d7f13SDavid Howells 
2548e8d7f13SDavid Howells 	    TP_fast_assign(
255a25e21f0SDavid Howells 		    __entry->call	= call->debug_id;
2568e8d7f13SDavid Howells 		    __entry->state	= call->state;
2578e8d7f13SDavid Howells 		    __entry->unmarshall	= call->unmarshall;
2588e8d7f13SDavid Howells 			   ),
2598e8d7f13SDavid Howells 
260a25e21f0SDavid Howells 	    TP_printk("c=%08x s=%u u=%u",
2618e8d7f13SDavid Howells 		      __entry->call,
2628e8d7f13SDavid Howells 		      __entry->state, __entry->unmarshall)
2638e8d7f13SDavid Howells 	    );
2648e8d7f13SDavid Howells 
2658e8d7f13SDavid Howells TRACE_EVENT(afs_cb_call,
2668e8d7f13SDavid Howells 	    TP_PROTO(struct afs_call *call),
2678e8d7f13SDavid Howells 
2688e8d7f13SDavid Howells 	    TP_ARGS(call),
2698e8d7f13SDavid Howells 
2708e8d7f13SDavid Howells 	    TP_STRUCT__entry(
271a25e21f0SDavid Howells 		    __field(unsigned int,		call		)
2728e8d7f13SDavid Howells 		    __field(const char *,		name		)
2738e8d7f13SDavid Howells 		    __field(u32,			op		)
2748e8d7f13SDavid Howells 			     ),
2758e8d7f13SDavid Howells 
2768e8d7f13SDavid Howells 	    TP_fast_assign(
277a25e21f0SDavid Howells 		    __entry->call	= call->debug_id;
2788e8d7f13SDavid Howells 		    __entry->name	= call->type->name;
2798e8d7f13SDavid Howells 		    __entry->op		= call->operation_ID;
2808e8d7f13SDavid Howells 			   ),
2818e8d7f13SDavid Howells 
282a25e21f0SDavid Howells 	    TP_printk("c=%08x %s o=%u",
2838e8d7f13SDavid Howells 		      __entry->call,
2848e8d7f13SDavid Howells 		      __entry->name,
2858e8d7f13SDavid Howells 		      __entry->op)
2868e8d7f13SDavid Howells 	    );
2878e8d7f13SDavid Howells 
288341f741fSDavid Howells TRACE_EVENT(afs_call,
289341f741fSDavid Howells 	    TP_PROTO(struct afs_call *call, enum afs_call_trace op,
290341f741fSDavid Howells 		     int usage, int outstanding, const void *where),
291341f741fSDavid Howells 
292341f741fSDavid Howells 	    TP_ARGS(call, op, usage, outstanding, where),
293341f741fSDavid Howells 
294341f741fSDavid Howells 	    TP_STRUCT__entry(
295a25e21f0SDavid Howells 		    __field(unsigned int,		call		)
296341f741fSDavid Howells 		    __field(int,			op		)
297341f741fSDavid Howells 		    __field(int,			usage		)
298341f741fSDavid Howells 		    __field(int,			outstanding	)
299341f741fSDavid Howells 		    __field(const void *,		where		)
300341f741fSDavid Howells 			     ),
301341f741fSDavid Howells 
302341f741fSDavid Howells 	    TP_fast_assign(
303a25e21f0SDavid Howells 		    __entry->call = call->debug_id;
304341f741fSDavid Howells 		    __entry->op = op;
305341f741fSDavid Howells 		    __entry->usage = usage;
306341f741fSDavid Howells 		    __entry->outstanding = outstanding;
307341f741fSDavid Howells 		    __entry->where = where;
308341f741fSDavid Howells 			   ),
309341f741fSDavid Howells 
310a25e21f0SDavid Howells 	    TP_printk("c=%08x %s u=%d o=%d sp=%pSR",
311341f741fSDavid Howells 		      __entry->call,
312341f741fSDavid Howells 		      __print_symbolic(__entry->op, afs_call_traces),
313341f741fSDavid Howells 		      __entry->usage,
314341f741fSDavid Howells 		      __entry->outstanding,
315341f741fSDavid Howells 		      __entry->where)
316341f741fSDavid Howells 	    );
317341f741fSDavid Howells 
318025db80cSDavid Howells TRACE_EVENT(afs_make_fs_call,
319025db80cSDavid Howells 	    TP_PROTO(struct afs_call *call, const struct afs_fid *fid),
320025db80cSDavid Howells 
321025db80cSDavid Howells 	    TP_ARGS(call, fid),
322025db80cSDavid Howells 
323025db80cSDavid Howells 	    TP_STRUCT__entry(
324a25e21f0SDavid Howells 		    __field(unsigned int,		call		)
325025db80cSDavid Howells 		    __field(enum afs_fs_operation,	op		)
326025db80cSDavid Howells 		    __field_struct(struct afs_fid,	fid		)
327025db80cSDavid Howells 			     ),
328025db80cSDavid Howells 
329025db80cSDavid Howells 	    TP_fast_assign(
330a25e21f0SDavid Howells 		    __entry->call = call->debug_id;
331025db80cSDavid Howells 		    __entry->op = call->operation_ID;
332025db80cSDavid Howells 		    if (fid) {
333025db80cSDavid Howells 			    __entry->fid = *fid;
334025db80cSDavid Howells 		    } else {
335025db80cSDavid Howells 			    __entry->fid.vid = 0;
336025db80cSDavid Howells 			    __entry->fid.vnode = 0;
337025db80cSDavid Howells 			    __entry->fid.unique = 0;
338025db80cSDavid Howells 		    }
339025db80cSDavid Howells 			   ),
340025db80cSDavid Howells 
341a25e21f0SDavid Howells 	    TP_printk("c=%08x %06x:%06x:%06x %s",
342025db80cSDavid Howells 		      __entry->call,
343025db80cSDavid Howells 		      __entry->fid.vid,
344025db80cSDavid Howells 		      __entry->fid.vnode,
345025db80cSDavid Howells 		      __entry->fid.unique,
346025db80cSDavid Howells 		      __print_symbolic(__entry->op, afs_fs_operations))
347025db80cSDavid Howells 	    );
348025db80cSDavid Howells 
349025db80cSDavid Howells TRACE_EVENT(afs_make_vl_call,
350025db80cSDavid Howells 	    TP_PROTO(struct afs_call *call),
351025db80cSDavid Howells 
352025db80cSDavid Howells 	    TP_ARGS(call),
353025db80cSDavid Howells 
354025db80cSDavid Howells 	    TP_STRUCT__entry(
355a25e21f0SDavid Howells 		    __field(unsigned int,		call		)
356025db80cSDavid Howells 		    __field(enum afs_vl_operation,	op		)
357025db80cSDavid Howells 			     ),
358025db80cSDavid Howells 
359025db80cSDavid Howells 	    TP_fast_assign(
360a25e21f0SDavid Howells 		    __entry->call = call->debug_id;
361025db80cSDavid Howells 		    __entry->op = call->operation_ID;
362025db80cSDavid Howells 			   ),
363025db80cSDavid Howells 
364a25e21f0SDavid Howells 	    TP_printk("c=%08x %s",
365025db80cSDavid Howells 		      __entry->call,
366025db80cSDavid Howells 		      __print_symbolic(__entry->op, afs_vl_operations))
367025db80cSDavid Howells 	    );
368025db80cSDavid Howells 
369025db80cSDavid Howells TRACE_EVENT(afs_call_done,
370025db80cSDavid Howells 	    TP_PROTO(struct afs_call *call),
371025db80cSDavid Howells 
372025db80cSDavid Howells 	    TP_ARGS(call),
373025db80cSDavid Howells 
374025db80cSDavid Howells 	    TP_STRUCT__entry(
375a25e21f0SDavid Howells 		    __field(unsigned int,		call		)
376025db80cSDavid Howells 		    __field(struct rxrpc_call *,	rx_call		)
377025db80cSDavid Howells 		    __field(int,			ret		)
378025db80cSDavid Howells 		    __field(u32,			abort_code	)
379025db80cSDavid Howells 			     ),
380025db80cSDavid Howells 
381025db80cSDavid Howells 	    TP_fast_assign(
382a25e21f0SDavid Howells 		    __entry->call = call->debug_id;
383025db80cSDavid Howells 		    __entry->rx_call = call->rxcall;
384025db80cSDavid Howells 		    __entry->ret = call->error;
385025db80cSDavid Howells 		    __entry->abort_code = call->abort_code;
386025db80cSDavid Howells 			   ),
387025db80cSDavid Howells 
388a25e21f0SDavid Howells 	    TP_printk("   c=%08x ret=%d ab=%d [%p]",
389025db80cSDavid Howells 		      __entry->call,
390025db80cSDavid Howells 		      __entry->ret,
391025db80cSDavid Howells 		      __entry->abort_code,
392025db80cSDavid Howells 		      __entry->rx_call)
393025db80cSDavid Howells 	    );
394025db80cSDavid Howells 
3952c099014SDavid Howells TRACE_EVENT(afs_send_pages,
3962c099014SDavid Howells 	    TP_PROTO(struct afs_call *call, struct msghdr *msg,
3972c099014SDavid Howells 		     pgoff_t first, pgoff_t last, unsigned int offset),
3982c099014SDavid Howells 
3992c099014SDavid Howells 	    TP_ARGS(call, msg, first, last, offset),
4002c099014SDavid Howells 
4012c099014SDavid Howells 	    TP_STRUCT__entry(
402a25e21f0SDavid Howells 		    __field(unsigned int,		call		)
4032c099014SDavid Howells 		    __field(pgoff_t,			first		)
4042c099014SDavid Howells 		    __field(pgoff_t,			last		)
4052c099014SDavid Howells 		    __field(unsigned int,		nr		)
4062c099014SDavid Howells 		    __field(unsigned int,		bytes		)
4072c099014SDavid Howells 		    __field(unsigned int,		offset		)
4082c099014SDavid Howells 		    __field(unsigned int,		flags		)
4092c099014SDavid Howells 			     ),
4102c099014SDavid Howells 
4112c099014SDavid Howells 	    TP_fast_assign(
412a25e21f0SDavid Howells 		    __entry->call = call->debug_id;
4132c099014SDavid Howells 		    __entry->first = first;
4142c099014SDavid Howells 		    __entry->last = last;
4152c099014SDavid Howells 		    __entry->nr = msg->msg_iter.nr_segs;
4162c099014SDavid Howells 		    __entry->bytes = msg->msg_iter.count;
4172c099014SDavid Howells 		    __entry->offset = offset;
4182c099014SDavid Howells 		    __entry->flags = msg->msg_flags;
4192c099014SDavid Howells 			   ),
4202c099014SDavid Howells 
421a25e21f0SDavid Howells 	    TP_printk(" c=%08x %lx-%lx-%lx b=%x o=%x f=%x",
4222c099014SDavid Howells 		      __entry->call,
4232c099014SDavid Howells 		      __entry->first, __entry->first + __entry->nr - 1, __entry->last,
4242c099014SDavid Howells 		      __entry->bytes, __entry->offset,
4252c099014SDavid Howells 		      __entry->flags)
4262c099014SDavid Howells 	    );
4272c099014SDavid Howells 
4282c099014SDavid Howells TRACE_EVENT(afs_sent_pages,
4292c099014SDavid Howells 	    TP_PROTO(struct afs_call *call, pgoff_t first, pgoff_t last,
4302c099014SDavid Howells 		     pgoff_t cursor, int ret),
4312c099014SDavid Howells 
4322c099014SDavid Howells 	    TP_ARGS(call, first, last, cursor, ret),
4332c099014SDavid Howells 
4342c099014SDavid Howells 	    TP_STRUCT__entry(
435a25e21f0SDavid Howells 		    __field(unsigned int,		call		)
4362c099014SDavid Howells 		    __field(pgoff_t,			first		)
4372c099014SDavid Howells 		    __field(pgoff_t,			last		)
4382c099014SDavid Howells 		    __field(pgoff_t,			cursor		)
4392c099014SDavid Howells 		    __field(int,			ret		)
4402c099014SDavid Howells 			     ),
4412c099014SDavid Howells 
4422c099014SDavid Howells 	    TP_fast_assign(
443a25e21f0SDavid Howells 		    __entry->call = call->debug_id;
4442c099014SDavid Howells 		    __entry->first = first;
4452c099014SDavid Howells 		    __entry->last = last;
4462c099014SDavid Howells 		    __entry->cursor = cursor;
4472c099014SDavid Howells 		    __entry->ret = ret;
4482c099014SDavid Howells 			   ),
4492c099014SDavid Howells 
450a25e21f0SDavid Howells 	    TP_printk(" c=%08x %lx-%lx c=%lx r=%d",
4512c099014SDavid Howells 		      __entry->call,
4522c099014SDavid Howells 		      __entry->first, __entry->last,
4532c099014SDavid Howells 		      __entry->cursor, __entry->ret)
4542c099014SDavid Howells 	    );
4552c099014SDavid Howells 
456dab17c1aSDavid Howells TRACE_EVENT(afs_dir_check_failed,
457dab17c1aSDavid Howells 	    TP_PROTO(struct afs_vnode *vnode, loff_t off, loff_t i_size),
458dab17c1aSDavid Howells 
459dab17c1aSDavid Howells 	    TP_ARGS(vnode, off, i_size),
460dab17c1aSDavid Howells 
461dab17c1aSDavid Howells 	    TP_STRUCT__entry(
462dab17c1aSDavid Howells 		    __field(struct afs_vnode *,		vnode		)
463dab17c1aSDavid Howells 		    __field(loff_t,			off		)
464dab17c1aSDavid Howells 		    __field(loff_t,			i_size		)
465dab17c1aSDavid Howells 			     ),
466dab17c1aSDavid Howells 
467dab17c1aSDavid Howells 	    TP_fast_assign(
468dab17c1aSDavid Howells 		    __entry->vnode = vnode;
469dab17c1aSDavid Howells 		    __entry->off = off;
470dab17c1aSDavid Howells 		    __entry->i_size = i_size;
471dab17c1aSDavid Howells 			   ),
472dab17c1aSDavid Howells 
473dab17c1aSDavid Howells 	    TP_printk("vn=%p %llx/%llx",
474dab17c1aSDavid Howells 		      __entry->vnode, __entry->off, __entry->i_size)
475dab17c1aSDavid Howells 	    );
476dab17c1aSDavid Howells 
47713524ab3SDavid Howells /*
47813524ab3SDavid Howells  * We use page->private to hold the amount of the page that we've written to,
47913524ab3SDavid Howells  * splitting the field into two parts.  However, we need to represent a range
48013524ab3SDavid Howells  * 0...PAGE_SIZE inclusive, so we can't support 64K pages on a 32-bit system.
48113524ab3SDavid Howells  */
48213524ab3SDavid Howells #if PAGE_SIZE > 32768
48313524ab3SDavid Howells #define AFS_PRIV_MAX	0xffffffff
48413524ab3SDavid Howells #define AFS_PRIV_SHIFT	32
48513524ab3SDavid Howells #else
48613524ab3SDavid Howells #define AFS_PRIV_MAX	0xffff
48713524ab3SDavid Howells #define AFS_PRIV_SHIFT	16
48813524ab3SDavid Howells #endif
48913524ab3SDavid Howells 
49013524ab3SDavid Howells TRACE_EVENT(afs_page_dirty,
49113524ab3SDavid Howells 	    TP_PROTO(struct afs_vnode *vnode, const char *where,
49213524ab3SDavid Howells 		     pgoff_t page, unsigned long priv),
49313524ab3SDavid Howells 
49413524ab3SDavid Howells 	    TP_ARGS(vnode, where, page, priv),
49513524ab3SDavid Howells 
49613524ab3SDavid Howells 	    TP_STRUCT__entry(
49713524ab3SDavid Howells 		    __field(struct afs_vnode *,		vnode		)
49813524ab3SDavid Howells 		    __field(const char *,		where		)
49913524ab3SDavid Howells 		    __field(pgoff_t,			page		)
50013524ab3SDavid Howells 		    __field(unsigned long,		priv		)
50113524ab3SDavid Howells 			     ),
50213524ab3SDavid Howells 
50313524ab3SDavid Howells 	    TP_fast_assign(
50413524ab3SDavid Howells 		    __entry->vnode = vnode;
50513524ab3SDavid Howells 		    __entry->where = where;
50613524ab3SDavid Howells 		    __entry->page = page;
50713524ab3SDavid Howells 		    __entry->priv = priv;
50813524ab3SDavid Howells 			   ),
50913524ab3SDavid Howells 
51013524ab3SDavid Howells 	    TP_printk("vn=%p %lx %s %lu-%lu",
51113524ab3SDavid Howells 		      __entry->vnode, __entry->page, __entry->where,
51213524ab3SDavid Howells 		      __entry->priv & AFS_PRIV_MAX,
51313524ab3SDavid Howells 		      __entry->priv >> AFS_PRIV_SHIFT)
51413524ab3SDavid Howells 	    );
51513524ab3SDavid Howells 
51698bf40cdSDavid Howells TRACE_EVENT(afs_call_state,
51798bf40cdSDavid Howells 	    TP_PROTO(struct afs_call *call,
51898bf40cdSDavid Howells 		     enum afs_call_state from,
51998bf40cdSDavid Howells 		     enum afs_call_state to,
52098bf40cdSDavid Howells 		     int ret, u32 remote_abort),
52198bf40cdSDavid Howells 
52298bf40cdSDavid Howells 	    TP_ARGS(call, from, to, ret, remote_abort),
52398bf40cdSDavid Howells 
52498bf40cdSDavid Howells 	    TP_STRUCT__entry(
525a25e21f0SDavid Howells 		    __field(unsigned int,		call		)
52698bf40cdSDavid Howells 		    __field(enum afs_call_state,	from		)
52798bf40cdSDavid Howells 		    __field(enum afs_call_state,	to		)
52898bf40cdSDavid Howells 		    __field(int,			ret		)
52998bf40cdSDavid Howells 		    __field(u32,			abort		)
53098bf40cdSDavid Howells 			     ),
53198bf40cdSDavid Howells 
53298bf40cdSDavid Howells 	    TP_fast_assign(
533a25e21f0SDavid Howells 		    __entry->call = call->debug_id;
53498bf40cdSDavid Howells 		    __entry->from = from;
53598bf40cdSDavid Howells 		    __entry->to = to;
53698bf40cdSDavid Howells 		    __entry->ret = ret;
53798bf40cdSDavid Howells 		    __entry->abort = remote_abort;
53898bf40cdSDavid Howells 			   ),
53998bf40cdSDavid Howells 
540a25e21f0SDavid Howells 	    TP_printk("c=%08x %u->%u r=%d ab=%d",
54198bf40cdSDavid Howells 		      __entry->call,
54298bf40cdSDavid Howells 		      __entry->from, __entry->to,
54398bf40cdSDavid Howells 		      __entry->ret, __entry->abort)
54498bf40cdSDavid Howells 	    );
54598bf40cdSDavid Howells 
54663a4681fSDavid Howells TRACE_EVENT(afs_edit_dir,
54763a4681fSDavid Howells 	    TP_PROTO(struct afs_vnode *dvnode,
54863a4681fSDavid Howells 		     enum afs_edit_dir_reason why,
54963a4681fSDavid Howells 		     enum afs_edit_dir_op op,
55063a4681fSDavid Howells 		     unsigned int block,
55163a4681fSDavid Howells 		     unsigned int slot,
55263a4681fSDavid Howells 		     unsigned int f_vnode,
55363a4681fSDavid Howells 		     unsigned int f_unique,
55463a4681fSDavid Howells 		     const char *name),
55563a4681fSDavid Howells 
55663a4681fSDavid Howells 	    TP_ARGS(dvnode, why, op, block, slot, f_vnode, f_unique, name),
55763a4681fSDavid Howells 
55863a4681fSDavid Howells 	    TP_STRUCT__entry(
55963a4681fSDavid Howells 		    __field(unsigned int,		vnode		)
56063a4681fSDavid Howells 		    __field(unsigned int,		unique		)
56163a4681fSDavid Howells 		    __field(enum afs_edit_dir_reason,	why		)
56263a4681fSDavid Howells 		    __field(enum afs_edit_dir_op,	op		)
56363a4681fSDavid Howells 		    __field(unsigned int,		block		)
56463a4681fSDavid Howells 		    __field(unsigned short,		slot		)
56563a4681fSDavid Howells 		    __field(unsigned int,		f_vnode		)
56663a4681fSDavid Howells 		    __field(unsigned int,		f_unique	)
56763a4681fSDavid Howells 		    __array(char,			name, 18	)
56863a4681fSDavid Howells 			     ),
56963a4681fSDavid Howells 
57063a4681fSDavid Howells 	    TP_fast_assign(
57163a4681fSDavid Howells 		    int __len = strlen(name);
57263a4681fSDavid Howells 		    __len = min(__len, 17);
57363a4681fSDavid Howells 		    __entry->vnode	= dvnode->fid.vnode;
57463a4681fSDavid Howells 		    __entry->unique	= dvnode->fid.unique;
57563a4681fSDavid Howells 		    __entry->why	= why;
57663a4681fSDavid Howells 		    __entry->op		= op;
57763a4681fSDavid Howells 		    __entry->block	= block;
57863a4681fSDavid Howells 		    __entry->slot	= slot;
57963a4681fSDavid Howells 		    __entry->f_vnode	= f_vnode;
58063a4681fSDavid Howells 		    __entry->f_unique	= f_unique;
58163a4681fSDavid Howells 		    memcpy(__entry->name, name, __len);
58263a4681fSDavid Howells 		    __entry->name[__len] = 0;
58363a4681fSDavid Howells 			   ),
58463a4681fSDavid Howells 
58563a4681fSDavid Howells 	    TP_printk("d=%x:%x %s %s %u[%u] f=%x:%x %s",
58663a4681fSDavid Howells 		      __entry->vnode, __entry->unique,
58763a4681fSDavid Howells 		      __print_symbolic(__entry->why, afs_edit_dir_reasons),
58863a4681fSDavid Howells 		      __print_symbolic(__entry->op, afs_edit_dir_ops),
58963a4681fSDavid Howells 		      __entry->block, __entry->slot,
59063a4681fSDavid Howells 		      __entry->f_vnode, __entry->f_unique,
59163a4681fSDavid Howells 		      __entry->name)
59263a4681fSDavid Howells 	    );
59363a4681fSDavid Howells 
5945f702c8eSDavid Howells TRACE_EVENT(afs_protocol_error,
595*160cb957SDavid Howells 	    TP_PROTO(struct afs_call *call, int error, enum afs_eproto_cause cause),
5965f702c8eSDavid Howells 
597*160cb957SDavid Howells 	    TP_ARGS(call, error, cause),
5985f702c8eSDavid Howells 
5995f702c8eSDavid Howells 	    TP_STRUCT__entry(
6005f702c8eSDavid Howells 		    __field(unsigned int,		call		)
6015f702c8eSDavid Howells 		    __field(int,			error		)
602*160cb957SDavid Howells 		    __field(enum afs_eproto_cause,	cause		)
6035f702c8eSDavid Howells 			     ),
6045f702c8eSDavid Howells 
6055f702c8eSDavid Howells 	    TP_fast_assign(
6065f702c8eSDavid Howells 		    __entry->call = call ? call->debug_id : 0;
6075f702c8eSDavid Howells 		    __entry->error = error;
608*160cb957SDavid Howells 		    __entry->cause = cause;
6095f702c8eSDavid Howells 			   ),
6105f702c8eSDavid Howells 
611*160cb957SDavid Howells 	    TP_printk("c=%08x r=%d %s",
612*160cb957SDavid Howells 		      __entry->call, __entry->error,
613*160cb957SDavid Howells 		      __print_symbolic(__entry->cause, afs_eproto_causes))
6145f702c8eSDavid Howells 	    );
6155f702c8eSDavid Howells 
6163709a399SDavid Howells TRACE_EVENT(afs_cm_no_server,
6173709a399SDavid Howells 	    TP_PROTO(struct afs_call *call, struct sockaddr_rxrpc *srx),
6183709a399SDavid Howells 
6193709a399SDavid Howells 	    TP_ARGS(call, srx),
6203709a399SDavid Howells 
6213709a399SDavid Howells 	    TP_STRUCT__entry(
6223709a399SDavid Howells 		    __field(unsigned int,			call	)
6233709a399SDavid Howells 		    __field(unsigned int,			op_id	)
6243709a399SDavid Howells 		    __field_struct(struct sockaddr_rxrpc,	srx	)
6253709a399SDavid Howells 			     ),
6263709a399SDavid Howells 
6273709a399SDavid Howells 	    TP_fast_assign(
6283709a399SDavid Howells 		    __entry->call = call->debug_id;
6293709a399SDavid Howells 		    __entry->op_id = call->operation_ID;
6303709a399SDavid Howells 		    memcpy(&__entry->srx, srx, sizeof(__entry->srx));
6313709a399SDavid Howells 			   ),
6323709a399SDavid Howells 
6333709a399SDavid Howells 	    TP_printk("c=%08x op=%u %pISpc",
6343709a399SDavid Howells 		      __entry->call, __entry->op_id, &__entry->srx.transport)
6353709a399SDavid Howells 	    );
6363709a399SDavid Howells 
6373709a399SDavid Howells TRACE_EVENT(afs_cm_no_server_u,
6383709a399SDavid Howells 	    TP_PROTO(struct afs_call *call, const uuid_t *uuid),
6393709a399SDavid Howells 
6403709a399SDavid Howells 	    TP_ARGS(call, uuid),
6413709a399SDavid Howells 
6423709a399SDavid Howells 	    TP_STRUCT__entry(
6433709a399SDavid Howells 		    __field(unsigned int,			call	)
6443709a399SDavid Howells 		    __field(unsigned int,			op_id	)
6453709a399SDavid Howells 		    __field_struct(uuid_t,			uuid	)
6463709a399SDavid Howells 			     ),
6473709a399SDavid Howells 
6483709a399SDavid Howells 	    TP_fast_assign(
6493709a399SDavid Howells 		    __entry->call = call->debug_id;
6503709a399SDavid Howells 		    __entry->op_id = call->operation_ID;
6513709a399SDavid Howells 		    memcpy(&__entry->uuid, uuid, sizeof(__entry->uuid));
6523709a399SDavid Howells 			   ),
6533709a399SDavid Howells 
6543709a399SDavid Howells 	    TP_printk("c=%08x op=%u %pU",
6553709a399SDavid Howells 		      __entry->call, __entry->op_id, &__entry->uuid)
6563709a399SDavid Howells 	    );
6573709a399SDavid Howells 
6588e8d7f13SDavid Howells #endif /* _TRACE_AFS_H */
6598e8d7f13SDavid Howells 
6608e8d7f13SDavid Howells /* This part must be outside protection */
6618e8d7f13SDavid Howells #include <trace/define_trace.h>
662