NFS: Enable tracing of nfs_invalidate_folio() and nfs_launder_folio()
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com> Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
This commit is contained in:
parent
96780ca55e
commit
eb5654b3b8
@ -411,14 +411,16 @@ static int nfs_write_end(struct file *file, struct address_space *mapping,
|
|||||||
static void nfs_invalidate_folio(struct folio *folio, size_t offset,
|
static void nfs_invalidate_folio(struct folio *folio, size_t offset,
|
||||||
size_t length)
|
size_t length)
|
||||||
{
|
{
|
||||||
|
struct inode *inode = folio_file_mapping(folio)->host;
|
||||||
dfprintk(PAGECACHE, "NFS: invalidate_folio(%lu, %zu, %zu)\n",
|
dfprintk(PAGECACHE, "NFS: invalidate_folio(%lu, %zu, %zu)\n",
|
||||||
folio->index, offset, length);
|
folio->index, offset, length);
|
||||||
|
|
||||||
if (offset != 0 || length < folio_size(folio))
|
if (offset != 0 || length < folio_size(folio))
|
||||||
return;
|
return;
|
||||||
/* Cancel any unstarted writes on this page */
|
/* Cancel any unstarted writes on this page */
|
||||||
nfs_wb_folio_cancel(folio->mapping->host, folio);
|
nfs_wb_folio_cancel(inode, folio);
|
||||||
folio_wait_fscache(folio);
|
folio_wait_fscache(folio);
|
||||||
|
trace_nfs_invalidate_folio(inode, folio);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -479,12 +481,15 @@ static void nfs_check_dirty_writeback(struct folio *folio,
|
|||||||
static int nfs_launder_folio(struct folio *folio)
|
static int nfs_launder_folio(struct folio *folio)
|
||||||
{
|
{
|
||||||
struct inode *inode = folio->mapping->host;
|
struct inode *inode = folio->mapping->host;
|
||||||
|
int ret;
|
||||||
|
|
||||||
dfprintk(PAGECACHE, "NFS: launder_folio(%ld, %llu)\n",
|
dfprintk(PAGECACHE, "NFS: launder_folio(%ld, %llu)\n",
|
||||||
inode->i_ino, folio_pos(folio));
|
inode->i_ino, folio_pos(folio));
|
||||||
|
|
||||||
folio_wait_fscache(folio);
|
folio_wait_fscache(folio);
|
||||||
return nfs_wb_folio(inode, folio);
|
ret = nfs_wb_folio(inode, folio);
|
||||||
|
trace_nfs_launder_folio_done(inode, folio, ret);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int nfs_swap_activate(struct swap_info_struct *sis, struct file *file,
|
static int nfs_swap_activate(struct swap_info_struct *sis, struct file *file,
|
||||||
|
@ -933,7 +933,7 @@ TRACE_EVENT(nfs_sillyrename_unlink,
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
TRACE_EVENT(nfs_aop_readpage,
|
DECLARE_EVENT_CLASS(nfs_folio_event,
|
||||||
TP_PROTO(
|
TP_PROTO(
|
||||||
const struct inode *inode,
|
const struct inode *inode,
|
||||||
struct folio *folio
|
struct folio *folio
|
||||||
@ -947,6 +947,7 @@ TRACE_EVENT(nfs_aop_readpage,
|
|||||||
__field(u64, fileid)
|
__field(u64, fileid)
|
||||||
__field(u64, version)
|
__field(u64, version)
|
||||||
__field(loff_t, offset)
|
__field(loff_t, offset)
|
||||||
|
__field(u32, count)
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_fast_assign(
|
TP_fast_assign(
|
||||||
@ -957,18 +958,28 @@ TRACE_EVENT(nfs_aop_readpage,
|
|||||||
__entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
|
__entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
|
||||||
__entry->version = inode_peek_iversion_raw(inode);
|
__entry->version = inode_peek_iversion_raw(inode);
|
||||||
__entry->offset = folio_file_pos(folio);
|
__entry->offset = folio_file_pos(folio);
|
||||||
|
__entry->count = nfs_folio_length(folio);
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_printk(
|
TP_printk(
|
||||||
"fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu offset=%lld",
|
"fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu "
|
||||||
|
"offset=%lld count=%u",
|
||||||
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->version,
|
__entry->fhandle, __entry->version,
|
||||||
__entry->offset
|
__entry->offset, __entry->count
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
TRACE_EVENT(nfs_aop_readpage_done,
|
#define DEFINE_NFS_FOLIO_EVENT(name) \
|
||||||
|
DEFINE_EVENT(nfs_folio_event, name, \
|
||||||
|
TP_PROTO( \
|
||||||
|
const struct inode *inode, \
|
||||||
|
struct folio *folio \
|
||||||
|
), \
|
||||||
|
TP_ARGS(inode, folio))
|
||||||
|
|
||||||
|
DECLARE_EVENT_CLASS(nfs_folio_event_done,
|
||||||
TP_PROTO(
|
TP_PROTO(
|
||||||
const struct inode *inode,
|
const struct inode *inode,
|
||||||
struct folio *folio,
|
struct folio *folio,
|
||||||
@ -984,6 +995,7 @@ TRACE_EVENT(nfs_aop_readpage_done,
|
|||||||
__field(u64, fileid)
|
__field(u64, fileid)
|
||||||
__field(u64, version)
|
__field(u64, version)
|
||||||
__field(loff_t, offset)
|
__field(loff_t, offset)
|
||||||
|
__field(u32, count)
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_fast_assign(
|
TP_fast_assign(
|
||||||
@ -994,18 +1006,35 @@ TRACE_EVENT(nfs_aop_readpage_done,
|
|||||||
__entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
|
__entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
|
||||||
__entry->version = inode_peek_iversion_raw(inode);
|
__entry->version = inode_peek_iversion_raw(inode);
|
||||||
__entry->offset = folio_file_pos(folio);
|
__entry->offset = folio_file_pos(folio);
|
||||||
|
__entry->count = nfs_folio_length(folio);
|
||||||
__entry->ret = ret;
|
__entry->ret = ret;
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_printk(
|
TP_printk(
|
||||||
"fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu offset=%lld ret=%d",
|
"fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu "
|
||||||
|
"offset=%lld count=%u ret=%d",
|
||||||
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->version,
|
__entry->fhandle, __entry->version,
|
||||||
__entry->offset, __entry->ret
|
__entry->offset, __entry->count, __entry->ret
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
#define DEFINE_NFS_FOLIO_EVENT_DONE(name) \
|
||||||
|
DEFINE_EVENT(nfs_folio_event_done, name, \
|
||||||
|
TP_PROTO( \
|
||||||
|
const struct inode *inode, \
|
||||||
|
struct folio *folio, \
|
||||||
|
int ret \
|
||||||
|
), \
|
||||||
|
TP_ARGS(inode, folio, ret))
|
||||||
|
|
||||||
|
DEFINE_NFS_FOLIO_EVENT(nfs_aop_readpage);
|
||||||
|
DEFINE_NFS_FOLIO_EVENT_DONE(nfs_aop_readpage_done);
|
||||||
|
|
||||||
|
DEFINE_NFS_FOLIO_EVENT(nfs_invalidate_folio);
|
||||||
|
DEFINE_NFS_FOLIO_EVENT_DONE(nfs_launder_folio_done);
|
||||||
|
|
||||||
TRACE_EVENT(nfs_aop_readahead,
|
TRACE_EVENT(nfs_aop_readahead,
|
||||||
TP_PROTO(
|
TP_PROTO(
|
||||||
const struct inode *inode,
|
const struct inode *inode,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user