]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
NFSD: Separate tracepoints for acquire and create
authorChuck Lever <chuck.lever@oracle.com>
Fri, 8 Jul 2022 18:26:43 +0000 (14:26 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 10 Apr 2024 14:19:11 +0000 (16:19 +0200)
[ Upstream commit be0230069fcbf7d332d010b57c1d0cfd623a84d6 ]

These tracepoints collect different information: the create case does
not open a file, so there's no nf_file available.

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

index c6dc55c0f758bb57f85bedced753648a20b115d7..85813affb8abf41756ae170b5aee54079a78a798 100644 (file)
@@ -1039,7 +1039,7 @@ nfsd_file_is_cached(struct inode *inode)
 }
 
 static __be32
-nfsd_do_file_acquire(struct svc_rqst *rqstp, struct svc_fh *fhp,
+nfsd_file_do_acquire(struct svc_rqst *rqstp, struct svc_fh *fhp,
                     unsigned int may_flags, struct nfsd_file **pnf, bool open)
 {
        struct nfsd_file_lookup_key key = {
@@ -1120,7 +1120,8 @@ out:
 
 out_status:
        put_cred(key.cred);
-       trace_nfsd_file_acquire(rqstp, key.inode, may_flags, nf, status);
+       if (open)
+               trace_nfsd_file_acquire(rqstp, key.inode, may_flags, nf, status);
        return status;
 
 open_file:
@@ -1168,7 +1169,7 @@ __be32
 nfsd_file_acquire(struct svc_rqst *rqstp, struct svc_fh *fhp,
                  unsigned int may_flags, struct nfsd_file **pnf)
 {
-       return nfsd_do_file_acquire(rqstp, fhp, may_flags, pnf, true);
+       return nfsd_file_do_acquire(rqstp, fhp, may_flags, pnf, true);
 }
 
 /**
@@ -1185,7 +1186,7 @@ __be32
 nfsd_file_create(struct svc_rqst *rqstp, struct svc_fh *fhp,
                 unsigned int may_flags, struct nfsd_file **pnf)
 {
-       return nfsd_do_file_acquire(rqstp, fhp, may_flags, pnf, false);
+       return nfsd_file_do_acquire(rqstp, fhp, may_flags, pnf, false);
 }
 
 /*
index 08700b6acba31ce1c36c531aa486fef28093ffb1..d349abf0821d6aa1fc5920e004c48c0bc46ba541 100644 (file)
@@ -5121,6 +5121,7 @@ static __be32 nfs4_get_vfs_file(struct svc_rqst *rqstp, struct nfs4_file *fp,
                                goto out_put_access;
                        nf->nf_file = open->op_filp;
                        open->op_filp = NULL;
+                       trace_nfsd_file_create(rqstp, access, nf);
                }
 
                spin_lock(&fp->fi_lock);
index f94db18777ad7aafaf264983071b102c6e0c0da0..12dbc190e65957e96cced3f88ad899901f0e366c 100644 (file)
@@ -781,10 +781,10 @@ DEFINE_NFSD_FILE_EVENT(nfsd_file_unhash_and_dispose);
 
 TRACE_EVENT(nfsd_file_acquire,
        TP_PROTO(
-               struct svc_rqst *rqstp,
-               struct inode *inode,
+               const struct svc_rqst *rqstp,
+               const struct inode *inode,
                unsigned int may_flags,
-               struct nfsd_file *nf,
+               const struct nfsd_file *nf,
                __be32 status
        ),
 
@@ -792,12 +792,12 @@ TRACE_EVENT(nfsd_file_acquire,
 
        TP_STRUCT__entry(
                __field(u32, xid)
-               __field(void *, inode)
+               __field(const void *, inode)
                __field(unsigned long, may_flags)
-               __field(int, nf_ref)
+               __field(unsigned int, nf_ref)
                __field(unsigned long, nf_flags)
                __field(unsigned long, nf_may)
-               __field(struct file *, nf_file)
+               __field(const void *, nf_file)
                __field(u32, status)
        ),
 
@@ -812,12 +812,50 @@ TRACE_EVENT(nfsd_file_acquire,
                __entry->status = be32_to_cpu(status);
        ),
 
-       TP_printk("xid=0x%x inode=%p may_flags=%s ref=%d nf_flags=%s nf_may=%s nf_file=%p status=%u",
+       TP_printk("xid=0x%x inode=%p may_flags=%s ref=%u nf_flags=%s nf_may=%s nf_file=%p status=%u",
                        __entry->xid, __entry->inode,
                        show_nfsd_may_flags(__entry->may_flags),
                        __entry->nf_ref, show_nf_flags(__entry->nf_flags),
                        show_nfsd_may_flags(__entry->nf_may),
-                       __entry->nf_file, __entry->status)
+                       __entry->nf_file, __entry->status
+       )
+);
+
+TRACE_EVENT(nfsd_file_create,
+       TP_PROTO(
+               const struct svc_rqst *rqstp,
+               unsigned int may_flags,
+               const struct nfsd_file *nf
+       ),
+
+       TP_ARGS(rqstp, may_flags, nf),
+
+       TP_STRUCT__entry(
+               __field(const void *, nf_inode)
+               __field(const void *, nf_file)
+               __field(unsigned long, may_flags)
+               __field(unsigned long, nf_flags)
+               __field(unsigned long, nf_may)
+               __field(unsigned int, nf_ref)
+               __field(u32, xid)
+       ),
+
+       TP_fast_assign(
+               __entry->nf_inode = nf->nf_inode;
+               __entry->nf_file = nf->nf_file;
+               __entry->may_flags = may_flags;
+               __entry->nf_flags = nf->nf_flags;
+               __entry->nf_may = nf->nf_may;
+               __entry->nf_ref = refcount_read(&nf->nf_ref);
+               __entry->xid = be32_to_cpu(rqstp->rq_xid);
+       ),
+
+       TP_printk("xid=0x%x inode=%p may_flags=%s ref=%u nf_flags=%s nf_may=%s nf_file=%p",
+               __entry->xid, __entry->nf_inode,
+               show_nfsd_may_flags(__entry->may_flags),
+               __entry->nf_ref, show_nf_flags(__entry->nf_flags),
+               show_nfsd_may_flags(__entry->nf_may), __entry->nf_file
+       )
 );
 
 TRACE_EVENT(nfsd_file_insert_err,