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_IFIFO, "FIFO" }, \
|
||||||
{ S_IFSOCK, "SOCK" })
|
{ S_IFSOCK, "SOCK" })
|
||||||
|
|
||||||
TRACE_EVENT(nfsd_fh_verify,
|
TRACE_EVENT_CONDITION(nfsd_fh_verify,
|
||||||
TP_PROTO(
|
TP_PROTO(
|
||||||
const struct svc_rqst *rqstp,
|
const struct svc_rqst *rqstp,
|
||||||
const struct svc_fh *fhp,
|
const struct svc_fh *fhp,
|
||||||
@ -201,6 +201,7 @@ TRACE_EVENT(nfsd_fh_verify,
|
|||||||
int access
|
int access
|
||||||
),
|
),
|
||||||
TP_ARGS(rqstp, fhp, type, access),
|
TP_ARGS(rqstp, fhp, type, access),
|
||||||
|
TP_CONDITION(rqstp != NULL),
|
||||||
TP_STRUCT__entry(
|
TP_STRUCT__entry(
|
||||||
__field(unsigned int, netns_ino)
|
__field(unsigned int, netns_ino)
|
||||||
__sockaddr(server, rqstp->rq_xprt->xpt_remotelen)
|
__sockaddr(server, rqstp->rq_xprt->xpt_remotelen)
|
||||||
@ -239,7 +240,7 @@ TRACE_EVENT_CONDITION(nfsd_fh_verify_err,
|
|||||||
__be32 error
|
__be32 error
|
||||||
),
|
),
|
||||||
TP_ARGS(rqstp, fhp, type, access, error),
|
TP_ARGS(rqstp, fhp, type, access, error),
|
||||||
TP_CONDITION(error),
|
TP_CONDITION(rqstp != NULL && error),
|
||||||
TP_STRUCT__entry(
|
TP_STRUCT__entry(
|
||||||
__field(unsigned int, netns_ino)
|
__field(unsigned int, netns_ino)
|
||||||
__sockaddr(server, rqstp->rq_xprt->xpt_remotelen)
|
__sockaddr(server, rqstp->rq_xprt->xpt_remotelen)
|
||||||
@ -295,12 +296,13 @@ DECLARE_EVENT_CLASS(nfsd_fh_err_class,
|
|||||||
__entry->status)
|
__entry->status)
|
||||||
)
|
)
|
||||||
|
|
||||||
#define DEFINE_NFSD_FH_ERR_EVENT(name) \
|
#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, \
|
TP_PROTO(struct svc_rqst *rqstp, \
|
||||||
struct svc_fh *fhp, \
|
struct svc_fh *fhp, \
|
||||||
int status), \
|
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_badexport);
|
||||||
DEFINE_NFSD_FH_ERR_EVENT(set_fh_dentry_badhandle);
|
DEFINE_NFSD_FH_ERR_EVENT(set_fh_dentry_badhandle);
|
||||||
|
Loading…
Reference in New Issue
Block a user