From: Yu Kuai <yukuai3@huawei.com>
To: <tj@kernel.org>, <mkoutny@suse.com>, <axboe@kernel.dk>,
<ming.lei@redhat.com>
Cc: <cgroups@vger.kernel.org>, <linux-block@vger.kernel.org>,
<linux-kernel@vger.kernel.org>, <yukuai3@huawei.com>,
<yi.zhang@huawei.com>
Subject: [PATCH -next v4 2/4] blk-throttle: prevent overflow while calculating wait time
Date: Mon, 23 May 2022 16:26:31 +0800 [thread overview]
Message-ID: <20220523082633.2324980-3-yukuai3@huawei.com> (raw)
In-Reply-To: <20220523082633.2324980-1-yukuai3@huawei.com>
in tg_with_in_bps_limit(), 'bps_limit * jiffy_elapsed_rnd' might
overflow, handle the case by calling mul_u64_u64_div_u64() instead.
Signed-off-by: Yu Kuai <yukuai3@huawei.com>
---
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 0c37be08ff28..7e0c31e920dd 100644
--- a/block/blk-throttle.c
+++ b/block/blk-throttle.c
@@ -806,7 +806,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);
@@ -824,10 +824,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.31.1
next prev parent reply other threads:[~2022-05-23 8:13 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-05-23 8:26 [PATCH -next v4 0/4] bugfix for blk-throttle Yu Kuai
2022-05-23 8:26 ` [PATCH -next v4 1/4] blk-throttle: fix that io throttle can only work for single bio Yu Kuai
2022-05-23 8:26 ` Yu Kuai [this message]
2022-05-23 8:26 ` [PATCH -next v4 3/4] blk-throttle: factor out code to calculate ios/bytes_allowed Yu Kuai
2022-05-23 8:26 ` [PATCH -next v4 4/4] blk-throttle: fix io hung due to config updates Yu Kuai
2022-05-24 9:59 ` Michal Koutný
2022-05-24 11:47 ` Yu Kuai
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220523082633.2324980-3-yukuai3@huawei.com \
--to=yukuai3@huawei.com \
--cc=axboe@kernel.dk \
--cc=cgroups@vger.kernel.org \
--cc=linux-block@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=ming.lei@redhat.com \
--cc=mkoutny@suse.com \
--cc=tj@kernel.org \
--cc=yi.zhang@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).