afs: Trace the initiation and completion of client calls
Add tracepoints to trace the initiation and completion of client calls within the kafs filesystem. The afs_make_vl_call tracepoint watches calls to the volume location database server. The afs_make_fs_call tracepoint watches calls to the file server. The afs_call_done tracepoint watches for call completion. Signed-off-by: David Howells <dhowells@redhat.com>
This commit is contained in:
@@ -30,6 +30,38 @@ enum afs_call_trace {
|
||||
afs_call_trace_work,
|
||||
};
|
||||
|
||||
enum afs_fs_operation {
|
||||
afs_FS_FetchData = 130, /* AFS Fetch file data */
|
||||
afs_FS_FetchStatus = 132, /* AFS Fetch file status */
|
||||
afs_FS_StoreData = 133, /* AFS Store file data */
|
||||
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_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 */
|
||||
};
|
||||
|
||||
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_VL_GetCapabilities = 65537, /* AFS Get VL server capabilities */
|
||||
};
|
||||
|
||||
#endif /* end __AFS_DECLARE_TRACE_ENUMS_ONCE_ONLY */
|
||||
|
||||
/*
|
||||
@@ -42,6 +74,37 @@ enum afs_call_trace {
|
||||
EM(afs_call_trace_wake, "WAKE ") \
|
||||
E_(afs_call_trace_work, "WORK ")
|
||||
|
||||
#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_FetchData64, "FS.FetchData64") \
|
||||
EM(afs_FS_StoreData64, "FS.StoreData64") \
|
||||
EM(afs_FS_GiveUpAllCallBacks, "FS.GiveUpAllCallBacks") \
|
||||
E_(afs_FS_GetCapabilities, "FS.GetCapabilities")
|
||||
|
||||
#define afs_vl_operations \
|
||||
EM(afs_VL_GetEntryByNameU, "VL.GetEntryByNameU") \
|
||||
EM(afs_VL_GetAddrsU, "VL.GetAddrsU") \
|
||||
EM(afs_YFSVL_GetEndpoints, "YFSVL.GetEndpoints") \
|
||||
E_(afs_VL_GetCapabilities, "VL.GetCapabilities")
|
||||
|
||||
|
||||
/*
|
||||
* Export enum symbols via userspace.
|
||||
*/
|
||||
@@ -51,6 +114,8 @@ enum afs_call_trace {
|
||||
#define E_(a, b) TRACE_DEFINE_ENUM(a);
|
||||
|
||||
afs_call_traces;
|
||||
afs_fs_operations;
|
||||
afs_vl_operations;
|
||||
|
||||
/*
|
||||
* Now redefine the EM() and E_() macros to map the enums to the strings that
|
||||
@@ -178,6 +243,83 @@ TRACE_EVENT(afs_call,
|
||||
__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(struct afs_call *, call )
|
||||
__field(enum afs_fs_operation, op )
|
||||
__field_struct(struct afs_fid, fid )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->call = call;
|
||||
__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=%p %06x:%06x:%06x %s",
|
||||
__entry->call,
|
||||
__entry->fid.vid,
|
||||
__entry->fid.vnode,
|
||||
__entry->fid.unique,
|
||||
__print_symbolic(__entry->op, afs_fs_operations))
|
||||
);
|
||||
|
||||
TRACE_EVENT(afs_make_vl_call,
|
||||
TP_PROTO(struct afs_call *call),
|
||||
|
||||
TP_ARGS(call),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(struct afs_call *, call )
|
||||
__field(enum afs_vl_operation, op )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->call = call;
|
||||
__entry->op = call->operation_ID;
|
||||
),
|
||||
|
||||
TP_printk("c=%p %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(struct afs_call *, call )
|
||||
__field(struct rxrpc_call *, rx_call )
|
||||
__field(int, ret )
|
||||
__field(u32, abort_code )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->call = call;
|
||||
__entry->rx_call = call->rxcall;
|
||||
__entry->ret = call->error;
|
||||
__entry->abort_code = call->abort_code;
|
||||
),
|
||||
|
||||
TP_printk(" c=%p ret=%d ab=%d [%p]",
|
||||
__entry->call,
|
||||
__entry->ret,
|
||||
__entry->abort_code,
|
||||
__entry->rx_call)
|
||||
);
|
||||
|
||||
#endif /* _TRACE_AFS_H */
|
||||
|
||||
/* This part must be outside protection */
|
||||
|
Reference in New Issue
Block a user