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?