Re: [PATCH v1] rust: time: fix as_micros_ceil() rounding near i64::MAX

FUJITA Tomonori <[email protected]> Thu, 06 Aug 2026 17:23:19 +0900 (JST)
Newsgroups org.kernel.vger.rust-for-linux
Message-ID <[email protected]>
On Wed, 05 Aug 2026 13:39:43 +0200
Andreas Hindborg <[email protected]> wrote:

> "FUJITA Tomonori" <[email protected]> writes:
> 
>> From: FUJITA Tomonori <[email protected]>
>>
>> The ceiling adjustment used saturating_add(NSEC_PER_USEC - 1) before
>> dividing. Once the nanosecond value gets within NSEC_PER_USEC - 1 of
>> i64::MAX the addition saturates to i64::MAX, which drops the ceiling
>> bias and yields a result one microsecond too small.
>>
>> Fixes: fae0cdc12340 ("rust: time: Introduce Delta type")
>> Reported-by: Miguel Ojeda <[email protected]>
>> Closes: https://lore.kernel.org/rust-for-linux/CANiq72mtS0ABA2JnT5tpz6J9c_mnxY+vyPvghV_ukngWvN8F2w@mail.gmail.com/
>> Signed-off-by: FUJITA Tomonori <[email protected]>
> 
> Reviewed-by: Andreas Hindborg <[email protected]>
> 
> It took me a little while to understand this one. Perhaps a few comments
> explaining the boundary conditions could be warranted here?

I added the comments for as_millis_ceil() [1]. You want the similar
comments for as_micros_ceil() too?

Or we could add a small helper for _ceil() and keep the explanation in
one place.

[1] https://lore.kernel.org/rust-for-linux/[email protected]/