summaryrefslogtreecommitdiffstats
path: root/fs/nfs/write.c
diff options
context:
space:
mode:
authorTrond Myklebust <Trond.Myklebust@netapp.com>2013-08-19 18:59:33 -0400
committerTrond Myklebust <Trond.Myklebust@netapp.com>2013-08-22 08:58:17 -0400
commitf4ce1299b329e96bb247c95c4fee8809827d6931 (patch)
treeb4056d4f78b0594f84c8e4b3beda565a05751993 /fs/nfs/write.c
parent1264a2f053a32376696e51184f086d35113e75ff (diff)
NFS: Add event tracing for generic NFS events
Add tracepoints for inode attribute updates, attribute revalidation, writeback start/end fsync start/end, attribute change start/end, permission check start/end. The intention is to enable performance tracing using 'perf'as well as improving debugging. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'fs/nfs/write.c')
-rw-r--r--fs/nfs/write.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/fs/nfs/write.c b/fs/nfs/write.c
index f1bdb7254776..d37e8ca9ab86 100644
--- a/fs/nfs/write.c
+++ b/fs/nfs/write.c
@@ -31,6 +31,8 @@
31#include "fscache.h" 31#include "fscache.h"
32#include "pnfs.h" 32#include "pnfs.h"
33 33
34#include "nfstrace.h"
35
34#define NFSDBG_FACILITY NFSDBG_PAGECACHE 36#define NFSDBG_FACILITY NFSDBG_PAGECACHE
35 37
36#define MIN_POOL_WRITE (32) 38#define MIN_POOL_WRITE (32)
@@ -1732,8 +1734,14 @@ int nfs_wb_all(struct inode *inode)
1732 .range_start = 0, 1734 .range_start = 0,
1733 .range_end = LLONG_MAX, 1735 .range_end = LLONG_MAX,
1734 }; 1736 };
1737 int ret;
1738
1739 trace_nfs_writeback_inode_enter(inode);
1740
1741 ret = sync_inode(inode, &wbc);
1735 1742
1736 return sync_inode(inode, &wbc); 1743 trace_nfs_writeback_inode_exit(inode, ret);
1744 return ret;
1737} 1745}
1738EXPORT_SYMBOL_GPL(nfs_wb_all); 1746EXPORT_SYMBOL_GPL(nfs_wb_all);
1739 1747
@@ -1781,6 +1789,8 @@ int nfs_wb_page(struct inode *inode, struct page *page)
1781 }; 1789 };
1782 int ret; 1790 int ret;
1783 1791
1792 trace_nfs_writeback_page_enter(inode);
1793
1784 for (;;) { 1794 for (;;) {
1785 wait_on_page_writeback(page); 1795 wait_on_page_writeback(page);
1786 if (clear_page_dirty_for_io(page)) { 1796 if (clear_page_dirty_for_io(page)) {
@@ -1789,14 +1799,15 @@ int nfs_wb_page(struct inode *inode, struct page *page)
1789 goto out_error; 1799 goto out_error;
1790 continue; 1800 continue;
1791 } 1801 }
1802 ret = 0;
1792 if (!PagePrivate(page)) 1803 if (!PagePrivate(page))
1793 break; 1804 break;
1794 ret = nfs_commit_inode(inode, FLUSH_SYNC); 1805 ret = nfs_commit_inode(inode, FLUSH_SYNC);
1795 if (ret < 0) 1806 if (ret < 0)
1796 goto out_error; 1807 goto out_error;
1797 } 1808 }
1798 return 0;
1799out_error: 1809out_error:
1810 trace_nfs_writeback_page_exit(inode, ret);
1800 return ret; 1811 return ret;
1801} 1812}
1802 1813