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:
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);
|
||||
|
Loading…
Reference in New Issue
Block a user