]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - fs/nfs/nfs4trace.h
Merge branch 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[linux.git] / fs / nfs / nfs4trace.h
index e60b6fbd5ada1c6b18b2aba07e4aaee2cf4b8591..1e97e5e04cb43ba671c491b6433174e8c1552e0a 100644 (file)
@@ -155,6 +155,9 @@ TRACE_DEFINE_ENUM(NFS4ERR_WRONG_CRED);
 TRACE_DEFINE_ENUM(NFS4ERR_WRONG_TYPE);
 TRACE_DEFINE_ENUM(NFS4ERR_XDEV);
 
+TRACE_DEFINE_ENUM(NFS4ERR_RESET_TO_MDS);
+TRACE_DEFINE_ENUM(NFS4ERR_RESET_TO_PNFS);
+
 #define show_nfsv4_errors(error) \
        __print_symbolic(error, \
                { NFS4_OK, "OK" }, \
@@ -305,7 +308,10 @@ TRACE_DEFINE_ENUM(NFS4ERR_XDEV);
                { NFS4ERR_WRONGSEC, "WRONGSEC" }, \
                { NFS4ERR_WRONG_CRED, "WRONG_CRED" }, \
                { NFS4ERR_WRONG_TYPE, "WRONG_TYPE" }, \
-               { NFS4ERR_XDEV, "XDEV" })
+               { NFS4ERR_XDEV, "XDEV" }, \
+               /* ***** Internal to Linux NFS client ***** */ \
+               { NFS4ERR_RESET_TO_MDS, "RESET_TO_MDS" }, \
+               { NFS4ERR_RESET_TO_PNFS, "RESET_TO_PNFS" })
 
 #define show_open_flags(flags) \
        __print_flags(flags, "|", \
@@ -352,7 +358,7 @@ DECLARE_EVENT_CLASS(nfs4_clientid_event,
                ),
 
                TP_fast_assign(
-                       __entry->error = error;
+                       __entry->error = error < 0 ? -error : 0;
                        __assign_str(dstaddr, clp->cl_hostname);
                ),
 
@@ -432,7 +438,8 @@ TRACE_EVENT(nfs4_sequence_done,
                        __entry->target_highest_slotid =
                                        res->sr_target_highest_slotid;
                        __entry->status_flags = res->sr_status_flags;
-                       __entry->error = res->sr_status;
+                       __entry->error = res->sr_status < 0 ?
+                                       -res->sr_status : 0;
                ),
                TP_printk(
                        "error=%ld (%s) session=0x%08x slot_nr=%u seq_nr=%u "
@@ -640,7 +647,7 @@ TRACE_EVENT(nfs4_state_mgr_failed,
                ),
 
                TP_fast_assign(
-                       __entry->error = status;
+                       __entry->error = status < 0 ? -status : 0;
                        __entry->state = clp->cl_state;
                        __assign_str(hostname, clp->cl_hostname);
                        __assign_str(section, section);
@@ -659,7 +666,7 @@ TRACE_EVENT(nfs4_xdr_status,
                TP_PROTO(
                        const struct xdr_stream *xdr,
                        u32 op,
-                       int error
+                       u32 error
                ),
 
                TP_ARGS(xdr, op, error),
@@ -691,6 +698,41 @@ TRACE_EVENT(nfs4_xdr_status,
                )
 );
 
+DECLARE_EVENT_CLASS(nfs4_cb_error_class,
+               TP_PROTO(
+                       __be32 xid,
+                       u32 cb_ident
+               ),
+
+               TP_ARGS(xid, cb_ident),
+
+               TP_STRUCT__entry(
+                       __field(u32, xid)
+                       __field(u32, cbident)
+               ),
+
+               TP_fast_assign(
+                       __entry->xid = be32_to_cpu(xid);
+                       __entry->cbident = cb_ident;
+               ),
+
+               TP_printk(
+                       "xid=0x%08x cb_ident=0x%08x",
+                       __entry->xid, __entry->cbident
+               )
+);
+
+#define DEFINE_CB_ERROR_EVENT(name) \
+       DEFINE_EVENT(nfs4_cb_error_class, nfs_cb_##name, \
+                       TP_PROTO( \
+                               __be32 xid, \
+                               u32 cb_ident \
+                       ), \
+                       TP_ARGS(xid, cb_ident))
+
+DEFINE_CB_ERROR_EVENT(no_clp);
+DEFINE_CB_ERROR_EVENT(badprinc);
+
 DECLARE_EVENT_CLASS(nfs4_open_event,
                TP_PROTO(
                        const struct nfs_open_context *ctx,
@@ -849,7 +891,7 @@ TRACE_EVENT(nfs4_close,
                        __entry->fileid = NFS_FILEID(inode);
                        __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode));
                        __entry->fmode = (__force unsigned int)state->state;
-                       __entry->error = error;
+                       __entry->error = error < 0 ? -error : 0;
                        __entry->stateid_seq =
                                be32_to_cpu(args->stateid.seqid);
                        __entry->stateid_hash =
@@ -914,7 +956,7 @@ DECLARE_EVENT_CLASS(nfs4_lock_event,
                TP_fast_assign(
                        const struct inode *inode = state->inode;
 
-                       __entry->error = error;
+                       __entry->error = error < 0 ? -error : 0;
                        __entry->cmd = cmd;
                        __entry->type = request->fl_type;
                        __entry->start = request->fl_start;
@@ -986,7 +1028,7 @@ TRACE_EVENT(nfs4_set_lock,
                TP_fast_assign(
                        const struct inode *inode = state->inode;
 
-                       __entry->error = error;
+                       __entry->error = error < 0 ? -error : 0;
                        __entry->cmd = cmd;
                        __entry->type = request->fl_type;
                        __entry->start = request->fl_start;
@@ -1164,7 +1206,7 @@ TRACE_EVENT(nfs4_delegreturn_exit,
                TP_fast_assign(
                        __entry->dev = res->server->s_dev;
                        __entry->fhandle = nfs_fhandle_hash(args->fhandle);
-                       __entry->error = error;
+                       __entry->error = error < 0 ? -error : 0;
                        __entry->stateid_seq =
                                be32_to_cpu(args->stateid->seqid);
                        __entry->stateid_hash =
@@ -1204,7 +1246,7 @@ DECLARE_EVENT_CLASS(nfs4_test_stateid_event,
                TP_fast_assign(
                        const struct inode *inode = state->inode;
 
-                       __entry->error = error;
+                       __entry->error = error < 0 ? -error : 0;
                        __entry->dev = inode->i_sb->s_dev;
                        __entry->fileid = NFS_FILEID(inode);
                        __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode));
@@ -1306,7 +1348,7 @@ TRACE_EVENT(nfs4_lookupp,
                TP_fast_assign(
                        __entry->dev = inode->i_sb->s_dev;
                        __entry->ino = NFS_FILEID(inode);
-                       __entry->error = error;
+                       __entry->error = error < 0 ? -error : 0;
                ),
 
                TP_printk(
@@ -1342,7 +1384,7 @@ TRACE_EVENT(nfs4_rename,
                        __entry->dev = olddir->i_sb->s_dev;
                        __entry->olddir = NFS_FILEID(olddir);
                        __entry->newdir = NFS_FILEID(newdir);
-                       __entry->error = error;
+                       __entry->error = error < 0 ? -error : 0;
                        __assign_str(oldname, oldname->name);
                        __assign_str(newname, newname->name);
                ),
@@ -1433,7 +1475,7 @@ DECLARE_EVENT_CLASS(nfs4_inode_stateid_event,
                        __entry->dev = inode->i_sb->s_dev;
                        __entry->fileid = NFS_FILEID(inode);
                        __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode));
-                       __entry->error = error;
+                       __entry->error = error < 0 ? -error : 0;
                        __entry->stateid_seq =
                                be32_to_cpu(stateid->seqid);
                        __entry->stateid_hash =
@@ -1489,7 +1531,7 @@ DECLARE_EVENT_CLASS(nfs4_getattr_event,
                        __entry->valid = fattr->valid;
                        __entry->fhandle = nfs_fhandle_hash(fhandle);
                        __entry->fileid = (fattr->valid & NFS_ATTR_FATTR_FILEID) ? fattr->fileid : 0;
-                       __entry->error = error;
+                       __entry->error = error < 0 ? -error : 0;
                ),
 
                TP_printk(
@@ -1536,7 +1578,7 @@ DECLARE_EVENT_CLASS(nfs4_inode_callback_event,
                ),
 
                TP_fast_assign(
-                       __entry->error = error;
+                       __entry->error = error < 0 ? -error : 0;
                        __entry->fhandle = nfs_fhandle_hash(fhandle);
                        if (!IS_ERR_OR_NULL(inode)) {
                                __entry->fileid = NFS_FILEID(inode);
@@ -1593,7 +1635,7 @@ DECLARE_EVENT_CLASS(nfs4_inode_stateid_callback_event,
                ),
 
                TP_fast_assign(
-                       __entry->error = error;
+                       __entry->error = error < 0 ? -error : 0;
                        __entry->fhandle = nfs_fhandle_hash(fhandle);
                        if (!IS_ERR_OR_NULL(inode)) {
                                __entry->fileid = NFS_FILEID(inode);
@@ -1694,7 +1736,8 @@ DECLARE_EVENT_CLASS(nfs4_read_event,
                        __field(u32, fhandle)
                        __field(u64, fileid)
                        __field(loff_t, offset)
-                       __field(size_t, count)
+                       __field(u32, arg_count)
+                       __field(u32, res_count)
                        __field(unsigned long, error)
                        __field(int, stateid_seq)
                        __field(u32, stateid_hash)
@@ -1702,13 +1745,18 @@ DECLARE_EVENT_CLASS(nfs4_read_event,
 
                TP_fast_assign(
                        const struct inode *inode = hdr->inode;
+                       const struct nfs_inode *nfsi = NFS_I(inode);
+                       const struct nfs_fh *fh = hdr->args.fh ?
+                                                 hdr->args.fh : &nfsi->fh;
                        const struct nfs4_state *state =
                                hdr->args.context->state;
+
                        __entry->dev = inode->i_sb->s_dev;
-                       __entry->fileid = NFS_FILEID(inode);
-                       __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode));
+                       __entry->fileid = nfsi->fileid;
+                       __entry->fhandle = nfs_fhandle_hash(fh);
                        __entry->offset = hdr->args.offset;
-                       __entry->count = hdr->args.count;
+                       __entry->arg_count = hdr->args.count;
+                       __entry->res_count = hdr->res.count;
                        __entry->error = error < 0 ? -error : 0;
                        __entry->stateid_seq =
                                be32_to_cpu(state->stateid.seqid);
@@ -1718,14 +1766,14 @@ DECLARE_EVENT_CLASS(nfs4_read_event,
 
                TP_printk(
                        "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x "
-                       "offset=%lld count=%zu stateid=%d:0x%08x",
+                       "offset=%lld count=%u res=%u stateid=%d:0x%08x",
                        -__entry->error,
                        show_nfsv4_errors(__entry->error),
                        MAJOR(__entry->dev), MINOR(__entry->dev),
                        (unsigned long long)__entry->fileid,
                        __entry->fhandle,
                        (long long)__entry->offset,
-                       __entry->count,
+                       __entry->arg_count, __entry->res_count,
                        __entry->stateid_seq, __entry->stateid_hash
                )
 );
@@ -1754,7 +1802,8 @@ DECLARE_EVENT_CLASS(nfs4_write_event,
                        __field(u32, fhandle)
                        __field(u64, fileid)
                        __field(loff_t, offset)
-                       __field(size_t, count)
+                       __field(u32, arg_count)
+                       __field(u32, res_count)
                        __field(unsigned long, error)
                        __field(int, stateid_seq)
                        __field(u32, stateid_hash)
@@ -1762,13 +1811,18 @@ DECLARE_EVENT_CLASS(nfs4_write_event,
 
                TP_fast_assign(
                        const struct inode *inode = hdr->inode;
+                       const struct nfs_inode *nfsi = NFS_I(inode);
+                       const struct nfs_fh *fh = hdr->args.fh ?
+                                                 hdr->args.fh : &nfsi->fh;
                        const struct nfs4_state *state =
                                hdr->args.context->state;
+
                        __entry->dev = inode->i_sb->s_dev;
-                       __entry->fileid = NFS_FILEID(inode);
-                       __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode));
+                       __entry->fileid = nfsi->fileid;
+                       __entry->fhandle = nfs_fhandle_hash(fh);
                        __entry->offset = hdr->args.offset;
-                       __entry->count = hdr->args.count;
+                       __entry->arg_count = hdr->args.count;
+                       __entry->res_count = hdr->res.count;
                        __entry->error = error < 0 ? -error : 0;
                        __entry->stateid_seq =
                                be32_to_cpu(state->stateid.seqid);
@@ -1778,14 +1832,14 @@ DECLARE_EVENT_CLASS(nfs4_write_event,
 
                TP_printk(
                        "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x "
-                       "offset=%lld count=%zu stateid=%d:0x%08x",
+                       "offset=%lld count=%u res=%u stateid=%d:0x%08x",
                        -__entry->error,
                        show_nfsv4_errors(__entry->error),
                        MAJOR(__entry->dev), MINOR(__entry->dev),
                        (unsigned long long)__entry->fileid,
                        __entry->fhandle,
                        (long long)__entry->offset,
-                       __entry->count,
+                       __entry->arg_count, __entry->res_count,
                        __entry->stateid_seq, __entry->stateid_hash
                )
 );
@@ -1814,24 +1868,28 @@ DECLARE_EVENT_CLASS(nfs4_commit_event,
                        __field(dev_t, dev)
                        __field(u32, fhandle)
                        __field(u64, fileid)
-                       __field(loff_t, offset)
-                       __field(size_t, count)
                        __field(unsigned long, error)
+                       __field(loff_t, offset)
+                       __field(u32, count)
                ),
 
                TP_fast_assign(
                        const struct inode *inode = data->inode;
+                       const struct nfs_inode *nfsi = NFS_I(inode);
+                       const struct nfs_fh *fh = data->args.fh ?
+                                                 data->args.fh : &nfsi->fh;
+
                        __entry->dev = inode->i_sb->s_dev;
-                       __entry->fileid = NFS_FILEID(inode);
-                       __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode));
+                       __entry->fileid = nfsi->fileid;
+                       __entry->fhandle = nfs_fhandle_hash(fh);
                        __entry->offset = data->args.offset;
                        __entry->count = data->args.count;
-                       __entry->error = error;
+                       __entry->error = error < 0 ? -error : 0;
                ),
 
                TP_printk(
                        "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x "
-                       "offset=%lld count=%zu",
+                       "offset=%lld count=%u",
                        -__entry->error,
                        show_nfsv4_errors(__entry->error),
                        MAJOR(__entry->dev), MINOR(__entry->dev),
@@ -1896,7 +1954,7 @@ TRACE_EVENT(nfs4_layoutget,
                        __entry->iomode = args->iomode;
                        __entry->offset = args->offset;
                        __entry->count = args->length;
-                       __entry->error = error;
+                       __entry->error = error < 0 ? -error : 0;
                        __entry->stateid_seq =
                                be32_to_cpu(state->stateid.seqid);
                        __entry->stateid_hash =
@@ -2094,6 +2152,115 @@ DEFINE_PNFS_LAYOUT_EVENT(pnfs_mds_fallback_write_done);
 DEFINE_PNFS_LAYOUT_EVENT(pnfs_mds_fallback_read_pagelist);
 DEFINE_PNFS_LAYOUT_EVENT(pnfs_mds_fallback_write_pagelist);
 
+DECLARE_EVENT_CLASS(nfs4_flexfiles_io_event,
+               TP_PROTO(
+                       const struct nfs_pgio_header *hdr
+               ),
+
+               TP_ARGS(hdr),
+
+               TP_STRUCT__entry(
+                       __field(unsigned long, error)
+                       __field(dev_t, dev)
+                       __field(u32, fhandle)
+                       __field(u64, fileid)
+                       __field(loff_t, offset)
+                       __field(u32, count)
+                       __field(int, stateid_seq)
+                       __field(u32, stateid_hash)
+                       __string(dstaddr, hdr->ds_clp ?
+                               rpc_peeraddr2str(hdr->ds_clp->cl_rpcclient,
+                                       RPC_DISPLAY_ADDR) : "unknown")
+               ),
+
+               TP_fast_assign(
+                       const struct inode *inode = hdr->inode;
+
+                       __entry->error = hdr->res.op_status;
+                       __entry->fhandle = nfs_fhandle_hash(hdr->args.fh);
+                       __entry->fileid = NFS_FILEID(inode);
+                       __entry->dev = inode->i_sb->s_dev;
+                       __entry->offset = hdr->args.offset;
+                       __entry->count = hdr->args.count;
+                       __entry->stateid_seq =
+                               be32_to_cpu(hdr->args.stateid.seqid);
+                       __entry->stateid_hash =
+                               nfs_stateid_hash(&hdr->args.stateid);
+                       __assign_str(dstaddr, hdr->ds_clp ?
+                               rpc_peeraddr2str(hdr->ds_clp->cl_rpcclient,
+                                       RPC_DISPLAY_ADDR) : "unknown");
+               ),
+
+               TP_printk(
+                       "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x "
+                       "offset=%llu count=%u stateid=%d:0x%08x dstaddr=%s",
+                       -__entry->error,
+                       show_nfsv4_errors(__entry->error),
+                       MAJOR(__entry->dev), MINOR(__entry->dev),
+                       (unsigned long long)__entry->fileid,
+                       __entry->fhandle,
+                       __entry->offset, __entry->count,
+                       __entry->stateid_seq, __entry->stateid_hash,
+                       __get_str(dstaddr)
+               )
+);
+
+#define DEFINE_NFS4_FLEXFILES_IO_EVENT(name) \
+       DEFINE_EVENT(nfs4_flexfiles_io_event, name, \
+                       TP_PROTO( \
+                               const struct nfs_pgio_header *hdr \
+                       ), \
+                       TP_ARGS(hdr))
+DEFINE_NFS4_FLEXFILES_IO_EVENT(ff_layout_read_error);
+DEFINE_NFS4_FLEXFILES_IO_EVENT(ff_layout_write_error);
+
+TRACE_EVENT(ff_layout_commit_error,
+               TP_PROTO(
+                       const struct nfs_commit_data *data
+               ),
+
+               TP_ARGS(data),
+
+               TP_STRUCT__entry(
+                       __field(unsigned long, error)
+                       __field(dev_t, dev)
+                       __field(u32, fhandle)
+                       __field(u64, fileid)
+                       __field(loff_t, offset)
+                       __field(u32, count)
+                       __string(dstaddr, data->ds_clp ?
+                               rpc_peeraddr2str(data->ds_clp->cl_rpcclient,
+                                       RPC_DISPLAY_ADDR) : "unknown")
+               ),
+
+               TP_fast_assign(
+                       const struct inode *inode = data->inode;
+
+                       __entry->error = data->res.op_status;
+                       __entry->fhandle = nfs_fhandle_hash(data->args.fh);
+                       __entry->fileid = NFS_FILEID(inode);
+                       __entry->dev = inode->i_sb->s_dev;
+                       __entry->offset = data->args.offset;
+                       __entry->count = data->args.count;
+                       __assign_str(dstaddr, data->ds_clp ?
+                               rpc_peeraddr2str(data->ds_clp->cl_rpcclient,
+                                       RPC_DISPLAY_ADDR) : "unknown");
+               ),
+
+               TP_printk(
+                       "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x "
+                       "offset=%llu count=%u dstaddr=%s",
+                       -__entry->error,
+                       show_nfsv4_errors(__entry->error),
+                       MAJOR(__entry->dev), MINOR(__entry->dev),
+                       (unsigned long long)__entry->fileid,
+                       __entry->fhandle,
+                       __entry->offset, __entry->count,
+                       __get_str(dstaddr)
+               )
+);
+
+
 #endif /* CONFIG_NFS_V4_1 */
 
 #endif /* _TRACE_NFS4_H */