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:
Родитель
96780ca55e
Коммит
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,
|
||||
size_t length)
|
||||
{
|
||||
struct inode *inode = folio_file_mapping(folio)->host;
|
||||
dfprintk(PAGECACHE, "NFS: invalidate_folio(%lu, %zu, %zu)\n",
|
||||
folio->index, offset, length);
|
||||
|
||||
if (offset != 0 || length < folio_size(folio))
|
||||
return;
|
||||
/* 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);
|
||||
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)
|
||||
{
|
||||
struct inode *inode = folio->mapping->host;
|
||||
int ret;
|
||||
|
||||
dfprintk(PAGECACHE, "NFS: launder_folio(%ld, %llu)\n",
|
||||
inode->i_ino, folio_pos(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,
|
||||
|
|
|
@ -933,7 +933,7 @@ TRACE_EVENT(nfs_sillyrename_unlink,
|
|||
)
|
||||
);
|
||||
|
||||
TRACE_EVENT(nfs_aop_readpage,
|
||||
DECLARE_EVENT_CLASS(nfs_folio_event,
|
||||
TP_PROTO(
|
||||
const struct inode *inode,
|
||||
struct folio *folio
|
||||
|
@ -947,6 +947,7 @@ TRACE_EVENT(nfs_aop_readpage,
|
|||
__field(u64, fileid)
|
||||
__field(u64, version)
|
||||
__field(loff_t, offset)
|
||||
__field(u32, count)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
|
@ -957,18 +958,28 @@ TRACE_EVENT(nfs_aop_readpage,
|
|||
__entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
|
||||
__entry->version = inode_peek_iversion_raw(inode);
|
||||
__entry->offset = folio_file_pos(folio);
|
||||
__entry->count = nfs_folio_length(folio);
|
||||
),
|
||||
|
||||
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),
|
||||
(unsigned long long)__entry->fileid,
|
||||
__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(
|
||||
const struct inode *inode,
|
||||
struct folio *folio,
|
||||
|
@ -984,6 +995,7 @@ TRACE_EVENT(nfs_aop_readpage_done,
|
|||
__field(u64, fileid)
|
||||
__field(u64, version)
|
||||
__field(loff_t, offset)
|
||||
__field(u32, count)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
|
@ -994,18 +1006,35 @@ TRACE_EVENT(nfs_aop_readpage_done,
|
|||
__entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
|
||||
__entry->version = inode_peek_iversion_raw(inode);
|
||||
__entry->offset = folio_file_pos(folio);
|
||||
__entry->count = nfs_folio_length(folio);
|
||||
__entry->ret = ret;
|
||||
),
|
||||
|
||||
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),
|
||||
(unsigned long long)__entry->fileid,
|
||||
__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,
|
||||
TP_PROTO(
|
||||
const struct inode *inode,
|
||||
|
|
Загрузка…
Ссылка в новой задаче