forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 435
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add three tracepoints to the AFS filesystem: (1) The afs_recv_data tracepoint logs data segments that are extracted from the data received from the peer through afs_extract_data(). (2) The afs_notify_call tracepoint logs notification from AF_RXRPC of data coming in to an asynchronous call. (3) The afs_cb_call tracepoint logs incoming calls that have had their operation ID extracted and mapped into a supported cache manager service call. To make (3) work, the name strings in the afs_call_type struct objects have to be annotated with __tracepoint_string. This is done with the CM_NAME() macro. Further, the AFS call state enum needs a name so that it can be used to declare parameter types. Signed-off-by: David Howells <dhowells@redhat.com>
- Loading branch information
Showing
5 changed files
with
144 additions
and
15 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,109 @@ | ||
/* AFS tracepoints | ||
* | ||
* Copyright (C) 2016 Red Hat, Inc. All Rights Reserved. | ||
* Written by David Howells (dhowells@redhat.com) | ||
* | ||
* This program is free software; you can redistribute it and/or | ||
* modify it under the terms of the GNU General Public Licence | ||
* as published by the Free Software Foundation; either version | ||
* 2 of the Licence, or (at your option) any later version. | ||
*/ | ||
#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> | ||
|
||
TRACE_EVENT(afs_recv_data, | ||
TP_PROTO(struct afs_call *call, unsigned count, unsigned offset, | ||
bool want_more, int ret), | ||
|
||
TP_ARGS(call, count, offset, want_more, ret), | ||
|
||
TP_STRUCT__entry( | ||
__field(struct rxrpc_call *, rxcall ) | ||
__field(struct afs_call *, call ) | ||
__field(enum afs_call_state, state ) | ||
__field(unsigned int, count ) | ||
__field(unsigned int, offset ) | ||
__field(unsigned short, unmarshall ) | ||
__field(bool, want_more ) | ||
__field(int, ret ) | ||
), | ||
|
||
TP_fast_assign( | ||
__entry->rxcall = call->rxcall; | ||
__entry->call = call; | ||
__entry->state = call->state; | ||
__entry->unmarshall = call->unmarshall; | ||
__entry->count = count; | ||
__entry->offset = offset; | ||
__entry->want_more = want_more; | ||
__entry->ret = ret; | ||
), | ||
|
||
TP_printk("c=%p ac=%p s=%u u=%u %u/%u wm=%u ret=%d", | ||
__entry->rxcall, | ||
__entry->call, | ||
__entry->state, __entry->unmarshall, | ||
__entry->offset, __entry->count, | ||
__entry->want_more, __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(struct rxrpc_call *, rxcall ) | ||
__field(struct afs_call *, call ) | ||
__field(enum afs_call_state, state ) | ||
__field(unsigned short, unmarshall ) | ||
), | ||
|
||
TP_fast_assign( | ||
__entry->rxcall = rxcall; | ||
__entry->call = call; | ||
__entry->state = call->state; | ||
__entry->unmarshall = call->unmarshall; | ||
), | ||
|
||
TP_printk("c=%p ac=%p s=%u u=%u", | ||
__entry->rxcall, | ||
__entry->call, | ||
__entry->state, __entry->unmarshall) | ||
); | ||
|
||
TRACE_EVENT(afs_cb_call, | ||
TP_PROTO(struct afs_call *call), | ||
|
||
TP_ARGS(call), | ||
|
||
TP_STRUCT__entry( | ||
__field(struct rxrpc_call *, rxcall ) | ||
__field(struct afs_call *, call ) | ||
__field(const char *, name ) | ||
__field(u32, op ) | ||
), | ||
|
||
TP_fast_assign( | ||
__entry->rxcall = call->rxcall; | ||
__entry->call = call; | ||
__entry->name = call->type->name; | ||
__entry->op = call->operation_ID; | ||
), | ||
|
||
TP_printk("c=%p ac=%p %s o=%u", | ||
__entry->rxcall, | ||
__entry->call, | ||
__entry->name, | ||
__entry->op) | ||
); | ||
|
||
#endif /* _TRACE_AFS_H */ | ||
|
||
/* This part must be outside protection */ | ||
#include <trace/define_trace.h> |