afs: Split the usage count on struct afs_server
[linux-2.6-microblaze.git] / include / trace / events / afs.h
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 /* AFS tracepoints
3  *
4  * Copyright (C) 2016 Red Hat, Inc. All Rights Reserved.
5  * Written by David Howells (dhowells@redhat.com)
6  */
7 #undef TRACE_SYSTEM
8 #define TRACE_SYSTEM afs
9
10 #if !defined(_TRACE_AFS_H) || defined(TRACE_HEADER_MULTI_READ)
11 #define _TRACE_AFS_H
12
13 #include <linux/tracepoint.h>
14
15 /*
16  * Define enums for tracing information.
17  */
18 #ifndef __AFS_DECLARE_TRACE_ENUMS_ONCE_ONLY
19 #define __AFS_DECLARE_TRACE_ENUMS_ONCE_ONLY
20
21 enum afs_call_trace {
22         afs_call_trace_alloc,
23         afs_call_trace_free,
24         afs_call_trace_get,
25         afs_call_trace_put,
26         afs_call_trace_wake,
27         afs_call_trace_work,
28 };
29
30 enum afs_server_trace {
31         afs_server_trace_alloc,
32         afs_server_trace_callback,
33         afs_server_trace_destroy,
34         afs_server_trace_free,
35         afs_server_trace_gc,
36         afs_server_trace_get_by_addr,
37         afs_server_trace_get_by_uuid,
38         afs_server_trace_get_caps,
39         afs_server_trace_get_install,
40         afs_server_trace_get_new_cbi,
41         afs_server_trace_give_up_cb,
42         afs_server_trace_put_call,
43         afs_server_trace_put_cbi,
44         afs_server_trace_put_find_rsq,
45         afs_server_trace_put_slist,
46         afs_server_trace_put_slist_isort,
47         afs_server_trace_put_uuid_rsq,
48         afs_server_trace_update,
49 };
50
51 enum afs_fs_operation {
52         afs_FS_FetchData                = 130,  /* AFS Fetch file data */
53         afs_FS_FetchACL                 = 131,  /* AFS Fetch file ACL */
54         afs_FS_FetchStatus              = 132,  /* AFS Fetch file status */
55         afs_FS_StoreData                = 133,  /* AFS Store file data */
56         afs_FS_StoreACL                 = 134,  /* AFS Store file ACL */
57         afs_FS_StoreStatus              = 135,  /* AFS Store file status */
58         afs_FS_RemoveFile               = 136,  /* AFS Remove a file */
59         afs_FS_CreateFile               = 137,  /* AFS Create a file */
60         afs_FS_Rename                   = 138,  /* AFS Rename or move a file or directory */
61         afs_FS_Symlink                  = 139,  /* AFS Create a symbolic link */
62         afs_FS_Link                     = 140,  /* AFS Create a hard link */
63         afs_FS_MakeDir                  = 141,  /* AFS Create a directory */
64         afs_FS_RemoveDir                = 142,  /* AFS Remove a directory */
65         afs_FS_GetVolumeInfo            = 148,  /* AFS Get information about a volume */
66         afs_FS_GetVolumeStatus          = 149,  /* AFS Get volume status information */
67         afs_FS_GetRootVolume            = 151,  /* AFS Get root volume name */
68         afs_FS_SetLock                  = 156,  /* AFS Request a file lock */
69         afs_FS_ExtendLock               = 157,  /* AFS Extend a file lock */
70         afs_FS_ReleaseLock              = 158,  /* AFS Release a file lock */
71         afs_FS_Lookup                   = 161,  /* AFS lookup file in directory */
72         afs_FS_InlineBulkStatus         = 65536, /* AFS Fetch multiple file statuses with errors */
73         afs_FS_FetchData64              = 65537, /* AFS Fetch file data */
74         afs_FS_StoreData64              = 65538, /* AFS Store file data */
75         afs_FS_GiveUpAllCallBacks       = 65539, /* AFS Give up all our callbacks on a server */
76         afs_FS_GetCapabilities          = 65540, /* AFS Get FS server capabilities */
77
78         yfs_FS_FetchData                = 130,   /* YFS Fetch file data */
79         yfs_FS_FetchACL                 = 64131, /* YFS Fetch file ACL */
80         yfs_FS_FetchStatus              = 64132, /* YFS Fetch file status */
81         yfs_FS_StoreACL                 = 64134, /* YFS Store file ACL */
82         yfs_FS_StoreStatus              = 64135, /* YFS Store file status */
83         yfs_FS_RemoveFile               = 64136, /* YFS Remove a file */
84         yfs_FS_CreateFile               = 64137, /* YFS Create a file */
85         yfs_FS_Rename                   = 64138, /* YFS Rename or move a file or directory */
86         yfs_FS_Symlink                  = 64139, /* YFS Create a symbolic link */
87         yfs_FS_Link                     = 64140, /* YFS Create a hard link */
88         yfs_FS_MakeDir                  = 64141, /* YFS Create a directory */
89         yfs_FS_RemoveDir                = 64142, /* YFS Remove a directory */
90         yfs_FS_GetVolumeStatus          = 64149, /* YFS Get volume status information */
91         yfs_FS_SetVolumeStatus          = 64150, /* YFS Set volume status information */
92         yfs_FS_SetLock                  = 64156, /* YFS Request a file lock */
93         yfs_FS_ExtendLock               = 64157, /* YFS Extend a file lock */
94         yfs_FS_ReleaseLock              = 64158, /* YFS Release a file lock */
95         yfs_FS_Lookup                   = 64161, /* YFS lookup file in directory */
96         yfs_FS_FlushCPS                 = 64165,
97         yfs_FS_FetchOpaqueACL           = 64168,
98         yfs_FS_WhoAmI                   = 64170,
99         yfs_FS_RemoveACL                = 64171,
100         yfs_FS_RemoveFile2              = 64173,
101         yfs_FS_StoreOpaqueACL2          = 64174,
102         yfs_FS_InlineBulkStatus         = 64536, /* YFS Fetch multiple file statuses with errors */
103         yfs_FS_FetchData64              = 64537, /* YFS Fetch file data */
104         yfs_FS_StoreData64              = 64538, /* YFS Store file data */
105         yfs_FS_UpdateSymlink            = 64540,
106 };
107
108 enum afs_vl_operation {
109         afs_VL_GetEntryByNameU  = 527,          /* AFS Get Vol Entry By Name operation ID */
110         afs_VL_GetAddrsU        = 533,          /* AFS Get FS server addresses */
111         afs_YFSVL_GetEndpoints  = 64002,        /* YFS Get FS & Vol server addresses */
112         afs_VL_GetCapabilities  = 65537,        /* AFS Get VL server capabilities */
113 };
114
115 enum afs_edit_dir_op {
116         afs_edit_dir_create,
117         afs_edit_dir_create_error,
118         afs_edit_dir_create_inval,
119         afs_edit_dir_create_nospc,
120         afs_edit_dir_delete,
121         afs_edit_dir_delete_error,
122         afs_edit_dir_delete_inval,
123         afs_edit_dir_delete_noent,
124 };
125
126 enum afs_edit_dir_reason {
127         afs_edit_dir_for_create,
128         afs_edit_dir_for_link,
129         afs_edit_dir_for_mkdir,
130         afs_edit_dir_for_rename_0,
131         afs_edit_dir_for_rename_1,
132         afs_edit_dir_for_rename_2,
133         afs_edit_dir_for_rmdir,
134         afs_edit_dir_for_silly_0,
135         afs_edit_dir_for_silly_1,
136         afs_edit_dir_for_symlink,
137         afs_edit_dir_for_unlink,
138 };
139
140 enum afs_eproto_cause {
141         afs_eproto_bad_status,
142         afs_eproto_cb_count,
143         afs_eproto_cb_fid_count,
144         afs_eproto_file_type,
145         afs_eproto_ibulkst_cb_count,
146         afs_eproto_ibulkst_count,
147         afs_eproto_motd_len,
148         afs_eproto_offline_msg_len,
149         afs_eproto_volname_len,
150         afs_eproto_yvl_fsendpt4_len,
151         afs_eproto_yvl_fsendpt6_len,
152         afs_eproto_yvl_fsendpt_num,
153         afs_eproto_yvl_fsendpt_type,
154         afs_eproto_yvl_vlendpt4_len,
155         afs_eproto_yvl_vlendpt6_len,
156         afs_eproto_yvl_vlendpt_type,
157 };
158
159 enum afs_io_error {
160         afs_io_error_cm_reply,
161         afs_io_error_extract,
162         afs_io_error_fs_probe_fail,
163         afs_io_error_vl_lookup_fail,
164         afs_io_error_vl_probe_fail,
165 };
166
167 enum afs_file_error {
168         afs_file_error_dir_bad_magic,
169         afs_file_error_dir_big,
170         afs_file_error_dir_missing_page,
171         afs_file_error_dir_over_end,
172         afs_file_error_dir_small,
173         afs_file_error_dir_unmarked_ext,
174         afs_file_error_mntpt,
175         afs_file_error_writeback_fail,
176 };
177
178 enum afs_flock_event {
179         afs_flock_acquired,
180         afs_flock_callback_break,
181         afs_flock_defer_unlock,
182         afs_flock_extend_fail,
183         afs_flock_fail_other,
184         afs_flock_fail_perm,
185         afs_flock_no_lockers,
186         afs_flock_release_fail,
187         afs_flock_silly_delete,
188         afs_flock_timestamp,
189         afs_flock_try_to_lock,
190         afs_flock_vfs_lock,
191         afs_flock_vfs_locking,
192         afs_flock_waited,
193         afs_flock_waiting,
194         afs_flock_work_extending,
195         afs_flock_work_retry,
196         afs_flock_work_unlocking,
197         afs_flock_would_block,
198 };
199
200 enum afs_flock_operation {
201         afs_flock_op_copy_lock,
202         afs_flock_op_flock,
203         afs_flock_op_grant,
204         afs_flock_op_lock,
205         afs_flock_op_release_lock,
206         afs_flock_op_return_ok,
207         afs_flock_op_return_eagain,
208         afs_flock_op_return_edeadlk,
209         afs_flock_op_return_error,
210         afs_flock_op_set_lock,
211         afs_flock_op_unlock,
212         afs_flock_op_wake,
213 };
214
215 enum afs_cb_break_reason {
216         afs_cb_break_no_break,
217         afs_cb_break_for_callback,
218         afs_cb_break_for_deleted,
219         afs_cb_break_for_lapsed,
220         afs_cb_break_for_unlink,
221         afs_cb_break_for_vsbreak,
222         afs_cb_break_for_volume_callback,
223         afs_cb_break_for_zap,
224 };
225
226 #endif /* end __AFS_DECLARE_TRACE_ENUMS_ONCE_ONLY */
227
228 /*
229  * Declare tracing information enums and their string mappings for display.
230  */
231 #define afs_call_traces \
232         EM(afs_call_trace_alloc,                "ALLOC") \
233         EM(afs_call_trace_free,                 "FREE ") \
234         EM(afs_call_trace_get,                  "GET  ") \
235         EM(afs_call_trace_put,                  "PUT  ") \
236         EM(afs_call_trace_wake,                 "WAKE ") \
237         E_(afs_call_trace_work,                 "QUEUE")
238
239 #define afs_server_traces \
240         EM(afs_server_trace_alloc,              "ALLOC    ") \
241         EM(afs_server_trace_callback,           "CALLBACK ") \
242         EM(afs_server_trace_destroy,            "DESTROY  ") \
243         EM(afs_server_trace_free,               "FREE     ") \
244         EM(afs_server_trace_gc,                 "GC       ") \
245         EM(afs_server_trace_get_by_addr,        "GET addr ") \
246         EM(afs_server_trace_get_by_uuid,        "GET uuid ") \
247         EM(afs_server_trace_get_caps,           "GET caps ") \
248         EM(afs_server_trace_get_install,        "GET inst ") \
249         EM(afs_server_trace_get_new_cbi,        "GET cbi  ") \
250         EM(afs_server_trace_give_up_cb,         "giveup-cb") \
251         EM(afs_server_trace_put_call,           "PUT call ") \
252         EM(afs_server_trace_put_cbi,            "PUT cbi  ") \
253         EM(afs_server_trace_put_find_rsq,       "PUT f-rsq") \
254         EM(afs_server_trace_put_slist,          "PUT slist") \
255         EM(afs_server_trace_put_slist_isort,    "PUT isort") \
256         EM(afs_server_trace_put_uuid_rsq,       "PUT u-req") \
257         E_(afs_server_trace_update,             "UPDATE")
258
259 #define afs_fs_operations \
260         EM(afs_FS_FetchData,                    "FS.FetchData") \
261         EM(afs_FS_FetchStatus,                  "FS.FetchStatus") \
262         EM(afs_FS_StoreData,                    "FS.StoreData") \
263         EM(afs_FS_StoreStatus,                  "FS.StoreStatus") \
264         EM(afs_FS_RemoveFile,                   "FS.RemoveFile") \
265         EM(afs_FS_CreateFile,                   "FS.CreateFile") \
266         EM(afs_FS_Rename,                       "FS.Rename") \
267         EM(afs_FS_Symlink,                      "FS.Symlink") \
268         EM(afs_FS_Link,                         "FS.Link") \
269         EM(afs_FS_MakeDir,                      "FS.MakeDir") \
270         EM(afs_FS_RemoveDir,                    "FS.RemoveDir") \
271         EM(afs_FS_GetVolumeInfo,                "FS.GetVolumeInfo") \
272         EM(afs_FS_GetVolumeStatus,              "FS.GetVolumeStatus") \
273         EM(afs_FS_GetRootVolume,                "FS.GetRootVolume") \
274         EM(afs_FS_SetLock,                      "FS.SetLock") \
275         EM(afs_FS_ExtendLock,                   "FS.ExtendLock") \
276         EM(afs_FS_ReleaseLock,                  "FS.ReleaseLock") \
277         EM(afs_FS_Lookup,                       "FS.Lookup") \
278         EM(afs_FS_InlineBulkStatus,             "FS.InlineBulkStatus") \
279         EM(afs_FS_FetchData64,                  "FS.FetchData64") \
280         EM(afs_FS_StoreData64,                  "FS.StoreData64") \
281         EM(afs_FS_GiveUpAllCallBacks,           "FS.GiveUpAllCallBacks") \
282         EM(afs_FS_GetCapabilities,              "FS.GetCapabilities") \
283         EM(yfs_FS_FetchACL,                     "YFS.FetchACL") \
284         EM(yfs_FS_FetchStatus,                  "YFS.FetchStatus") \
285         EM(yfs_FS_StoreACL,                     "YFS.StoreACL") \
286         EM(yfs_FS_StoreStatus,                  "YFS.StoreStatus") \
287         EM(yfs_FS_RemoveFile,                   "YFS.RemoveFile") \
288         EM(yfs_FS_CreateFile,                   "YFS.CreateFile") \
289         EM(yfs_FS_Rename,                       "YFS.Rename") \
290         EM(yfs_FS_Symlink,                      "YFS.Symlink") \
291         EM(yfs_FS_Link,                         "YFS.Link") \
292         EM(yfs_FS_MakeDir,                      "YFS.MakeDir") \
293         EM(yfs_FS_RemoveDir,                    "YFS.RemoveDir") \
294         EM(yfs_FS_GetVolumeStatus,              "YFS.GetVolumeStatus") \
295         EM(yfs_FS_SetVolumeStatus,              "YFS.SetVolumeStatus") \
296         EM(yfs_FS_SetLock,                      "YFS.SetLock") \
297         EM(yfs_FS_ExtendLock,                   "YFS.ExtendLock") \
298         EM(yfs_FS_ReleaseLock,                  "YFS.ReleaseLock") \
299         EM(yfs_FS_Lookup,                       "YFS.Lookup") \
300         EM(yfs_FS_FlushCPS,                     "YFS.FlushCPS") \
301         EM(yfs_FS_FetchOpaqueACL,               "YFS.FetchOpaqueACL") \
302         EM(yfs_FS_WhoAmI,                       "YFS.WhoAmI") \
303         EM(yfs_FS_RemoveACL,                    "YFS.RemoveACL") \
304         EM(yfs_FS_RemoveFile2,                  "YFS.RemoveFile2") \
305         EM(yfs_FS_StoreOpaqueACL2,              "YFS.StoreOpaqueACL2") \
306         EM(yfs_FS_InlineBulkStatus,             "YFS.InlineBulkStatus") \
307         EM(yfs_FS_FetchData64,                  "YFS.FetchData64") \
308         EM(yfs_FS_StoreData64,                  "YFS.StoreData64") \
309         E_(yfs_FS_UpdateSymlink,                "YFS.UpdateSymlink")
310
311 #define afs_vl_operations \
312         EM(afs_VL_GetEntryByNameU,              "VL.GetEntryByNameU") \
313         EM(afs_VL_GetAddrsU,                    "VL.GetAddrsU") \
314         EM(afs_YFSVL_GetEndpoints,              "YFSVL.GetEndpoints") \
315         E_(afs_VL_GetCapabilities,              "VL.GetCapabilities")
316
317 #define afs_edit_dir_ops                                  \
318         EM(afs_edit_dir_create,                 "create") \
319         EM(afs_edit_dir_create_error,           "c_fail") \
320         EM(afs_edit_dir_create_inval,           "c_invl") \
321         EM(afs_edit_dir_create_nospc,           "c_nspc") \
322         EM(afs_edit_dir_delete,                 "delete") \
323         EM(afs_edit_dir_delete_error,           "d_err ") \
324         EM(afs_edit_dir_delete_inval,           "d_invl") \
325         E_(afs_edit_dir_delete_noent,           "d_nent")
326
327 #define afs_edit_dir_reasons                              \
328         EM(afs_edit_dir_for_create,             "Create") \
329         EM(afs_edit_dir_for_link,               "Link  ") \
330         EM(afs_edit_dir_for_mkdir,              "MkDir ") \
331         EM(afs_edit_dir_for_rename_0,           "Renam0") \
332         EM(afs_edit_dir_for_rename_1,           "Renam1") \
333         EM(afs_edit_dir_for_rename_2,           "Renam2") \
334         EM(afs_edit_dir_for_rmdir,              "RmDir ") \
335         EM(afs_edit_dir_for_silly_0,            "S_Ren0") \
336         EM(afs_edit_dir_for_silly_1,            "S_Ren1") \
337         EM(afs_edit_dir_for_symlink,            "Symlnk") \
338         E_(afs_edit_dir_for_unlink,             "Unlink")
339
340 #define afs_eproto_causes                       \
341         EM(afs_eproto_bad_status,       "BadStatus") \
342         EM(afs_eproto_cb_count,         "CbCount") \
343         EM(afs_eproto_cb_fid_count,     "CbFidCount") \
344         EM(afs_eproto_file_type,        "FileTYpe") \
345         EM(afs_eproto_ibulkst_cb_count, "IBS.CbCount") \
346         EM(afs_eproto_ibulkst_count,    "IBS.FidCount") \
347         EM(afs_eproto_motd_len,         "MotdLen") \
348         EM(afs_eproto_offline_msg_len,  "OfflineMsgLen") \
349         EM(afs_eproto_volname_len,      "VolNameLen") \
350         EM(afs_eproto_yvl_fsendpt4_len, "YVL.FsEnd4Len") \
351         EM(afs_eproto_yvl_fsendpt6_len, "YVL.FsEnd6Len") \
352         EM(afs_eproto_yvl_fsendpt_num,  "YVL.FsEndCount") \
353         EM(afs_eproto_yvl_fsendpt_type, "YVL.FsEndType") \
354         EM(afs_eproto_yvl_vlendpt4_len, "YVL.VlEnd4Len") \
355         EM(afs_eproto_yvl_vlendpt6_len, "YVL.VlEnd6Len") \
356         E_(afs_eproto_yvl_vlendpt_type, "YVL.VlEndType")
357
358 #define afs_io_errors                                                   \
359         EM(afs_io_error_cm_reply,               "CM_REPLY")             \
360         EM(afs_io_error_extract,                "EXTRACT")              \
361         EM(afs_io_error_fs_probe_fail,          "FS_PROBE_FAIL")        \
362         EM(afs_io_error_vl_lookup_fail,         "VL_LOOKUP_FAIL")       \
363         E_(afs_io_error_vl_probe_fail,          "VL_PROBE_FAIL")
364
365 #define afs_file_errors                                                 \
366         EM(afs_file_error_dir_bad_magic,        "DIR_BAD_MAGIC")        \
367         EM(afs_file_error_dir_big,              "DIR_BIG")              \
368         EM(afs_file_error_dir_missing_page,     "DIR_MISSING_PAGE")     \
369         EM(afs_file_error_dir_over_end,         "DIR_ENT_OVER_END")     \
370         EM(afs_file_error_dir_small,            "DIR_SMALL")            \
371         EM(afs_file_error_dir_unmarked_ext,     "DIR_UNMARKED_EXT")     \
372         EM(afs_file_error_mntpt,                "MNTPT_READ_FAILED")    \
373         E_(afs_file_error_writeback_fail,       "WRITEBACK_FAILED")
374
375 #define afs_flock_types                                                 \
376         EM(F_RDLCK,                             "RDLCK")                \
377         EM(F_WRLCK,                             "WRLCK")                \
378         E_(F_UNLCK,                             "UNLCK")
379
380 #define afs_flock_states                                                \
381         EM(AFS_VNODE_LOCK_NONE,                 "NONE")                 \
382         EM(AFS_VNODE_LOCK_WAITING_FOR_CB,       "WAIT_FOR_CB")          \
383         EM(AFS_VNODE_LOCK_SETTING,              "SETTING")              \
384         EM(AFS_VNODE_LOCK_GRANTED,              "GRANTED")              \
385         EM(AFS_VNODE_LOCK_EXTENDING,            "EXTENDING")            \
386         EM(AFS_VNODE_LOCK_NEED_UNLOCK,          "NEED_UNLOCK")          \
387         EM(AFS_VNODE_LOCK_UNLOCKING,            "UNLOCKING")            \
388         E_(AFS_VNODE_LOCK_DELETED,              "DELETED")
389
390 #define afs_flock_events                                                \
391         EM(afs_flock_acquired,                  "Acquired")             \
392         EM(afs_flock_callback_break,            "Callback")             \
393         EM(afs_flock_defer_unlock,              "D-Unlock")             \
394         EM(afs_flock_extend_fail,               "Ext_Fail")             \
395         EM(afs_flock_fail_other,                "ErrOther")             \
396         EM(afs_flock_fail_perm,                 "ErrPerm ")             \
397         EM(afs_flock_no_lockers,                "NoLocker")             \
398         EM(afs_flock_release_fail,              "Rel_Fail")             \
399         EM(afs_flock_silly_delete,              "SillyDel")             \
400         EM(afs_flock_timestamp,                 "Timestmp")             \
401         EM(afs_flock_try_to_lock,               "TryToLck")             \
402         EM(afs_flock_vfs_lock,                  "VFSLock ")             \
403         EM(afs_flock_vfs_locking,               "VFSLking")             \
404         EM(afs_flock_waited,                    "Waited  ")             \
405         EM(afs_flock_waiting,                   "Waiting ")             \
406         EM(afs_flock_work_extending,            "Extendng")             \
407         EM(afs_flock_work_retry,                "Retry   ")             \
408         EM(afs_flock_work_unlocking,            "Unlcking")             \
409         E_(afs_flock_would_block,               "EWOULDBL")
410
411 #define afs_flock_operations                                            \
412         EM(afs_flock_op_copy_lock,              "COPY    ")             \
413         EM(afs_flock_op_flock,                  "->flock ")             \
414         EM(afs_flock_op_grant,                  "GRANT   ")             \
415         EM(afs_flock_op_lock,                   "->lock  ")             \
416         EM(afs_flock_op_release_lock,           "RELEASE ")             \
417         EM(afs_flock_op_return_ok,              "<-OK    ")             \
418         EM(afs_flock_op_return_edeadlk,         "<-EDEADL")             \
419         EM(afs_flock_op_return_eagain,          "<-EAGAIN")             \
420         EM(afs_flock_op_return_error,           "<-ERROR ")             \
421         EM(afs_flock_op_set_lock,               "SET     ")             \
422         EM(afs_flock_op_unlock,                 "UNLOCK  ")             \
423         E_(afs_flock_op_wake,                   "WAKE    ")
424
425 #define afs_cb_break_reasons                                            \
426         EM(afs_cb_break_no_break,               "no-break")             \
427         EM(afs_cb_break_for_callback,           "break-cb")             \
428         EM(afs_cb_break_for_deleted,            "break-del")            \
429         EM(afs_cb_break_for_lapsed,             "break-lapsed")         \
430         EM(afs_cb_break_for_unlink,             "break-unlink")         \
431         EM(afs_cb_break_for_vsbreak,            "break-vs")             \
432         EM(afs_cb_break_for_volume_callback,    "break-v-cb")           \
433         E_(afs_cb_break_for_zap,                "break-zap")
434
435 /*
436  * Export enum symbols via userspace.
437  */
438 #undef EM
439 #undef E_
440 #define EM(a, b) TRACE_DEFINE_ENUM(a);
441 #define E_(a, b) TRACE_DEFINE_ENUM(a);
442
443 afs_call_traces;
444 afs_server_traces;
445 afs_fs_operations;
446 afs_vl_operations;
447 afs_edit_dir_ops;
448 afs_edit_dir_reasons;
449 afs_eproto_causes;
450 afs_io_errors;
451 afs_file_errors;
452 afs_flock_types;
453 afs_flock_operations;
454 afs_cb_break_reasons;
455
456 /*
457  * Now redefine the EM() and E_() macros to map the enums to the strings that
458  * will be printed in the output.
459  */
460 #undef EM
461 #undef E_
462 #define EM(a, b)        { a, b },
463 #define E_(a, b)        { a, b }
464
465 TRACE_EVENT(afs_receive_data,
466             TP_PROTO(struct afs_call *call, struct iov_iter *iter,
467                      bool want_more, int ret),
468
469             TP_ARGS(call, iter, want_more, ret),
470
471             TP_STRUCT__entry(
472                     __field(loff_t,                     remain          )
473                     __field(unsigned int,               call            )
474                     __field(enum afs_call_state,        state           )
475                     __field(unsigned short,             unmarshall      )
476                     __field(bool,                       want_more       )
477                     __field(int,                        ret             )
478                              ),
479
480             TP_fast_assign(
481                     __entry->call       = call->debug_id;
482                     __entry->state      = call->state;
483                     __entry->unmarshall = call->unmarshall;
484                     __entry->remain     = iov_iter_count(iter);
485                     __entry->want_more  = want_more;
486                     __entry->ret        = ret;
487                            ),
488
489             TP_printk("c=%08x r=%llu u=%u w=%u s=%u ret=%d",
490                       __entry->call,
491                       __entry->remain,
492                       __entry->unmarshall,
493                       __entry->want_more,
494                       __entry->state,
495                       __entry->ret)
496             );
497
498 TRACE_EVENT(afs_notify_call,
499             TP_PROTO(struct rxrpc_call *rxcall, struct afs_call *call),
500
501             TP_ARGS(rxcall, call),
502
503             TP_STRUCT__entry(
504                     __field(unsigned int,               call            )
505                     __field(enum afs_call_state,        state           )
506                     __field(unsigned short,             unmarshall      )
507                              ),
508
509             TP_fast_assign(
510                     __entry->call       = call->debug_id;
511                     __entry->state      = call->state;
512                     __entry->unmarshall = call->unmarshall;
513                            ),
514
515             TP_printk("c=%08x s=%u u=%u",
516                       __entry->call,
517                       __entry->state, __entry->unmarshall)
518             );
519
520 TRACE_EVENT(afs_cb_call,
521             TP_PROTO(struct afs_call *call),
522
523             TP_ARGS(call),
524
525             TP_STRUCT__entry(
526                     __field(unsigned int,               call            )
527                     __field(const char *,               name            )
528                     __field(u32,                        op              )
529                              ),
530
531             TP_fast_assign(
532                     __entry->call       = call->debug_id;
533                     __entry->name       = call->type->name;
534                     __entry->op         = call->operation_ID;
535                            ),
536
537             TP_printk("c=%08x %s o=%u",
538                       __entry->call,
539                       __entry->name,
540                       __entry->op)
541             );
542
543 TRACE_EVENT(afs_call,
544             TP_PROTO(struct afs_call *call, enum afs_call_trace op,
545                      int usage, int outstanding, const void *where),
546
547             TP_ARGS(call, op, usage, outstanding, where),
548
549             TP_STRUCT__entry(
550                     __field(unsigned int,               call            )
551                     __field(int,                        op              )
552                     __field(int,                        usage           )
553                     __field(int,                        outstanding     )
554                     __field(const void *,               where           )
555                              ),
556
557             TP_fast_assign(
558                     __entry->call = call->debug_id;
559                     __entry->op = op;
560                     __entry->usage = usage;
561                     __entry->outstanding = outstanding;
562                     __entry->where = where;
563                            ),
564
565             TP_printk("c=%08x %s u=%d o=%d sp=%pSR",
566                       __entry->call,
567                       __print_symbolic(__entry->op, afs_call_traces),
568                       __entry->usage,
569                       __entry->outstanding,
570                       __entry->where)
571             );
572
573 TRACE_EVENT(afs_make_fs_call,
574             TP_PROTO(struct afs_call *call, const struct afs_fid *fid),
575
576             TP_ARGS(call, fid),
577
578             TP_STRUCT__entry(
579                     __field(unsigned int,               call            )
580                     __field(enum afs_fs_operation,      op              )
581                     __field_struct(struct afs_fid,      fid             )
582                              ),
583
584             TP_fast_assign(
585                     __entry->call = call->debug_id;
586                     __entry->op = call->operation_ID;
587                     if (fid) {
588                             __entry->fid = *fid;
589                     } else {
590                             __entry->fid.vid = 0;
591                             __entry->fid.vnode = 0;
592                             __entry->fid.unique = 0;
593                     }
594                            ),
595
596             TP_printk("c=%08x %06llx:%06llx:%06x %s",
597                       __entry->call,
598                       __entry->fid.vid,
599                       __entry->fid.vnode,
600                       __entry->fid.unique,
601                       __print_symbolic(__entry->op, afs_fs_operations))
602             );
603
604 TRACE_EVENT(afs_make_fs_calli,
605             TP_PROTO(struct afs_call *call, const struct afs_fid *fid,
606                      unsigned int i),
607
608             TP_ARGS(call, fid, i),
609
610             TP_STRUCT__entry(
611                     __field(unsigned int,               call            )
612                     __field(unsigned int,               i               )
613                     __field(enum afs_fs_operation,      op              )
614                     __field_struct(struct afs_fid,      fid             )
615                              ),
616
617             TP_fast_assign(
618                     __entry->call = call->debug_id;
619                     __entry->i = i;
620                     __entry->op = call->operation_ID;
621                     if (fid) {
622                             __entry->fid = *fid;
623                     } else {
624                             __entry->fid.vid = 0;
625                             __entry->fid.vnode = 0;
626                             __entry->fid.unique = 0;
627                     }
628                            ),
629
630             TP_printk("c=%08x %06llx:%06llx:%06x %s i=%u",
631                       __entry->call,
632                       __entry->fid.vid,
633                       __entry->fid.vnode,
634                       __entry->fid.unique,
635                       __print_symbolic(__entry->op, afs_fs_operations),
636                       __entry->i)
637             );
638
639 TRACE_EVENT(afs_make_fs_call1,
640             TP_PROTO(struct afs_call *call, const struct afs_fid *fid,
641                      const char *name),
642
643             TP_ARGS(call, fid, name),
644
645             TP_STRUCT__entry(
646                     __field(unsigned int,               call            )
647                     __field(enum afs_fs_operation,      op              )
648                     __field_struct(struct afs_fid,      fid             )
649                     __array(char,                       name, 24        )
650                              ),
651
652             TP_fast_assign(
653                     int __len = strlen(name);
654                     __len = min(__len, 23);
655                     __entry->call = call->debug_id;
656                     __entry->op = call->operation_ID;
657                     if (fid) {
658                             __entry->fid = *fid;
659                     } else {
660                             __entry->fid.vid = 0;
661                             __entry->fid.vnode = 0;
662                             __entry->fid.unique = 0;
663                     }
664                     memcpy(__entry->name, name, __len);
665                     __entry->name[__len] = 0;
666                            ),
667
668             TP_printk("c=%08x %06llx:%06llx:%06x %s \"%s\"",
669                       __entry->call,
670                       __entry->fid.vid,
671                       __entry->fid.vnode,
672                       __entry->fid.unique,
673                       __print_symbolic(__entry->op, afs_fs_operations),
674                       __entry->name)
675             );
676
677 TRACE_EVENT(afs_make_fs_call2,
678             TP_PROTO(struct afs_call *call, const struct afs_fid *fid,
679                      const char *name, const char *name2),
680
681             TP_ARGS(call, fid, name, name2),
682
683             TP_STRUCT__entry(
684                     __field(unsigned int,               call            )
685                     __field(enum afs_fs_operation,      op              )
686                     __field_struct(struct afs_fid,      fid             )
687                     __array(char,                       name, 24        )
688                     __array(char,                       name2, 24       )
689                              ),
690
691             TP_fast_assign(
692                     int __len = strlen(name);
693                     int __len2 = strlen(name2);
694                     __len = min(__len, 23);
695                     __len2 = min(__len2, 23);
696                     __entry->call = call->debug_id;
697                     __entry->op = call->operation_ID;
698                     if (fid) {
699                             __entry->fid = *fid;
700                     } else {
701                             __entry->fid.vid = 0;
702                             __entry->fid.vnode = 0;
703                             __entry->fid.unique = 0;
704                     }
705                     memcpy(__entry->name, name, __len);
706                     __entry->name[__len] = 0;
707                     memcpy(__entry->name2, name2, __len2);
708                     __entry->name2[__len2] = 0;
709                            ),
710
711             TP_printk("c=%08x %06llx:%06llx:%06x %s \"%s\" \"%s\"",
712                       __entry->call,
713                       __entry->fid.vid,
714                       __entry->fid.vnode,
715                       __entry->fid.unique,
716                       __print_symbolic(__entry->op, afs_fs_operations),
717                       __entry->name,
718                       __entry->name2)
719             );
720
721 TRACE_EVENT(afs_make_vl_call,
722             TP_PROTO(struct afs_call *call),
723
724             TP_ARGS(call),
725
726             TP_STRUCT__entry(
727                     __field(unsigned int,               call            )
728                     __field(enum afs_vl_operation,      op              )
729                              ),
730
731             TP_fast_assign(
732                     __entry->call = call->debug_id;
733                     __entry->op = call->operation_ID;
734                            ),
735
736             TP_printk("c=%08x %s",
737                       __entry->call,
738                       __print_symbolic(__entry->op, afs_vl_operations))
739             );
740
741 TRACE_EVENT(afs_call_done,
742             TP_PROTO(struct afs_call *call),
743
744             TP_ARGS(call),
745
746             TP_STRUCT__entry(
747                     __field(unsigned int,               call            )
748                     __field(struct rxrpc_call *,        rx_call         )
749                     __field(int,                        ret             )
750                     __field(u32,                        abort_code      )
751                              ),
752
753             TP_fast_assign(
754                     __entry->call = call->debug_id;
755                     __entry->rx_call = call->rxcall;
756                     __entry->ret = call->error;
757                     __entry->abort_code = call->abort_code;
758                            ),
759
760             TP_printk("   c=%08x ret=%d ab=%d [%p]",
761                       __entry->call,
762                       __entry->ret,
763                       __entry->abort_code,
764                       __entry->rx_call)
765             );
766
767 TRACE_EVENT(afs_send_pages,
768             TP_PROTO(struct afs_call *call, struct msghdr *msg,
769                      pgoff_t first, pgoff_t last, unsigned int offset),
770
771             TP_ARGS(call, msg, first, last, offset),
772
773             TP_STRUCT__entry(
774                     __field(unsigned int,               call            )
775                     __field(pgoff_t,                    first           )
776                     __field(pgoff_t,                    last            )
777                     __field(unsigned int,               nr              )
778                     __field(unsigned int,               bytes           )
779                     __field(unsigned int,               offset          )
780                     __field(unsigned int,               flags           )
781                              ),
782
783             TP_fast_assign(
784                     __entry->call = call->debug_id;
785                     __entry->first = first;
786                     __entry->last = last;
787                     __entry->nr = msg->msg_iter.nr_segs;
788                     __entry->bytes = msg->msg_iter.count;
789                     __entry->offset = offset;
790                     __entry->flags = msg->msg_flags;
791                            ),
792
793             TP_printk(" c=%08x %lx-%lx-%lx b=%x o=%x f=%x",
794                       __entry->call,
795                       __entry->first, __entry->first + __entry->nr - 1, __entry->last,
796                       __entry->bytes, __entry->offset,
797                       __entry->flags)
798             );
799
800 TRACE_EVENT(afs_sent_pages,
801             TP_PROTO(struct afs_call *call, pgoff_t first, pgoff_t last,
802                      pgoff_t cursor, int ret),
803
804             TP_ARGS(call, first, last, cursor, ret),
805
806             TP_STRUCT__entry(
807                     __field(unsigned int,               call            )
808                     __field(pgoff_t,                    first           )
809                     __field(pgoff_t,                    last            )
810                     __field(pgoff_t,                    cursor          )
811                     __field(int,                        ret             )
812                              ),
813
814             TP_fast_assign(
815                     __entry->call = call->debug_id;
816                     __entry->first = first;
817                     __entry->last = last;
818                     __entry->cursor = cursor;
819                     __entry->ret = ret;
820                            ),
821
822             TP_printk(" c=%08x %lx-%lx c=%lx r=%d",
823                       __entry->call,
824                       __entry->first, __entry->last,
825                       __entry->cursor, __entry->ret)
826             );
827
828 TRACE_EVENT(afs_dir_check_failed,
829             TP_PROTO(struct afs_vnode *vnode, loff_t off, loff_t i_size),
830
831             TP_ARGS(vnode, off, i_size),
832
833             TP_STRUCT__entry(
834                     __field(struct afs_vnode *,         vnode           )
835                     __field(loff_t,                     off             )
836                     __field(loff_t,                     i_size          )
837                              ),
838
839             TP_fast_assign(
840                     __entry->vnode = vnode;
841                     __entry->off = off;
842                     __entry->i_size = i_size;
843                            ),
844
845             TP_printk("vn=%p %llx/%llx",
846                       __entry->vnode, __entry->off, __entry->i_size)
847             );
848
849 /*
850  * We use page->private to hold the amount of the page that we've written to,
851  * splitting the field into two parts.  However, we need to represent a range
852  * 0...PAGE_SIZE inclusive, so we can't support 64K pages on a 32-bit system.
853  */
854 #if PAGE_SIZE > 32768
855 #define AFS_PRIV_MAX    0xffffffff
856 #define AFS_PRIV_SHIFT  32
857 #else
858 #define AFS_PRIV_MAX    0xffff
859 #define AFS_PRIV_SHIFT  16
860 #endif
861
862 TRACE_EVENT(afs_page_dirty,
863             TP_PROTO(struct afs_vnode *vnode, const char *where,
864                      pgoff_t page, unsigned long priv),
865
866             TP_ARGS(vnode, where, page, priv),
867
868             TP_STRUCT__entry(
869                     __field(struct afs_vnode *,         vnode           )
870                     __field(const char *,               where           )
871                     __field(pgoff_t,                    page            )
872                     __field(unsigned long,              priv            )
873                              ),
874
875             TP_fast_assign(
876                     __entry->vnode = vnode;
877                     __entry->where = where;
878                     __entry->page = page;
879                     __entry->priv = priv;
880                            ),
881
882             TP_printk("vn=%p %lx %s %lu-%lu",
883                       __entry->vnode, __entry->page, __entry->where,
884                       __entry->priv & AFS_PRIV_MAX,
885                       __entry->priv >> AFS_PRIV_SHIFT)
886             );
887
888 TRACE_EVENT(afs_call_state,
889             TP_PROTO(struct afs_call *call,
890                      enum afs_call_state from,
891                      enum afs_call_state to,
892                      int ret, u32 remote_abort),
893
894             TP_ARGS(call, from, to, ret, remote_abort),
895
896             TP_STRUCT__entry(
897                     __field(unsigned int,               call            )
898                     __field(enum afs_call_state,        from            )
899                     __field(enum afs_call_state,        to              )
900                     __field(int,                        ret             )
901                     __field(u32,                        abort           )
902                              ),
903
904             TP_fast_assign(
905                     __entry->call = call->debug_id;
906                     __entry->from = from;
907                     __entry->to = to;
908                     __entry->ret = ret;
909                     __entry->abort = remote_abort;
910                            ),
911
912             TP_printk("c=%08x %u->%u r=%d ab=%d",
913                       __entry->call,
914                       __entry->from, __entry->to,
915                       __entry->ret, __entry->abort)
916             );
917
918 TRACE_EVENT(afs_lookup,
919             TP_PROTO(struct afs_vnode *dvnode, const struct qstr *name,
920                      struct afs_fid *fid),
921
922             TP_ARGS(dvnode, name, fid),
923
924             TP_STRUCT__entry(
925                     __field_struct(struct afs_fid,      dfid            )
926                     __field_struct(struct afs_fid,      fid             )
927                     __array(char,                       name, 24        )
928                              ),
929
930             TP_fast_assign(
931                     int __len = min_t(int, name->len, 23);
932                     __entry->dfid = dvnode->fid;
933                     __entry->fid = *fid;
934                     memcpy(__entry->name, name->name, __len);
935                     __entry->name[__len] = 0;
936                            ),
937
938             TP_printk("d=%llx:%llx:%x \"%s\" f=%llx:%x",
939                       __entry->dfid.vid, __entry->dfid.vnode, __entry->dfid.unique,
940                       __entry->name,
941                       __entry->fid.vnode, __entry->fid.unique)
942             );
943
944 TRACE_EVENT(afs_edit_dir,
945             TP_PROTO(struct afs_vnode *dvnode,
946                      enum afs_edit_dir_reason why,
947                      enum afs_edit_dir_op op,
948                      unsigned int block,
949                      unsigned int slot,
950                      unsigned int f_vnode,
951                      unsigned int f_unique,
952                      const char *name),
953
954             TP_ARGS(dvnode, why, op, block, slot, f_vnode, f_unique, name),
955
956             TP_STRUCT__entry(
957                     __field(unsigned int,               vnode           )
958                     __field(unsigned int,               unique          )
959                     __field(enum afs_edit_dir_reason,   why             )
960                     __field(enum afs_edit_dir_op,       op              )
961                     __field(unsigned int,               block           )
962                     __field(unsigned short,             slot            )
963                     __field(unsigned int,               f_vnode         )
964                     __field(unsigned int,               f_unique        )
965                     __array(char,                       name, 24        )
966                              ),
967
968             TP_fast_assign(
969                     int __len = strlen(name);
970                     __len = min(__len, 23);
971                     __entry->vnode      = dvnode->fid.vnode;
972                     __entry->unique     = dvnode->fid.unique;
973                     __entry->why        = why;
974                     __entry->op         = op;
975                     __entry->block      = block;
976                     __entry->slot       = slot;
977                     __entry->f_vnode    = f_vnode;
978                     __entry->f_unique   = f_unique;
979                     memcpy(__entry->name, name, __len);
980                     __entry->name[__len] = 0;
981                            ),
982
983             TP_printk("d=%x:%x %s %s %u[%u] f=%x:%x \"%s\"",
984                       __entry->vnode, __entry->unique,
985                       __print_symbolic(__entry->why, afs_edit_dir_reasons),
986                       __print_symbolic(__entry->op, afs_edit_dir_ops),
987                       __entry->block, __entry->slot,
988                       __entry->f_vnode, __entry->f_unique,
989                       __entry->name)
990             );
991
992 TRACE_EVENT(afs_protocol_error,
993             TP_PROTO(struct afs_call *call, int error, enum afs_eproto_cause cause),
994
995             TP_ARGS(call, error, cause),
996
997             TP_STRUCT__entry(
998                     __field(unsigned int,               call            )
999                     __field(int,                        error           )
1000                     __field(enum afs_eproto_cause,      cause           )
1001                              ),
1002
1003             TP_fast_assign(
1004                     __entry->call = call ? call->debug_id : 0;
1005                     __entry->error = error;
1006                     __entry->cause = cause;
1007                            ),
1008
1009             TP_printk("c=%08x r=%d %s",
1010                       __entry->call, __entry->error,
1011                       __print_symbolic(__entry->cause, afs_eproto_causes))
1012             );
1013
1014 TRACE_EVENT(afs_io_error,
1015             TP_PROTO(unsigned int call, int error, enum afs_io_error where),
1016
1017             TP_ARGS(call, error, where),
1018
1019             TP_STRUCT__entry(
1020                     __field(unsigned int,       call            )
1021                     __field(int,                error           )
1022                     __field(enum afs_io_error,  where           )
1023                              ),
1024
1025             TP_fast_assign(
1026                     __entry->call = call;
1027                     __entry->error = error;
1028                     __entry->where = where;
1029                            ),
1030
1031             TP_printk("c=%08x r=%d %s",
1032                       __entry->call, __entry->error,
1033                       __print_symbolic(__entry->where, afs_io_errors))
1034             );
1035
1036 TRACE_EVENT(afs_file_error,
1037             TP_PROTO(struct afs_vnode *vnode, int error, enum afs_file_error where),
1038
1039             TP_ARGS(vnode, error, where),
1040
1041             TP_STRUCT__entry(
1042                     __field_struct(struct afs_fid,      fid             )
1043                     __field(int,                        error           )
1044                     __field(enum afs_file_error,        where           )
1045                              ),
1046
1047             TP_fast_assign(
1048                     __entry->fid = vnode->fid;
1049                     __entry->error = error;
1050                     __entry->where = where;
1051                            ),
1052
1053             TP_printk("%llx:%llx:%x r=%d %s",
1054                       __entry->fid.vid, __entry->fid.vnode, __entry->fid.unique,
1055                       __entry->error,
1056                       __print_symbolic(__entry->where, afs_file_errors))
1057             );
1058
1059 TRACE_EVENT(afs_cm_no_server,
1060             TP_PROTO(struct afs_call *call, struct sockaddr_rxrpc *srx),
1061
1062             TP_ARGS(call, srx),
1063
1064             TP_STRUCT__entry(
1065                     __field(unsigned int,                       call    )
1066                     __field(unsigned int,                       op_id   )
1067                     __field_struct(struct sockaddr_rxrpc,       srx     )
1068                              ),
1069
1070             TP_fast_assign(
1071                     __entry->call = call->debug_id;
1072                     __entry->op_id = call->operation_ID;
1073                     memcpy(&__entry->srx, srx, sizeof(__entry->srx));
1074                            ),
1075
1076             TP_printk("c=%08x op=%u %pISpc",
1077                       __entry->call, __entry->op_id, &__entry->srx.transport)
1078             );
1079
1080 TRACE_EVENT(afs_cm_no_server_u,
1081             TP_PROTO(struct afs_call *call, const uuid_t *uuid),
1082
1083             TP_ARGS(call, uuid),
1084
1085             TP_STRUCT__entry(
1086                     __field(unsigned int,                       call    )
1087                     __field(unsigned int,                       op_id   )
1088                     __field_struct(uuid_t,                      uuid    )
1089                              ),
1090
1091             TP_fast_assign(
1092                     __entry->call = call->debug_id;
1093                     __entry->op_id = call->operation_ID;
1094                     memcpy(&__entry->uuid, uuid, sizeof(__entry->uuid));
1095                            ),
1096
1097             TP_printk("c=%08x op=%u %pU",
1098                       __entry->call, __entry->op_id, &__entry->uuid)
1099             );
1100
1101 TRACE_EVENT(afs_flock_ev,
1102             TP_PROTO(struct afs_vnode *vnode, struct file_lock *fl,
1103                      enum afs_flock_event event, int error),
1104
1105             TP_ARGS(vnode, fl, event, error),
1106
1107             TP_STRUCT__entry(
1108                     __field_struct(struct afs_fid,      fid             )
1109                     __field(enum afs_flock_event,       event           )
1110                     __field(enum afs_lock_state,        state           )
1111                     __field(int,                        error           )
1112                     __field(unsigned int,               debug_id        )
1113                              ),
1114
1115             TP_fast_assign(
1116                     __entry->fid = vnode->fid;
1117                     __entry->event = event;
1118                     __entry->state = vnode->lock_state;
1119                     __entry->error = error;
1120                     __entry->debug_id = fl ? fl->fl_u.afs.debug_id : 0;
1121                            ),
1122
1123             TP_printk("%llx:%llx:%x %04x %s s=%s e=%d",
1124                       __entry->fid.vid, __entry->fid.vnode, __entry->fid.unique,
1125                       __entry->debug_id,
1126                       __print_symbolic(__entry->event, afs_flock_events),
1127                       __print_symbolic(__entry->state, afs_flock_states),
1128                       __entry->error)
1129             );
1130
1131 TRACE_EVENT(afs_flock_op,
1132             TP_PROTO(struct afs_vnode *vnode, struct file_lock *fl,
1133                      enum afs_flock_operation op),
1134
1135             TP_ARGS(vnode, fl, op),
1136
1137             TP_STRUCT__entry(
1138                     __field_struct(struct afs_fid,      fid             )
1139                     __field(loff_t,                     from            )
1140                     __field(loff_t,                     len             )
1141                     __field(enum afs_flock_operation,   op              )
1142                     __field(unsigned char,              type            )
1143                     __field(unsigned int,               flags           )
1144                     __field(unsigned int,               debug_id        )
1145                              ),
1146
1147             TP_fast_assign(
1148                     __entry->fid = vnode->fid;
1149                     __entry->from = fl->fl_start;
1150                     __entry->len = fl->fl_end - fl->fl_start + 1;
1151                     __entry->op = op;
1152                     __entry->type = fl->fl_type;
1153                     __entry->flags = fl->fl_flags;
1154                     __entry->debug_id = fl->fl_u.afs.debug_id;
1155                            ),
1156
1157             TP_printk("%llx:%llx:%x %04x %s t=%s R=%llx/%llx f=%x",
1158                       __entry->fid.vid, __entry->fid.vnode, __entry->fid.unique,
1159                       __entry->debug_id,
1160                       __print_symbolic(__entry->op, afs_flock_operations),
1161                       __print_symbolic(__entry->type, afs_flock_types),
1162                       __entry->from, __entry->len, __entry->flags)
1163             );
1164
1165 TRACE_EVENT(afs_reload_dir,
1166             TP_PROTO(struct afs_vnode *vnode),
1167
1168             TP_ARGS(vnode),
1169
1170             TP_STRUCT__entry(
1171                     __field_struct(struct afs_fid,      fid             )
1172                              ),
1173
1174             TP_fast_assign(
1175                     __entry->fid = vnode->fid;
1176                            ),
1177
1178             TP_printk("%llx:%llx:%x",
1179                       __entry->fid.vid, __entry->fid.vnode, __entry->fid.unique)
1180             );
1181
1182 TRACE_EVENT(afs_silly_rename,
1183             TP_PROTO(struct afs_vnode *vnode, bool done),
1184
1185             TP_ARGS(vnode, done),
1186
1187             TP_STRUCT__entry(
1188                     __field_struct(struct afs_fid,      fid             )
1189                     __field(bool,                       done            )
1190                              ),
1191
1192             TP_fast_assign(
1193                     __entry->fid = vnode->fid;
1194                     __entry->done = done;
1195                            ),
1196
1197             TP_printk("%llx:%llx:%x done=%u",
1198                       __entry->fid.vid, __entry->fid.vnode, __entry->fid.unique,
1199                       __entry->done)
1200             );
1201
1202 TRACE_EVENT(afs_get_tree,
1203             TP_PROTO(struct afs_cell *cell, struct afs_volume *volume),
1204
1205             TP_ARGS(cell, volume),
1206
1207             TP_STRUCT__entry(
1208                     __field(u64,                        vid             )
1209                     __array(char,                       cell, 24        )
1210                     __array(char,                       volume, 24      )
1211                              ),
1212
1213             TP_fast_assign(
1214                     int __len;
1215                     __entry->vid = volume->vid;
1216                     __len = min_t(int, cell->name_len, 23);
1217                     memcpy(__entry->cell, cell->name, __len);
1218                     __entry->cell[__len] = 0;
1219                     __len = min_t(int, volume->name_len, 23);
1220                     memcpy(__entry->volume, volume->name, __len);
1221                     __entry->volume[__len] = 0;
1222                            ),
1223
1224             TP_printk("--- MOUNT %s:%s %llx",
1225                       __entry->cell, __entry->volume, __entry->vid)
1226             );
1227
1228 TRACE_EVENT(afs_cb_break,
1229             TP_PROTO(struct afs_fid *fid, unsigned int cb_break,
1230                      enum afs_cb_break_reason reason, bool skipped),
1231
1232             TP_ARGS(fid, cb_break, reason, skipped),
1233
1234             TP_STRUCT__entry(
1235                     __field_struct(struct afs_fid,      fid             )
1236                     __field(unsigned int,               cb_break        )
1237                     __field(enum afs_cb_break_reason,   reason          )
1238                     __field(bool,                       skipped         )
1239                              ),
1240
1241             TP_fast_assign(
1242                     __entry->fid        = *fid;
1243                     __entry->cb_break   = cb_break;
1244                     __entry->reason     = reason;
1245                     __entry->skipped    = skipped;
1246                            ),
1247
1248             TP_printk("%llx:%llx:%x b=%x s=%u %s",
1249                       __entry->fid.vid, __entry->fid.vnode, __entry->fid.unique,
1250                       __entry->cb_break,
1251                       __entry->skipped,
1252                       __print_symbolic(__entry->reason, afs_cb_break_reasons))
1253             );
1254
1255 TRACE_EVENT(afs_cb_miss,
1256             TP_PROTO(struct afs_fid *fid, enum afs_cb_break_reason reason),
1257
1258             TP_ARGS(fid, reason),
1259
1260             TP_STRUCT__entry(
1261                     __field_struct(struct afs_fid,      fid             )
1262                     __field(enum afs_cb_break_reason,   reason          )
1263                              ),
1264
1265             TP_fast_assign(
1266                     __entry->fid        = *fid;
1267                     __entry->reason     = reason;
1268                            ),
1269
1270             TP_printk(" %llx:%llx:%x %s",
1271                       __entry->fid.vid, __entry->fid.vnode, __entry->fid.unique,
1272                       __print_symbolic(__entry->reason, afs_cb_break_reasons))
1273             );
1274
1275 TRACE_EVENT(afs_server,
1276             TP_PROTO(struct afs_server *server, int ref, int active,
1277                      enum afs_server_trace reason),
1278
1279             TP_ARGS(server, ref, active, reason),
1280
1281             TP_STRUCT__entry(
1282                     __field(unsigned int,               server          )
1283                     __field(int,                        ref             )
1284                     __field(int,                        active          )
1285                     __field(int,                        reason          )
1286                              ),
1287
1288             TP_fast_assign(
1289                     __entry->server = server->debug_id;
1290                     __entry->ref = ref;
1291                     __entry->active = active;
1292                     __entry->reason = reason;
1293                            ),
1294
1295             TP_printk("s=%08x %s u=%d a=%d",
1296                       __entry->server,
1297                       __print_symbolic(__entry->reason, afs_server_traces),
1298                       __entry->ref,
1299                       __entry->active)
1300             );
1301
1302 #endif /* _TRACE_AFS_H */
1303
1304 /* This part must be outside protection */
1305 #include <trace/define_trace.h>