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

NFS: Clean up generic file read tracepoints

Clean up the generic file read tracepoints so they do pass the
full structures as arguments. Also ensure we report the number
of bytes actually read.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>

authored by

Trond Myklebust and committed by
Anna Schumaker
2343172d 0722dc9f

+34 -25
+32 -22
fs/nfs/nfstrace.h
··· 820 820 821 821 TRACE_EVENT(nfs_initiate_read, 822 822 TP_PROTO( 823 - const struct inode *inode, 824 - loff_t offset, unsigned long count 823 + const struct nfs_pgio_header *hdr 825 824 ), 826 825 827 - TP_ARGS(inode, offset, count), 826 + TP_ARGS(hdr), 828 827 829 828 TP_STRUCT__entry( 830 - __field(loff_t, offset) 831 - __field(unsigned long, count) 832 829 __field(dev_t, dev) 833 830 __field(u32, fhandle) 834 831 __field(u64, fileid) 832 + __field(loff_t, offset) 833 + __field(u32, count) 835 834 ), 836 835 837 836 TP_fast_assign( 837 + const struct inode *inode = hdr->inode; 838 838 const struct nfs_inode *nfsi = NFS_I(inode); 839 + const struct nfs_fh *fh = hdr->args.fh ? 840 + hdr->args.fh : &nfsi->fh; 839 841 840 - __entry->offset = offset; 841 - __entry->count = count; 842 + __entry->offset = hdr->args.offset; 843 + __entry->count = hdr->args.count; 842 844 __entry->dev = inode->i_sb->s_dev; 843 845 __entry->fileid = nfsi->fileid; 844 - __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 846 + __entry->fhandle = nfs_fhandle_hash(fh); 845 847 ), 846 848 847 849 TP_printk( 848 850 "fileid=%02x:%02x:%llu fhandle=0x%08x " 849 - "offset=%lld count=%lu", 851 + "offset=%lld count=%u", 850 852 MAJOR(__entry->dev), MINOR(__entry->dev), 851 853 (unsigned long long)__entry->fileid, 852 854 __entry->fhandle, 853 - __entry->offset, __entry->count 855 + (long long)__entry->offset, __entry->count 854 856 ) 855 857 ); 856 858 857 859 TRACE_EVENT(nfs_readpage_done, 858 860 TP_PROTO( 859 - const struct inode *inode, 860 - int status, loff_t offset, bool eof 861 + const struct rpc_task *task, 862 + const struct nfs_pgio_header *hdr 861 863 ), 862 864 863 - TP_ARGS(inode, status, offset, eof), 865 + TP_ARGS(task, hdr), 864 866 865 867 TP_STRUCT__entry( 866 - __field(int, status) 867 - __field(loff_t, offset) 868 - __field(bool, eof) 869 868 __field(dev_t, dev) 870 869 __field(u32, fhandle) 871 870 __field(u64, fileid) 871 + __field(loff_t, offset) 872 + __field(u32, arg_count) 873 + __field(u32, res_count) 874 + __field(bool, eof) 875 + __field(int, status) 872 876 ), 873 877 874 878 TP_fast_assign( 879 + const struct inode *inode = hdr->inode; 875 880 const struct nfs_inode *nfsi = NFS_I(inode); 881 + const struct nfs_fh *fh = hdr->args.fh ? 882 + hdr->args.fh : &nfsi->fh; 876 883 877 - __entry->status = status; 878 - __entry->offset = offset; 879 - __entry->eof = eof; 884 + __entry->status = task->tk_status; 885 + __entry->offset = hdr->args.offset; 886 + __entry->arg_count = hdr->args.count; 887 + __entry->res_count = hdr->res.count; 888 + __entry->eof = hdr->res.eof; 880 889 __entry->dev = inode->i_sb->s_dev; 881 890 __entry->fileid = nfsi->fileid; 882 - __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 891 + __entry->fhandle = nfs_fhandle_hash(fh); 883 892 ), 884 893 885 894 TP_printk( 886 895 "fileid=%02x:%02x:%llu fhandle=0x%08x " 887 - "offset=%lld status=%d%s", 896 + "offset=%lld count=%u res=%u status=%d%s", 888 897 MAJOR(__entry->dev), MINOR(__entry->dev), 889 898 (unsigned long long)__entry->fileid, 890 899 __entry->fhandle, 891 - __entry->offset, __entry->status, 900 + (long long)__entry->offset, __entry->arg_count, 901 + __entry->res_count, __entry->status, 892 902 __entry->eof ? " eof" : "" 893 903 ) 894 904 );
+2 -3
fs/nfs/read.c
··· 214 214 215 215 task_setup_data->flags |= swap_flags; 216 216 rpc_ops->read_setup(hdr, msg); 217 - trace_nfs_initiate_read(inode, hdr->io_start, hdr->good_bytes); 217 + trace_nfs_initiate_read(hdr); 218 218 } 219 219 220 220 static void ··· 247 247 return status; 248 248 249 249 nfs_add_stats(inode, NFSIOS_SERVERREADBYTES, hdr->res.count); 250 - trace_nfs_readpage_done(inode, task->tk_status, 251 - hdr->args.offset, hdr->res.eof); 250 + trace_nfs_readpage_done(task, hdr); 252 251 253 252 if (task->tk_status == -ESTALE) { 254 253 set_bit(NFS_INO_STALE, &NFS_I(inode)->flags);