Commit e3f0a7fe authored by Dave Wysochanski's avatar Dave Wysochanski Committed by Trond Myklebust
Browse files

NFS: Replace dfprintks with tracepoints in fscache read and write page functions



Most of fscache and other NFS IO paths are now using tracepoints.
Remove the dfprintks in the NFS fscache read/write page functions
and replace with tracepoints at the begin and end of the functions.

Signed-off-by: default avatarDave Wysochanski <dwysocha@redhat.com>
Signed-off-by: default avatarTrond Myklebust <trond.myklebust@hammerspace.com>
parent fc1c5abf
Loading
Loading
Loading
Loading
+11 −18
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@
#include "internal.h"
#include "iostat.h"
#include "fscache.h"
#include "nfstrace.h"

#define NFSDBG_FACILITY		NFSDBG_FSCACHE

@@ -321,30 +322,27 @@ int __nfs_fscache_read_page(struct inode *inode, struct page *page)
{
	int ret;

	dfprintk(FSCACHE,
		 "NFS: readpage_from_fscache(fsc:%p/p:%p(i:%lx f:%lx)/0x%p)\n",
		 nfs_i_fscache(inode), page, page->index, page->flags, inode);

	trace_nfs_fscache_read_page(inode, page);
	if (PageChecked(page)) {
		dfprintk(FSCACHE, "NFS:    readpage_from_fscache: PageChecked\n");
		ClearPageChecked(page);
		return 1;
		ret = 1;
		goto out;
	}

	ret = fscache_fallback_read_page(inode, page);
	if (ret < 0) {
		nfs_inc_fscache_stats(inode, NFSIOS_FSCACHE_PAGES_READ_FAIL);
		dfprintk(FSCACHE,
			 "NFS:    readpage_from_fscache failed %d\n", ret);
		SetPageChecked(page);
		return ret;
		goto out;
	}

	/* Read completed synchronously */
	dfprintk(FSCACHE, "NFS:    readpage_from_fscache: read successful\n");
	nfs_inc_fscache_stats(inode, NFSIOS_FSCACHE_PAGES_READ_OK);
	SetPageUptodate(page);
	return 0;
	ret = 0;
out:
	trace_nfs_fscache_read_page_exit(inode, page, ret);
	return ret;
}

/*
@@ -355,20 +353,15 @@ void __nfs_fscache_write_page(struct inode *inode, struct page *page)
{
	int ret;

	dfprintk(FSCACHE,
		 "NFS: readpage_to_fscache(fsc:%p/p:%p(i:%lx f:%lx))\n",
		 nfs_i_fscache(inode), page, page->index, page->flags);
	trace_nfs_fscache_write_page(inode, page);

	ret = fscache_fallback_write_page(inode, page, true);

	dfprintk(FSCACHE,
		 "NFS:     nfs_fscache_write_page: p:%p(i:%lu f:%lx) ret %d\n",
		 page, page->index, page->flags, ret);

	if (ret != 0) {
		nfs_inc_fscache_stats(inode, NFSIOS_FSCACHE_PAGES_WRITTEN_FAIL);
		nfs_inc_fscache_stats(inode, NFSIOS_FSCACHE_PAGES_UNCACHED);
	} else {
		nfs_inc_fscache_stats(inode, NFSIOS_FSCACHE_PAGES_WRITTEN_OK);
	}
	trace_nfs_fscache_write_page_exit(inode, page, ret);
}
+91 −0
Original line number Diff line number Diff line
@@ -1215,6 +1215,97 @@ TRACE_EVENT(nfs_readpage_short,
		)
);

DECLARE_EVENT_CLASS(nfs_fscache_page_event,
		TP_PROTO(
			const struct inode *inode,
			struct page *page
		),

		TP_ARGS(inode, page),

		TP_STRUCT__entry(
			__field(dev_t, dev)
			__field(u32, fhandle)
			__field(u64, fileid)
			__field(loff_t, offset)
		),

		TP_fast_assign(
			const struct nfs_inode *nfsi = NFS_I(inode);
			const struct nfs_fh *fh = &nfsi->fh;

			__entry->offset = page_index(page) << PAGE_SHIFT;
			__entry->dev = inode->i_sb->s_dev;
			__entry->fileid = nfsi->fileid;
			__entry->fhandle = nfs_fhandle_hash(fh);
		),

		TP_printk(
			"fileid=%02x:%02x:%llu fhandle=0x%08x "
			"offset=%lld",
			MAJOR(__entry->dev), MINOR(__entry->dev),
			(unsigned long long)__entry->fileid,
			__entry->fhandle,
			(long long)__entry->offset
		)
);
DECLARE_EVENT_CLASS(nfs_fscache_page_event_done,
		TP_PROTO(
			const struct inode *inode,
			struct page *page,
			int error
		),

		TP_ARGS(inode, page, error),

		TP_STRUCT__entry(
			__field(int, error)
			__field(dev_t, dev)
			__field(u32, fhandle)
			__field(u64, fileid)
			__field(loff_t, offset)
		),

		TP_fast_assign(
			const struct nfs_inode *nfsi = NFS_I(inode);
			const struct nfs_fh *fh = &nfsi->fh;

			__entry->offset = page_index(page) << PAGE_SHIFT;
			__entry->dev = inode->i_sb->s_dev;
			__entry->fileid = nfsi->fileid;
			__entry->fhandle = nfs_fhandle_hash(fh);
			__entry->error = error;
		),

		TP_printk(
			"fileid=%02x:%02x:%llu fhandle=0x%08x "
			"offset=%lld error=%d",
			MAJOR(__entry->dev), MINOR(__entry->dev),
			(unsigned long long)__entry->fileid,
			__entry->fhandle,
			(long long)__entry->offset, __entry->error
		)
);
#define DEFINE_NFS_FSCACHE_PAGE_EVENT(name) \
	DEFINE_EVENT(nfs_fscache_page_event, name, \
			TP_PROTO( \
				const struct inode *inode, \
				struct page *page \
			), \
			TP_ARGS(inode, page))
#define DEFINE_NFS_FSCACHE_PAGE_EVENT_DONE(name) \
	DEFINE_EVENT(nfs_fscache_page_event_done, name, \
			TP_PROTO( \
				const struct inode *inode, \
				struct page *page, \
				int error \
			), \
			TP_ARGS(inode, page, error))
DEFINE_NFS_FSCACHE_PAGE_EVENT(nfs_fscache_read_page);
DEFINE_NFS_FSCACHE_PAGE_EVENT_DONE(nfs_fscache_read_page_exit);
DEFINE_NFS_FSCACHE_PAGE_EVENT(nfs_fscache_write_page);
DEFINE_NFS_FSCACHE_PAGE_EVENT_DONE(nfs_fscache_write_page_exit);

TRACE_EVENT(nfs_pgio_error,
	TP_PROTO(
		const struct nfs_pgio_header *hdr,