X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=block%2Fblk-throttle.c;h=16f5766620a41043645756c51d441f4488af9edf;hb=refs%2Fheads%2Fsandbox%2Fklewandowski%2Frpi5;hp=38a881cf97d0b4d4f8cd6b321ead22d055c46aa7;hpb=4f6cee60453dbb06292907943a185247ef17d584;p=platform%2Fkernel%2Flinux-rpi.git diff --git a/block/blk-throttle.c b/block/blk-throttle.c index 38a881c..16f5766 100644 --- a/block/blk-throttle.c +++ b/block/blk-throttle.c @@ -723,6 +723,12 @@ static unsigned int calculate_io_allowed(u32 iops_limit, static u64 calculate_bytes_allowed(u64 bps_limit, unsigned long jiffy_elapsed) { + /* + * Can result be wider than 64 bits? + * We check against 62, not 64, due to ilog2 truncation. + */ + if (ilog2(bps_limit) + ilog2(jiffy_elapsed) - ilog2(HZ) > 62) + return U64_MAX; return mul_u64_u64_div_u64(bps_limit, (u64)jiffy_elapsed, (u64)HZ); } @@ -1314,6 +1320,7 @@ static void tg_conf_updated(struct throtl_grp *tg, bool global) tg_bps_limit(tg, READ), tg_bps_limit(tg, WRITE), tg_iops_limit(tg, READ), tg_iops_limit(tg, WRITE)); + rcu_read_lock(); /* * Update has_rules[] flags for the updated tg's subtree. A tg is * considered to have rules if either the tg itself or any of its @@ -1341,6 +1348,7 @@ static void tg_conf_updated(struct throtl_grp *tg, bool global) this_tg->latency_target = max(this_tg->latency_target, parent_tg->latency_target); } + rcu_read_unlock(); /* * We're already holding queue_lock and know @tg is valid. Let's