mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02: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:
		
							parent
							
								
									7c0b07b49b
								
							
						
					
					
						commit
						71c61a0077
					
				
					 1 changed files with 10 additions and 8 deletions
				
			
		| 
						 | 
					@ -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)
 | 
				
			||||||
| 
						 | 
					@ -296,11 +297,12 @@ DECLARE_EVENT_CLASS(nfsd_fh_err_class,
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#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 a new issue