Commit 71c61a00 authored by Chuck Lever's avatar Chuck Lever Committed by Anna Schumaker
Browse files

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: default avatarChuck Lever <chuck.lever@oracle.com>
Signed-off-by: default avatarMike Snitzer <snitzer@kernel.org>
Acked-by: default avatarJeff Layton <jlayton@kernel.org>
Reviewed-by: default avatarNeilBrown <neilb@suse.de>
Signed-off-by: default avatarAnna Schumaker <anna.schumaker@oracle.com>
parent 7c0b07b4
Loading
Loading
Loading
Loading
+10 −8
Original line number Diff line number Diff line
@@ -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)
@@ -296,11 +297,12 @@ DECLARE_EVENT_CLASS(nfsd_fh_err_class,
)

#define DEFINE_NFSD_FH_ERR_EVENT(name)			\
DEFINE_EVENT(nfsd_fh_err_class, nfsd_##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_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);