Fwd: [PATCH] badblocks: Fix a nonsense WARN_ON() which checks whether a u64 variable < 0

Coly Li
2025-03-09T17:30:56Z

Hi Jens,

Could you please take a look at it and pick this patch into the for-6.15/block branch? The patch is generated based on the for-6.15/block branch.

Thanks in advance.

Coly Li

> From: Coly Li <colyli@kernel.org>
>
> In _badblocks_check(), there are lines of code like this,
> 1246 sectors -= len;
> [snipped]
> 1251 WARN_ON(sectors < 0);
>
> The WARN_ON() at line 1257 doesn't make sense because sectors is
> unsigned long long type and never to be <0.
>
> Fix it by checking directly checking whether sectors is less than len.
>
> Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
> Signed-off-by: Coly Li <colyli@kernel.org>
> ---
> block/badblocks.c | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/block/badblocks.c b/block/badblocks.c
> index 673ef068423a..ece64e76fe8f 100644
> --- a/block/badblocks.c
> +++ b/block/badblocks.c
> @@ -1242,14 +1242,15 @@ static int _badblocks_check(struct badblocks *bb, sector_t s, sector_t sectors,
> len = sectors;
>
> update_sectors:
> + /* This situation should never happen */
> + WARN_ON(sectors < len);
> +
> s += len;
> sectors -= len;
>
> if (sectors > 0)
> goto re_check;
>
> - WARN_ON(sectors < 0);
> -
> if (unacked_badblocks > 0)
> rv = -1;
> else if (acked_badblocks > 0)
> --
> 2.47.2
>