Commit b5f875a92591d06c57e786b3c916e21e290ad844
1 parent
1f2d30b533
Exists in
smarc-imx_3.14.28_1.0.0_ga
and in
1 other branch
NFSv4: Add tracepoints for debugging getattr
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Showing 2 changed files with 74 additions and 2 deletions Side-by-side Diff
fs/nfs/nfs4proc.c
... | ... | @@ -2697,6 +2697,7 @@ |
2697 | 2697 | int err; |
2698 | 2698 | do { |
2699 | 2699 | err = _nfs4_lookup_root(server, fhandle, info); |
2700 | + trace_nfs4_lookup_root(server, fhandle, info->fattr, err); | |
2700 | 2701 | switch (err) { |
2701 | 2702 | case 0: |
2702 | 2703 | case -NFS4ERR_WRONGSEC: |
... | ... | @@ -2906,8 +2907,9 @@ |
2906 | 2907 | struct nfs4_exception exception = { }; |
2907 | 2908 | int err; |
2908 | 2909 | do { |
2909 | - err = nfs4_handle_exception(server, | |
2910 | - _nfs4_proc_getattr(server, fhandle, fattr, label), | |
2910 | + err = _nfs4_proc_getattr(server, fhandle, fattr, label); | |
2911 | + trace_nfs4_getattr(server, fhandle, fattr, err); | |
2912 | + err = nfs4_handle_exception(server, err, | |
2911 | 2913 | &exception); |
2912 | 2914 | } while (exception.retry); |
2913 | 2915 | return err; |
... | ... | @@ -3760,6 +3762,7 @@ |
3760 | 3762 | |
3761 | 3763 | do { |
3762 | 3764 | err = _nfs4_do_fsinfo(server, fhandle, fsinfo); |
3765 | + trace_nfs4_fsinfo(server, fhandle, fsinfo->fattr, err); | |
3763 | 3766 | if (err == 0) { |
3764 | 3767 | struct nfs_client *clp = server->nfs_client; |
3765 | 3768 |
fs/nfs/nfs4trace.h
... | ... | @@ -174,6 +174,24 @@ |
174 | 174 | { ((__force unsigned long)FMODE_WRITE), "WRITE" }, \ |
175 | 175 | { ((__force unsigned long)FMODE_EXEC), "EXEC" }) |
176 | 176 | |
177 | +#define show_nfs_fattr_flags(valid) \ | |
178 | + __print_flags((unsigned long)valid, "|", \ | |
179 | + { NFS_ATTR_FATTR_TYPE, "TYPE" }, \ | |
180 | + { NFS_ATTR_FATTR_MODE, "MODE" }, \ | |
181 | + { NFS_ATTR_FATTR_NLINK, "NLINK" }, \ | |
182 | + { NFS_ATTR_FATTR_OWNER, "OWNER" }, \ | |
183 | + { NFS_ATTR_FATTR_GROUP, "GROUP" }, \ | |
184 | + { NFS_ATTR_FATTR_RDEV, "RDEV" }, \ | |
185 | + { NFS_ATTR_FATTR_SIZE, "SIZE" }, \ | |
186 | + { NFS_ATTR_FATTR_FSID, "FSID" }, \ | |
187 | + { NFS_ATTR_FATTR_FILEID, "FILEID" }, \ | |
188 | + { NFS_ATTR_FATTR_ATIME, "ATIME" }, \ | |
189 | + { NFS_ATTR_FATTR_MTIME, "MTIME" }, \ | |
190 | + { NFS_ATTR_FATTR_CTIME, "CTIME" }, \ | |
191 | + { NFS_ATTR_FATTR_CHANGE, "CHANGE" }, \ | |
192 | + { NFS_ATTR_FATTR_OWNER_NAME, "OWNER_NAME" }, \ | |
193 | + { NFS_ATTR_FATTR_GROUP_NAME, "GROUP_NAME" }) | |
194 | + | |
177 | 195 | DECLARE_EVENT_CLASS(nfs4_clientid_event, |
178 | 196 | TP_PROTO( |
179 | 197 | const struct nfs_client *clp, |
... | ... | @@ -626,6 +644,57 @@ |
626 | 644 | #endif /* CONFIG_NFS_V4_SECURITY_LABEL */ |
627 | 645 | DEFINE_NFS4_INODE_EVENT(nfs4_recall_delegation); |
628 | 646 | DEFINE_NFS4_INODE_EVENT(nfs4_delegreturn); |
647 | + | |
648 | +DECLARE_EVENT_CLASS(nfs4_getattr_event, | |
649 | + TP_PROTO( | |
650 | + const struct nfs_server *server, | |
651 | + const struct nfs_fh *fhandle, | |
652 | + const struct nfs_fattr *fattr, | |
653 | + int error | |
654 | + ), | |
655 | + | |
656 | + TP_ARGS(server, fhandle, fattr, error), | |
657 | + | |
658 | + TP_STRUCT__entry( | |
659 | + __field(dev_t, dev) | |
660 | + __field(u32, fhandle) | |
661 | + __field(u64, fileid) | |
662 | + __field(unsigned int, valid) | |
663 | + __field(int, error) | |
664 | + ), | |
665 | + | |
666 | + TP_fast_assign( | |
667 | + __entry->dev = server->s_dev; | |
668 | + __entry->valid = fattr->valid; | |
669 | + __entry->fhandle = nfs_fhandle_hash(fhandle); | |
670 | + __entry->fileid = (fattr->valid & NFS_ATTR_FATTR_FILEID) ? fattr->fileid : 0; | |
671 | + __entry->error = error; | |
672 | + ), | |
673 | + | |
674 | + TP_printk( | |
675 | + "error=%d (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " | |
676 | + "valid=%s", | |
677 | + __entry->error, | |
678 | + show_nfsv4_errors(__entry->error), | |
679 | + MAJOR(__entry->dev), MINOR(__entry->dev), | |
680 | + (unsigned long long)__entry->fileid, | |
681 | + __entry->fhandle, | |
682 | + show_nfs_fattr_flags(__entry->valid) | |
683 | + ) | |
684 | +); | |
685 | + | |
686 | +#define DEFINE_NFS4_GETATTR_EVENT(name) \ | |
687 | + DEFINE_EVENT(nfs4_getattr_event, name, \ | |
688 | + TP_PROTO( \ | |
689 | + const struct nfs_server *server, \ | |
690 | + const struct nfs_fh *fhandle, \ | |
691 | + const struct nfs_fattr *fattr, \ | |
692 | + int error \ | |
693 | + ), \ | |
694 | + TP_ARGS(server, fhandle, fattr, error)) | |
695 | +DEFINE_NFS4_GETATTR_EVENT(nfs4_getattr); | |
696 | +DEFINE_NFS4_GETATTR_EVENT(nfs4_lookup_root); | |
697 | +DEFINE_NFS4_GETATTR_EVENT(nfs4_fsinfo); | |
629 | 698 | |
630 | 699 | DECLARE_EVENT_CLASS(nfs4_idmap_event, |
631 | 700 | TP_PROTO( |