-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
net/9p: Convert net/9p protocol dumps to tracepoints
This helps in more control over debugging. root@qemu-img-64:~# ls /pass/123 ls: cannot access /pass/123: No such file or directory root@qemu-img-64:~# cat /sys/kernel/debug/tracing/trace # tracer: nop # # TASK-PID CPU# TIMESTAMP FUNCTION # | | | | | ls-1536 [001] 70.928584: 9p_protocol_dump: clnt 18446612132784021504 P9_TWALK(tag = 1) 000: 16 00 00 00 6e 01 00 01 00 00 00 02 00 00 00 01 010: 00 03 00 31 32 33 00 00 00 ff ff ff ff 00 00 00 ls-1536 [001] 70.928587: <stack trace> => trace_9p_protocol_dump => p9pdu_finalize => p9_client_rpc => p9_client_walk => v9fs_vfs_lookup => d_alloc_and_lookup => walk_component => path_lookupat ls-1536 [000] 70.929696: 9p_protocol_dump: clnt 18446612132784021504 P9_RLERROR(tag = 1) 000: 0b 00 00 00 07 01 00 02 00 00 00 4e 03 00 02 00 010: 00 00 00 00 03 00 02 00 00 00 00 00 ff 43 00 00 ls-1536 [000] 70.929697: <stack trace> => trace_9p_protocol_dump => p9_client_rpc => p9_client_walk => v9fs_vfs_lookup => d_alloc_and_lookup => walk_component => path_lookupat => do_path_lookup Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> Signed-off-by: Eric Van Hensbergen <ericvh@gmail.com>
- Loading branch information
Aneesh Kumar K.V
authored and
Eric Van Hensbergen
committed
Oct 24, 2011
1 parent
ef6b080
commit 348b590
Showing
7 changed files
with
238 additions
and
92 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,176 @@ | ||
#undef TRACE_SYSTEM | ||
#define TRACE_SYSTEM 9p | ||
|
||
#if !defined(_TRACE_9P_H) || defined(TRACE_HEADER_MULTI_READ) | ||
#define _TRACE_9P_H | ||
|
||
#include <linux/tracepoint.h> | ||
|
||
#define show_9p_op(type) \ | ||
__print_symbolic(type, \ | ||
{ P9_TLERROR, "P9_TLERROR" }, \ | ||
{ P9_RLERROR, "P9_RLERROR" }, \ | ||
{ P9_TSTATFS, "P9_TSTATFS" }, \ | ||
{ P9_RSTATFS, "P9_RSTATFS" }, \ | ||
{ P9_TLOPEN, "P9_TLOPEN" }, \ | ||
{ P9_RLOPEN, "P9_RLOPEN" }, \ | ||
{ P9_TLCREATE, "P9_TLCREATE" }, \ | ||
{ P9_RLCREATE, "P9_RLCREATE" }, \ | ||
{ P9_TSYMLINK, "P9_TSYMLINK" }, \ | ||
{ P9_RSYMLINK, "P9_RSYMLINK" }, \ | ||
{ P9_TMKNOD, "P9_TMKNOD" }, \ | ||
{ P9_RMKNOD, "P9_RMKNOD" }, \ | ||
{ P9_TRENAME, "P9_TRENAME" }, \ | ||
{ P9_RRENAME, "P9_RRENAME" }, \ | ||
{ P9_TREADLINK, "P9_TREADLINK" }, \ | ||
{ P9_RREADLINK, "P9_RREADLINK" }, \ | ||
{ P9_TGETATTR, "P9_TGETATTR" }, \ | ||
{ P9_RGETATTR, "P9_RGETATTR" }, \ | ||
{ P9_TSETATTR, "P9_TSETATTR" }, \ | ||
{ P9_RSETATTR, "P9_RSETATTR" }, \ | ||
{ P9_TXATTRWALK, "P9_TXATTRWALK" }, \ | ||
{ P9_RXATTRWALK, "P9_RXATTRWALK" }, \ | ||
{ P9_TXATTRCREATE, "P9_TXATTRCREATE" }, \ | ||
{ P9_RXATTRCREATE, "P9_RXATTRCREATE" }, \ | ||
{ P9_TREADDIR, "P9_TREADDIR" }, \ | ||
{ P9_RREADDIR, "P9_RREADDIR" }, \ | ||
{ P9_TFSYNC, "P9_TFSYNC" }, \ | ||
{ P9_RFSYNC, "P9_RFSYNC" }, \ | ||
{ P9_TLOCK, "P9_TLOCK" }, \ | ||
{ P9_RLOCK, "P9_RLOCK" }, \ | ||
{ P9_TGETLOCK, "P9_TGETLOCK" }, \ | ||
{ P9_RGETLOCK, "P9_RGETLOCK" }, \ | ||
{ P9_TLINK, "P9_TLINK" }, \ | ||
{ P9_RLINK, "P9_RLINK" }, \ | ||
{ P9_TMKDIR, "P9_TMKDIR" }, \ | ||
{ P9_RMKDIR, "P9_RMKDIR" }, \ | ||
{ P9_TRENAMEAT, "P9_TRENAMEAT" }, \ | ||
{ P9_RRENAMEAT, "P9_RRENAMEAT" }, \ | ||
{ P9_TUNLINKAT, "P9_TUNLINKAT" }, \ | ||
{ P9_RUNLINKAT, "P9_RUNLINKAT" }, \ | ||
{ P9_TVERSION, "P9_TVERSION" }, \ | ||
{ P9_RVERSION, "P9_RVERSION" }, \ | ||
{ P9_TAUTH, "P9_TAUTH" }, \ | ||
{ P9_RAUTH, "P9_RAUTH" }, \ | ||
{ P9_TATTACH, "P9_TATTACH" }, \ | ||
{ P9_RATTACH, "P9_RATTACH" }, \ | ||
{ P9_TERROR, "P9_TERROR" }, \ | ||
{ P9_RERROR, "P9_RERROR" }, \ | ||
{ P9_TFLUSH, "P9_TFLUSH" }, \ | ||
{ P9_RFLUSH, "P9_RFLUSH" }, \ | ||
{ P9_TWALK, "P9_TWALK" }, \ | ||
{ P9_RWALK, "P9_RWALK" }, \ | ||
{ P9_TOPEN, "P9_TOPEN" }, \ | ||
{ P9_ROPEN, "P9_ROPEN" }, \ | ||
{ P9_TCREATE, "P9_TCREATE" }, \ | ||
{ P9_RCREATE, "P9_RCREATE" }, \ | ||
{ P9_TREAD, "P9_TREAD" }, \ | ||
{ P9_RREAD, "P9_RREAD" }, \ | ||
{ P9_TWRITE, "P9_TWRITE" }, \ | ||
{ P9_RWRITE, "P9_RWRITE" }, \ | ||
{ P9_TCLUNK, "P9_TCLUNK" }, \ | ||
{ P9_RCLUNK, "P9_RCLUNK" }, \ | ||
{ P9_TREMOVE, "P9_TREMOVE" }, \ | ||
{ P9_RREMOVE, "P9_RREMOVE" }, \ | ||
{ P9_TSTAT, "P9_TSTAT" }, \ | ||
{ P9_RSTAT, "P9_RSTAT" }, \ | ||
{ P9_TWSTAT, "P9_TWSTAT" }, \ | ||
{ P9_RWSTAT, "P9_RWSTAT" }) | ||
|
||
TRACE_EVENT(9p_client_req, | ||
TP_PROTO(struct p9_client *clnt, int8_t type, int tag), | ||
|
||
TP_ARGS(clnt, type, tag), | ||
|
||
TP_STRUCT__entry( | ||
__field( void *, clnt ) | ||
__field( __u8, type ) | ||
__field( __u32, tag ) | ||
), | ||
|
||
TP_fast_assign( | ||
__entry->clnt = clnt; | ||
__entry->type = type; | ||
__entry->tag = tag; | ||
), | ||
|
||
TP_printk("client %lu request %s tag %d", | ||
(long)__entry->clnt, show_9p_op(__entry->type), | ||
__entry->tag) | ||
); | ||
|
||
TRACE_EVENT(9p_client_res, | ||
TP_PROTO(struct p9_client *clnt, int8_t type, int tag, int err), | ||
|
||
TP_ARGS(clnt, type, tag, err), | ||
|
||
TP_STRUCT__entry( | ||
__field( void *, clnt ) | ||
__field( __u8, type ) | ||
__field( __u32, tag ) | ||
__field( __u32, err ) | ||
), | ||
|
||
TP_fast_assign( | ||
__entry->clnt = clnt; | ||
__entry->type = type; | ||
__entry->tag = tag; | ||
__entry->err = err; | ||
), | ||
|
||
TP_printk("client %lu response %s tag %d err %d", | ||
(long)__entry->clnt, show_9p_op(__entry->type), | ||
__entry->tag, __entry->err) | ||
); | ||
|
||
/* dump 32 bytes of protocol data */ | ||
#define P9_PROTO_DUMP_SZ 32 | ||
TRACE_EVENT(9p_protocol_dump, | ||
TP_PROTO(struct p9_client *clnt, struct p9_fcall *pdu), | ||
|
||
TP_ARGS(clnt, pdu), | ||
|
||
TP_STRUCT__entry( | ||
__field( void *, clnt ) | ||
__field( __u8, type ) | ||
__field( __u16, tag ) | ||
__array( unsigned char, line, P9_PROTO_DUMP_SZ ) | ||
), | ||
|
||
TP_fast_assign( | ||
__entry->clnt = clnt; | ||
__entry->type = pdu->id; | ||
__entry->tag = pdu->tag; | ||
memcpy(__entry->line, pdu->sdata, P9_PROTO_DUMP_SZ); | ||
), | ||
TP_printk("clnt %lu %s(tag = %d)\n%.3x: " | ||
"%02x %02x %02x %02x %02x %02x %02x %02x " | ||
"%02x %02x %02x %02x %02x %02x %02x %02x\n" | ||
"%.3x: " | ||
"%02x %02x %02x %02x %02x %02x %02x %02x " | ||
"%02x %02x %02x %02x %02x %02x %02x %02x\n", | ||
(long)__entry->clnt, show_9p_op(__entry->type), | ||
__entry->tag, 0, | ||
__entry->line[0], __entry->line[1], | ||
__entry->line[2], __entry->line[3], | ||
__entry->line[4], __entry->line[5], | ||
__entry->line[6], __entry->line[7], | ||
__entry->line[8], __entry->line[9], | ||
__entry->line[10], __entry->line[11], | ||
__entry->line[12], __entry->line[13], | ||
__entry->line[14], __entry->line[15], | ||
16, | ||
__entry->line[16], __entry->line[17], | ||
__entry->line[18], __entry->line[19], | ||
__entry->line[20], __entry->line[21], | ||
__entry->line[22], __entry->line[23], | ||
__entry->line[24], __entry->line[25], | ||
__entry->line[26], __entry->line[27], | ||
__entry->line[28], __entry->line[29], | ||
__entry->line[30], __entry->line[31]) | ||
); | ||
|
||
#endif /* _TRACE_9P_H */ | ||
|
||
/* This part must be outside protection */ | ||
#include <trace/define_trace.h> |
Oops, something went wrong.