mirror of
https://github.com/torvalds/linux.git
synced 2026-05-24 23:22:31 +02:00
nfs: more in-depth tracing of writepage events
Add tracepoints to nfs_writepage_setup() and nfs_do_writepage(). Signed-off-by: Jeff Layton <jlayton@kernel.org> Reviewed-by: Benjamin Coddington <bcodding@redhat.com> Signed-off-by: Anna Schumaker <anna.schumaker@oracle.com>
This commit is contained in:
parent
4a2d81714d
commit
b6ef079fd9
|
|
@ -45,6 +45,23 @@
|
|||
{ BIT(NFS_INO_LAYOUTSTATS), "LAYOUTSTATS" }, \
|
||||
{ BIT(NFS_INO_ODIRECT), "ODIRECT" })
|
||||
|
||||
#define nfs_show_wb_flags(v) \
|
||||
__print_flags(v, "|", \
|
||||
{ BIT(PG_BUSY), "BUSY" }, \
|
||||
{ BIT(PG_MAPPED), "MAPPED" }, \
|
||||
{ BIT(PG_FOLIO), "FOLIO" }, \
|
||||
{ BIT(PG_CLEAN), "CLEAN" }, \
|
||||
{ BIT(PG_COMMIT_TO_DS), "COMMIT_TO_DS" }, \
|
||||
{ BIT(PG_INODE_REF), "INODE_REF" }, \
|
||||
{ BIT(PG_HEADLOCK), "HEADLOCK" }, \
|
||||
{ BIT(PG_TEARDOWN), "TEARDOWN" }, \
|
||||
{ BIT(PG_UNLOCKPAGE), "UNLOCKPAGE" }, \
|
||||
{ BIT(PG_UPTODATE), "UPTODATE" }, \
|
||||
{ BIT(PG_WB_END), "WB_END" }, \
|
||||
{ BIT(PG_REMOVE), "REMOVE" }, \
|
||||
{ BIT(PG_CONTENDED1), "CONTENDED1" }, \
|
||||
{ BIT(PG_CONTENDED2), "CONTENDED2" })
|
||||
|
||||
DECLARE_EVENT_CLASS(nfs_inode_event,
|
||||
TP_PROTO(
|
||||
const struct inode *inode
|
||||
|
|
@ -1463,6 +1480,55 @@ TRACE_EVENT(nfs_writeback_done,
|
|||
)
|
||||
);
|
||||
|
||||
DECLARE_EVENT_CLASS(nfs_page_class,
|
||||
TP_PROTO(
|
||||
const struct nfs_page *req
|
||||
),
|
||||
|
||||
TP_ARGS(req),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(dev_t, dev)
|
||||
__field(u32, fhandle)
|
||||
__field(u64, fileid)
|
||||
__field(const struct nfs_page *__private, req)
|
||||
__field(loff_t, offset)
|
||||
__field(unsigned int, count)
|
||||
__field(unsigned long, flags)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
const struct inode *inode = folio_inode(req->wb_folio);
|
||||
const struct nfs_inode *nfsi = NFS_I(inode);
|
||||
|
||||
__entry->dev = inode->i_sb->s_dev;
|
||||
__entry->fileid = nfsi->fileid;
|
||||
__entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
|
||||
__entry->req = req;
|
||||
__entry->offset = req_offset(req);
|
||||
__entry->count = req->wb_bytes;
|
||||
__entry->flags = req->wb_flags;
|
||||
),
|
||||
|
||||
TP_printk(
|
||||
"fileid=%02x:%02x:%llu fhandle=0x%08x req=%p offset=%lld count=%u flags=%s",
|
||||
MAJOR(__entry->dev), MINOR(__entry->dev),
|
||||
(unsigned long long)__entry->fileid, __entry->fhandle,
|
||||
__entry->req, __entry->offset, __entry->count,
|
||||
nfs_show_wb_flags(__entry->flags)
|
||||
)
|
||||
);
|
||||
|
||||
#define DEFINE_NFS_PAGE_EVENT(name) \
|
||||
DEFINE_EVENT(nfs_page_class, name, \
|
||||
TP_PROTO( \
|
||||
const struct nfs_page *req \
|
||||
), \
|
||||
TP_ARGS(req))
|
||||
|
||||
DEFINE_NFS_PAGE_EVENT(nfs_writepage_setup);
|
||||
DEFINE_NFS_PAGE_EVENT(nfs_do_writepage);
|
||||
|
||||
DECLARE_EVENT_CLASS(nfs_page_error_class,
|
||||
TP_PROTO(
|
||||
const struct inode *inode,
|
||||
|
|
|
|||
|
|
@ -593,6 +593,7 @@ static int nfs_do_writepage(struct folio *folio, struct writeback_control *wbc,
|
|||
if (IS_ERR(req))
|
||||
return PTR_ERR(req);
|
||||
|
||||
trace_nfs_do_writepage(req);
|
||||
nfs_folio_set_writeback(folio);
|
||||
WARN_ON_ONCE(test_bit(PG_CLEAN, &req->wb_flags));
|
||||
|
||||
|
|
@ -1095,6 +1096,7 @@ static int nfs_writepage_setup(struct nfs_open_context *ctx,
|
|||
req = nfs_setup_write_request(ctx, folio, offset, count);
|
||||
if (IS_ERR(req))
|
||||
return PTR_ERR(req);
|
||||
trace_nfs_writepage_setup(req);
|
||||
/* Update file length */
|
||||
nfs_grow_file(folio, offset, count);
|
||||
nfs_mark_uptodate(req);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user