On Wed, May 12, 2021 at 06:01:34PM -0700, Darrick J. Wong wrote: > From: Darrick J. Wong <djwong@xxxxxxxxxx> > > sc->ip is the inode that's being scrubbed, which means that it's not set > for scrub types that don't involve inodes. If one of those scrubbers > (e.g. inode btrees) returns EDEADLOCK, we'll trip over the null pointer. > Fix that by reporting either the file being examined or the file that > was used to call scrub. > > Signed-off-by: Darrick J. Wong <djwong@xxxxxxxxxx> > --- Reviewed-by: Brian Foster <bfoster@xxxxxxxxxx> > fs/xfs/scrub/common.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > > diff --git a/fs/xfs/scrub/common.c b/fs/xfs/scrub/common.c > index aa874607618a..be38c960da85 100644 > --- a/fs/xfs/scrub/common.c > +++ b/fs/xfs/scrub/common.c > @@ -74,7 +74,9 @@ __xchk_process_error( > return true; > case -EDEADLOCK: > /* Used to restart an op with deadlock avoidance. */ > - trace_xchk_deadlock_retry(sc->ip, sc->sm, *error); > + trace_xchk_deadlock_retry( > + sc->ip ? sc->ip : XFS_I(file_inode(sc->file)), > + sc->sm, *error); > break; > case -EFSBADCRC: > case -EFSCORRUPTED: >