aboutsummaryrefslogtreecommitdiffstats
path: root/fs/xfs
diff options
context:
space:
mode:
authorDave Chinner <dchinner@redhat.com>2016-01-07 19:28:35 -0500
committerDave Chinner <david@fromorbit.com>2016-01-07 19:28:35 -0500
commit121e213eabad66c0453904d76e3eda193958acbd (patch)
tree2b7980ced4dcca8ccbb599544271ab716029447c /fs/xfs
parenta841b64df29b4c7e68ce564d752dfb2042db5404 (diff)
xfs: add tracepoints to readpage calls
This allows us to see page cache driven readahead in action as it passes through XFS. This helps to understand buffered read throughput problems such as readahead IO IO sizes being too small for the underlying device to reach max throughput. Signed-off-by: Dave Chinner <dchinner@redhat.com> Reviewed-by: Brian Foster <bfoster@redhat.com> Signed-off-by: Dave Chinner <david@fromorbit.com>
Diffstat (limited to 'fs/xfs')
-rw-r--r--fs/xfs/xfs_aops.c2
-rw-r--r--fs/xfs/xfs_trace.h26
2 files changed, 28 insertions, 0 deletions
diff --git a/fs/xfs/xfs_aops.c b/fs/xfs/xfs_aops.c
index 29e7e5dd5178..379c089fb051 100644
--- a/fs/xfs/xfs_aops.c
+++ b/fs/xfs/xfs_aops.c
@@ -1917,6 +1917,7 @@ xfs_vm_readpage(
1917 struct file *unused, 1917 struct file *unused,
1918 struct page *page) 1918 struct page *page)
1919{ 1919{
1920 trace_xfs_vm_readpage(page->mapping->host, 1);
1920 return mpage_readpage(page, xfs_get_blocks); 1921 return mpage_readpage(page, xfs_get_blocks);
1921} 1922}
1922 1923
@@ -1927,6 +1928,7 @@ xfs_vm_readpages(
1927 struct list_head *pages, 1928 struct list_head *pages,
1928 unsigned nr_pages) 1929 unsigned nr_pages)
1929{ 1930{
1931 trace_xfs_vm_readpages(mapping->host, nr_pages);
1930 return mpage_readpages(mapping, pages, nr_pages, xfs_get_blocks); 1932 return mpage_readpages(mapping, pages, nr_pages, xfs_get_blocks);
1931} 1933}
1932 1934
diff --git a/fs/xfs/xfs_trace.h b/fs/xfs/xfs_trace.h
index 877079eb0f8f..391d797cb53f 100644
--- a/fs/xfs/xfs_trace.h
+++ b/fs/xfs/xfs_trace.h
@@ -1222,6 +1222,32 @@ DEFINE_PAGE_EVENT(xfs_writepage);
1222DEFINE_PAGE_EVENT(xfs_releasepage); 1222DEFINE_PAGE_EVENT(xfs_releasepage);
1223DEFINE_PAGE_EVENT(xfs_invalidatepage); 1223DEFINE_PAGE_EVENT(xfs_invalidatepage);
1224 1224
1225DECLARE_EVENT_CLASS(xfs_readpage_class,
1226 TP_PROTO(struct inode *inode, int nr_pages),
1227 TP_ARGS(inode, nr_pages),
1228 TP_STRUCT__entry(
1229 __field(dev_t, dev)
1230 __field(xfs_ino_t, ino)
1231 __field(int, nr_pages)
1232 ),
1233 TP_fast_assign(
1234 __entry->dev = inode->i_sb->s_dev;
1235 __entry->ino = inode->i_ino;
1236 __entry->nr_pages = nr_pages;
1237 ),
1238 TP_printk("dev %d:%d ino 0x%llx nr_pages %d",
1239 MAJOR(__entry->dev), MINOR(__entry->dev),
1240 __entry->ino,
1241 __entry->nr_pages)
1242)
1243
1244#define DEFINE_READPAGE_EVENT(name) \
1245DEFINE_EVENT(xfs_readpage_class, name, \
1246 TP_PROTO(struct inode *inode, int nr_pages), \
1247 TP_ARGS(inode, nr_pages))
1248DEFINE_READPAGE_EVENT(xfs_vm_readpage);
1249DEFINE_READPAGE_EVENT(xfs_vm_readpages);
1250
1225DECLARE_EVENT_CLASS(xfs_imap_class, 1251DECLARE_EVENT_CLASS(xfs_imap_class,
1226 TP_PROTO(struct xfs_inode *ip, xfs_off_t offset, ssize_t count, 1252 TP_PROTO(struct xfs_inode *ip, xfs_off_t offset, ssize_t count,
1227 int type, struct xfs_bmbt_irec *irec), 1253 int type, struct xfs_bmbt_irec *irec),