Merge tag 'nfs-for-4.14-2' of git://git.linux-nfs.org/projects/trondmy/linux-nfs
[sfrench/cifs-2.6.git] / fs / nfs / nfstrace.h
index 2ca9167bc97d0468d7dddc284efbbae56ebd8bbf..551711042ba466dd0cca8fef872d53b659e8a05d 100644 (file)
@@ -719,6 +719,254 @@ TRACE_EVENT(nfs_sillyrename_unlink,
                        __get_str(name)
                )
 );
+
+TRACE_EVENT(nfs_initiate_read,
+               TP_PROTO(
+                       const struct inode *inode,
+                       loff_t offset, unsigned long count
+               ),
+
+               TP_ARGS(inode, offset, count),
+
+               TP_STRUCT__entry(
+                       __field(loff_t, offset)
+                       __field(unsigned long, count)
+                       __field(dev_t, dev)
+                       __field(u32, fhandle)
+                       __field(u64, fileid)
+               ),
+
+               TP_fast_assign(
+                       const struct nfs_inode *nfsi = NFS_I(inode);
+
+                       __entry->offset = offset;
+                       __entry->count = count;
+                       __entry->dev = inode->i_sb->s_dev;
+                       __entry->fileid = nfsi->fileid;
+                       __entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
+               ),
+
+               TP_printk(
+                       "fileid=%02x:%02x:%llu fhandle=0x%08x "
+                       "offset=%lld count=%lu",
+                       MAJOR(__entry->dev), MINOR(__entry->dev),
+                       (unsigned long long)__entry->fileid,
+                       __entry->fhandle,
+                       __entry->offset, __entry->count
+               )
+);
+
+TRACE_EVENT(nfs_readpage_done,
+               TP_PROTO(
+                       const struct inode *inode,
+                       int status, loff_t offset, bool eof
+               ),
+
+               TP_ARGS(inode, status, offset, eof),
+
+               TP_STRUCT__entry(
+                       __field(int, status)
+                       __field(loff_t, offset)
+                       __field(bool, eof)
+                       __field(dev_t, dev)
+                       __field(u32, fhandle)
+                       __field(u64, fileid)
+               ),
+
+               TP_fast_assign(
+                       const struct nfs_inode *nfsi = NFS_I(inode);
+
+                       __entry->status = status;
+                       __entry->offset = offset;
+                       __entry->eof = eof;
+                       __entry->dev = inode->i_sb->s_dev;
+                       __entry->fileid = nfsi->fileid;
+                       __entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
+               ),
+
+               TP_printk(
+                       "fileid=%02x:%02x:%llu fhandle=0x%08x "
+                       "offset=%lld status=%d%s",
+                       MAJOR(__entry->dev), MINOR(__entry->dev),
+                       (unsigned long long)__entry->fileid,
+                       __entry->fhandle,
+                       __entry->offset, __entry->status,
+                       __entry->eof ? " eof" : ""
+               )
+);
+
+/*
+ * XXX: I tried using NFS_UNSTABLE and friends in this table, but they
+ * all evaluate to 0 for some reason, even if I include linux/nfs.h.
+ */
+#define nfs_show_stable(stable) \
+       __print_symbolic(stable, \
+                       { 0, " (UNSTABLE)" }, \
+                       { 1, " (DATA_SYNC)" }, \
+                       { 2, " (FILE_SYNC)" })
+
+TRACE_EVENT(nfs_initiate_write,
+               TP_PROTO(
+                       const struct inode *inode,
+                       loff_t offset, unsigned long count,
+                       enum nfs3_stable_how stable
+               ),
+
+               TP_ARGS(inode, offset, count, stable),
+
+               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)
+               ),
+
+               TP_fast_assign(
+                       const struct nfs_inode *nfsi = NFS_I(inode);
+
+                       __entry->offset = offset;
+                       __entry->count = count;
+                       __entry->stable = stable;
+                       __entry->dev = inode->i_sb->s_dev;
+                       __entry->fileid = nfsi->fileid;
+                       __entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
+               ),
+
+               TP_printk(
+                       "fileid=%02x:%02x:%llu fhandle=0x%08x "
+                       "offset=%lld count=%lu stable=%d%s",
+                       MAJOR(__entry->dev), MINOR(__entry->dev),
+                       (unsigned long long)__entry->fileid,
+                       __entry->fhandle,
+                       __entry->offset, __entry->count,
+                       __entry->stable, 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
+               ),
+
+               TP_ARGS(inode, status, offset, writeverf),
+
+               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)
+               ),
+
+               TP_fast_assign(
+                       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));
+                       __entry->dev = inode->i_sb->s_dev;
+                       __entry->fileid = nfsi->fileid;
+                       __entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
+               ),
+
+               TP_printk(
+                       "fileid=%02x:%02x:%llu fhandle=0x%08x "
+                       "offset=%lld status=%d stable=%d%s "
+                       "verifier 0x%016llx",
+                       MAJOR(__entry->dev), MINOR(__entry->dev),
+                       (unsigned long long)__entry->fileid,
+                       __entry->fhandle,
+                       __entry->offset, __entry->status,
+                       __entry->stable, nfs_show_stable(__entry->stable),
+                       __entry->verifier
+               )
+);
+
+TRACE_EVENT(nfs_initiate_commit,
+               TP_PROTO(
+                       const struct nfs_commit_data *data
+               ),
+
+               TP_ARGS(data),
+
+               TP_STRUCT__entry(
+                       __field(loff_t, offset)
+                       __field(unsigned long, count)
+                       __field(dev_t, dev)
+                       __field(u32, fhandle)
+                       __field(u64, fileid)
+               ),
+
+               TP_fast_assign(
+                       const struct inode *inode = data->inode;
+                       const struct nfs_inode *nfsi = NFS_I(inode);
+
+                       __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);
+               ),
+
+               TP_printk(
+                       "fileid=%02x:%02x:%llu fhandle=0x%08x "
+                       "offset=%lld count=%lu",
+                       MAJOR(__entry->dev), MINOR(__entry->dev),
+                       (unsigned long long)__entry->fileid,
+                       __entry->fhandle,
+                       __entry->offset, __entry->count
+               )
+);
+
+TRACE_EVENT(nfs_commit_done,
+               TP_PROTO(
+                       const struct nfs_commit_data *data
+               ),
+
+               TP_ARGS(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)
+               ),
+
+               TP_fast_assign(
+                       const struct inode *inode = data->inode;
+                       const struct nfs_inode *nfsi = NFS_I(inode);
+
+                       __entry->status = data->res.op_status;
+                       __entry->offset = data->args.offset;
+                       memcpy(&__entry->verifier, &data->verf.verifier,
+                              sizeof(__entry->verifier));
+                       __entry->dev = inode->i_sb->s_dev;
+                       __entry->fileid = nfsi->fileid;
+                       __entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
+               ),
+
+               TP_printk(
+                       "fileid=%02x:%02x:%llu fhandle=0x%08x "
+                       "offset=%lld status=%d verifier 0x%016llx",
+                       MAJOR(__entry->dev), MINOR(__entry->dev),
+                       (unsigned long long)__entry->fileid,
+                       __entry->fhandle,
+                       __entry->offset, __entry->status,
+                       __entry->verifier
+               )
+);
+
 #endif /* _TRACE_NFS_H */
 
 #undef TRACE_INCLUDE_PATH