]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - fs/nfs/nfstrace.h
Merge tag 'usb-5.6-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb
[linux.git] / fs / nfs / nfstrace.h
index 2a82dcce5fc169d189f708de67d97b3bce450e63..a9588d19a5aec14786a0907299c1c4cc88b2bbef 100644 (file)
@@ -198,7 +198,66 @@ DEFINE_NFS_INODE_EVENT_DONE(nfs_writeback_inode_exit);
 DEFINE_NFS_INODE_EVENT(nfs_fsync_enter);
 DEFINE_NFS_INODE_EVENT_DONE(nfs_fsync_exit);
 DEFINE_NFS_INODE_EVENT(nfs_access_enter);
-DEFINE_NFS_INODE_EVENT_DONE(nfs_access_exit);
+
+TRACE_EVENT(nfs_access_exit,
+               TP_PROTO(
+                       const struct inode *inode,
+                       unsigned int mask,
+                       unsigned int permitted,
+                       int error
+               ),
+
+               TP_ARGS(inode, mask, permitted, error),
+
+               TP_STRUCT__entry(
+                       __field(unsigned long, error)
+                       __field(dev_t, dev)
+                       __field(u32, fhandle)
+                       __field(unsigned char, type)
+                       __field(u64, fileid)
+                       __field(u64, version)
+                       __field(loff_t, size)
+                       __field(unsigned long, nfsi_flags)
+                       __field(unsigned long, cache_validity)
+                       __field(unsigned int, mask)
+                       __field(unsigned int, permitted)
+               ),
+
+               TP_fast_assign(
+                       const struct nfs_inode *nfsi = NFS_I(inode);
+                       __entry->error = error < 0 ? -error : 0;
+                       __entry->dev = inode->i_sb->s_dev;
+                       __entry->fileid = nfsi->fileid;
+                       __entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
+                       __entry->type = nfs_umode_to_dtype(inode->i_mode);
+                       __entry->version = inode_peek_iversion_raw(inode);
+                       __entry->size = i_size_read(inode);
+                       __entry->nfsi_flags = nfsi->flags;
+                       __entry->cache_validity = nfsi->cache_validity;
+                       __entry->mask = mask;
+                       __entry->permitted = permitted;
+               ),
+
+               TP_printk(
+                       "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x "
+                       "type=%u (%s) version=%llu size=%lld "
+                       "cache_validity=0x%lx (%s) nfs_flags=0x%lx (%s) "
+                       "mask=0x%x permitted=0x%x",
+                       -__entry->error, nfs_show_status(__entry->error),
+                       MAJOR(__entry->dev), MINOR(__entry->dev),
+                       (unsigned long long)__entry->fileid,
+                       __entry->fhandle,
+                       __entry->type,
+                       nfs_show_file_type(__entry->type),
+                       (unsigned long long)__entry->version,
+                       (long long)__entry->size,
+                       __entry->cache_validity,
+                       nfs_show_cache_validity(__entry->cache_validity),
+                       __entry->nfsi_flags,
+                       nfs_show_nfsi_flags(__entry->nfsi_flags),
+                       __entry->mask, __entry->permitted
+               )
+);
 
 TRACE_DEFINE_ENUM(LOOKUP_FOLLOW);
 TRACE_DEFINE_ENUM(LOOKUP_DIRECTORY);
@@ -818,75 +877,85 @@ TRACE_EVENT(nfs_sillyrename_unlink,
 
 TRACE_EVENT(nfs_initiate_read,
                TP_PROTO(
-                       const struct inode *inode,
-                       loff_t offset, unsigned long count
+                       const struct nfs_pgio_header *hdr
                ),
 
-               TP_ARGS(inode, offset, count),
+               TP_ARGS(hdr),
 
                TP_STRUCT__entry(
-                       __field(loff_t, offset)
-                       __field(unsigned long, count)
                        __field(dev_t, dev)
                        __field(u32, fhandle)
                        __field(u64, fileid)
+                       __field(loff_t, offset)
+                       __field(u32, count)
                ),
 
                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;
 
-                       __entry->offset = offset;
-                       __entry->count = count;
+                       __entry->offset = hdr->args.offset;
+                       __entry->count = hdr->args.count;
                        __entry->dev = inode->i_sb->s_dev;
                        __entry->fileid = nfsi->fileid;
-                       __entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
+                       __entry->fhandle = nfs_fhandle_hash(fh);
                ),
 
                TP_printk(
                        "fileid=%02x:%02x:%llu fhandle=0x%08x "
-                       "offset=%lld count=%lu",
+                       "offset=%lld count=%u",
                        MAJOR(__entry->dev), MINOR(__entry->dev),
                        (unsigned long long)__entry->fileid,
                        __entry->fhandle,
-                       __entry->offset, __entry->count
+                       (long long)__entry->offset, __entry->count
                )
 );
 
 TRACE_EVENT(nfs_readpage_done,
                TP_PROTO(
-                       const struct inode *inode,
-                       int status, loff_t offset, bool eof
+                       const struct rpc_task *task,
+                       const struct nfs_pgio_header *hdr
                ),
 
-               TP_ARGS(inode, status, offset, eof),
+               TP_ARGS(task, hdr),
 
                TP_STRUCT__entry(
-                       __field(int, status)
-                       __field(loff_t, offset)
-                       __field(bool, eof)
                        __field(dev_t, dev)
                        __field(u32, fhandle)
                        __field(u64, fileid)
+                       __field(loff_t, offset)
+                       __field(u32, arg_count)
+                       __field(u32, res_count)
+                       __field(bool, eof)
+                       __field(int, status)
                ),
 
                TP_fast_assign(
+                       const struct inode *inode = hdr->inode;
                        const struct nfs_inode *nfsi = NFS_I(inode);
-
-                       __entry->status = status;
-                       __entry->offset = offset;
-                       __entry->eof = eof;
+                       const struct nfs_fh *fh = hdr->args.fh ?
+                                                 hdr->args.fh : &nfsi->fh;
+
+                       __entry->status = task->tk_status;
+                       __entry->offset = hdr->args.offset;
+                       __entry->arg_count = hdr->args.count;
+                       __entry->res_count = hdr->res.count;
+                       __entry->eof = hdr->res.eof;
                        __entry->dev = inode->i_sb->s_dev;
                        __entry->fileid = nfsi->fileid;
-                       __entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
+                       __entry->fhandle = nfs_fhandle_hash(fh);
                ),
 
                TP_printk(
                        "fileid=%02x:%02x:%llu fhandle=0x%08x "
-                       "offset=%lld status=%d%s",
+                       "offset=%lld count=%u res=%u status=%d%s",
                        MAJOR(__entry->dev), MINOR(__entry->dev),
                        (unsigned long long)__entry->fileid,
                        __entry->fhandle,
-                       __entry->offset, __entry->status,
+                       (long long)__entry->offset, __entry->arg_count,
+                       __entry->res_count, __entry->status,
                        __entry->eof ? " eof" : ""
                )
 );
@@ -903,90 +972,144 @@ TRACE_DEFINE_ENUM(NFS_FILE_SYNC);
 
 TRACE_EVENT(nfs_initiate_write,
                TP_PROTO(
-                       const struct inode *inode,
-                       loff_t offset, unsigned long count,
-                       enum nfs3_stable_how stable
+                       const struct nfs_pgio_header *hdr
                ),
 
-               TP_ARGS(inode, offset, count, stable),
+               TP_ARGS(hdr),
 
                TP_STRUCT__entry(
-                       __field(loff_t, offset)
-                       __field(unsigned long, count)
-                       __field(enum nfs3_stable_how, stable)
                        __field(dev_t, dev)
                        __field(u32, fhandle)
                        __field(u64, fileid)
+                       __field(loff_t, offset)
+                       __field(u32, count)
+                       __field(enum nfs3_stable_how, stable)
                ),
 
                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;
 
-                       __entry->offset = offset;
-                       __entry->count = count;
-                       __entry->stable = stable;
+                       __entry->offset = hdr->args.offset;
+                       __entry->count = hdr->args.count;
+                       __entry->stable = hdr->args.stable;
                        __entry->dev = inode->i_sb->s_dev;
                        __entry->fileid = nfsi->fileid;
-                       __entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
+                       __entry->fhandle = nfs_fhandle_hash(fh);
                ),
 
                TP_printk(
                        "fileid=%02x:%02x:%llu fhandle=0x%08x "
-                       "offset=%lld count=%lu stable=%s",
+                       "offset=%lld count=%u stable=%s",
                        MAJOR(__entry->dev), MINOR(__entry->dev),
                        (unsigned long long)__entry->fileid,
                        __entry->fhandle,
-                       __entry->offset, __entry->count,
+                       (long long)__entry->offset, __entry->count,
                        nfs_show_stable(__entry->stable)
                )
 );
 
 TRACE_EVENT(nfs_writeback_done,
                TP_PROTO(
-                       const struct inode *inode,
-                       int status,
-                       loff_t offset,
-                       struct nfs_writeverf *writeverf
+                       const struct rpc_task *task,
+                       const struct nfs_pgio_header *hdr
                ),
 
-               TP_ARGS(inode, status, offset, writeverf),
+               TP_ARGS(task, hdr),
 
                TP_STRUCT__entry(
-                       __field(int, status)
-                       __field(loff_t, offset)
-                       __field(enum nfs3_stable_how, stable)
-                       __field(unsigned long long, verifier)
                        __field(dev_t, dev)
                        __field(u32, fhandle)
                        __field(u64, fileid)
+                       __field(loff_t, offset)
+                       __field(u32, arg_count)
+                       __field(u32, res_count)
+                       __field(int, status)
+                       __field(enum nfs3_stable_how, stable)
+                       __array(char, verifier, NFS4_VERIFIER_SIZE)
                ),
 
                TP_fast_assign(
+                       const struct inode *inode = hdr->inode;
                        const struct nfs_inode *nfsi = NFS_I(inode);
-
-                       __entry->status = status;
-                       __entry->offset = offset;
-                       __entry->stable = writeverf->committed;
-                       memcpy(&__entry->verifier, &writeverf->verifier,
-                              sizeof(__entry->verifier));
+                       const struct nfs_fh *fh = hdr->args.fh ?
+                                                 hdr->args.fh : &nfsi->fh;
+                       const struct nfs_writeverf *verf = hdr->res.verf;
+
+                       __entry->status = task->tk_status;
+                       __entry->offset = hdr->args.offset;
+                       __entry->arg_count = hdr->args.count;
+                       __entry->res_count = hdr->res.count;
+                       __entry->stable = verf->committed;
+                       memcpy(__entry->verifier,
+                               &verf->verifier,
+                               NFS4_VERIFIER_SIZE);
                        __entry->dev = inode->i_sb->s_dev;
                        __entry->fileid = nfsi->fileid;
-                       __entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
+                       __entry->fhandle = nfs_fhandle_hash(fh);
                ),
 
                TP_printk(
                        "fileid=%02x:%02x:%llu fhandle=0x%08x "
-                       "offset=%lld status=%d stable=%s "
-                       "verifier 0x%016llx",
+                       "offset=%lld count=%u res=%u status=%d stable=%s "
+                       "verifier=%s",
                        MAJOR(__entry->dev), MINOR(__entry->dev),
                        (unsigned long long)__entry->fileid,
                        __entry->fhandle,
-                       __entry->offset, __entry->status,
+                       (long long)__entry->offset, __entry->arg_count,
+                       __entry->res_count, __entry->status,
                        nfs_show_stable(__entry->stable),
-                       __entry->verifier
+                       __print_hex_str(__entry->verifier, NFS4_VERIFIER_SIZE)
                )
 );
 
+DECLARE_EVENT_CLASS(nfs_page_error_class,
+               TP_PROTO(
+                       const struct nfs_page *req,
+                       int error
+               ),
+
+               TP_ARGS(req, error),
+
+               TP_STRUCT__entry(
+                       __field(const void *, req)
+                       __field(pgoff_t, index)
+                       __field(unsigned int, offset)
+                       __field(unsigned int, pgbase)
+                       __field(unsigned int, bytes)
+                       __field(int, error)
+               ),
+
+               TP_fast_assign(
+                       __entry->req = req;
+                       __entry->index = req->wb_index;
+                       __entry->offset = req->wb_offset;
+                       __entry->pgbase = req->wb_pgbase;
+                       __entry->bytes = req->wb_bytes;
+                       __entry->error = error;
+               ),
+
+               TP_printk(
+                       "req=%p index=%lu offset=%u pgbase=%u bytes=%u error=%d",
+                       __entry->req, __entry->index, __entry->offset,
+                       __entry->pgbase, __entry->bytes, __entry->error
+               )
+);
+
+#define DEFINE_NFS_PAGEERR_EVENT(name) \
+       DEFINE_EVENT(nfs_page_error_class, name, \
+                       TP_PROTO( \
+                               const struct nfs_page *req, \
+                               int error \
+                       ), \
+                       TP_ARGS(req, error))
+
+DEFINE_NFS_PAGEERR_EVENT(nfs_write_error);
+DEFINE_NFS_PAGEERR_EVENT(nfs_comp_error);
+DEFINE_NFS_PAGEERR_EVENT(nfs_commit_error);
+
 TRACE_EVENT(nfs_initiate_commit,
                TP_PROTO(
                        const struct nfs_commit_data *data
@@ -995,71 +1118,81 @@ TRACE_EVENT(nfs_initiate_commit,
                TP_ARGS(data),
 
                TP_STRUCT__entry(
-                       __field(loff_t, offset)
-                       __field(unsigned long, count)
                        __field(dev_t, dev)
                        __field(u32, fhandle)
                        __field(u64, fileid)
+                       __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->offset = data->args.offset;
                        __entry->count = data->args.count;
                        __entry->dev = inode->i_sb->s_dev;
                        __entry->fileid = nfsi->fileid;
-                       __entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
+                       __entry->fhandle = nfs_fhandle_hash(fh);
                ),
 
                TP_printk(
                        "fileid=%02x:%02x:%llu fhandle=0x%08x "
-                       "offset=%lld count=%lu",
+                       "offset=%lld count=%u",
                        MAJOR(__entry->dev), MINOR(__entry->dev),
                        (unsigned long long)__entry->fileid,
                        __entry->fhandle,
-                       __entry->offset, __entry->count
+                       (long long)__entry->offset, __entry->count
                )
 );
 
 TRACE_EVENT(nfs_commit_done,
                TP_PROTO(
+                       const struct rpc_task *task,
                        const struct nfs_commit_data *data
                ),
 
-               TP_ARGS(data),
+               TP_ARGS(task, data),
 
                TP_STRUCT__entry(
-                       __field(int, status)
-                       __field(loff_t, offset)
-                       __field(unsigned long long, verifier)
                        __field(dev_t, dev)
                        __field(u32, fhandle)
                        __field(u64, fileid)
+                       __field(loff_t, offset)
+                       __field(int, status)
+                       __field(enum nfs3_stable_how, stable)
+                       __array(char, verifier, NFS4_VERIFIER_SIZE)
                ),
 
                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;
+                       const struct nfs_writeverf *verf = data->res.verf;
 
-                       __entry->status = data->res.op_status;
+                       __entry->status = task->tk_status;
                        __entry->offset = data->args.offset;
-                       memcpy(&__entry->verifier, &data->verf.verifier,
-                              sizeof(__entry->verifier));
+                       __entry->stable = verf->committed;
+                       memcpy(__entry->verifier,
+                               &verf->verifier,
+                               NFS4_VERIFIER_SIZE);
                        __entry->dev = inode->i_sb->s_dev;
                        __entry->fileid = nfsi->fileid;
-                       __entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
+                       __entry->fhandle = nfs_fhandle_hash(fh);
                ),
 
                TP_printk(
                        "fileid=%02x:%02x:%llu fhandle=0x%08x "
-                       "offset=%lld status=%d verifier 0x%016llx",
+                       "offset=%lld status=%d stable=%s verifier=%s",
                        MAJOR(__entry->dev), MINOR(__entry->dev),
                        (unsigned long long)__entry->fileid,
                        __entry->fhandle,
-                       __entry->offset, __entry->status,
-                       __entry->verifier
+                       (long long)__entry->offset, __entry->status,
+                       nfs_show_stable(__entry->stable),
+                       __print_hex_str(__entry->verifier, NFS4_VERIFIER_SIZE)
                )
 );