On Tue, Aug 9, 2011 at 2:52 PM, Aneesh Kumar K.V <aneesh.kumar@xxxxxxxxxxxxxxxxxx> wrote: > This helps in more control over debugging. > > root@qemu-img-64:~# ls -al /pass/1234 > ls: cannot access /pass/1234: No such file or directory > root@qemu-img-64:~# cat /sys/kernel/debug/tracing/trace > # tracer: nop > # > # TASK-PID CPU# TIMESTAMP FUNCTION > # | | | | | > ls-1585 [001] 152.525239: 9p_protocol_dump: clnt 18446612132802834432 P9_TWALK(tag = 1) > 00000000: 17 00 00 00 6e 01 00 01 00 00 > 00000020: 00 04 00 31 32 33 34 00 00 ff > > ls-1585 [001] 152.525244: <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-1585 [000] 152.526272: 9p_protocol_dump: clnt 18446612132802834432 P9_RLERROR(tag = 1) > 00000000: 0b 00 00 00 07 01 00 02 00 00 > 00000020: 00 00 00 00 03 00 02 00 00 00 > > ls-1585 [000] 152.526275: <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@xxxxxxxxxxxxxxxxxx> Wow, cool! Acked-by: Pekka Enberg <penberg@xxxxxxxxxx> I'm CC'ing Ingo and Steven in case they want to review how you used tracepoints here. > --- > fs/9p/vfs_dir.c | 12 ++-- > include/net/9p/9p.h | 3 - > include/net/9p/client.h | 6 +- > include/trace/events/9p.h | 174 +++++++++++++++++++++++++++++++++++++++++++++ > net/9p/client.c | 70 +++++++++++-------- > net/9p/protocol.c | 53 +++----------- > net/9p/protocol.h | 3 +- > 7 files changed, 236 insertions(+), 85 deletions(-) > create mode 100644 include/trace/events/9p.h > > diff --git a/fs/9p/vfs_dir.c b/fs/9p/vfs_dir.c > index ce6600f..598fff1 100644 > --- a/fs/9p/vfs_dir.c > +++ b/fs/9p/vfs_dir.c > @@ -165,9 +165,8 @@ static int v9fs_dir_readdir(struct file *filp, void *dirent, filldir_t filldir) > } > while (rdir->head < rdir->tail) { > p9stat_init(&st); > - err = p9stat_read(rdir->buf + rdir->head, > - rdir->tail - rdir->head, &st, > - fid->clnt->proto_version); > + err = p9stat_read(fid->clnt, rdir->buf + rdir->head, > + rdir->tail - rdir->head, &st); > if (err) { > P9_DPRINTK(P9_DEBUG_VFS, "returned %d\n", err); > err = -EIO; > @@ -241,10 +240,9 @@ static int v9fs_dir_readdir_dotl(struct file *filp, void *dirent, > > while (rdir->head < rdir->tail) { > > - err = p9dirent_read(rdir->buf + rdir->head, > - rdir->tail - rdir->head, > - &curdirent, > - fid->clnt->proto_version); > + err = p9dirent_read(fid->clnt, rdir->buf + rdir->head, > + rdir->tail - rdir->head, > + &curdirent); > if (err < 0) { > P9_DPRINTK(P9_DEBUG_VFS, "returned %d\n", err); > err = -EIO; > diff --git a/include/net/9p/9p.h b/include/net/9p/9p.h > index 2063a34..289b0ec 100644 > --- a/include/net/9p/9p.h > +++ b/include/net/9p/9p.h > @@ -76,11 +76,8 @@ do { \ > } \ > } while (0) > > -#define P9_DUMP_PKT(way, pdu) p9pdu_dump(way, pdu) > - > #else > #define P9_DPRINTK(level, format, arg...) do { } while (0) > -#define P9_DUMP_PKT(way, pdu) do { } while (0) > #endif > > > diff --git a/include/net/9p/client.h b/include/net/9p/client.h > index 55ce72c..5d07e53 100644 > --- a/include/net/9p/client.h > +++ b/include/net/9p/client.h > @@ -240,8 +240,8 @@ int p9_client_read(struct p9_fid *fid, char *data, char __user *udata, > int p9_client_write(struct p9_fid *fid, char *data, const char __user *udata, > u64 offset, u32 count); > int p9_client_readdir(struct p9_fid *fid, char *data, u32 count, u64 offset); > -int p9dirent_read(char *buf, int len, struct p9_dirent *dirent, > - int proto_version); > +int p9dirent_read(struct p9_client *clnt, char *buf, int len, > + struct p9_dirent *dirent); > struct p9_wstat *p9_client_stat(struct p9_fid *fid); > int p9_client_wstat(struct p9_fid *fid, struct p9_wstat *wst); > int p9_client_setattr(struct p9_fid *fid, struct p9_iattr_dotl *attr); > @@ -259,7 +259,7 @@ struct p9_req_t *p9_tag_lookup(struct p9_client *, u16); > void p9_client_cb(struct p9_client *c, struct p9_req_t *req); > > int p9_parse_header(struct p9_fcall *, int32_t *, int8_t *, int16_t *, int); > -int p9stat_read(char *, int, struct p9_wstat *, int); > +int p9stat_read(struct p9_client *, char *, int, struct p9_wstat *); > void p9stat_free(struct p9_wstat *); > > int p9_is_proto_dotu(struct p9_client *clnt); > diff --git a/include/trace/events/9p.h b/include/trace/events/9p.h > new file mode 100644 > index 0000000..ff5f16a > --- /dev/null > +++ b/include/trace/events/9p.h > @@ -0,0 +1,174 @@ > +#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> > + > +/* > + * ideally this should be NAME_MAX for path names. But i guess > + * that will take too much space in trace buffer ? > + */ > +#define TRACE_9P_STR_LEN 32 > + > +#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( > + /* > + * FIXME can i have void * as type. If so will it > + * cause issue when i read trace from a 64 bit machine > + * on a 32 bit machine. > + */ > + __field( __u64, clnt ) > + __field( __u8, type ) > + __field( __u32, tag ) > + ), > + > + TP_fast_assign( > + __entry->clnt = (__u64)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( > + /* > + * FIXME can i have void * as type. If so will it > + * cause issue when i read trace from a 64 bit machine > + * on a 32 bit machine. > + */ > + __field( __u64, clnt ) > + __field( __u8, type ) > + __field( __u32, tag ) > + __field( __u32, err ) > + ), > + > + TP_fast_assign( > + __entry->clnt = (__u64)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) > +); > + > +TRACE_EVENT(9p_protocol_dump, > + TP_PROTO(struct p9_client *clnt, struct p9_fcall *pdu), > + > + TP_ARGS(clnt, pdu), > + > + TP_STRUCT__entry( > + __field( __u64, clnt ) > + __field( __u8, type ) > + __field( __u16, tag ) > + __array( unsigned char, line1, 32 ) > + __array( unsigned char, line2, 32 ) > + ), > + > + TP_fast_assign( > + const u8 *ptr = pdu->sdata; > + __entry->clnt = (__u64)clnt; > + __entry->type = pdu->id; > + __entry->tag = pdu->tag; > + hex_dump_to_buffer(ptr, 16, 16, > + 1, __entry->line1, 32, true); > + hex_dump_to_buffer(ptr + 16, 16, 16, > + 1, __entry->line2, 32, true); > + ), > + > + TP_printk("clnt %lu %s(tag = %d)\n%.8x: %s\n%.8x: %s\n", > + (long)__entry->clnt, show_9p_op(__entry->type), > + __entry->tag, 0, __entry->line1, 32 , __entry->line2) > + ); > + > +#endif /* _TRACE_9P_H */ > + > +/* This part must be outside protection */ > +#include <trace/define_trace.h> > diff --git a/net/9p/client.c b/net/9p/client.c > index d094ce9..ad1ab84 100644 > --- a/net/9p/client.c > +++ b/net/9p/client.c > @@ -38,6 +38,9 @@ > #include <net/9p/transport.h> > #include "protocol.h" > > +#define CREATE_TRACE_POINTS > +#include <trace/events/9p.h> > + > /* > * Client Option Parsing (code inspired by NFS code) > * - a little lazy - parse all client options > @@ -703,8 +706,9 @@ p9_client_rpc(struct p9_client *c, int8_t type, const char *fmt, ...) > va_end(ap); > if (err) > goto reterr; > - p9pdu_finalize(req->tc); > + p9pdu_finalize(c, req->tc); > > + trace_9p_client_req(c, type, tag); > err = c->trans_mod->request(c, req); > if (err < 0) { > if (err != -ERESTARTSYS && err != -EFAULT) > @@ -746,14 +750,17 @@ p9_client_rpc(struct p9_client *c, int8_t type, const char *fmt, ...) > goto reterr; > > err = p9_check_errors(c, req); > + /* > + * dump the response from server > + * This should be after check errors which poplulate pdu_fcall. > + */ > + trace_9p_protocol_dump(c, req->rc); > + trace_9p_client_res(c, type, tag, err); > if (!err) { > P9_DPRINTK(P9_DEBUG_MUX, "exit: client %p op %d\n", c, type); > return req; > } > - > reterr: > - P9_DPRINTK(P9_DEBUG_MUX, "exit: client %p op %d error: %d\n", c, type, > - err); > p9_free_req(c, req); > return ERR_PTR(err); > } > @@ -823,7 +830,7 @@ static struct p9_req_t *p9_client_zc_rpc(struct p9_client *c, int8_t type, > va_end(ap); > if (err) > goto reterr; > - p9pdu_finalize(req->tc); > + p9pdu_finalize(c, req->tc); > > err = c->trans_mod->zc_request(c, req, uidata, uodata, > inlen, olen, in_hdrlen, kern_buf); > @@ -857,10 +864,17 @@ static struct p9_req_t *p9_client_zc_rpc(struct p9_client *c, int8_t type, > goto reterr; > > err = p9_check_zc_errors(c, req, uidata, in_hdrlen, kern_buf); > + /* > + * dump the response from server > + * This should be after check errors which poplulate pdu_fcall. > + */ > + trace_9p_protocol_dump(c, req->rc); > + trace_9p_client_res(c, type, tag, err); > if (!err) { > P9_DPRINTK(P9_DEBUG_MUX, "exit: client %p op %d\n", c, type); > return req; > } > + > reterr: > P9_DPRINTK(P9_DEBUG_MUX, "exit: client %p op %d error: %d\n", c, type, > err); > @@ -951,7 +965,7 @@ static int p9_client_version(struct p9_client *c) > err = p9pdu_readf(req->rc, c->proto_version, "ds", &msize, &version); > if (err) { > P9_DPRINTK(P9_DEBUG_9P, "version error %d\n", err); > - P9_DUMP_PKT(1, req->rc); > + trace_9p_protocol_dump(c, req->rc); > goto error; > } > > @@ -1088,15 +1102,14 @@ EXPORT_SYMBOL(p9_client_begin_disconnect); > struct p9_fid *p9_client_attach(struct p9_client *clnt, struct p9_fid *afid, > char *uname, u32 n_uname, char *aname) > { > - int err; > + int err = 0; > struct p9_req_t *req; > struct p9_fid *fid; > struct p9_qid qid; > > - P9_DPRINTK(P9_DEBUG_9P, ">>> TATTACH afid %d uname %s aname %s\n", > - afid ? afid->fid : -1, uname, aname); > - err = 0; > > + P9_DPRINTK(P9_DEBUG_9P, ">>> TATTACH afid %d uname %s aname %s\n", > + afid ? afid->fid : -1, uname, aname); > fid = p9_fid_create(clnt); > if (IS_ERR(fid)) { > err = PTR_ERR(fid); > @@ -1113,7 +1126,7 @@ struct p9_fid *p9_client_attach(struct p9_client *clnt, struct p9_fid *afid, > > err = p9pdu_readf(req->rc, clnt->proto_version, "Q", &qid); > if (err) { > - P9_DUMP_PKT(1, req->rc); > + trace_9p_protocol_dump(clnt, req->rc); > p9_free_req(clnt, req); > goto error; > } > @@ -1173,7 +1186,7 @@ struct p9_fid *p9_client_walk(struct p9_fid *oldfid, uint16_t nwname, > > err = p9pdu_readf(req->rc, clnt->proto_version, "R", &nwqids, &wqids); > if (err) { > - P9_DUMP_PKT(1, req->rc); > + trace_9p_protocol_dump(clnt, req->rc); > p9_free_req(clnt, req); > goto clunk_fid; > } > @@ -1240,7 +1253,7 @@ int p9_client_open(struct p9_fid *fid, int mode) > > err = p9pdu_readf(req->rc, clnt->proto_version, "Qd", &qid, &iounit); > if (err) { > - P9_DUMP_PKT(1, req->rc); > + trace_9p_protocol_dump(clnt, req->rc); > goto free_and_error; > } > > @@ -1283,7 +1296,7 @@ int p9_client_create_dotl(struct p9_fid *ofid, char *name, u32 flags, u32 mode, > > err = p9pdu_readf(req->rc, clnt->proto_version, "Qd", qid, &iounit); > if (err) { > - P9_DUMP_PKT(1, req->rc); > + trace_9p_protocol_dump(clnt, req->rc); > goto free_and_error; > } > > @@ -1328,7 +1341,7 @@ int p9_client_fcreate(struct p9_fid *fid, char *name, u32 perm, int mode, > > err = p9pdu_readf(req->rc, clnt->proto_version, "Qd", &qid, &iounit); > if (err) { > - P9_DUMP_PKT(1, req->rc); > + trace_9p_protocol_dump(clnt, req->rc); > goto free_and_error; > } > > @@ -1367,7 +1380,7 @@ int p9_client_symlink(struct p9_fid *dfid, char *name, char *symtgt, gid_t gid, > > err = p9pdu_readf(req->rc, clnt->proto_version, "Q", qid); > if (err) { > - P9_DUMP_PKT(1, req->rc); > + trace_9p_protocol_dump(clnt, req->rc); > goto free_and_error; > } > > @@ -1558,12 +1571,11 @@ p9_client_read(struct p9_fid *fid, char *data, char __user *udata, u64 offset, > > err = p9pdu_readf(req->rc, clnt->proto_version, "D", &count, &dataptr); > if (err) { > - P9_DUMP_PKT(1, req->rc); > + trace_9p_protocol_dump(clnt, req->rc); > goto free_and_error; > } > > P9_DPRINTK(P9_DEBUG_9P, "<<< RREAD count %d\n", count); > - P9_DUMP_PKT(1, req->rc); > > if (non_zc) { > if (data) { > @@ -1633,7 +1645,7 @@ p9_client_write(struct p9_fid *fid, char *data, const char __user *udata, > > err = p9pdu_readf(req->rc, clnt->proto_version, "d", &count); > if (err) { > - P9_DUMP_PKT(1, req->rc); > + trace_9p_protocol_dump(clnt, req->rc); > goto free_and_error; > } > > @@ -1673,7 +1685,7 @@ struct p9_wstat *p9_client_stat(struct p9_fid *fid) > > err = p9pdu_readf(req->rc, clnt->proto_version, "wS", &ignored, ret); > if (err) { > - P9_DUMP_PKT(1, req->rc); > + trace_9p_protocol_dump(clnt, req->rc); > p9_free_req(clnt, req); > goto error; > } > @@ -1724,7 +1736,7 @@ struct p9_stat_dotl *p9_client_getattr_dotl(struct p9_fid *fid, > > err = p9pdu_readf(req->rc, clnt->proto_version, "A", ret); > if (err) { > - P9_DUMP_PKT(1, req->rc); > + trace_9p_protocol_dump(clnt, req->rc); > p9_free_req(clnt, req); > goto error; > } > @@ -1872,7 +1884,7 @@ int p9_client_statfs(struct p9_fid *fid, struct p9_rstatfs *sb) > &sb->bsize, &sb->blocks, &sb->bfree, &sb->bavail, > &sb->files, &sb->ffree, &sb->fsid, &sb->namelen); > if (err) { > - P9_DUMP_PKT(1, req->rc); > + trace_9p_protocol_dump(clnt, req->rc); > p9_free_req(clnt, req); > goto error; > } > @@ -1979,7 +1991,7 @@ struct p9_fid *p9_client_xattrwalk(struct p9_fid *file_fid, > } > err = p9pdu_readf(req->rc, clnt->proto_version, "q", attr_size); > if (err) { > - P9_DUMP_PKT(1, req->rc); > + trace_9p_protocol_dump(clnt, req->rc); > p9_free_req(clnt, req); > goto clunk_fid; > } > @@ -2063,7 +2075,7 @@ int p9_client_readdir(struct p9_fid *fid, char *data, u32 count, u64 offset) > > err = p9pdu_readf(req->rc, clnt->proto_version, "D", &count, &dataptr); > if (err) { > - P9_DUMP_PKT(1, req->rc); > + trace_9p_protocol_dump(clnt, req->rc); > goto free_and_error; > } > > @@ -2100,7 +2112,7 @@ int p9_client_mknod_dotl(struct p9_fid *fid, char *name, int mode, > > err = p9pdu_readf(req->rc, clnt->proto_version, "Q", qid); > if (err) { > - P9_DUMP_PKT(1, req->rc); > + trace_9p_protocol_dump(clnt, req->rc); > goto error; > } > P9_DPRINTK(P9_DEBUG_9P, "<<< RMKNOD qid %x.%llx.%x\n", qid->type, > @@ -2131,7 +2143,7 @@ int p9_client_mkdir_dotl(struct p9_fid *fid, char *name, int mode, > > err = p9pdu_readf(req->rc, clnt->proto_version, "Q", qid); > if (err) { > - P9_DUMP_PKT(1, req->rc); > + trace_9p_protocol_dump(clnt, req->rc); > goto error; > } > P9_DPRINTK(P9_DEBUG_9P, "<<< RMKDIR qid %x.%llx.%x\n", qid->type, > @@ -2166,7 +2178,7 @@ int p9_client_lock_dotl(struct p9_fid *fid, struct p9_flock *flock, u8 *status) > > err = p9pdu_readf(req->rc, clnt->proto_version, "b", status); > if (err) { > - P9_DUMP_PKT(1, req->rc); > + trace_9p_protocol_dump(clnt, req->rc); > goto error; > } > P9_DPRINTK(P9_DEBUG_9P, "<<< RLOCK status %i\n", *status); > @@ -2199,7 +2211,7 @@ int p9_client_getlock_dotl(struct p9_fid *fid, struct p9_getlock *glock) > &glock->start, &glock->length, &glock->proc_id, > &glock->client_id); > if (err) { > - P9_DUMP_PKT(1, req->rc); > + trace_9p_protocol_dump(clnt, req->rc); > goto error; > } > P9_DPRINTK(P9_DEBUG_9P, "<<< RGETLOCK type %i start %lld length %lld " > @@ -2227,7 +2239,7 @@ int p9_client_readlink(struct p9_fid *fid, char **target) > > err = p9pdu_readf(req->rc, clnt->proto_version, "s", target); > if (err) { > - P9_DUMP_PKT(1, req->rc); > + trace_9p_protocol_dump(clnt, req->rc); > goto error; > } > P9_DPRINTK(P9_DEBUG_9P, "<<< RREADLINK target %s\n", *target); > diff --git a/net/9p/protocol.c b/net/9p/protocol.c > index b7d4e8a..55e10a9 100644 > --- a/net/9p/protocol.c > +++ b/net/9p/protocol.c > @@ -37,40 +37,11 @@ > #include <net/9p/client.h> > #include "protocol.h" > > +#include <trace/events/9p.h> > + > static int > p9pdu_writef(struct p9_fcall *pdu, int proto_version, const char *fmt, ...); > > -#ifdef CONFIG_NET_9P_DEBUG > -void > -p9pdu_dump(int way, struct p9_fcall *pdu) > -{ > - int len = pdu->size; > - > - if ((p9_debug_level & P9_DEBUG_VPKT) != P9_DEBUG_VPKT) { > - if ((p9_debug_level & P9_DEBUG_PKT) == P9_DEBUG_PKT) { > - if (len > 32) > - len = 32; > - } else { > - /* shouldn't happen */ > - return; > - } > - } > - > - if (way) > - print_hex_dump_bytes("[9P] ", DUMP_PREFIX_OFFSET, pdu->sdata, > - len); > - else > - print_hex_dump_bytes("]9P[ ", DUMP_PREFIX_OFFSET, pdu->sdata, > - len); > -} > -#else > -void > -p9pdu_dump(int way, struct p9_fcall *pdu) > -{ > -} > -#endif > -EXPORT_SYMBOL(p9pdu_dump); > - > void p9stat_free(struct p9_wstat *stbuf) > { > kfree(stbuf->name); > @@ -551,7 +522,7 @@ p9pdu_writef(struct p9_fcall *pdu, int proto_version, const char *fmt, ...) > return ret; > } > > -int p9stat_read(char *buf, int len, struct p9_wstat *st, int proto_version) > +int p9stat_read(struct p9_client *clnt, char *buf, int len, struct p9_wstat *st) > { > struct p9_fcall fake_pdu; > int ret; > @@ -561,10 +532,10 @@ int p9stat_read(char *buf, int len, struct p9_wstat *st, int proto_version) > fake_pdu.sdata = buf; > fake_pdu.offset = 0; > > - ret = p9pdu_readf(&fake_pdu, proto_version, "S", st); > + ret = p9pdu_readf(&fake_pdu, clnt->proto_version, "S", st); > if (ret) { > P9_DPRINTK(P9_DEBUG_9P, "<<< p9stat_read failed: %d\n", ret); > - P9_DUMP_PKT(0, &fake_pdu); > + trace_9p_protocol_dump(clnt, &fake_pdu); > } > > return ret; > @@ -577,7 +548,7 @@ int p9pdu_prepare(struct p9_fcall *pdu, int16_t tag, int8_t type) > return p9pdu_writef(pdu, 0, "dbw", 0, type, tag); > } > > -int p9pdu_finalize(struct p9_fcall *pdu) > +int p9pdu_finalize(struct p9_client *clnt, struct p9_fcall *pdu) > { > int size = pdu->size; > int err; > @@ -586,7 +557,7 @@ int p9pdu_finalize(struct p9_fcall *pdu) > err = p9pdu_writef(pdu, 0, "d", size); > pdu->size = size; > > - P9_DUMP_PKT(0, pdu); > + trace_9p_protocol_dump(clnt, pdu); > P9_DPRINTK(P9_DEBUG_9P, ">>> size=%d type: %d tag: %d\n", pdu->size, > pdu->id, pdu->tag); > > @@ -599,8 +570,8 @@ void p9pdu_reset(struct p9_fcall *pdu) > pdu->size = 0; > } > > -int p9dirent_read(char *buf, int len, struct p9_dirent *dirent, > - int proto_version) > +int p9dirent_read(struct p9_client *clnt, char *buf, int len, > + struct p9_dirent *dirent) > { > struct p9_fcall fake_pdu; > int ret; > @@ -611,11 +582,11 @@ int p9dirent_read(char *buf, int len, struct p9_dirent *dirent, > fake_pdu.sdata = buf; > fake_pdu.offset = 0; > > - ret = p9pdu_readf(&fake_pdu, proto_version, "Qqbs", &dirent->qid, > - &dirent->d_off, &dirent->d_type, &nameptr); > + ret = p9pdu_readf(&fake_pdu, clnt->proto_version, "Qqbs", &dirent->qid, > + &dirent->d_off, &dirent->d_type, &nameptr); > if (ret) { > P9_DPRINTK(P9_DEBUG_9P, "<<< p9dirent_read failed: %d\n", ret); > - P9_DUMP_PKT(1, &fake_pdu); > + trace_9p_protocol_dump(clnt, &fake_pdu); > goto out; > } > > diff --git a/net/9p/protocol.h b/net/9p/protocol.h > index e5083f3..b0a6aa8f 100644 > --- a/net/9p/protocol.h > +++ b/net/9p/protocol.h > @@ -29,8 +29,7 @@ int p9pdu_vwritef(struct p9_fcall *pdu, int proto_version, const char *fmt, > va_list ap); > int p9pdu_readf(struct p9_fcall *pdu, int proto_version, const char *fmt, ...); > int p9pdu_prepare(struct p9_fcall *pdu, int16_t tag, int8_t type); > -int p9pdu_finalize(struct p9_fcall *pdu); > -void p9pdu_dump(int, struct p9_fcall *); > +int p9pdu_finalize(struct p9_client *clnt, struct p9_fcall *pdu); > void p9pdu_reset(struct p9_fcall *pdu); > size_t pdu_read(struct p9_fcall *pdu, void *data, size_t size); > > -- > 1.7.4.1 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ > -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html