mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-05 09:49:58 -04:00
NFSD: Short-circuit fh_verify tracepoints for LOCALIO
LOCALIO will be able to call fh_verify() with a NULL rqstp. In this case, the existing trace points need to be skipped because they want to dereference the address fields in the passed-in rqstp. Temporarily make these trace points conditional to avoid a seg fault in this case. Putting the "rqstp != NULL" check in the trace points themselves makes the check more efficient. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Mike Snitzer <snitzer@kernel.org> Acked-by: Jeff Layton <jlayton@kernel.org> Reviewed-by: NeilBrown <neilb@suse.de> Signed-off-by: Anna Schumaker <anna.schumaker@oracle.com>
This commit is contained in:
committed by
Anna Schumaker
parent
7c0b07b49b
commit
71c61a0077
@@ -193,7 +193,7 @@ TRACE_EVENT(nfsd_compound_encode_err,
|
||||
{ S_IFIFO, "FIFO" }, \
|
||||
{ S_IFSOCK, "SOCK" })
|
||||
|
||||
TRACE_EVENT(nfsd_fh_verify,
|
||||
TRACE_EVENT_CONDITION(nfsd_fh_verify,
|
||||
TP_PROTO(
|
||||
const struct svc_rqst *rqstp,
|
||||
const struct svc_fh *fhp,
|
||||
@@ -201,6 +201,7 @@ TRACE_EVENT(nfsd_fh_verify,
|
||||
int access
|
||||
),
|
||||
TP_ARGS(rqstp, fhp, type, access),
|
||||
TP_CONDITION(rqstp != NULL),
|
||||
TP_STRUCT__entry(
|
||||
__field(unsigned int, netns_ino)
|
||||
__sockaddr(server, rqstp->rq_xprt->xpt_remotelen)
|
||||
@@ -239,7 +240,7 @@ TRACE_EVENT_CONDITION(nfsd_fh_verify_err,
|
||||
__be32 error
|
||||
),
|
||||
TP_ARGS(rqstp, fhp, type, access, error),
|
||||
TP_CONDITION(error),
|
||||
TP_CONDITION(rqstp != NULL && error),
|
||||
TP_STRUCT__entry(
|
||||
__field(unsigned int, netns_ino)
|
||||
__sockaddr(server, rqstp->rq_xprt->xpt_remotelen)
|
||||
@@ -295,12 +296,13 @@ DECLARE_EVENT_CLASS(nfsd_fh_err_class,
|
||||
__entry->status)
|
||||
)
|
||||
|
||||
#define DEFINE_NFSD_FH_ERR_EVENT(name) \
|
||||
DEFINE_EVENT(nfsd_fh_err_class, nfsd_##name, \
|
||||
TP_PROTO(struct svc_rqst *rqstp, \
|
||||
struct svc_fh *fhp, \
|
||||
int status), \
|
||||
TP_ARGS(rqstp, fhp, status))
|
||||
#define DEFINE_NFSD_FH_ERR_EVENT(name) \
|
||||
DEFINE_EVENT_CONDITION(nfsd_fh_err_class, nfsd_##name, \
|
||||
TP_PROTO(struct svc_rqst *rqstp, \
|
||||
struct svc_fh *fhp, \
|
||||
int status), \
|
||||
TP_ARGS(rqstp, fhp, status), \
|
||||
TP_CONDITION(rqstp != NULL))
|
||||
|
||||
DEFINE_NFSD_FH_ERR_EVENT(set_fh_dentry_badexport);
|
||||
DEFINE_NFSD_FH_ERR_EVENT(set_fh_dentry_badhandle);
|
||||
|
||||
Reference in New Issue
Block a user