/* SPDX-License-Identifier: GPL-2.0-or-later */
/* AFS tracepoints
 *
 * Copyright (C) 2016 Red Hat, Inc. All Rights Reserved.
 * Written by David Howells (dhowells@redhat.com)
 */
#undef TRACE_SYSTEM
#define TRACE_SYSTEM afs

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

#include <linux/tracepoint.h>

/*
 * Define enums for tracing information.
 */
#ifndef __AFS_DECLARE_TRACE_ENUMS_ONCE_ONLY
#define __AFS_DECLARE_TRACE_ENUMS_ONCE_ONLY

enum afs_fs_operation {
	afs_FS_FetchData		= 130,	/* AFS Fetch file data */
	afs_FS_FetchACL			= 131,	/* AFS Fetch file ACL */
	afs_FS_FetchStatus		= 132,	/* AFS Fetch file status */
	afs_FS_StoreData		= 133,	/* AFS Store file data */
	afs_FS_StoreACL			= 134,	/* AFS Store file ACL */
	afs_FS_StoreStatus		= 135,	/* AFS Store file status */
	afs_FS_RemoveFile		= 136,	/* AFS Remove a file */
	afs_FS_CreateFile		= 137,	/* AFS Create a file */
	afs_FS_Rename			= 138,	/* AFS Rename or move a file or directory */
	afs_FS_Symlink			= 139,	/* AFS Create a symbolic link */
	afs_FS_Link			= 140,	/* AFS Create a hard link */
	afs_FS_MakeDir			= 141,	/* AFS Create a directory */
	afs_FS_RemoveDir		= 142,	/* AFS Remove a directory */
	afs_FS_GetVolumeInfo		= 148,	/* AFS Get information about a volume */
	afs_FS_GetVolumeStatus		= 149,	/* AFS Get volume status information */
	afs_FS_GetRootVolume		= 151,	/* AFS Get root volume name */
	afs_FS_SetLock			= 156,	/* AFS Request a file lock */
	afs_FS_ExtendLock		= 157,	/* AFS Extend a file lock */
	afs_FS_ReleaseLock		= 158,	/* AFS Release a file lock */
	afs_FS_Lookup			= 161,	/* AFS lookup file in directory */
	afs_FS_InlineBulkStatus		= 65536, /* AFS Fetch multiple file statuses with errors */
	afs_FS_FetchData64		= 65537, /* AFS Fetch file data */
	afs_FS_StoreData64		= 65538, /* AFS Store file data */
	afs_FS_GiveUpAllCallBacks	= 65539, /* AFS Give up all our callbacks on a server */
	afs_FS_GetCapabilities		= 65540, /* AFS Get FS server capabilities */

	yfs_FS_FetchData		= 130,	 /* YFS Fetch file data */
	yfs_FS_FetchACL			= 64131, /* YFS Fetch file ACL */
	yfs_FS_FetchStatus		= 64132, /* YFS Fetch file status */
	yfs_FS_StoreACL			= 64134, /* YFS Store file ACL */
	yfs_FS_StoreStatus		= 64135, /* YFS Store file status */
	yfs_FS_RemoveFile		= 64136, /* YFS Remove a file */
	yfs_FS_CreateFile		= 64137, /* YFS Create a file */
	yfs_FS_Rename			= 64138, /* YFS Rename or move a file or directory */
	yfs_FS_Symlink			= 64139, /* YFS Create a symbolic link */
	yfs_FS_Link			= 64140, /* YFS Create a hard link */
	yfs_FS_MakeDir			= 64141, /* YFS Create a directory */
	yfs_FS_RemoveDir		= 64142, /* YFS Remove a directory */
	yfs_FS_GetVolumeStatus		= 64149, /* YFS Get volume status information */
	yfs_FS_SetVolumeStatus		= 64150, /* YFS Set volume status information */
	yfs_FS_SetLock			= 64156, /* YFS Request a file lock */
	yfs_FS_ExtendLock		= 64157, /* YFS Extend a file lock */
	yfs_FS_ReleaseLock		= 64158, /* YFS Release a file lock */
	yfs_FS_Lookup			= 64161, /* YFS lookup file in directory */
	yfs_FS_FlushCPS			= 64165,
	yfs_FS_FetchOpaqueACL		= 64168,
	yfs_FS_WhoAmI			= 64170,
	yfs_FS_RemoveACL		= 64171,
	yfs_FS_RemoveFile2		= 64173,
	yfs_FS_StoreOpaqueACL2		= 64174,
	yfs_FS_Rename_Replace		= 64176,
	yfs_FS_Rename_NoReplace		= 64177,
	yfs_FS_Rename_Exchange		= 64187,
	yfs_FS_InlineBulkStatus		= 64536, /* YFS Fetch multiple file statuses with errors */
	yfs_FS_FetchData64		= 64537, /* YFS Fetch file data */
	yfs_FS_StoreData64		= 64538, /* YFS Store file data */
	yfs_FS_UpdateSymlink		= 64540,
};

enum afs_vl_operation {
	afs_VL_GetEntryByNameU	= 527,		/* AFS Get Vol Entry By Name operation ID */
	afs_VL_GetAddrsU	= 533,		/* AFS Get FS server addresses */
	afs_YFSVL_GetEndpoints	= 64002,	/* YFS Get FS & Vol server addresses */
	afs_YFSVL_GetCellName	= 64014,	/* YFS Get actual cell name */
	afs_VL_GetCapabilities	= 65537,	/* AFS Get VL server capabilities */
};

enum afs_cm_operation {
	afs_CB_CallBack			= 204,	/* AFS break callback promises */
	afs_CB_InitCallBackState	= 205,	/* AFS initialise callback state */
	afs_CB_Probe			= 206,	/* AFS probe client */
	afs_CB_GetLock			= 207,	/* AFS get contents of CM lock table */
	afs_CB_GetCE			= 208,	/* AFS get cache file description */
	afs_CB_GetXStatsVersion		= 209,	/* AFS get version of extended statistics */
	afs_CB_GetXStats		= 210,	/* AFS get contents of extended statistics data */
	afs_CB_InitCallBackState3	= 213,	/* AFS initialise callback state, version 3 */
	afs_CB_ProbeUuid		= 214,	/* AFS check the client hasn't rebooted */
};

enum yfs_cm_operation {
	yfs_CB_Probe			= 206,	/* YFS probe client */
	yfs_CB_GetLock			= 207,	/* YFS get contents of CM lock table */
	yfs_CB_XStatsVersion		= 209,	/* YFS get version of extended statistics */
	yfs_CB_GetXStats		= 210,	/* YFS get contents of extended statistics data */
	yfs_CB_InitCallBackState3	= 213,	/* YFS initialise callback state, version 3 */
	yfs_CB_ProbeUuid		= 214,	/* YFS check the client hasn't rebooted */
	yfs_CB_GetServerPrefs		= 215,
	yfs_CB_GetCellServDV		= 216,
	yfs_CB_GetLocalCell		= 217,
	yfs_CB_GetCacheConfig		= 218,
	yfs_CB_GetCellByNum		= 65537,
	yfs_CB_TellMeAboutYourself	= 65538, /* get client capabilities */
	yfs_CB_CallBack			= 64204,
};

#endif /* end __AFS_DECLARE_TRACE_ENUMS_ONCE_ONLY */

/*
 * Declare tracing information enums and their string mappings for display.
 */
#define afs_call_traces \
	EM(afs_call_trace_alloc,		"ALLOC") \
	EM(afs_call_trace_async_abort,		"ASYAB") \
	EM(afs_call_trace_async_kill,		"ASYKL") \
	EM(afs_call_trace_free,			"FREE ") \
	EM(afs_call_trace_get,			"GET  ") \
	EM(afs_call_trace_put,			"PUT  ") \
	EM(afs_call_trace_wake,			"WAKE ") \
	E_(afs_call_trace_work,			"QUEUE")

#define afs_server_traces \
	EM(afs_server_trace_callback,		"CALLBACK ") \
	EM(afs_server_trace_destroy,		"DESTROY  ") \
	EM(afs_server_trace_free,		"FREE     ") \
	EM(afs_server_trace_gc,			"GC       ") \
	EM(afs_server_trace_get_probe,		"GET probe") \
	EM(afs_server_trace_purging,		"PURGE    ") \
	EM(afs_server_trace_put_cbi,		"PUT cbi  ") \
	EM(afs_server_trace_put_probe,		"PUT probe") \
	EM(afs_server_trace_see_destroyer,	"SEE destr") \
	EM(afs_server_trace_see_expired,	"SEE expd ") \
	EM(afs_server_trace_see_purge,		"SEE purge") \
	EM(afs_server_trace_see_timer,		"SEE timer") \
	EM(afs_server_trace_unuse_call,		"UNU call ") \
	EM(afs_server_trace_unuse_create_fail,	"UNU cfail") \
	EM(afs_server_trace_unuse_slist,	"UNU slist") \
	EM(afs_server_trace_unuse_slist_isort,	"UNU isort") \
	EM(afs_server_trace_update,		"UPDATE   ") \
	EM(afs_server_trace_use_by_uuid,	"USE uuid ") \
	EM(afs_server_trace_use_cm_call,	"USE cm-cl") \
	EM(afs_server_trace_use_get_caps,	"USE gcaps") \
	EM(afs_server_trace_use_give_up_cb,	"USE gvupc") \
	EM(afs_server_trace_use_install,	"USE inst ") \
	E_(afs_server_trace_wait_create,	"WAIT crt ")

#define afs_volume_traces \
	EM(afs_volume_trace_alloc,		"ALLOC         ") \
	EM(afs_volume_trace_free,		"FREE          ") \
	EM(afs_volume_trace_get_alloc_sbi,	"GET sbi-alloc ") \
	EM(afs_volume_trace_get_callback,	"GET callback  ") \
	EM(afs_volume_trace_get_cell_insert,	"GET cell-insrt") \
	EM(afs_volume_trace_get_new_op,		"GET op-new    ") \
	EM(afs_volume_trace_get_query_alias,	"GET cell-alias") \
	EM(afs_volume_trace_put_callback,	"PUT callback  ") \
	EM(afs_volume_trace_put_cell_dup,	"PUT cell-dup  ") \
	EM(afs_volume_trace_put_cell_root,	"PUT cell-root ") \
	EM(afs_volume_trace_put_destroy_sbi,	"PUT sbi-destry") \
	EM(afs_volume_trace_put_free_fc,	"PUT fc-free   ") \
	EM(afs_volume_trace_put_put_op,		"PUT op-put    ") \
	EM(afs_volume_trace_put_query_alias,	"PUT cell-alias") \
	EM(afs_volume_trace_put_validate_fc,	"PUT fc-validat") \
	E_(afs_volume_trace_remove,		"REMOVE        ")

#define afs_cell_traces \
	EM(afs_cell_trace_alloc,		"ALLOC     ") \
	EM(afs_cell_trace_destroy,		"DESTROY   ") \
	EM(afs_cell_trace_free,			"FREE      ") \
	EM(afs_cell_trace_get_atcell,		"GET atcell") \
	EM(afs_cell_trace_get_server,		"GET server") \
	EM(afs_cell_trace_get_vol,		"GET vol   ") \
	EM(afs_cell_trace_purge,		"PURGE     ") \
	EM(afs_cell_trace_put_atcell,		"PUT atcell") \
	EM(afs_cell_trace_put_candidate,	"PUT candid") \
	EM(afs_cell_trace_put_final,		"PUT final ") \
	EM(afs_cell_trace_put_server,		"PUT server") \
	EM(afs_cell_trace_put_vol,		"PUT vol   ") \
	EM(afs_cell_trace_queue_again,		"QUE again ") \
	EM(afs_cell_trace_queue_dns,		"QUE dns   ") \
	EM(afs_cell_trace_queue_new,		"QUE new   ") \
	EM(afs_cell_trace_queue_purge,		"QUE purge ") \
	EM(afs_cell_trace_manage,		"MANAGE    ") \
	EM(afs_cell_trace_managed,		"MANAGED   ") \
	EM(afs_cell_trace_see_source,		"SEE source") \
	EM(afs_cell_trace_see_mgmt_timer,	"SEE mtimer") \
	EM(afs_cell_trace_unuse_alias,		"UNU alias ") \
	EM(afs_cell_trace_unuse_check_alias,	"UNU chk-al") \
	EM(afs_cell_trace_unuse_delete,		"UNU delete") \
	EM(afs_cell_trace_unuse_dynroot_mntpt,	"UNU dyn-mp") \
	EM(afs_cell_trace_unuse_fc,		"UNU fc    ") \
	EM(afs_cell_trace_unuse_lookup_dynroot,	"UNU lu-dyn") \
	EM(afs_cell_trace_unuse_lookup_error,	"UNU lu-err") \
	EM(afs_cell_trace_unuse_mntpt,		"UNU mntpt ") \
	EM(afs_cell_trace_unuse_no_pin,		"UNU no-pin") \
	EM(afs_cell_trace_unuse_parse,		"UNU parse ") \
	EM(afs_cell_trace_unuse_pin,		"UNU pin   ") \
	EM(afs_cell_trace_unuse_sbi,		"UNU sbi   ") \
	EM(afs_cell_trace_unuse_ws,		"UNU ws    ") \
	EM(afs_cell_trace_use_alias,		"USE alias ") \
	EM(afs_cell_trace_use_check_alias,	"USE chk-al") \
	EM(afs_cell_trace_use_fc,		"USE fc    ") \
	EM(afs_cell_trace_use_fc_alias,		"USE fc-al ") \
	EM(afs_cell_trace_use_lookup_add,	"USE lu-add") \
	EM(afs_cell_trace_use_lookup_canonical,	"USE lu-can") \
	EM(afs_cell_trace_use_lookup_dynroot,	"USE lu-dyn") \
	EM(afs_cell_trace_use_lookup_mntpt,	"USE lu-mpt") \
	EM(afs_cell_trace_use_lookup_mount,	"USE lu-mnt") \
	EM(afs_cell_trace_use_lookup_ws,	"USE lu-ws ") \
	EM(afs_cell_trace_use_mntpt,		"USE mntpt ") \
	EM(afs_cell_trace_use_pin,		"USE pin   ") \
	EM(afs_cell_trace_use_probe,		"USE probe ") \
	EM(afs_cell_trace_use_sbi,		"USE sbi   ") \
	E_(afs_cell_trace_wait,			"WAIT      ")

#define afs_alist_traces \
	EM(afs_alist_trace_alloc,		"ALLOC     ") \
	EM(afs_alist_trace_get_estate,		"GET estate") \
	EM(afs_alist_trace_get_vlgetcaps,	"GET vgtcap") \
	EM(afs_alist_trace_get_vlprobe,		"GET vprobe") \
	EM(afs_alist_trace_get_vlrotate_set,	"GET vl-rot") \
	EM(afs_alist_trace_put_estate,		"PUT estate") \
	EM(afs_alist_trace_put_getaddru,	"PUT GtAdrU") \
	EM(afs_alist_trace_put_parse_empty,	"PUT p-empt") \
	EM(afs_alist_trace_put_parse_error,	"PUT p-err ") \
	EM(afs_alist_trace_put_server_create,	"PUT sv-crt") \
	EM(afs_alist_trace_put_server_oom,	"PUT sv-oom") \
	EM(afs_alist_trace_put_server_update,	"PUT sv-upd") \
	EM(afs_alist_trace_put_vlgetcaps,	"PUT vgtcap") \
	EM(afs_alist_trace_put_vlprobe,		"PUT vprobe") \
	EM(afs_alist_trace_put_vlrotate_end,	"PUT vr-end") \
	EM(afs_alist_trace_put_vlrotate_fail,	"PUT vr-fai") \
	EM(afs_alist_trace_put_vlrotate_next,	"PUT vr-nxt") \
	EM(afs_alist_trace_put_vlrotate_restart,"PUT vr-rst") \
	EM(afs_alist_trace_put_vlserver,	"PUT vlsrvr") \
	EM(afs_alist_trace_put_vlserver_old,	"PUT vs-old") \
	E_(afs_alist_trace_free,		"FREE      ")

#define afs_estate_traces \
	EM(afs_estate_trace_alloc_probe,	"ALLOC prob") \
	EM(afs_estate_trace_alloc_server,	"ALLOC srvr") \
	EM(afs_estate_trace_get_server_state,	"GET srv-st") \
	EM(afs_estate_trace_get_getcaps,	"GET getcap") \
	EM(afs_estate_trace_put_getcaps,	"PUT getcap") \
	EM(afs_estate_trace_put_probe,		"PUT probe ") \
	EM(afs_estate_trace_put_server,		"PUT server") \
	EM(afs_estate_trace_put_server_state,	"PUT srv-st") \
	E_(afs_estate_trace_free,		"FREE      ")

#define afs_fs_operations \
	EM(afs_FS_FetchData,			"FS.FetchData") \
	EM(afs_FS_FetchStatus,			"FS.FetchStatus") \
	EM(afs_FS_StoreData,			"FS.StoreData") \
	EM(afs_FS_StoreStatus,			"FS.StoreStatus") \
	EM(afs_FS_RemoveFile,			"FS.RemoveFile") \
	EM(afs_FS_CreateFile,			"FS.CreateFile") \
	EM(afs_FS_Rename,			"FS.Rename") \
	EM(afs_FS_Symlink,			"FS.Symlink") \
	EM(afs_FS_Link,				"FS.Link") \
	EM(afs_FS_MakeDir,			"FS.MakeDir") \
	EM(afs_FS_RemoveDir,			"FS.RemoveDir") \
	EM(afs_FS_GetVolumeInfo,		"FS.GetVolumeInfo") \
	EM(afs_FS_GetVolumeStatus,		"FS.GetVolumeStatus") \
	EM(afs_FS_GetRootVolume,		"FS.GetRootVolume") \
	EM(afs_FS_SetLock,			"FS.SetLock") \
	EM(afs_FS_ExtendLock,			"FS.ExtendLock") \
	EM(afs_FS_ReleaseLock,			"FS.ReleaseLock") \
	EM(afs_FS_Lookup,			"FS.Lookup") \
	EM(afs_FS_InlineBulkStatus,		"FS.InlineBulkStatus") \
	EM(afs_FS_FetchData64,			"FS.FetchData64") \
	EM(afs_FS_StoreData64,			"FS.StoreData64") \
	EM(afs_FS_GiveUpAllCallBacks,		"FS.GiveUpAllCallBacks") \
	EM(afs_FS_GetCapabilities,		"FS.GetCapabilities") \
	EM(yfs_FS_FetchACL,			"YFS.FetchACL") \
	EM(yfs_FS_FetchStatus,			"YFS.FetchStatus") \
	EM(yfs_FS_StoreACL,			"YFS.StoreACL") \
	EM(yfs_FS_StoreStatus,			"YFS.StoreStatus") \
	EM(yfs_FS_RemoveFile,			"YFS.RemoveFile") \
	EM(yfs_FS_CreateFile,			"YFS.CreateFile") \
	EM(yfs_FS_Rename,			"YFS.Rename") \
	EM(yfs_FS_Symlink,			"YFS.Symlink") \
	EM(yfs_FS_Link,				"YFS.Link") \
	EM(yfs_FS_MakeDir,			"YFS.MakeDir") \
	EM(yfs_FS_RemoveDir,			"YFS.RemoveDir") \
	EM(yfs_FS_GetVolumeStatus,		"YFS.GetVolumeStatus") \
	EM(yfs_FS_SetVolumeStatus,		"YFS.SetVolumeStatus") \
	EM(yfs_FS_SetLock,			"YFS.SetLock") \
	EM(yfs_FS_ExtendLock,			"YFS.ExtendLock") \
	EM(yfs_FS_ReleaseLock,			"YFS.ReleaseLock") \
	EM(yfs_FS_Lookup,			"YFS.Lookup") \
	EM(yfs_FS_FlushCPS,			"YFS.FlushCPS") \
	EM(yfs_FS_FetchOpaqueACL,		"YFS.FetchOpaqueACL") \
	EM(yfs_FS_WhoAmI,			"YFS.WhoAmI") \
	EM(yfs_FS_RemoveACL,			"YFS.RemoveACL") \
	EM(yfs_FS_RemoveFile2,			"YFS.RemoveFile2") \
	EM(yfs_FS_StoreOpaqueACL2,		"YFS.StoreOpaqueACL2") \
	EM(yfs_FS_Rename_Replace,		"YFS.Rename_Replace") \
	EM(yfs_FS_Rename_NoReplace,		"YFS.Rename_NoReplace") \
	EM(yfs_FS_Rename_Exchange,		"YFS.Rename_Exchange") \
	EM(yfs_FS_InlineBulkStatus,		"YFS.InlineBulkStatus") \
	EM(yfs_FS_FetchData64,			"YFS.FetchData64") \
	EM(yfs_FS_StoreData64,			"YFS.StoreData64") \
	E_(yfs_FS_UpdateSymlink,		"YFS.UpdateSymlink")

#define afs_vl_operations \
	EM(afs_VL_GetEntryByNameU,		"VL.GetEntryByNameU") \
	EM(afs_VL_GetAddrsU,			"VL.GetAddrsU") \
	EM(afs_YFSVL_GetEndpoints,		"YFSVL.GetEndpoints") \
	EM(afs_YFSVL_GetCellName,		"YFSVL.GetCellName") \
	E_(afs_VL_GetCapabilities,		"VL.GetCapabilities")

#define afs_cm_operations \
	EM(afs_CB_CallBack,			"CB.CallBack") \
	EM(afs_CB_InitCallBackState,		"CB.InitCallBackState") \
	EM(afs_CB_Probe,			"CB.Probe") \
	EM(afs_CB_GetLock,			"CB.GetLock") \
	EM(afs_CB_GetCE,			"CB.GetCE") \
	EM(afs_CB_GetXStatsVersion,		"CB.GetXStatsVersion") \
	EM(afs_CB_GetXStats,			"CB.GetXStats") \
	EM(afs_CB_InitCallBackState3,		"CB.InitCallBackState3") \
	E_(afs_CB_ProbeUuid,			"CB.ProbeUuid")

#define yfs_cm_operations \
	EM(yfs_CB_Probe,			"YFSCB.Probe") \
	EM(yfs_CB_GetLock,			"YFSCB.GetLock") \
	EM(yfs_CB_XStatsVersion,		"YFSCB.XStatsVersion") \
	EM(yfs_CB_GetXStats,			"YFSCB.GetXStats") \
	EM(yfs_CB_InitCallBackState3,		"YFSCB.InitCallBackState3") \
	EM(yfs_CB_ProbeUuid,			"YFSCB.ProbeUuid") \
	EM(yfs_CB_GetServerPrefs,		"YFSCB.GetServerPrefs") \
	EM(yfs_CB_GetCellServDV,		"YFSCB.GetCellServDV") \
	EM(yfs_CB_GetLocalCell,			"YFSCB.GetLocalCell") \
	EM(yfs_CB_GetCacheConfig,		"YFSCB.GetCacheConfig") \
	EM(yfs_CB_GetCellByNum,			"YFSCB.GetCellByNum") \
	EM(yfs_CB_TellMeAboutYourself,		"YFSCB.TellMeAboutYourself") \
	E_(yfs_CB_CallBack,			"YFSCB.CallBack")

#define afs_cb_promise_traces \
	EM(afs_cb_promise_clear_cb_break,	"CLEAR cb-break") \
	EM(afs_cb_promise_clear_rmdir,		"CLEAR rmdir") \
	EM(afs_cb_promise_clear_rotate_server,	"CLEAR rot-srv") \
	EM(afs_cb_promise_clear_server_change,	"CLEAR srv-chg") \
	EM(afs_cb_promise_clear_vol_init_cb,	"CLEAR vol-init-cb") \
	EM(afs_cb_promise_set_apply_cb,		"SET apply-cb") \
	EM(afs_cb_promise_set_new_inode,	"SET new-inode") \
	E_(afs_cb_promise_set_new_symlink,	"SET new-symlink")

#define afs_vnode_invalid_traces \
	EM(afs_vnode_invalid_trace_cb_ro_snapshot, "cb-ro-snapshot") \
	EM(afs_vnode_invalid_trace_cb_scrub,	"cb-scrub") \
	EM(afs_vnode_invalid_trace_cb_v_break,	"cb-v-break") \
	EM(afs_vnode_invalid_trace_expired,	"expired") \
	EM(afs_vnode_invalid_trace_no_cb_promise, "no-cb-promise") \
	EM(afs_vnode_invalid_trace_vol_expired,	"vol-expired") \
	EM(afs_vnode_invalid_trace_zap_data,	"zap-data") \
	E_(afs_vnode_valid_trace,		"valid")

#define afs_dir_invalid_traces			\
	EM(afs_dir_invalid_edit_add_bad_size,	"edit-add-bad-size") \
	EM(afs_dir_invalid_edit_add_no_slots,	"edit-add-no-slots") \
	EM(afs_dir_invalid_edit_add_too_many_blocks, "edit-add-too-many-blocks") \
	EM(afs_dir_invalid_edit_get_block,	"edit-get-block") \
	EM(afs_dir_invalid_edit_mkdir,		"edit-mkdir") \
	EM(afs_dir_invalid_edit_rem_bad_size,	"edit-rem-bad-size") \
	EM(afs_dir_invalid_edit_rem_wrong_name,	"edit-rem-wrong_name") \
	EM(afs_dir_invalid_edit_upd_bad_size,	"edit-upd-bad-size") \
	EM(afs_dir_invalid_edit_upd_no_dd,	"edit-upd-no-dotdot") \
	EM(afs_dir_invalid_dv_mismatch,		"dv-mismatch") \
	EM(afs_dir_invalid_inval_folio,		"inv-folio") \
	EM(afs_dir_invalid_iter_stale,		"iter-stale") \
	EM(afs_dir_invalid_reclaimed_folio,	"reclaimed-folio") \
	EM(afs_dir_invalid_release_folio,	"rel-folio") \
	EM(afs_dir_invalid_remote,		"remote") \
	E_(afs_dir_invalid_subdir_removed,	"subdir-removed")

#define afs_edit_dir_ops				  \
	EM(afs_edit_dir_create,			"create") \
	EM(afs_edit_dir_create_error,		"c_fail") \
	EM(afs_edit_dir_create_inval,		"c_invl") \
	EM(afs_edit_dir_create_nospc,		"c_nspc") \
	EM(afs_edit_dir_delete,			"delete") \
	EM(afs_edit_dir_delete_error,		"d_err ") \
	EM(afs_edit_dir_delete_inval,		"d_invl") \
	EM(afs_edit_dir_delete_noent,		"d_nent") \
	EM(afs_edit_dir_mkdir,			"mk_ent") \
	EM(afs_edit_dir_update_dd,		"u_ddot") \
	EM(afs_edit_dir_update_error,		"u_fail") \
	EM(afs_edit_dir_update_inval,		"u_invl") \
	E_(afs_edit_dir_update_nodd,		"u_nodd")

#define afs_edit_dir_reasons				  \
	EM(afs_edit_dir_for_create,		"Create") \
	EM(afs_edit_dir_for_link,		"Link  ") \
	EM(afs_edit_dir_for_mkdir,		"MkDir ") \
	EM(afs_edit_dir_for_rename_0,		"Renam0") \
	EM(afs_edit_dir_for_rename_1,		"Renam1") \
	EM(afs_edit_dir_for_rename_2,		"Renam2") \
	EM(afs_edit_dir_for_rename_sub,		"RnmSub") \
	EM(afs_edit_dir_for_rmdir,		"RmDir ") \
	EM(afs_edit_dir_for_silly_0,		"S_Ren0") \
	EM(afs_edit_dir_for_silly_1,		"S_Ren1") \
	EM(afs_edit_dir_for_symlink,		"Symlnk") \
	E_(afs_edit_dir_for_unlink,		"Unlink")

#define afs_eproto_causes			\
	EM(afs_eproto_bad_status,	"BadStatus") \
	EM(afs_eproto_cb_count,		"CbCount") \
	EM(afs_eproto_cb_fid_count,	"CbFidCount") \
	EM(afs_eproto_cellname_len,	"CellNameLen") \
	EM(afs_eproto_file_type,	"FileTYpe") \
	EM(afs_eproto_ibulkst_cb_count,	"IBS.CbCount") \
	EM(afs_eproto_ibulkst_count,	"IBS.FidCount") \
	EM(afs_eproto_motd_len,		"MotdLen") \
	EM(afs_eproto_offline_msg_len,	"OfflineMsgLen") \
	EM(afs_eproto_volname_len,	"VolNameLen") \
	EM(afs_eproto_yvl_fsendpt4_len,	"YVL.FsEnd4Len") \
	EM(afs_eproto_yvl_fsendpt6_len,	"YVL.FsEnd6Len") \
	EM(afs_eproto_yvl_fsendpt_num,	"YVL.FsEndCount") \
	EM(afs_eproto_yvl_fsendpt_type,	"YVL.FsEndType") \
	EM(afs_eproto_yvl_vlendpt4_len,	"YVL.VlEnd4Len") \
	EM(afs_eproto_yvl_vlendpt6_len,	"YVL.VlEnd6Len") \
	E_(afs_eproto_yvl_vlendpt_type,	"YVL.VlEndType")

#define afs_io_errors							\
	EM(afs_io_error_cm_reply,		"CM_REPLY")		\
	EM(afs_io_error_extract,		"EXTRACT")		\
	EM(afs_io_error_fs_probe_fail,		"FS_PROBE_FAIL")	\
	EM(afs_io_error_vl_lookup_fail,		"VL_LOOKUP_FAIL")	\
	E_(afs_io_error_vl_probe_fail,		"VL_PROBE_FAIL")

#define afs_file_errors							\
	EM(afs_file_error_dir_bad_magic,	"DIR_BAD_MAGIC")	\
	EM(afs_file_error_dir_big,		"DIR_BIG")		\
	EM(afs_file_error_dir_missing_page,	"DIR_MISSING_PAGE")	\
	EM(afs_file_error_dir_name_too_long,	"DIR_NAME_TOO_LONG")	\
	EM(afs_file_error_dir_over_end,		"DIR_ENT_OVER_END")	\
	EM(afs_file_error_dir_small,		"DIR_SMALL")		\
	EM(afs_file_error_dir_unmarked_ext,	"DIR_UNMARKED_EXT")	\
	EM(afs_file_error_symlink_big,		"SYM_BIG")		\
	EM(afs_file_error_mntpt,		"MNTPT_READ_FAILED")	\
	E_(afs_file_error_writeback_fail,	"WRITEBACK_FAILED")

#define afs_flock_types							\
	EM(F_RDLCK,				"RDLCK")		\
	EM(F_WRLCK,				"WRLCK")		\
	E_(F_UNLCK,				"UNLCK")

#define afs_flock_states						\
	EM(AFS_VNODE_LOCK_NONE,			"NONE")			\
	EM(AFS_VNODE_LOCK_WAITING_FOR_CB,	"WAIT_FOR_CB")		\
	EM(AFS_VNODE_LOCK_SETTING,		"SETTING")		\
	EM(AFS_VNODE_LOCK_GRANTED,		"GRANTED")		\
	EM(AFS_VNODE_LOCK_EXTENDING,		"EXTENDING")		\
	EM(AFS_VNODE_LOCK_NEED_UNLOCK,		"NEED_UNLOCK")		\
	EM(AFS_VNODE_LOCK_UNLOCKING,		"UNLOCKING")		\
	E_(AFS_VNODE_LOCK_DELETED,		"DELETED")

#define afs_flock_events						\
	EM(afs_flock_acquired,			"Acquired")		\
	EM(afs_flock_callback_break,		"Callback")		\
	EM(afs_flock_defer_unlock,		"D-Unlock")		\
	EM(afs_flock_extend_fail,		"Ext_Fail")		\
	EM(afs_flock_fail_other,		"ErrOther")		\
	EM(afs_flock_fail_perm,			"ErrPerm ")		\
	EM(afs_flock_no_lockers,		"NoLocker")		\
	EM(afs_flock_release_fail,		"Rel_Fail")		\
	EM(afs_flock_silly_delete,		"SillyDel")		\
	EM(afs_flock_timestamp,			"Timestmp")		\
	EM(afs_flock_try_to_lock,		"TryToLck")		\
	EM(afs_flock_vfs_lock,			"VFSLock ")		\
	EM(afs_flock_vfs_locking,		"VFSLking")		\
	EM(afs_flock_waited,			"Waited  ")		\
	EM(afs_flock_waiting,			"Waiting ")		\
	EM(afs_flock_work_extending,		"Extendng")		\
	EM(afs_flock_work_retry,		"Retry   ")		\
	EM(afs_flock_work_unlocking,		"Unlcking")		\
	E_(afs_flock_would_block,		"EWOULDBL")

#define afs_flock_operations						\
	EM(afs_flock_op_copy_lock,		"COPY    ")		\
	EM(afs_flock_op_flock,			"->flock ")		\
	EM(afs_flock_op_grant,			"GRANT   ")		\
	EM(afs_flock_op_lock,			"->lock  ")		\
	EM(afs_flock_op_release_lock,		"RELEASE ")		\
	EM(afs_flock_op_return_ok,		"<-OK    ")		\
	EM(afs_flock_op_return_edeadlk,		"<-EDEADL")		\
	EM(afs_flock_op_return_eagain,		"<-EAGAIN")		\
	EM(afs_flock_op_return_error,		"<-ERROR ")		\
	EM(afs_flock_op_set_lock,		"SET     ")		\
	EM(afs_flock_op_unlock,			"UNLOCK  ")		\
	E_(afs_flock_op_wake,			"WAKE    ")

#define afs_cb_break_reasons						\
	EM(afs_cb_break_no_break,		"no-break")		\
	EM(afs_cb_break_for_callback,		"break-cb")		\
	EM(afs_cb_break_for_creation_regress,	"creation-regress")	\
	EM(afs_cb_break_for_deleted,		"break-del")		\
	EM(afs_cb_break_for_s_reinit,		"s-reinit")		\
	EM(afs_cb_break_for_unlink,		"break-unlink")		\
	EM(afs_cb_break_for_update_regress,	"update-regress")	\
	EM(afs_cb_break_for_volume_callback,	"break-v-cb")		\
	EM(afs_cb_break_for_vos_release,	"break-vos-release")	\
	E_(afs_cb_break_volume_excluded,	"vol-excluded")

#define afs_rotate_traces						\
	EM(afs_rotate_trace_aborted,		"Abortd")		\
	EM(afs_rotate_trace_busy_sleep,		"BsySlp")		\
	EM(afs_rotate_trace_check_vol_status,	"VolStt")		\
	EM(afs_rotate_trace_failed,		"Failed")		\
	EM(afs_rotate_trace_iter,		"Iter  ")		\
	EM(afs_rotate_trace_iterate_addr,	"ItAddr")		\
	EM(afs_rotate_trace_next_server,	"NextSv")		\
	EM(afs_rotate_trace_no_more_servers,	"NoMore")		\
	EM(afs_rotate_trace_nomem,		"Nomem ")		\
	EM(afs_rotate_trace_probe_error,	"PrbErr")		\
	EM(afs_rotate_trace_probe_fileserver,	"PrbFsv")		\
	EM(afs_rotate_trace_probe_none,		"PrbNon")		\
	EM(afs_rotate_trace_probe_response,	"PrbRsp")		\
	EM(afs_rotate_trace_probe_superseded,	"PrbSup")		\
	EM(afs_rotate_trace_restart,		"Rstart")		\
	EM(afs_rotate_trace_retry_server,	"RtrySv")		\
	EM(afs_rotate_trace_selected_server,	"SlctSv")		\
	EM(afs_rotate_trace_stale_lock,		"StlLck")		\
	EM(afs_rotate_trace_start,		"Start ")		\
	EM(afs_rotate_trace_stop,		"Stop  ")		\
	E_(afs_rotate_trace_stopped,		"Stoppd")

/*
 * Generate enums for tracing information.
 */
#ifndef __AFS_GENERATE_TRACE_ENUMS_ONCE_ONLY
#define __AFS_GENERATE_TRACE_ENUMS_ONCE_ONLY

#undef EM
#undef E_
#define EM(a, b) a,
#define E_(a, b) a

enum afs_alist_trace		{ afs_alist_traces } __mode(byte);
enum afs_call_trace		{ afs_call_traces } __mode(byte);
enum afs_cb_break_reason	{ afs_cb_break_reasons } __mode(byte);
enum afs_cb_promise_trace	{ afs_cb_promise_traces } __mode(byte);
enum afs_cell_trace		{ afs_cell_traces } __mode(byte);
enum afs_dir_invalid_trace	{ afs_dir_invalid_traces} __mode(byte);
enum afs_edit_dir_op		{ afs_edit_dir_ops } __mode(byte);
enum afs_edit_dir_reason	{ afs_edit_dir_reasons } __mode(byte);
enum afs_eproto_cause		{ afs_eproto_causes } __mode(byte);
enum afs_estate_trace		{ afs_estate_traces } __mode(byte);
enum afs_file_error		{ afs_file_errors } __mode(byte);
enum afs_flock_event		{ afs_flock_events } __mode(byte);
enum afs_flock_operation	{ afs_flock_operations } __mode(byte);
enum afs_io_error		{ afs_io_errors } __mode(byte);
enum afs_rotate_trace		{ afs_rotate_traces } __mode(byte);
enum afs_server_trace		{ afs_server_traces } __mode(byte);
enum afs_vnode_invalid_trace	{ afs_vnode_invalid_traces} __mode(byte);
enum afs_volume_trace		{ afs_volume_traces } __mode(byte);

#endif /* end __AFS_GENERATE_TRACE_ENUMS_ONCE_ONLY */

/*
 * Export enum symbols via userspace.
 */
#undef EM
#undef E_
#define EM(a, b) TRACE_DEFINE_ENUM(a);
#define E_(a, b) TRACE_DEFINE_ENUM(a);

afs_alist_traces;
afs_call_traces;
afs_cb_break_reasons;
afs_cb_promise_traces;
afs_cell_traces;
afs_cm_operations;
afs_dir_invalid_traces;
afs_edit_dir_ops;
afs_edit_dir_reasons;
afs_eproto_causes;
afs_estate_traces;
afs_file_errors;
afs_flock_operations;
afs_flock_types;
afs_fs_operations;
afs_io_errors;
afs_rotate_traces;
afs_server_traces;
afs_vnode_invalid_traces;
afs_vl_operations;
yfs_cm_operations;

/*
 * Now redefine the EM() and E_() macros to map the enums to the strings that
 * will be printed in the output.
 */
#undef EM
#undef E_
#define EM(a, b)	{ a, b },
#define E_(a, b)	{ a, b }

TRACE_EVENT(afs_receive_data,
	    TP_PROTO(struct afs_call *call, struct iov_iter *iter,
		     bool want_more, int ret),

	    TP_ARGS(call, iter, want_more, ret),

	    TP_STRUCT__entry(
		    __field(loff_t,			remain)
		    __field(unsigned int,		call)
		    __field(enum afs_call_state,	state)
		    __field(unsigned short,		unmarshall)
		    __field(bool,			want_more)
		    __field(int,			ret)
			     ),

	    TP_fast_assign(
		    __entry->call	= call->debug_id;
		    __entry->state	= call->state;
		    __entry->unmarshall	= call->unmarshall;
		    __entry->remain	= iov_iter_count(iter);
		    __entry->want_more	= want_more;
		    __entry->ret	= ret;
			   ),

	    TP_printk("c=%08x r=%llu u=%u w=%u s=%u ret=%d",
		      __entry->call,
		      __entry->remain,
		      __entry->unmarshall,
		      __entry->want_more,
		      __entry->state,
		      __entry->ret)
	    );

TRACE_EVENT(afs_notify_call,
	    TP_PROTO(struct rxrpc_call *rxcall, struct afs_call *call),

	    TP_ARGS(rxcall, call),

	    TP_STRUCT__entry(
		    __field(unsigned int,		call)
		    __field(enum afs_call_state,	state)
		    __field(unsigned short,		unmarshall)
			     ),

	    TP_fast_assign(
		    __entry->call	= call->debug_id;
		    __entry->state	= call->state;
		    __entry->unmarshall	= call->unmarshall;
			   ),

	    TP_printk("c=%08x s=%u u=%u",
		      __entry->call,
		      __entry->state, __entry->unmarshall)
	    );

TRACE_EVENT(afs_cb_call,
	    TP_PROTO(struct afs_call *call),

	    TP_ARGS(call),

	    TP_STRUCT__entry(
		    __field(unsigned int,		call)
		    __field(u32,			op)
		    __field(u16,			service_id)
		    __field(u8,				security_ix)
		    __field(u32,			enctype)
			     ),

	    TP_fast_assign(
		    __entry->call	= call->debug_id;
		    __entry->op		= call->operation_ID;
		    __entry->service_id	= call->service_id;
		    __entry->security_ix = call->security_ix;
		    __entry->enctype	= call->enctype;
			   ),

	    TP_printk("c=%08x %s sv=%u sx=%u en=%u",
		      __entry->call,
		      __entry->service_id == 2501 ?
		      __print_symbolic(__entry->op, yfs_cm_operations) :
		      __print_symbolic(__entry->op, afs_cm_operations),
		      __entry->service_id,
		      __entry->security_ix,
		      __entry->enctype)
	    );

TRACE_EVENT(afs_call,
	    TP_PROTO(unsigned int call_debug_id, enum afs_call_trace op,
		     int ref, int outstanding, const void *where),

	    TP_ARGS(call_debug_id, op, ref, outstanding, where),

	    TP_STRUCT__entry(
		    __field(unsigned int,		call)
		    __field(int,			op)
		    __field(int,			ref)
		    __field(int,			outstanding)
		    __field(const void *,		where)
			     ),

	    TP_fast_assign(
		    __entry->call = call_debug_id;
		    __entry->op = op;
		    __entry->ref = ref;
		    __entry->outstanding = outstanding;
		    __entry->where = where;
			   ),

	    TP_printk("c=%08x %s r=%d o=%d sp=%pSR",
		      __entry->call,
		      __print_symbolic(__entry->op, afs_call_traces),
		      __entry->ref,
		      __entry->outstanding,
		      __entry->where)
	    );

TRACE_EVENT(afs_make_fs_call,
	    TP_PROTO(struct afs_call *call, const struct afs_fid *fid),

	    TP_ARGS(call, fid),

	    TP_STRUCT__entry(
		    __field(unsigned int,		call)
		    __field(enum afs_fs_operation,	op)
		    __field_struct(struct afs_fid,	fid)
			     ),

	    TP_fast_assign(
		    __entry->call = call->debug_id;
		    __entry->op = call->operation_ID;
		    if (fid) {
			    __entry->fid = *fid;
		    } else {
			    __entry->fid.vid = 0;
			    __entry->fid.vnode = 0;
			    __entry->fid.unique = 0;
		    }
			   ),

	    TP_printk("c=%08x V=%llx i=%llx:%x %s",
		      __entry->call,
		      __entry->fid.vid,
		      __entry->fid.vnode,
		      __entry->fid.unique,
		      __print_symbolic(__entry->op, afs_fs_operations))
	    );

TRACE_EVENT(afs_make_fs_calli,
	    TP_PROTO(struct afs_call *call, const struct afs_fid *fid,
		     unsigned int i),

	    TP_ARGS(call, fid, i),

	    TP_STRUCT__entry(
		    __field(unsigned int,		call)
		    __field(unsigned int,		i)
		    __field(enum afs_fs_operation,	op)
		    __field_struct(struct afs_fid,	fid)
			     ),

	    TP_fast_assign(
		    __entry->call = call->debug_id;
		    __entry->i = i;
		    __entry->op = call->operation_ID;
		    if (fid) {
			    __entry->fid = *fid;
		    } else {
			    __entry->fid.vid = 0;
			    __entry->fid.vnode = 0;
			    __entry->fid.unique = 0;
		    }
			   ),

	    TP_printk("c=%08x V=%llx i=%llx:%x %s i=%u",
		      __entry->call,
		      __entry->fid.vid,
		      __entry->fid.vnode,
		      __entry->fid.unique,
		      __print_symbolic(__entry->op, afs_fs_operations),
		      __entry->i)
	    );

TRACE_EVENT(afs_make_fs_call1,
	    TP_PROTO(struct afs_call *call, const struct afs_fid *fid,
		     const struct qstr *name),

	    TP_ARGS(call, fid, name),

	    TP_STRUCT__entry(
		    __field(unsigned int,		call)
		    __field(enum afs_fs_operation,	op)
		    __field_struct(struct afs_fid,	fid)
		    __array(char,			name, 24)
			     ),

	    TP_fast_assign(
		    unsigned int __len = min_t(unsigned int, name->len, 23);
		    __entry->call = call->debug_id;
		    __entry->op = call->operation_ID;
		    if (fid) {
			    __entry->fid = *fid;
		    } else {
			    __entry->fid.vid = 0;
			    __entry->fid.vnode = 0;
			    __entry->fid.unique = 0;
		    }
		    memcpy(__entry->name, name->name, __len);
		    __entry->name[__len] = 0;
			   ),

	    TP_printk("c=%08x V=%llx i=%llx:%x %s \"%s\"",
		      __entry->call,
		      __entry->fid.vid,
		      __entry->fid.vnode,
		      __entry->fid.unique,
		      __print_symbolic(__entry->op, afs_fs_operations),
		      __entry->name)
	    );

TRACE_EVENT(afs_make_fs_call2,
	    TP_PROTO(struct afs_call *call, const struct afs_fid *fid,
		     const struct qstr *name, const struct qstr *name2),

	    TP_ARGS(call, fid, name, name2),

	    TP_STRUCT__entry(
		    __field(unsigned int,		call)
		    __field(enum afs_fs_operation,	op)
		    __field_struct(struct afs_fid,	fid)
		    __array(char,			name, 24)
		    __array(char,			name2, 24)
			     ),

	    TP_fast_assign(
		    unsigned int __len = min_t(unsigned int, name->len, 23);
		    unsigned int __len2 = min_t(unsigned int, name2->len, 23);
		    __entry->call = call->debug_id;
		    __entry->op = call->operation_ID;
		    if (fid) {
			    __entry->fid = *fid;
		    } else {
			    __entry->fid.vid = 0;
			    __entry->fid.vnode = 0;
			    __entry->fid.unique = 0;
		    }
		    memcpy(__entry->name, name->name, __len);
		    __entry->name[__len] = 0;
		    memcpy(__entry->name2, name2->name, __len2);
		    __entry->name2[__len2] = 0;
			   ),

	    TP_printk("c=%08x V=%llx i=%llx:%x %s \"%s\" \"%s\"",
		      __entry->call,
		      __entry->fid.vid,
		      __entry->fid.vnode,
		      __entry->fid.unique,
		      __print_symbolic(__entry->op, afs_fs_operations),
		      __entry->name,
		      __entry->name2)
	    );

TRACE_EVENT(afs_make_vl_call,
	    TP_PROTO(struct afs_call *call),

	    TP_ARGS(call),

	    TP_STRUCT__entry(
		    __field(unsigned int,		call)
		    __field(enum afs_vl_operation,	op)
			     ),

	    TP_fast_assign(
		    __entry->call = call->debug_id;
		    __entry->op = call->operation_ID;
			   ),

	    TP_printk("c=%08x %s",
		      __entry->call,
		      __print_symbolic(__entry->op, afs_vl_operations))
	    );

TRACE_EVENT(afs_call_done,
	    TP_PROTO(struct afs_call *call),

	    TP_ARGS(call),

	    TP_STRUCT__entry(
		    __field(unsigned int,		call)
		    __field(struct rxrpc_call *,	rx_call)
		    __field(int,			ret)
		    __field(u32,			abort_code)
			     ),

	    TP_fast_assign(
		    __entry->call = call->debug_id;
		    __entry->rx_call = call->rxcall;
		    __entry->ret = call->error;
		    __entry->abort_code = call->abort_code;
			   ),

	    TP_printk("   c=%08x ret=%d ab=%d [%p]",
		      __entry->call,
		      __entry->ret,
		      __entry->abort_code,
		      __entry->rx_call)
	    );

TRACE_EVENT(afs_send_data,
	    TP_PROTO(struct afs_call *call, struct msghdr *msg),

	    TP_ARGS(call, msg),

	    TP_STRUCT__entry(
		    __field(unsigned int,		call)
		    __field(unsigned int,		flags)
		    __field(loff_t,			offset)
		    __field(loff_t,			count)
			     ),

	    TP_fast_assign(
		    __entry->call = call->debug_id;
		    __entry->flags = msg->msg_flags;
		    __entry->offset = msg->msg_iter.xarray_start + msg->msg_iter.iov_offset;
		    __entry->count = iov_iter_count(&msg->msg_iter);
			   ),

	    TP_printk(" c=%08x o=%llx n=%llx f=%x",
		      __entry->call, __entry->offset, __entry->count,
		      __entry->flags)
	    );

TRACE_EVENT(afs_sent_data,
	    TP_PROTO(struct afs_call *call, struct msghdr *msg, int ret),

	    TP_ARGS(call, msg, ret),

	    TP_STRUCT__entry(
		    __field(unsigned int,		call)
		    __field(int,			ret)
		    __field(loff_t,			offset)
		    __field(loff_t,			count)
			     ),

	    TP_fast_assign(
		    __entry->call = call->debug_id;
		    __entry->ret = ret;
		    __entry->offset = msg->msg_iter.xarray_start + msg->msg_iter.iov_offset;
		    __entry->count = iov_iter_count(&msg->msg_iter);
			   ),

	    TP_printk(" c=%08x o=%llx n=%llx r=%x",
		      __entry->call, __entry->offset, __entry->count,
		      __entry->ret)
	    );

TRACE_EVENT(afs_dir_check_failed,
	    TP_PROTO(struct afs_vnode *vnode, loff_t off),

	    TP_ARGS(vnode, off),

	    TP_STRUCT__entry(
		    __field(struct afs_vnode *,		vnode)
		    __field(loff_t,			off)
		    __field(loff_t,			i_size)
			     ),

	    TP_fast_assign(
		    __entry->vnode = vnode;
		    __entry->off = off;
		    __entry->i_size = i_size_read(&vnode->netfs.inode);
			   ),

	    TP_printk("vn=%p %llx/%llx",
		      __entry->vnode, __entry->off, __entry->i_size)
	    );

TRACE_EVENT(afs_call_state,
	    TP_PROTO(struct afs_call *call,
		     enum afs_call_state from,
		     enum afs_call_state to,
		     int ret, u32 remote_abort),

	    TP_ARGS(call, from, to, ret, remote_abort),

	    TP_STRUCT__entry(
		    __field(unsigned int,		call)
		    __field(enum afs_call_state,	from)
		    __field(enum afs_call_state,	to)
		    __field(int,			ret)
		    __field(u32,			abort)
			     ),

	    TP_fast_assign(
		    __entry->call = call->debug_id;
		    __entry->from = from;
		    __entry->to = to;
		    __entry->ret = ret;
		    __entry->abort = remote_abort;
			   ),

	    TP_printk("c=%08x %u->%u r=%d ab=%d",
		      __entry->call,
		      __entry->from, __entry->to,
		      __entry->ret, __entry->abort)
	    );

TRACE_EVENT(afs_lookup,
	    TP_PROTO(struct afs_vnode *dvnode, const struct qstr *name,
		     struct afs_fid *fid),

	    TP_ARGS(dvnode, name, fid),

	    TP_STRUCT__entry(
		    __field_struct(struct afs_fid,	dfid)
		    __field_struct(struct afs_fid,	fid)
		    __array(char,			name, 24)
			     ),

	    TP_fast_assign(
		    int __len = min_t(int, name->len, 23);
		    __entry->dfid = dvnode->fid;
		    __entry->fid = *fid;
		    memcpy(__entry->name, name->name, __len);
		    __entry->name[__len] = 0;
			   ),

	    TP_printk("d=%llx:%llx:%x \"%s\" f=%llx:%x",
		      __entry->dfid.vid, __entry->dfid.vnode, __entry->dfid.unique,
		      __entry->name,
		      __entry->fid.vnode, __entry->fid.unique)
	    );

TRACE_EVENT(afs_edit_dir,
	    TP_PROTO(struct afs_vnode *dvnode,
		     enum afs_edit_dir_reason why,
		     enum afs_edit_dir_op op,
		     unsigned int block,
		     unsigned int slot,
		     unsigned int f_vnode,
		     unsigned int f_unique,
		     const char *name),

	    TP_ARGS(dvnode, why, op, block, slot, f_vnode, f_unique, name),

	    TP_STRUCT__entry(
		    __field(unsigned int,		vnode)
		    __field(unsigned int,		unique)
		    __field(enum afs_edit_dir_reason,	why)
		    __field(enum afs_edit_dir_op,	op)
		    __field(unsigned int,		block)
		    __field(unsigned short,		slot)
		    __field(unsigned int,		f_vnode)
		    __field(unsigned int,		f_unique)
		    __array(char,			name, 24)
			     ),

	    TP_fast_assign(
		    int __len = strlen(name);
		    __len = min(__len, 23);
		    __entry->vnode	= dvnode->fid.vnode;
		    __entry->unique	= dvnode->fid.unique;
		    __entry->why	= why;
		    __entry->op		= op;
		    __entry->block	= block;
		    __entry->slot	= slot;
		    __entry->f_vnode	= f_vnode;
		    __entry->f_unique	= f_unique;
		    memcpy(__entry->name, name, __len);
		    __entry->name[__len] = 0;
			   ),

	    TP_printk("di=%x:%x %s %s %u[%u] fi=%x:%x \"%s\"",
		      __entry->vnode, __entry->unique,
		      __print_symbolic(__entry->why, afs_edit_dir_reasons),
		      __print_symbolic(__entry->op, afs_edit_dir_ops),
		      __entry->block, __entry->slot,
		      __entry->f_vnode, __entry->f_unique,
		      __entry->name)
	    );

TRACE_EVENT(afs_dir_invalid,
	    TP_PROTO(const struct afs_vnode *dvnode, enum afs_dir_invalid_trace trace),

	    TP_ARGS(dvnode, trace),

	    TP_STRUCT__entry(
		    __field(unsigned int,		vnode)
		    __field(unsigned int,		unique)
		    __field(enum afs_dir_invalid_trace,	trace)
			     ),

	    TP_fast_assign(
		    __entry->vnode	= dvnode->fid.vnode;
		    __entry->unique	= dvnode->fid.unique;
		    __entry->trace	= trace;
			   ),

	    TP_printk("di=%x:%x %s",
		      __entry->vnode, __entry->unique,
		      __print_symbolic(__entry->trace, afs_dir_invalid_traces))
	    );

TRACE_EVENT(afs_cb_promise,
	    TP_PROTO(const struct afs_vnode *vnode, enum afs_cb_promise_trace trace),

	    TP_ARGS(vnode, trace),

	    TP_STRUCT__entry(
		    __field(unsigned int,		vnode)
		    __field(unsigned int,		unique)
		    __field(enum afs_cb_promise_trace,	trace)
			     ),

	    TP_fast_assign(
		    __entry->vnode	= vnode->fid.vnode;
		    __entry->unique	= vnode->fid.unique;
		    __entry->trace	= trace;
			   ),

	    TP_printk("di=%x:%x %s",
		      __entry->vnode, __entry->unique,
		      __print_symbolic(__entry->trace, afs_cb_promise_traces))
	    );

TRACE_EVENT(afs_vnode_invalid,
	    TP_PROTO(const struct afs_vnode *vnode, enum afs_vnode_invalid_trace trace),

	    TP_ARGS(vnode, trace),

	    TP_STRUCT__entry(
		    __field(unsigned int,		vnode)
		    __field(unsigned int,		unique)
		    __field(enum afs_vnode_invalid_trace, trace)
			     ),

	    TP_fast_assign(
		    __entry->vnode	= vnode->fid.vnode;
		    __entry->unique	= vnode->fid.unique;
		    __entry->trace	= trace;
			   ),

	    TP_printk("di=%x:%x %s",
		      __entry->vnode, __entry->unique,
		      __print_symbolic(__entry->trace, afs_vnode_invalid_traces))
	    );

TRACE_EVENT(afs_set_dv,
	    TP_PROTO(const struct afs_vnode *dvnode, u64 new_dv),

	    TP_ARGS(dvnode, new_dv),

	    TP_STRUCT__entry(
		    __field(unsigned int,		vnode)
		    __field(unsigned int,		unique)
		    __field(u64,			old_dv)
		    __field(u64,			new_dv)
			     ),

	    TP_fast_assign(
		    __entry->vnode	= dvnode->fid.vnode;
		    __entry->unique	= dvnode->fid.unique;
		    __entry->old_dv	= dvnode->status.data_version;
		    __entry->new_dv	= new_dv;
			   ),

	    TP_printk("di=%x:%x dv=%llx -> dv=%llx",
		      __entry->vnode, __entry->unique,
		      __entry->old_dv, __entry->new_dv)
	    );

TRACE_EVENT(afs_dv_mismatch,
	    TP_PROTO(const struct afs_vnode *dvnode, u64 before_dv, int delta, u64 new_dv),

	    TP_ARGS(dvnode, before_dv, delta, new_dv),

	    TP_STRUCT__entry(
		    __field(unsigned int,		vnode)
		    __field(unsigned int,		unique)
		    __field(int,			delta)
		    __field(u64,			before_dv)
		    __field(u64,			new_dv)
			     ),

	    TP_fast_assign(
		    __entry->vnode	= dvnode->fid.vnode;
		    __entry->unique	= dvnode->fid.unique;
		    __entry->delta	= delta;
		    __entry->before_dv	= before_dv;
		    __entry->new_dv	= new_dv;
			   ),

	    TP_printk("di=%x:%x xdv=%llx+%d dv=%llx",
		      __entry->vnode, __entry->unique,
		      __entry->before_dv, __entry->delta, __entry->new_dv)
	    );

TRACE_EVENT(afs_protocol_error,
	    TP_PROTO(struct afs_call *call, enum afs_eproto_cause cause),

	    TP_ARGS(call, cause),

	    TP_STRUCT__entry(
		    __field(unsigned int,		call)
		    __field(enum afs_eproto_cause,	cause)
			     ),

	    TP_fast_assign(
		    __entry->call = call ? call->debug_id : 0;
		    __entry->cause = cause;
			   ),

	    TP_printk("c=%08x %s",
		      __entry->call,
		      __print_symbolic(__entry->cause, afs_eproto_causes))
	    );

TRACE_EVENT(afs_io_error,
	    TP_PROTO(unsigned int call, int error, enum afs_io_error where),

	    TP_ARGS(call, error, where),

	    TP_STRUCT__entry(
		    __field(unsigned int,	call)
		    __field(int,		error)
		    __field(enum afs_io_error,	where)
			     ),

	    TP_fast_assign(
		    __entry->call = call;
		    __entry->error = error;
		    __entry->where = where;
			   ),

	    TP_printk("c=%08x r=%d %s",
		      __entry->call, __entry->error,
		      __print_symbolic(__entry->where, afs_io_errors))
	    );

TRACE_EVENT(afs_file_error,
	    TP_PROTO(struct afs_vnode *vnode, int error, enum afs_file_error where),

	    TP_ARGS(vnode, error, where),

	    TP_STRUCT__entry(
		    __field_struct(struct afs_fid,	fid)
		    __field(int,			error)
		    __field(enum afs_file_error,	where)
			     ),

	    TP_fast_assign(
		    __entry->fid = vnode->fid;
		    __entry->error = error;
		    __entry->where = where;
			   ),

	    TP_printk("%llx:%llx:%x r=%d %s",
		      __entry->fid.vid, __entry->fid.vnode, __entry->fid.unique,
		      __entry->error,
		      __print_symbolic(__entry->where, afs_file_errors))
	    );

TRACE_EVENT(afs_bulkstat_error,
	    TP_PROTO(struct afs_operation *op, struct afs_fid *fid, unsigned int index, s32 abort),

	    TP_ARGS(op, fid, index, abort),

	    TP_STRUCT__entry(
		    __field_struct(struct afs_fid,	fid)
		    __field(unsigned int,		op)
		    __field(unsigned int,		index)
		    __field(s32,			abort)
			     ),

	    TP_fast_assign(
		    __entry->op = op->debug_id;
		    __entry->fid = *fid;
		    __entry->index = index;
		    __entry->abort = abort;
			   ),

	    TP_printk("OP=%08x[%02x] %llx:%llx:%x a=%d",
		      __entry->op, __entry->index,
		      __entry->fid.vid, __entry->fid.vnode, __entry->fid.unique,
		      __entry->abort)
	    );

TRACE_EVENT(afs_cm_no_server,
	    TP_PROTO(struct afs_call *call, const struct sockaddr_rxrpc *srx),

	    TP_ARGS(call, srx),

	    TP_STRUCT__entry(
		    __field(unsigned int,			call)
		    __field(unsigned int,			op_id)
		    __field_struct(struct sockaddr_rxrpc,	srx)
			     ),

	    TP_fast_assign(
		    __entry->call = call->debug_id;
		    __entry->op_id = call->operation_ID;
		    memcpy(&__entry->srx, srx, sizeof(__entry->srx));
			   ),

	    TP_printk("c=%08x op=%u %pISpc",
		      __entry->call, __entry->op_id, &__entry->srx.transport)
	    );

TRACE_EVENT(afs_cm_no_server_u,
	    TP_PROTO(struct afs_call *call, const uuid_t *uuid),

	    TP_ARGS(call, uuid),

	    TP_STRUCT__entry(
		    __field(unsigned int,			call)
		    __field(unsigned int,			op_id)
		    __field_struct(uuid_t,			uuid)
			     ),

	    TP_fast_assign(
		    __entry->call = call->debug_id;
		    __entry->op_id = call->operation_ID;
		    memcpy(&__entry->uuid, uuid, sizeof(__entry->uuid));
			   ),

	    TP_printk("c=%08x op=%u %pU",
		      __entry->call, __entry->op_id, &__entry->uuid)
	    );

TRACE_EVENT(afs_flock_ev,
	    TP_PROTO(struct afs_vnode *vnode, struct file_lock *fl,
		     enum afs_flock_event event, int error),

	    TP_ARGS(vnode, fl, event, error),

	    TP_STRUCT__entry(
		    __field_struct(struct afs_fid,	fid)
		    __field(enum afs_flock_event,	event)
		    __field(enum afs_lock_state,	state)
		    __field(int,			error)
		    __field(unsigned int,		debug_id)
			     ),

	    TP_fast_assign(
		    __entry->fid = vnode->fid;
		    __entry->event = event;
		    __entry->state = vnode->lock_state;
		    __entry->error = error;
		    __entry->debug_id = fl ? fl->fl_u.afs.debug_id : 0;
			   ),

	    TP_printk("%llx:%llx:%x %04x %s s=%s e=%d",
		      __entry->fid.vid, __entry->fid.vnode, __entry->fid.unique,
		      __entry->debug_id,
		      __print_symbolic(__entry->event, afs_flock_events),
		      __print_symbolic(__entry->state, afs_flock_states),
		      __entry->error)
	    );

TRACE_EVENT(afs_flock_op,
	    TP_PROTO(struct afs_vnode *vnode, struct file_lock *fl,
		     enum afs_flock_operation op),

	    TP_ARGS(vnode, fl, op),

	    TP_STRUCT__entry(
		    __field_struct(struct afs_fid,	fid)
		    __field(loff_t,			from)
		    __field(loff_t,			len)
		    __field(enum afs_flock_operation,	op)
		    __field(unsigned char,		type)
		    __field(unsigned int,		flags)
		    __field(unsigned int,		debug_id)
			     ),

	    TP_fast_assign(
		    __entry->fid = vnode->fid;
		    __entry->from = fl->fl_start;
		    __entry->len = fl->fl_end - fl->fl_start + 1;
		    __entry->op = op;
		    __entry->type = fl->c.flc_type;
		    __entry->flags = fl->c.flc_flags;
		    __entry->debug_id = fl->fl_u.afs.debug_id;
			   ),

	    TP_printk("%llx:%llx:%x %04x %s t=%s R=%llx/%llx f=%x",
		      __entry->fid.vid, __entry->fid.vnode, __entry->fid.unique,
		      __entry->debug_id,
		      __print_symbolic(__entry->op, afs_flock_operations),
		      __print_symbolic(__entry->type, afs_flock_types),
		      __entry->from, __entry->len, __entry->flags)
	    );

TRACE_EVENT(afs_reload_dir,
	    TP_PROTO(struct afs_vnode *vnode),

	    TP_ARGS(vnode),

	    TP_STRUCT__entry(
		    __field_struct(struct afs_fid,	fid)
			     ),

	    TP_fast_assign(
		    __entry->fid = vnode->fid;
			   ),

	    TP_printk("%llx:%llx:%x",
		      __entry->fid.vid, __entry->fid.vnode, __entry->fid.unique)
	    );

TRACE_EVENT(afs_silly_rename,
	    TP_PROTO(struct afs_vnode *vnode, bool done),

	    TP_ARGS(vnode, done),

	    TP_STRUCT__entry(
		    __field_struct(struct afs_fid,	fid)
		    __field(bool,			done)
			     ),

	    TP_fast_assign(
		    __entry->fid = vnode->fid;
		    __entry->done = done;
			   ),

	    TP_printk("%llx:%llx:%x done=%u",
		      __entry->fid.vid, __entry->fid.vnode, __entry->fid.unique,
		      __entry->done)
	    );

TRACE_EVENT(afs_get_tree,
	    TP_PROTO(struct afs_cell *cell, struct afs_volume *volume),

	    TP_ARGS(cell, volume),

	    TP_STRUCT__entry(
		    __field(u64,			vid)
		    __array(char,			cell, 24)
		    __array(char,			volume, 24)
			     ),

	    TP_fast_assign(
		    int __len;
		    __entry->vid = volume->vid;
		    __len = min_t(int, cell->name_len, 23);
		    memcpy(__entry->cell, cell->name, __len);
		    __entry->cell[__len] = 0;
		    __len = min_t(int, volume->name_len, 23);
		    memcpy(__entry->volume, volume->name, __len);
		    __entry->volume[__len] = 0;
			   ),

	    TP_printk("--- MOUNT %s:%s %llx",
		      __entry->cell, __entry->volume, __entry->vid)
	    );

TRACE_EVENT(afs_cb_v_break,
	    TP_PROTO(afs_volid_t vid, unsigned int cb_v_break,
		     enum afs_cb_break_reason reason),

	    TP_ARGS(vid, cb_v_break, reason),

	    TP_STRUCT__entry(
		    __field(afs_volid_t,		vid)
		    __field(unsigned int,		cb_v_break)
		    __field(enum afs_cb_break_reason,	reason)
			     ),

	    TP_fast_assign(
		    __entry->vid	= vid;
		    __entry->cb_v_break	= cb_v_break;
		    __entry->reason	= reason;
			   ),

	    TP_printk("%llx vb=%x %s",
		      __entry->vid,
		      __entry->cb_v_break,
		      __print_symbolic(__entry->reason, afs_cb_break_reasons))
	    );

TRACE_EVENT(afs_cb_break,
	    TP_PROTO(struct afs_fid *fid, unsigned int cb_break,
		     enum afs_cb_break_reason reason, bool skipped),

	    TP_ARGS(fid, cb_break, reason, skipped),

	    TP_STRUCT__entry(
		    __field_struct(struct afs_fid,	fid)
		    __field(unsigned int,		cb_break)
		    __field(enum afs_cb_break_reason,	reason)
		    __field(bool,			skipped)
			     ),

	    TP_fast_assign(
		    __entry->fid	= *fid;
		    __entry->cb_break	= cb_break;
		    __entry->reason	= reason;
		    __entry->skipped	= skipped;
			   ),

	    TP_printk("%llx:%llx:%x b=%x s=%u %s",
		      __entry->fid.vid, __entry->fid.vnode, __entry->fid.unique,
		      __entry->cb_break,
		      __entry->skipped,
		      __print_symbolic(__entry->reason, afs_cb_break_reasons))
	    );

TRACE_EVENT(afs_cb_miss,
	    TP_PROTO(struct afs_fid *fid, enum afs_cb_break_reason reason),

	    TP_ARGS(fid, reason),

	    TP_STRUCT__entry(
		    __field_struct(struct afs_fid,	fid)
		    __field(enum afs_cb_break_reason,	reason)
			     ),

	    TP_fast_assign(
		    __entry->fid	= *fid;
		    __entry->reason	= reason;
			   ),

	    TP_printk(" %llx:%llx:%x %s",
		      __entry->fid.vid, __entry->fid.vnode, __entry->fid.unique,
		      __print_symbolic(__entry->reason, afs_cb_break_reasons))
	    );

TRACE_EVENT(afs_server,
	    TP_PROTO(unsigned int server_debug_id, int ref, int active,
		     enum afs_server_trace reason),

	    TP_ARGS(server_debug_id, ref, active, reason),

	    TP_STRUCT__entry(
		    __field(unsigned int,		server)
		    __field(int,			ref)
		    __field(int,			active)
		    __field(int,			reason)
			     ),

	    TP_fast_assign(
		    __entry->server = server_debug_id;
		    __entry->ref = ref;
		    __entry->active = active;
		    __entry->reason = reason;
			   ),

	    TP_printk("s=%08x %s r=%d a=%d",
		      __entry->server,
		      __print_symbolic(__entry->reason, afs_server_traces),
		      __entry->ref,
		      __entry->active)
	    );

TRACE_EVENT(afs_volume,
	    TP_PROTO(unsigned int debug_id, afs_volid_t vid, int ref,
		     enum afs_volume_trace reason),

	    TP_ARGS(debug_id, vid, ref, reason),

	    TP_STRUCT__entry(
		    __field(unsigned int,		debug_id)
		    __field(afs_volid_t,		vid)
		    __field(int,			ref)
		    __field(enum afs_volume_trace,	reason)
			     ),

	    TP_fast_assign(
		    __entry->debug_id	= debug_id;
		    __entry->vid	= vid;
		    __entry->ref	= ref;
		    __entry->reason	= reason;
			   ),

	    TP_printk("V=%08x %s vid=%llx r=%d",
		      __entry->debug_id,
		      __print_symbolic(__entry->reason, afs_volume_traces),
		      __entry->vid,
		      __entry->ref)
	    );

TRACE_EVENT(afs_cell,
	    TP_PROTO(unsigned int cell_debug_id, int ref, int active,
		     enum afs_cell_trace reason),

	    TP_ARGS(cell_debug_id, ref, active, reason),

	    TP_STRUCT__entry(
		    __field(unsigned int,		cell)
		    __field(int,			ref)
		    __field(int,			active)
		    __field(int,			reason)
			     ),

	    TP_fast_assign(
		    __entry->cell = cell_debug_id;
		    __entry->ref = ref;
		    __entry->active = active;
		    __entry->reason = reason;
			   ),

	    TP_printk("L=%08x %s r=%d a=%d",
		      __entry->cell,
		      __print_symbolic(__entry->reason, afs_cell_traces),
		      __entry->ref,
		      __entry->active)
	    );

TRACE_EVENT(afs_alist,
	    TP_PROTO(unsigned int alist_debug_id, int ref, enum afs_alist_trace reason),

	    TP_ARGS(alist_debug_id, ref, reason),

	    TP_STRUCT__entry(
		    __field(unsigned int,		alist)
		    __field(int,			ref)
		    __field(int,			active)
		    __field(int,			reason)
			     ),

	    TP_fast_assign(
		    __entry->alist = alist_debug_id;
		    __entry->ref = ref;
		    __entry->reason = reason;
			   ),

	    TP_printk("AL=%08x %s r=%d",
		      __entry->alist,
		      __print_symbolic(__entry->reason, afs_alist_traces),
		      __entry->ref)
	    );

TRACE_EVENT(afs_estate,
	    TP_PROTO(unsigned int server_debug_id, unsigned int estate_debug_id,
		     int ref, enum afs_estate_trace reason),

	    TP_ARGS(server_debug_id, estate_debug_id, ref, reason),

	    TP_STRUCT__entry(
		    __field(unsigned int,		server)
		    __field(unsigned int,		estate)
		    __field(int,			ref)
		    __field(int,			active)
		    __field(int,			reason)
			     ),

	    TP_fast_assign(
		    __entry->server = server_debug_id;
		    __entry->estate = estate_debug_id;
		    __entry->ref = ref;
		    __entry->reason = reason;
			   ),

	    TP_printk("ES=%08x[%x] %s r=%d",
		      __entry->server,
		      __entry->estate,
		      __print_symbolic(__entry->reason, afs_estate_traces),
		      __entry->ref)
	    );

TRACE_EVENT(afs_fs_probe,
	    TP_PROTO(struct afs_server *server, bool tx, struct afs_endpoint_state *estate,
		     unsigned int addr_index, int error, s32 abort_code, unsigned int rtt_us),

	    TP_ARGS(server, tx, estate, addr_index, error, abort_code, rtt_us),

	    TP_STRUCT__entry(
		    __field(unsigned int,		server)
		    __field(unsigned int,		estate)
		    __field(bool,			tx)
		    __field(u16,			addr_index)
		    __field(short,			error)
		    __field(s32,			abort_code)
		    __field(unsigned int,		rtt_us)
		    __field_struct(struct sockaddr_rxrpc, srx)
			     ),

	    TP_fast_assign(
		    struct afs_addr_list *alist = estate->addresses;
		    __entry->server = server->debug_id;
		    __entry->estate = estate->probe_seq;
		    __entry->tx = tx;
		    __entry->addr_index = addr_index;
		    __entry->error = error;
		    __entry->abort_code = abort_code;
		    __entry->rtt_us = rtt_us;
		    memcpy(&__entry->srx, rxrpc_kernel_remote_srx(alist->addrs[addr_index].peer),
			   sizeof(__entry->srx));
			   ),

	    TP_printk("s=%08x %s pq=%x ax=%u e=%d ac=%d rtt=%d %pISpc",
		      __entry->server, __entry->tx ? "tx" : "rx", __entry->estate,
		      __entry->addr_index, __entry->error, __entry->abort_code, __entry->rtt_us,
		      &__entry->srx.transport)
	    );

TRACE_EVENT(afs_vl_probe,
	    TP_PROTO(struct afs_vlserver *server, bool tx, struct afs_addr_list *alist,
		     unsigned int addr_index, int error, s32 abort_code, unsigned int rtt_us),

	    TP_ARGS(server, tx, alist, addr_index, error, abort_code, rtt_us),

	    TP_STRUCT__entry(
		    __field(unsigned int,		server)
		    __field(bool,			tx)
		    __field(unsigned short,		flags)
		    __field(u16,			addr_index)
		    __field(short,			error)
		    __field(s32,			abort_code)
		    __field(unsigned int,		rtt_us)
		    __field_struct(struct sockaddr_rxrpc, srx)
			     ),

	    TP_fast_assign(
		    __entry->server = server->debug_id;
		    __entry->tx = tx;
		    __entry->addr_index = addr_index;
		    __entry->error = error;
		    __entry->abort_code = abort_code;
		    __entry->rtt_us = rtt_us;
		    memcpy(&__entry->srx, rxrpc_kernel_remote_srx(alist->addrs[addr_index].peer),
			   sizeof(__entry->srx));
			   ),

	    TP_printk("vl=%08x %s ax=%u e=%d ac=%d rtt=%d %pISpc",
		      __entry->server, __entry->tx ? "tx" : "rx", __entry->addr_index,
		      __entry->error, __entry->abort_code, __entry->rtt_us,
		      &__entry->srx.transport)
	    );

TRACE_EVENT(afs_rotate,
	    TP_PROTO(struct afs_operation *op, enum afs_rotate_trace reason, unsigned int extra),

	    TP_ARGS(op, reason, extra),

	    TP_STRUCT__entry(
		    __field(unsigned int,		op)
		    __field(unsigned int,		flags)
		    __field(unsigned int,		extra)
		    __field(unsigned short,		iteration)
		    __field(short,			server_index)
		    __field(short,			addr_index)
		    __field(enum afs_rotate_trace,	reason)
			     ),

	    TP_fast_assign(
		    __entry->op = op->debug_id;
		    __entry->flags = op->flags;
		    __entry->iteration = op->nr_iterations;
		    __entry->server_index = op->server_index;
		    __entry->addr_index = op->addr_index;
		    __entry->reason = reason;
		    __entry->extra = extra;
			   ),

	    TP_printk("OP=%08x it=%02x %s fl=%x sx=%d ax=%d ext=%d",
		      __entry->op,
		      __entry->iteration,
		      __print_symbolic(__entry->reason, afs_rotate_traces),
		      __entry->flags,
		      __entry->server_index,
		      __entry->addr_index,
		      __entry->extra)
	    );

TRACE_EVENT(afs_make_call,
	    TP_PROTO(struct afs_call *call),

	    TP_ARGS(call),

	    TP_STRUCT__entry(
		    __field(unsigned int,		call)
		    __field(bool,			is_vl)
		    __field(enum afs_fs_operation,	op)
		    __field_struct(struct afs_fid,	fid)
		    __field_struct(struct sockaddr_rxrpc, srx)
			     ),

	    TP_fast_assign(
		    __entry->call = call->debug_id;
		    __entry->op = call->operation_ID;
		    __entry->fid = call->fid;
		    memcpy(&__entry->srx, rxrpc_kernel_remote_srx(call->peer),
			   sizeof(__entry->srx));
		    __entry->srx.srx_service = call->service_id;
		    __entry->is_vl = (__entry->srx.srx_service == VL_SERVICE ||
				      __entry->srx.srx_service == YFS_VL_SERVICE);
			   ),

	    TP_printk("c=%08x %pISpc+%u %s %llx:%llx:%x",
		      __entry->call,
		      &__entry->srx.transport,
		      __entry->srx.srx_service,
		      __entry->is_vl ?
		      __print_symbolic(__entry->op, afs_vl_operations) :
		      __print_symbolic(__entry->op, afs_fs_operations),
		      __entry->fid.vid,
		      __entry->fid.vnode,
		      __entry->fid.unique)
	    );

TRACE_EVENT(afs_read_recv,
	    TP_PROTO(const struct afs_operation *op, const struct afs_call *call),

	    TP_ARGS(op, call),

	    TP_STRUCT__entry(
		    __field(unsigned int,		rreq)
		    __field(unsigned int,		sreq)
		    __field(unsigned int,		op)
		    __field(unsigned int,		op_flags)
		    __field(unsigned int,		call)
		    __field(enum afs_call_state,	call_state)
			     ),

	    TP_fast_assign(
		    __entry->op = op->debug_id;
		    __entry->sreq = op->fetch.subreq->debug_index;
		    __entry->rreq = op->fetch.subreq->rreq->debug_id;
		    __entry->op_flags = op->flags;
		    __entry->call = call->debug_id;
		    __entry->call_state = call->state;
			   ),

	    TP_printk("R=%08x[%x] OP=%08x c=%08x cs=%x of=%x",
		      __entry->rreq, __entry->sreq,
		      __entry->op,
		      __entry->call, __entry->call_state,
		      __entry->op_flags)
	    );

#endif /* _TRACE_AFS_H */

/* This part must be outside protection */
#include <trace/define_trace.h>
