]> git.proxmox.com Git - mirror_ubuntu-kernels.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)
committerChuck Lever <chuck.lever@oracle.com>
Sat, 30 Jul 2022 00:16:07 +0000 (20:16 -0400)
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 df54f882752cab1b4b38e43f2e509db2c96687e8..ac38b41c89c6bc0730b4c78698fdbad9fd5c57de 100644 (file)
@@ -303,7 +303,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;
 }
@@ -1126,6 +1125,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 6bbfb987271d4c167413fef7ec6593cab492a374..9ebd67d461f9ee51a33c305920a8bddc5f790441 100644 (file)
@@ -774,12 +774,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,