These new events report slightly different information for readpage and readpages/readahead. For readpage: fsx-1387 [006] 380.761896: nfs_aop_readpage: fileid=00:28:2 fhandle=0x36fbbe51 version=1752899355910932437 offset=131072 fsx-1387 [006] 380.761900: nfs_aop_readpage_done: fileid=00:28:2 fhandle=0x36fbbe51 version=1752899355910932437 offset=131072 ret=0 The index of a synchronous single-page read is reported. For readpages: fsx-1387 [006] 380.760847: nfs_aop_readahead: fileid=00:28:2 fhandle=0x36fbbe51 version=1752899355909932456 nr_pages=3 fsx-1387 [006] 380.760853: nfs_aop_readahead_done: fileid=00:28:2 fhandle=0x36fbbe51 version=1752899355909932456 nr_pages=3 ret=0 The count of pages requested is reported. nfs_readpages does not wait for the READ requests to complete.
Unified · Split
| @@ -862,6 +862,152 @@ TRACE_EVENT(nfs_sillyrename_unlink, · 861 unmodified lines | |||
| 862 | ) | 862 | ) |
| 863 | ); | 863 | ); |
| 864 | 864 | ||
| 865 | TRACE_EVENT(nfs_aop_readpage, | ||
| 866 | TP_PROTO( | ||
| 867 | const struct inode *inode, | ||
| 868 | struct page *page | ||
| 869 | ), | ||
| 870 | |||
| 871 | TP_ARGS(inode, page), | ||
| 872 | |||
| 873 | TP_STRUCT__entry( | ||
| 874 | __field(dev_t, dev) | ||
| 875 | __field(u32, fhandle) | ||
| 876 | __field(u64, fileid) | ||
| 877 | __field(u64, version) | ||
| 878 | __field(loff_t, offset) | ||
| 879 | ), | ||
| 880 | |||
| 881 | TP_fast_assign( | ||
| 882 | const struct nfs_inode *nfsi = NFS_I(inode); | ||
| 883 | |||
| 884 | __entry->dev = inode->i_sb->s_dev; | ||
| 885 | __entry->fileid = nfsi->fileid; | ||
| 886 | __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); | ||
| 887 | __entry->version = inode_peek_iversion_raw(inode); | ||
| 888 | __entry->offset = page_index(page) << PAGE_SHIFT; | ||
| 889 | ), | ||
| 890 | |||
| 891 | TP_printk( | ||
| 892 | "fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu offset=%lld", | ||
| 893 | MAJOR(__entry->dev), MINOR(__entry->dev), | ||
| 894 | (unsigned long long)__entry->fileid, | ||
| 895 | __entry->fhandle, __entry->version, | ||
| 896 | __entry->offset | ||
| 897 | ) | ||
| 898 | ); | ||
| 899 | |||
| 900 | TRACE_EVENT(nfs_aop_readpage_done, | ||
| 901 | TP_PROTO( | ||
| 902 | const struct inode *inode, | ||
| 903 | struct page *page, | ||
| 904 | int ret | ||
| 905 | ), | ||
| 906 | |||
| 907 | TP_ARGS(inode, page, ret), | ||
| 908 | |||
| 909 | TP_STRUCT__entry( | ||
| 910 | __field(dev_t, dev) | ||
| 911 | __field(u32, fhandle) | ||
| 912 | __field(int, ret) | ||
| 913 | __field(u64, fileid) | ||
| 914 | __field(u64, version) | ||
| 915 | __field(loff_t, offset) | ||
| 916 | ), | ||
| 917 | |||
| 918 | TP_fast_assign( | ||
| 919 | const struct nfs_inode *nfsi = NFS_I(inode); | ||
| 920 | |||
| 921 | __entry->dev = inode->i_sb->s_dev; | ||
| 922 | __entry->fileid = nfsi->fileid; | ||
| 923 | __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); | ||
| 924 | __entry->version = inode_peek_iversion_raw(inode); | ||
| 925 | __entry->offset = page_index(page) << PAGE_SHIFT; | ||
| 926 | __entry->ret = ret; | ||
| 927 | ), | ||
| 928 | |||
| 929 | TP_printk( | ||
| 930 | "fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu offset=%lld ret=%d", | ||
| 931 | MAJOR(__entry->dev), MINOR(__entry->dev), | ||
| 932 | (unsigned long long)__entry->fileid, | ||
| 933 | __entry->fhandle, __entry->version, | ||
| 934 | __entry->offset, __entry->ret | ||
| 935 | ) | ||
| 936 | ); | ||
| 937 | |||
| 938 | TRACE_EVENT(nfs_aop_readahead, | ||
| 939 | TP_PROTO( | ||
| 940 | const struct inode *inode, | ||
| 941 | unsigned int nr_pages | ||
| 942 | ), | ||
| 943 | |||
| 944 | TP_ARGS(inode, nr_pages), | ||
| 945 | |||
| 946 | TP_STRUCT__entry( | ||
| 947 | __field(dev_t, dev) | ||
| 948 | __field(u32, fhandle) | ||
| 949 | __field(u64, fileid) | ||
| 950 | __field(u64, version) | ||
| 951 | __field(unsigned int, nr_pages) | ||
| 952 | ), | ||
| 953 | |||
| 954 | TP_fast_assign( | ||
| 955 | const struct nfs_inode *nfsi = NFS_I(inode); | ||
| 956 | |||
| 957 | __entry->dev = inode->i_sb->s_dev; | ||
| 958 | __entry->fileid = nfsi->fileid; | ||
| 959 | __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); | ||
| 960 | __entry->version = inode_peek_iversion_raw(inode); | ||
| 961 | __entry->nr_pages = nr_pages; | ||
| 962 | ), | ||
| 963 | |||
| 964 | TP_printk( | ||
| 965 | "fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu nr_pages=%u", | ||
| 966 | MAJOR(__entry->dev), MINOR(__entry->dev), | ||
| 967 | (unsigned long long)__entry->fileid, | ||
| 968 | __entry->fhandle, __entry->version, | ||
| 969 | __entry->nr_pages | ||
| 970 | ) | ||
| 971 | ); | ||
| 972 | |||
| 973 | TRACE_EVENT(nfs_aop_readahead_done, | ||
| 974 | TP_PROTO( | ||
| 975 | const struct inode *inode, | ||
| 976 | unsigned int nr_pages, | ||
| 977 | int ret | ||
| 978 | ), | ||
| 979 | |||
| 980 | TP_ARGS(inode, nr_pages, ret), | ||
| 981 | |||
| 982 | TP_STRUCT__entry( | ||
| 983 | __field(dev_t, dev) | ||
| 984 | __field(u32, fhandle) | ||
| 985 | __field(int, ret) | ||
| 986 | __field(u64, fileid) | ||
| 987 | __field(u64, version) | ||
| 988 | __field(unsigned int, nr_pages) | ||
| 989 | ), | ||
| 990 | |||
| 991 | TP_fast_assign( | ||
| 992 | const struct nfs_inode *nfsi = NFS_I(inode); | ||
| 993 | |||
| 994 | __entry->dev = inode->i_sb->s_dev; | ||
| 995 | __entry->fileid = nfsi->fileid; | ||
| 996 | __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); | ||
| 997 | __entry->version = inode_peek_iversion_raw(inode); | ||
| 998 | __entry->nr_pages = nr_pages; | ||
| 999 | __entry->ret = ret; | ||
| 1000 | ), | ||
| 1001 | |||
| 1002 | TP_printk( | ||
| 1003 | "fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu nr_pages=%u ret=%d", | ||
| 1004 | MAJOR(__entry->dev), MINOR(__entry->dev), | ||
| 1005 | (unsigned long long)__entry->fileid, | ||
| 1006 | __entry->fhandle, __entry->version, | ||
| 1007 | __entry->nr_pages, __entry->ret | ||
| 1008 | ) | ||
| 1009 | ); | ||
| 1010 | |||
| 865 | TRACE_EVENT(nfs_initiate_read, | 1011 | TRACE_EVENT(nfs_initiate_read, |
| 866 | TP_PROTO( | 1012 | TP_PROTO( |
| 867 | const struct nfs_pgio_header *hdr | 1013 | const struct nfs_pgio_header *hdr |
| @@ -337,8 +337,7 @@ int nfs_readpage(struct file *file, struct page *page) · 336 unmodified lines | |||
| 337 | struct inode *inode = page_file_mapping(page)->host; | 337 | struct inode *inode = page_file_mapping(page)->host; |
| 338 | int ret; | 338 | int ret; |
| 339 | 339 | ||
| 340 | dprintk("NFS: nfs_readpage (%p %ld@%lu)\n", | 340 | trace_nfs_aop_readpage(inode, page); |
| 341 | page, PAGE_SIZE, page_index(page)); | ||
| 342 | nfs_inc_stats(inode, NFSIOS_VFSREADPAGE); | 341 | nfs_inc_stats(inode, NFSIOS_VFSREADPAGE); |
| 343 | 342 | ||
| 344 | /* | 343 | /* |
| @@ -390,9 +389,11 @@ out_wait: · 45 unmodified lines | |||
| 390 | } | 389 | } |
| 391 | out: | 390 | out: |
| 392 | put_nfs_open_context(desc.ctx); | 391 | put_nfs_open_context(desc.ctx); |
| 392 | trace_nfs_aop_readpage_done(inode, page, ret); | ||
| 393 | return ret; | 393 | return ret; |
| 394 | out_unlock: | 394 | out_unlock: |
| 395 | unlock_page(page); | 395 | unlock_page(page); |
| 396 | trace_nfs_aop_readpage_done(inode, page, ret); | ||
| 396 | return ret; | 397 | return ret; |
| 397 | } | 398 | } |
| 398 | 399 | ||
| @@ -403,10 +404,7 @@ int nfs_readpages(struct file *file, struct address_space *mapping, · 4 unmodified lines | |||
| 403 | struct inode *inode = mapping->host; | 404 | struct inode *inode = mapping->host; |
| 404 | int ret; | 405 | int ret; |
| 405 | 406 | ||
| 406 | dprintk("NFS: nfs_readpages (%s/%Lu %d)\n", | 407 | trace_nfs_aop_readahead(inode, nr_pages); |
| 407 | inode->i_sb->s_id, | ||
| 408 | (unsigned long long)NFS_FILEID(inode), | ||
| 409 | nr_pages); | ||
| 410 | nfs_inc_stats(inode, NFSIOS_VFSREADPAGES); | 408 | nfs_inc_stats(inode, NFSIOS_VFSREADPAGES); |
| 411 | 409 | ||
| 412 | ret = -ESTALE; | 410 | ret = -ESTALE; |
| @@ -439,6 +437,7 @@ int nfs_readpages(struct file *file, struct address_space *mapping, · 26 unmodified lines | |||
| 439 | read_complete: | 437 | read_complete: |
| 440 | put_nfs_open_context(desc.ctx); | 438 | put_nfs_open_context(desc.ctx); |
| 441 | out: | 439 | out: |
| 440 | trace_nfs_aop_readahead_done(inode, nr_pages, ret); | ||
| 442 | return ret; | 441 | return ret; |
| 443 | } | 442 | } |
| 444 | 443 | ||