]> www.infradead.org Git - users/hch/misc.git/commitdiff
nfsd: add tracepoint for getattr and statfs events
authorJeff Layton <jlayton@kernel.org>
Sat, 3 May 2025 19:59:29 +0000 (15:59 -0400)
committerChuck Lever <chuck.lever@oracle.com>
Sun, 11 May 2025 23:48:34 +0000 (19:48 -0400)
There isn't a common helper for getattrs, so add these into the
protocol-specific helpers.

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

index 80096a5c486551a22efb10a16c60454dc0bc891b..f6eb8331dc4b098b636851e2a39302aec82a2443 100644 (file)
@@ -70,6 +70,8 @@ nfsd3_proc_getattr(struct svc_rqst *rqstp)
        struct nfsd_fhandle *argp = rqstp->rq_argp;
        struct nfsd3_attrstat *resp = rqstp->rq_resp;
 
+       trace_nfsd_vfs_getattr(rqstp, &argp->fh);
+
        dprintk("nfsd: GETATTR(3)  %s\n",
                SVCFH_fmt(&argp->fh));
 
index 483fd8b26f9df75b565dcac947aa63d055988b63..2b16ee1ae461672a502f8c716f144c8c8bbfdf0b 100644 (file)
@@ -876,6 +876,8 @@ nfsd4_getattr(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
        struct nfsd4_getattr *getattr = &u->getattr;
        __be32 status;
 
+       trace_nfsd_vfs_getattr(rqstp, &cstate->current_fh);
+
        status = fh_verify(rqstp, &cstate->current_fh, 0, NFSD_MAY_NOP);
        if (status)
                return status;
index c561af30c37ab04c75038561817abc1b4628fa78..8816cc565c0c84a47500aae6b2f0b8a93794f7e8 100644 (file)
@@ -55,6 +55,8 @@ nfsd_proc_getattr(struct svc_rqst *rqstp)
        struct nfsd_fhandle *argp = rqstp->rq_argp;
        struct nfsd_attrstat *resp = rqstp->rq_resp;
 
+       trace_nfsd_vfs_getattr(rqstp, &argp->fh);
+
        dprintk("nfsd: GETATTR  %s\n", SVCFH_fmt(&argp->fh));
 
        fh_copy(&resp->fh, &argp->fh);
index bed58cf55c10d0c95b274ec0da8c46eade167774..3c5505ef5e3a38d805a48ea4e190063b5341684d 100644 (file)
@@ -2579,6 +2579,36 @@ TRACE_EVENT(nfsd_vfs_readdir,
        )
 );
 
+DECLARE_EVENT_CLASS(nfsd_vfs_getattr_class,
+       TP_PROTO(
+               const struct svc_rqst *rqstp,
+               const struct svc_fh *fhp
+       ),
+       TP_ARGS(rqstp, fhp),
+       TP_STRUCT__entry(
+               NFSD_TRACE_PROC_CALL_FIELDS(rqstp)
+               __field(u32, fh_hash)
+       ),
+       TP_fast_assign(
+               NFSD_TRACE_PROC_CALL_ASSIGNMENTS(rqstp);
+               __entry->fh_hash = knfsd_fh_hash(&fhp->fh_handle);
+       ),
+       TP_printk("xid=0x%08x fh_hash=0x%08x",
+               __entry->xid, __entry->fh_hash
+       )
+);
+
+#define DEFINE_NFSD_VFS_GETATTR_EVENT(__name)          \
+DEFINE_EVENT(nfsd_vfs_getattr_class, __name,           \
+       TP_PROTO(                                       \
+               const struct svc_rqst *rqstp,           \
+               const struct svc_fh *fhp                \
+       ),                                              \
+       TP_ARGS(rqstp, fhp))
+
+DEFINE_NFSD_VFS_GETATTR_EVENT(nfsd_vfs_getattr);
+DEFINE_NFSD_VFS_GETATTR_EVENT(nfsd_vfs_statfs);
+
 #endif /* _NFSD_TRACE_H */
 
 #undef TRACE_INCLUDE_PATH
index 41314b2a8199ae93ed156d140aa9e4b8e62b9e32..d0dfd97de4d3ee1e0a5f55422814e2d01013735f 100644 (file)
@@ -2290,6 +2290,8 @@ nfsd_statfs(struct svc_rqst *rqstp, struct svc_fh *fhp, struct kstatfs *stat, in
 {
        __be32 err;
 
+       trace_nfsd_vfs_statfs(rqstp, fhp);
+
        err = fh_verify(rqstp, fhp, 0, NFSD_MAY_NOP | access);
        if (!err) {
                struct path path = {