xfs: don't retry repairs harder when EAGAIN is returned
authorDarrick J. Wong <djwong@kernel.org>
Mon, 7 Nov 2022 01:03:17 +0000 (17:03 -0800)
committerDarrick J. Wong <djwong@kernel.org>
Wed, 16 Nov 2022 23:25:02 +0000 (15:25 -0800)
Repair functions will not return EAGAIN -- if they were not able to
obtain resources, they should return EDEADLOCK (like the rest of online
fsck) to signal that we need to grab all the resources and try again.
Hence we don't need to deal with this case except as a debugging
assertion.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
fs/xfs/scrub/repair.c

index 22335619c84e7ef1a8bd572250453a385888d6e7..7323bd9fddfb2292ff39ebdd13804a0e816afb64 100644 (file)
@@ -61,7 +61,6 @@ xrep_attempt(
                sc->flags |= XREP_ALREADY_FIXED;
                return -EAGAIN;
        case -EDEADLOCK:
-       case -EAGAIN:
                /* Tell the caller to try again having grabbed all the locks. */
                if (!(sc->flags & XCHK_TRY_HARDER)) {
                        sc->flags |= XCHK_TRY_HARDER;
@@ -74,6 +73,11 @@ xrep_attempt(
                 */
                return -EFSCORRUPTED;
        default:
+               /*
+                * EAGAIN tells the caller to re-scrub, so we cannot return
+                * that here.
+                */
+               ASSERT(error != -EAGAIN);
                return error;
        }
 }