Commit 0122e882 authored by Chuck Lever's avatar Chuck Lever
Browse files

NFSD: Trace filecache opens



Instrument calls to nfsd_open_verified() to get a sense of the
filecache hit rate.

Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
parent 7e2ce0cc
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -995,10 +995,11 @@ nfsd_do_file_acquire(struct svc_rqst *rqstp, struct svc_fh *fhp,

	nf->nf_mark = nfsd_file_mark_find_or_create(nf);
	if (nf->nf_mark) {
		if (open)
		if (open) {
			status = nfsd_open_verified(rqstp, fhp, may_flags,
						    &nf->nf_file);
		else
			trace_nfsd_file_open(nf, status);
		} else
			status = nfs_ok;
	} else
		status = nfserr_jukebox;
+28 −0
Original line number Diff line number Diff line
@@ -784,6 +784,34 @@ TRACE_EVENT(nfsd_file_acquire,
			__entry->nf_file, __entry->status)
);

TRACE_EVENT(nfsd_file_open,
	TP_PROTO(struct nfsd_file *nf, __be32 status),
	TP_ARGS(nf, status),
	TP_STRUCT__entry(
		__field(unsigned int, nf_hashval)
		__field(void *, nf_inode)	/* cannot be dereferenced */
		__field(int, nf_ref)
		__field(unsigned long, nf_flags)
		__field(unsigned long, nf_may)
		__field(void *, nf_file)	/* cannot be dereferenced */
	),
	TP_fast_assign(
		__entry->nf_hashval = nf->nf_hashval;
		__entry->nf_inode = nf->nf_inode;
		__entry->nf_ref = refcount_read(&nf->nf_ref);
		__entry->nf_flags = nf->nf_flags;
		__entry->nf_may = nf->nf_may;
		__entry->nf_file = nf->nf_file;
	),
	TP_printk("hash=0x%x inode=%p ref=%d flags=%s may=%s file=%p",
		__entry->nf_hashval,
		__entry->nf_inode,
		__entry->nf_ref,
		show_nf_flags(__entry->nf_flags),
		show_nfsd_may_flags(__entry->nf_may),
		__entry->nf_file)
)

DECLARE_EVENT_CLASS(nfsd_file_search_class,
	TP_PROTO(struct inode *inode, unsigned int hash, int found),
	TP_ARGS(inode, hash, found),