Re: [PATCH] mm/page-writeback: avoid 32-bit overflow in dirty threshold shares
From: Andrew Morton
Date: Tue Oct 20 2026 - 21:58:22 EST
On Wed, 21 Oct 2026 01:30:46 +0000 Hungyu Lin <dennylin0707@xxxxxxxxx> wrote:
> The ratios used by __wb_calc_thresh() are scaled to parts per million,
> but the threshold and ratio operands are unsigned long. On 32-bit
> kernels, their multiplication can wrap before the result is assigned
> to u64.
>
> For example, with a threshold of 25600 pages and the default maximum
> ratio of 1000000, wb_max_thresh becomes 4125 pages instead of 25600.
> The shared threshold and minimum share calculations can overflow in
> the same way, producing incorrect per-writeback dirty limits.
>
> Promote the threshold before each ratio multiplication and use
> div_u64() to retain the existing division order and rounding.
Checks out, thanks.
As usual, the need for typecasting is a signal that we're using the
wrong types. It's better to reexamine those typing choices, rather
than casting away previous mistakes.
I think that if you add a new
u64 threshold = thresh;
then use that, things will turn out more cleanly?