Commit 5bb2a7cb authored by Trond Myklebust's avatar Trond Myklebust Committed by Anna Schumaker

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: default avatarTrond Myklebust <trond.myklebust@hammerspace.com>
Signed-off-by: default avatarAnna Schumaker <Anna.Schumaker@Netapp.com>
parent 2343172d
...@@ -915,87 +915,96 @@ TRACE_DEFINE_ENUM(NFS_FILE_SYNC); ...@@ -915,87 +915,96 @@ TRACE_DEFINE_ENUM(NFS_FILE_SYNC);
TRACE_EVENT(nfs_initiate_write, TRACE_EVENT(nfs_initiate_write,
TP_PROTO( TP_PROTO(
const struct inode *inode, const struct nfs_pgio_header *hdr
loff_t offset, unsigned long count,
enum nfs3_stable_how stable
), ),
TP_ARGS(inode, offset, count, stable), TP_ARGS(hdr),
TP_STRUCT__entry( TP_STRUCT__entry(
__field(loff_t, offset)
__field(unsigned long, count)
__field(enum nfs3_stable_how, stable)
__field(dev_t, dev) __field(dev_t, dev)
__field(u32, fhandle) __field(u32, fhandle)
__field(u64, fileid) __field(u64, fileid)
__field(loff_t, offset)
__field(u32, count)
__field(enum nfs3_stable_how, stable)
), ),
TP_fast_assign( TP_fast_assign(
const struct inode *inode = hdr->inode;
const struct nfs_inode *nfsi = NFS_I(inode); const struct nfs_inode *nfsi = NFS_I(inode);
const struct nfs_fh *fh = hdr->args.fh ?
hdr->args.fh : &nfsi->fh;
__entry->offset = offset; __entry->offset = hdr->args.offset;
__entry->count = count; __entry->count = hdr->args.count;
__entry->stable = stable; __entry->stable = hdr->args.stable;
__entry->dev = inode->i_sb->s_dev; __entry->dev = inode->i_sb->s_dev;
__entry->fileid = nfsi->fileid; __entry->fileid = nfsi->fileid;
__entry->fhandle = nfs_fhandle_hash(&nfsi->fh); __entry->fhandle = nfs_fhandle_hash(fh);
), ),
TP_printk( TP_printk(
"fileid=%02x:%02x:%llu fhandle=0x%08x " "fileid=%02x:%02x:%llu fhandle=0x%08x "
"offset=%lld count=%lu stable=%s", "offset=%lld count=%u stable=%s",
MAJOR(__entry->dev), MINOR(__entry->dev), MAJOR(__entry->dev), MINOR(__entry->dev),
(unsigned long long)__entry->fileid, (unsigned long long)__entry->fileid,
__entry->fhandle, __entry->fhandle,
__entry->offset, __entry->count, (long long)__entry->offset, __entry->count,
nfs_show_stable(__entry->stable) nfs_show_stable(__entry->stable)
) )
); );
TRACE_EVENT(nfs_writeback_done, TRACE_EVENT(nfs_writeback_done,
TP_PROTO( TP_PROTO(
const struct inode *inode, const struct rpc_task *task,
int status, const struct nfs_pgio_header *hdr
loff_t offset,
struct nfs_writeverf *writeverf
), ),
TP_ARGS(inode, status, offset, writeverf), TP_ARGS(task, hdr),
TP_STRUCT__entry( TP_STRUCT__entry(
__field(int, status)
__field(loff_t, offset)
__field(enum nfs3_stable_how, stable)
__field(unsigned long long, verifier)
__field(dev_t, dev) __field(dev_t, dev)
__field(u32, fhandle) __field(u32, fhandle)
__field(u64, fileid) __field(u64, fileid)
__field(loff_t, offset)
__field(u32, arg_count)
__field(u32, res_count)
__field(int, status)
__field(enum nfs3_stable_how, stable)
__array(char, verifier, NFS4_VERIFIER_SIZE)
), ),
TP_fast_assign( TP_fast_assign(
const struct inode *inode = hdr->inode;
const struct nfs_inode *nfsi = NFS_I(inode); const struct nfs_inode *nfsi = NFS_I(inode);
const struct nfs_fh *fh = hdr->args.fh ?
hdr->args.fh : &nfsi->fh;
const struct nfs_writeverf *verf = hdr->res.verf;
__entry->status = status; __entry->status = task->tk_status;
__entry->offset = offset; __entry->offset = hdr->args.offset;
__entry->stable = writeverf->committed; __entry->arg_count = hdr->args.count;
memcpy(&__entry->verifier, &writeverf->verifier, __entry->res_count = hdr->res.count;
sizeof(__entry->verifier)); __entry->stable = verf->committed;
memcpy(__entry->verifier,
&verf->verifier,
NFS4_VERIFIER_SIZE);
__entry->dev = inode->i_sb->s_dev; __entry->dev = inode->i_sb->s_dev;
__entry->fileid = nfsi->fileid; __entry->fileid = nfsi->fileid;
__entry->fhandle = nfs_fhandle_hash(&nfsi->fh); __entry->fhandle = nfs_fhandle_hash(fh);
), ),
TP_printk( TP_printk(
"fileid=%02x:%02x:%llu fhandle=0x%08x " "fileid=%02x:%02x:%llu fhandle=0x%08x "
"offset=%lld status=%d stable=%s " "offset=%lld count=%u res=%u status=%d stable=%s "
"verifier 0x%016llx", "verifier=%s",
MAJOR(__entry->dev), MINOR(__entry->dev), MAJOR(__entry->dev), MINOR(__entry->dev),
(unsigned long long)__entry->fileid, (unsigned long long)__entry->fileid,
__entry->fhandle, __entry->fhandle,
__entry->offset, __entry->status, (long long)__entry->offset, __entry->arg_count,
__entry->res_count, __entry->status,
nfs_show_stable(__entry->stable), nfs_show_stable(__entry->stable),
__entry->verifier __print_hex_str(__entry->verifier, NFS4_VERIFIER_SIZE)
) )
); );
......
...@@ -1414,8 +1414,7 @@ static void nfs_initiate_write(struct nfs_pgio_header *hdr, ...@@ -1414,8 +1414,7 @@ static void nfs_initiate_write(struct nfs_pgio_header *hdr,
task_setup_data->priority = priority; task_setup_data->priority = priority;
rpc_ops->write_setup(hdr, msg, &task_setup_data->rpc_client); rpc_ops->write_setup(hdr, msg, &task_setup_data->rpc_client);
trace_nfs_initiate_write(hdr->inode, hdr->io_start, hdr->good_bytes, trace_nfs_initiate_write(hdr);
hdr->args.stable);
} }
/* If a nfs_flush_* function fails, it should remove reqs from @head and /* If a nfs_flush_* function fails, it should remove reqs from @head and
...@@ -1579,8 +1578,7 @@ static int nfs_writeback_done(struct rpc_task *task, ...@@ -1579,8 +1578,7 @@ static int nfs_writeback_done(struct rpc_task *task,
return status; return status;
nfs_add_stats(inode, NFSIOS_SERVERWRITTENBYTES, hdr->res.count); nfs_add_stats(inode, NFSIOS_SERVERWRITTENBYTES, hdr->res.count);
trace_nfs_writeback_done(inode, task->tk_status, trace_nfs_writeback_done(task, hdr);
hdr->args.offset, hdr->res.verf);
if (hdr->res.verf->committed < hdr->args.stable && if (hdr->res.verf->committed < hdr->args.stable &&
task->tk_status >= 0) { task->tk_status >= 0) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment