]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
NFSD: Move nfsd_file_trace_alloc() tracepoint
authorChuck Lever <chuck.lever@oracle.com>
Fri, 8 Jul 2022 18:26:49 +0000 (14:26 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 10 Apr 2024 14:19:11 +0000 (16:19 +0200)
[ Upstream commit b40a2839470cd62ed68c4a32d72a18ee8975b1ac ]

Avoid recording the allocation of an nfsd_file item that is
immediately released because a matching item was already
inserted in the hash.

Reviewed-by: Jeff Layton <jlayton@kernel.org>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
fs/nfsd/filecache.c
fs/nfsd/trace.h

index 85813affb8abf41756ae170b5aee54079a78a798..26cfae138b9067e4ba96ceee9fbc6502750e654c 100644 (file)
@@ -302,7 +302,6 @@ nfsd_file_alloc(struct nfsd_file_lookup_key *key, unsigned int may)
                refcount_set(&nf->nf_ref, 2);
                nf->nf_may = key->need;
                nf->nf_mark = NULL;
-               trace_nfsd_file_alloc(nf);
        }
        return nf;
 }
@@ -1125,6 +1124,7 @@ out_status:
        return status;
 
 open_file:
+       trace_nfsd_file_alloc(nf);
        nf->nf_mark = nfsd_file_mark_find_or_create(nf);
        if (nf->nf_mark) {
                if (open) {
index 12dbc190e65957e96cced3f88ad899901f0e366c..c824ab30a758e1399b6e36df0b6e7c56f8fd1c25 100644 (file)
@@ -773,12 +773,35 @@ DEFINE_EVENT(nfsd_file_class, name, \
        TP_PROTO(struct nfsd_file *nf), \
        TP_ARGS(nf))
 
-DEFINE_NFSD_FILE_EVENT(nfsd_file_alloc);
 DEFINE_NFSD_FILE_EVENT(nfsd_file_put_final);
 DEFINE_NFSD_FILE_EVENT(nfsd_file_unhash);
 DEFINE_NFSD_FILE_EVENT(nfsd_file_put);
 DEFINE_NFSD_FILE_EVENT(nfsd_file_unhash_and_dispose);
 
+TRACE_EVENT(nfsd_file_alloc,
+       TP_PROTO(
+               const struct nfsd_file *nf
+       ),
+       TP_ARGS(nf),
+       TP_STRUCT__entry(
+               __field(const void *, nf_inode)
+               __field(unsigned long, nf_flags)
+               __field(unsigned long, nf_may)
+               __field(unsigned int, nf_ref)
+       ),
+       TP_fast_assign(
+               __entry->nf_inode = nf->nf_inode;
+               __entry->nf_flags = nf->nf_flags;
+               __entry->nf_ref = refcount_read(&nf->nf_ref);
+               __entry->nf_may = nf->nf_may;
+       ),
+       TP_printk("inode=%p ref=%u flags=%s may=%s",
+               __entry->nf_inode, __entry->nf_ref,
+               show_nf_flags(__entry->nf_flags),
+               show_nfsd_may_flags(__entry->nf_may)
+       )
+);
+
 TRACE_EVENT(nfsd_file_acquire,
        TP_PROTO(
                const struct svc_rqst *rqstp,