aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Darrick J. Wong <djwong@kernel.org> 2021-05-12 16:41:13 -0700
committerGravatar Darrick J. Wong <djwong@kernel.org> 2021-05-20 08:31:22 -0700
commit16c9de54dc868c121918f2ae91e46330f919049f (patch)
tree643f1734146d65f904cf57797bfe27ea9f1b8937
parentxfs: retry allocations when locality-based search fails (diff)
downloadlinux-16c9de54dc868c121918f2ae91e46330f919049f.tar.gz
linux-16c9de54dc868c121918f2ae91e46330f919049f.tar.bz2
linux-16c9de54dc868c121918f2ae91e46330f919049f.zip
xfs: fix deadlock retry tracepoint arguments
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@kernel.org> Reviewed-by: Brian Foster <bfoster@redhat.com>
-rw-r--r--fs/xfs/scrub/common.c4
1 files changed, 3 insertions, 1 deletions
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: