lkml.org 
[lkml]   [2022]   [Oct]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.15 488/530] blk-throttle: prevent overflow while calculating wait time
    Date
    From: Yu Kuai <yukuai3@huawei.com>

    [ Upstream commit 8d6bbaada2e0a65f9012ac4c2506460160e7237a ]

    There is a problem found by code review in tg_with_in_bps_limit() that
    'bps_limit * jiffy_elapsed_rnd' might overflow. Fix the problem by
    calling mul_u64_u64_div_u64() instead.

    Signed-off-by: Yu Kuai <yukuai3@huawei.com>
    Acked-by: Tejun Heo <tj@kernel.org>
    Link: https://lore.kernel.org/r/20220829022240.3348319-3-yukuai1@huaweicloud.com
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    block/blk-throttle.c | 8 +++-----
    1 file changed, 3 insertions(+), 5 deletions(-)

    diff --git a/block/blk-throttle.c b/block/blk-throttle.c
    index 7c4e7993ba97..68cf8dbb4c67 100644
    --- a/block/blk-throttle.c
    +++ b/block/blk-throttle.c
    @@ -950,7 +950,7 @@ static bool tg_with_in_bps_limit(struct throtl_grp *tg, struct bio *bio,
    u64 bps_limit, unsigned long *wait)
    {
    bool rw = bio_data_dir(bio);
    - u64 bytes_allowed, extra_bytes, tmp;
    + u64 bytes_allowed, extra_bytes;
    unsigned long jiffy_elapsed, jiffy_wait, jiffy_elapsed_rnd;
    unsigned int bio_size = throtl_bio_data_size(bio);

    @@ -967,10 +967,8 @@ static bool tg_with_in_bps_limit(struct throtl_grp *tg, struct bio *bio,
    jiffy_elapsed_rnd = tg->td->throtl_slice;

    jiffy_elapsed_rnd = roundup(jiffy_elapsed_rnd, tg->td->throtl_slice);
    -
    - tmp = bps_limit * jiffy_elapsed_rnd;
    - do_div(tmp, HZ);
    - bytes_allowed = tmp;
    + bytes_allowed = mul_u64_u64_div_u64(bps_limit, (u64)jiffy_elapsed_rnd,
    + (u64)HZ);

    if (tg->bytes_disp[rw] + bio_size <= bytes_allowed) {
    if (wait)
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-10-24 18:54    [W:2.913 / U:0.064 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site