nfsd/localio: fix nfsd_file tracepoints to handle NULL rqstp
authorMike Snitzer <snitzer@kernel.org>
Thu, 3 Oct 2024 19:35:00 +0000 (15:35 -0400)
committerAnna Schumaker <anna.schumaker@oracle.com>
Fri, 4 Oct 2024 18:52:04 +0000 (14:52 -0400)
Otherwise nfsd_file_acquire, nfsd_file_insert_err, and
nfsd_file_cons_err will hit a NULL pointer when they are enabled and
LOCALIO used.

Example trace output (note xid is 0x0 and LOCALIO flag set):
 nfsd_file_acquire: xid=0x0 inode=0000000069a1b2e7
 may_flags=WRITE|LOCALIO ref=1 nf_flags=HASHED|GC nf_may=WRITE
 nf_file=0000000070123234 status=0

Fixes: c63f0e48febf ("nfsd: add nfsd_file_acquire_local()")
Signed-off-by: Mike Snitzer <snitzer@kernel.org>
Reviewed-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Anna Schumaker <anna.schumaker@oracle.com>
fs/nfsd/trace.h

index c625966..b8470d4 100644 (file)
@@ -1113,7 +1113,7 @@ TRACE_EVENT(nfsd_file_acquire,
        ),
 
        TP_fast_assign(
-               __entry->xid = be32_to_cpu(rqstp->rq_xid);
+               __entry->xid = rqstp ? be32_to_cpu(rqstp->rq_xid) : 0;
                __entry->inode = inode;
                __entry->may_flags = may_flags;
                __entry->nf_ref = nf ? refcount_read(&nf->nf_ref) : 0;
@@ -1147,7 +1147,7 @@ TRACE_EVENT(nfsd_file_insert_err,
                __field(long, error)
        ),
        TP_fast_assign(
-               __entry->xid = be32_to_cpu(rqstp->rq_xid);
+               __entry->xid = rqstp ? be32_to_cpu(rqstp->rq_xid) : 0;
                __entry->inode = inode;
                __entry->may_flags = may_flags;
                __entry->error = error;
@@ -1177,7 +1177,7 @@ TRACE_EVENT(nfsd_file_cons_err,
                __field(const void *, nf_file)
        ),
        TP_fast_assign(
-               __entry->xid = be32_to_cpu(rqstp->rq_xid);
+               __entry->xid = rqstp ? be32_to_cpu(rqstp->rq_xid) : 0;
                __entry->inode = inode;
                __entry->may_flags = may_flags;
                __entry->nf_ref = refcount_read(&nf->nf_ref);