]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
xfs: set xfarray killable sort correctly
authorDarrick J. Wong <djwong@kernel.org>
Tue, 14 Jul 2026 06:06:12 +0000 (23:06 -0700)
committerCarlos Maiolino <cem@kernel.org>
Tue, 14 Jul 2026 09:01:47 +0000 (11:01 +0200)
LOLLM noticed that we *disable* interruptible sorts when the KILLABLE
flag is set.  This is backwards.  Fix the incorrect logic, and rename
the variable to make the connection more obvious.

Cc: stable@vger.kernel.org # v6.10
Fixes: 271557de7cbfde ("xfs: reduce the rate of cond_resched calls inside scrub")
Signed-off-by: "Darrick J. Wong" <djwong@kernel.org>
Assisted-by: LOLLM # finding obvious bugs
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Carlos Maiolino <cem@kernel.org>
fs/xfs/scrub/scrub.h
fs/xfs/scrub/xfarray.c

index a3f1abc91390351e5cdb60847cec71062aec97a5..6d7d3523b71f25034804c55ac90f69419586aa4d 100644 (file)
@@ -11,7 +11,7 @@ struct xfs_scrub;
 struct xchk_relax {
        unsigned long   next_resched;
        unsigned int    resched_nr;
-       bool            interruptible;
+       bool            killable;
 };
 
 /* Yield to the scheduler at most 10x per second. */
@@ -21,7 +21,7 @@ struct xchk_relax {
        (struct xchk_relax){ \
                .next_resched   = XCHK_RELAX_NEXT, \
                .resched_nr     = 0, \
-               .interruptible  = true, \
+               .killable       = true, \
        }
 
 /*
@@ -45,7 +45,7 @@ static inline int xchk_maybe_relax(struct xchk_relax *widget)
                widget->next_resched = XCHK_RELAX_NEXT;
        }
 
-       if (widget->interruptible && fatal_signal_pending(current))
+       if (widget->killable && fatal_signal_pending(current))
                return -EINTR;
 
        return 0;
index c7c4a71b6fa7c65595c035f376fe6ef8718584a8..2ce24bfe4c0fab63ab1c315181052f7751811869 100644 (file)
@@ -487,8 +487,7 @@ xfarray_sortinfo_alloc(
        xfarray_sortinfo_lo(si)[0] = 0;
        xfarray_sortinfo_hi(si)[0] = array->nr - 1;
        si->relax = INIT_XCHK_RELAX;
-       if (flags & XFARRAY_SORT_KILLABLE)
-               si->relax.interruptible = false;
+       si->relax.killable = !!(flags & XFARRAY_SORT_KILLABLE);
 
        trace_xfarray_sort(si, nr_bytes);
        *infop = si;