Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

NFSv4: Add a tracepoint for CB_GETATTR

Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>

+64 -1
+5 -1
fs/nfs/callback_proc.c
··· 40 40 rpc_peeraddr2str(cps->clp->cl_rpcclient, RPC_DISPLAY_ADDR)); 41 41 42 42 inode = nfs_delegation_find_inode(cps->clp, &args->fh); 43 - if (inode == NULL) 43 + if (inode == NULL) { 44 + trace_nfs4_cb_getattr(cps->clp, &args->fh, inode, 45 + -ntohl(res->status)); 44 46 goto out; 47 + } 45 48 nfsi = NFS_I(inode); 46 49 rcu_read_lock(); 47 50 delegation = rcu_dereference(nfsi->delegation); ··· 63 60 res->status = 0; 64 61 out_iput: 65 62 rcu_read_unlock(); 63 + trace_nfs4_cb_getattr(cps->clp, &args->fh, inode, -ntohl(res->status)); 66 64 iput(inode); 67 65 out: 68 66 dprintk("%s: exit with status = %d\n", __func__, ntohl(res->status));
+59
fs/nfs/nfs4trace.h
··· 884 884 DEFINE_NFS4_GETATTR_EVENT(nfs4_lookup_root); 885 885 DEFINE_NFS4_GETATTR_EVENT(nfs4_fsinfo); 886 886 887 + DECLARE_EVENT_CLASS(nfs4_inode_callback_event, 888 + TP_PROTO( 889 + const struct nfs_client *clp, 890 + const struct nfs_fh *fhandle, 891 + const struct inode *inode, 892 + int error 893 + ), 894 + 895 + TP_ARGS(clp, fhandle, inode, error), 896 + 897 + TP_STRUCT__entry( 898 + __field(int, error) 899 + __field(dev_t, dev) 900 + __field(u32, fhandle) 901 + __field(u64, fileid) 902 + __string(dstaddr, clp ? 903 + rpc_peeraddr2str(clp->cl_rpcclient, 904 + RPC_DISPLAY_ADDR) : "unknown") 905 + ), 906 + 907 + TP_fast_assign( 908 + __entry->error = error; 909 + __entry->fhandle = nfs_fhandle_hash(fhandle); 910 + if (inode != NULL) { 911 + __entry->fileid = NFS_FILEID(inode); 912 + __entry->dev = inode->i_sb->s_dev; 913 + } else { 914 + __entry->fileid = 0; 915 + __entry->dev = 0; 916 + } 917 + __assign_str(dstaddr, clp ? 918 + rpc_peeraddr2str(clp->cl_rpcclient, 919 + RPC_DISPLAY_ADDR) : "unknown") 920 + ), 921 + 922 + TP_printk( 923 + "error=%d (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 924 + "dstaddr=%s", 925 + __entry->error, 926 + show_nfsv4_errors(__entry->error), 927 + MAJOR(__entry->dev), MINOR(__entry->dev), 928 + (unsigned long long)__entry->fileid, 929 + __entry->fhandle, 930 + __get_str(dstaddr) 931 + ) 932 + ); 933 + 934 + #define DEFINE_NFS4_INODE_CALLBACK_EVENT(name) \ 935 + DEFINE_EVENT(nfs4_inode_callback_event, name, \ 936 + TP_PROTO( \ 937 + const struct nfs_client *clp, \ 938 + const struct nfs_fh *fhandle, \ 939 + const struct inode *inode, \ 940 + int error \ 941 + ), \ 942 + TP_ARGS(clp, fhandle, inode, error)) 943 + DEFINE_NFS4_INODE_CALLBACK_EVENT(nfs4_cb_getattr); 944 + 945 + 887 946 DECLARE_EVENT_CLASS(nfs4_idmap_event, 888 947 TP_PROTO( 889 948 const char *name,