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

NFS: Clean up generic writeback tracepoints

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

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
5bb2a7cb 2343172d

+43 -36
+41 -32
fs/nfs/nfstrace.h
··· 915 915 916 916 TRACE_EVENT(nfs_initiate_write, 917 917 TP_PROTO( 918 - const struct inode *inode, 919 - loff_t offset, unsigned long count, 920 - enum nfs3_stable_how stable 918 + const struct nfs_pgio_header *hdr 921 919 ), 922 920 923 - TP_ARGS(inode, offset, count, stable), 921 + TP_ARGS(hdr), 924 922 925 923 TP_STRUCT__entry( 926 - __field(loff_t, offset) 927 - __field(unsigned long, count) 928 - __field(enum nfs3_stable_how, stable) 929 924 __field(dev_t, dev) 930 925 __field(u32, fhandle) 931 926 __field(u64, fileid) 927 + __field(loff_t, offset) 928 + __field(u32, count) 929 + __field(enum nfs3_stable_how, stable) 932 930 ), 933 931 934 932 TP_fast_assign( 933 + const struct inode *inode = hdr->inode; 935 934 const struct nfs_inode *nfsi = NFS_I(inode); 935 + const struct nfs_fh *fh = hdr->args.fh ? 936 + hdr->args.fh : &nfsi->fh; 936 937 937 - __entry->offset = offset; 938 - __entry->count = count; 939 - __entry->stable = stable; 938 + __entry->offset = hdr->args.offset; 939 + __entry->count = hdr->args.count; 940 + __entry->stable = hdr->args.stable; 940 941 __entry->dev = inode->i_sb->s_dev; 941 942 __entry->fileid = nfsi->fileid; 942 - __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 943 + __entry->fhandle = nfs_fhandle_hash(fh); 943 944 ), 944 945 945 946 TP_printk( 946 947 "fileid=%02x:%02x:%llu fhandle=0x%08x " 947 - "offset=%lld count=%lu stable=%s", 948 + "offset=%lld count=%u stable=%s", 948 949 MAJOR(__entry->dev), MINOR(__entry->dev), 949 950 (unsigned long long)__entry->fileid, 950 951 __entry->fhandle, 951 - __entry->offset, __entry->count, 952 + (long long)__entry->offset, __entry->count, 952 953 nfs_show_stable(__entry->stable) 953 954 ) 954 955 ); 955 956 956 957 TRACE_EVENT(nfs_writeback_done, 957 958 TP_PROTO( 958 - const struct inode *inode, 959 - int status, 960 - loff_t offset, 961 - struct nfs_writeverf *writeverf 959 + const struct rpc_task *task, 960 + const struct nfs_pgio_header *hdr 962 961 ), 963 962 964 - TP_ARGS(inode, status, offset, writeverf), 963 + TP_ARGS(task, hdr), 965 964 966 965 TP_STRUCT__entry( 967 - __field(int, status) 968 - __field(loff_t, offset) 969 - __field(enum nfs3_stable_how, stable) 970 - __field(unsigned long long, verifier) 971 966 __field(dev_t, dev) 972 967 __field(u32, fhandle) 973 968 __field(u64, fileid) 969 + __field(loff_t, offset) 970 + __field(u32, arg_count) 971 + __field(u32, res_count) 972 + __field(int, status) 973 + __field(enum nfs3_stable_how, stable) 974 + __array(char, verifier, NFS4_VERIFIER_SIZE) 974 975 ), 975 976 976 977 TP_fast_assign( 978 + const struct inode *inode = hdr->inode; 977 979 const struct nfs_inode *nfsi = NFS_I(inode); 980 + const struct nfs_fh *fh = hdr->args.fh ? 981 + hdr->args.fh : &nfsi->fh; 982 + const struct nfs_writeverf *verf = hdr->res.verf; 978 983 979 - __entry->status = status; 980 - __entry->offset = offset; 981 - __entry->stable = writeverf->committed; 982 - memcpy(&__entry->verifier, &writeverf->verifier, 983 - sizeof(__entry->verifier)); 984 + __entry->status = task->tk_status; 985 + __entry->offset = hdr->args.offset; 986 + __entry->arg_count = hdr->args.count; 987 + __entry->res_count = hdr->res.count; 988 + __entry->stable = verf->committed; 989 + memcpy(__entry->verifier, 990 + &verf->verifier, 991 + NFS4_VERIFIER_SIZE); 984 992 __entry->dev = inode->i_sb->s_dev; 985 993 __entry->fileid = nfsi->fileid; 986 - __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 994 + __entry->fhandle = nfs_fhandle_hash(fh); 987 995 ), 988 996 989 997 TP_printk( 990 998 "fileid=%02x:%02x:%llu fhandle=0x%08x " 991 - "offset=%lld status=%d stable=%s " 992 - "verifier 0x%016llx", 999 + "offset=%lld count=%u res=%u status=%d stable=%s " 1000 + "verifier=%s", 993 1001 MAJOR(__entry->dev), MINOR(__entry->dev), 994 1002 (unsigned long long)__entry->fileid, 995 1003 __entry->fhandle, 996 - __entry->offset, __entry->status, 1004 + (long long)__entry->offset, __entry->arg_count, 1005 + __entry->res_count, __entry->status, 997 1006 nfs_show_stable(__entry->stable), 998 - __entry->verifier 1007 + __print_hex_str(__entry->verifier, NFS4_VERIFIER_SIZE) 999 1008 ) 1000 1009 ); 1001 1010
+2 -4
fs/nfs/write.c
··· 1414 1414 1415 1415 task_setup_data->priority = priority; 1416 1416 rpc_ops->write_setup(hdr, msg, &task_setup_data->rpc_client); 1417 - trace_nfs_initiate_write(hdr->inode, hdr->io_start, hdr->good_bytes, 1418 - hdr->args.stable); 1417 + trace_nfs_initiate_write(hdr); 1419 1418 } 1420 1419 1421 1420 /* If a nfs_flush_* function fails, it should remove reqs from @head and ··· 1578 1579 return status; 1579 1580 1580 1581 nfs_add_stats(inode, NFSIOS_SERVERWRITTENBYTES, hdr->res.count); 1581 - trace_nfs_writeback_done(inode, task->tk_status, 1582 - hdr->args.offset, hdr->res.verf); 1582 + trace_nfs_writeback_done(task, hdr); 1583 1583 1584 1584 if (hdr->res.verf->committed < hdr->args.stable && 1585 1585 task->tk_status >= 0) {