]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
NFSD: Trace filecache opens
authorChuck Lever <chuck.lever@oracle.com>
Sun, 27 Mar 2022 20:42:20 +0000 (16:42 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 10 Apr 2024 14:19:06 +0000 (16:19 +0200)
[ Upstream commit 0122e882119ddbd9efa6edfeeac3f5c704a7aeea ]

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

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
fs/nfsd/filecache.c
fs/nfsd/trace.h

index 045f5a869ddc736616f2f37f65380db367409e2a..0863bf50509351c07f76a20e58ba91a7c4ed2763 100644 (file)
@@ -976,10 +976,11 @@ open_file:
 
        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;
index 7f3f40f6c0ff3293f62c278990887ccab22968df..3cff3ada00a850e5af4d608b2f5d9a9fce20a390 100644 (file)
@@ -775,6 +775,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),