linux/drivers/md/bcache
Coly Li 1b4ed920b2 bcache: fix set_at_max_writeback_rate() for multiple attached devices
[ Upstream commit d2d05b8803 ]

Inside set_at_max_writeback_rate() the calculation in following if()
check is wrong,
	if (atomic_inc_return(&c->idle_counter) <
	    atomic_read(&c->attached_dev_nr) * 6)

Because each attached backing device has its own writeback thread
running and increasing c->idle_counter, the counter increates much
faster than expected. The correct calculation should be,
	(counter / dev_nr) < dev_nr * 6
which equals to,
	counter < dev_nr * dev_nr * 6

This patch fixes the above mistake with correct calculation, and helper
routine idle_counter_exceeded() is added to make code be more clear.

Reported-by: Mingzhe Zou <mingzhe.zou@easystack.cn>
Signed-off-by: Coly Li <colyli@suse.de>
Acked-by: Mingzhe Zou <mingzhe.zou@easystack.cn>
Link: https://lore.kernel.org/r/20220919161647.81238-6-colyli@suse.de
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Sasha Levin <sashal@kernel.org>
History 2022-10-26 12:35:48 +02:00
..
alloc.c bcache: remove PTR_CACHE 2021-04-11 08:37:55 -06:00
bcache.h bcache: remove bcache device self-defined readahead 2021-06-08 15:06:03 -06:00
bset.c bcache: Avoid comma separated statements 2021-02-10 08:06:00 -07:00
bset.h bcache: explicity type cast in bset_bkey_last() 2020-02-01 07:55:39 -07:00
btree.c bcache: memset on stack variables in bch_btree_check() and bch_sectors_dirty_init() 2022-07-02 16:41:12 +02:00
btree.h bcache: improve multithreaded bch_btree_check() 2022-06-09 10:23:28 +02:00
closure.c bcache: Convert to DEFINE_SHOW_ATTRIBUTE 2020-10-02 14:25:29 -06:00
closure.h bcache: fix typo in code comments of closure_return_with_destructor() 2018-10-08 08:19:43 -06:00
debug.c bcache: fix a regression of code compiling failure in debug.c 2021-04-11 08:37:56 -06:00
debug.h bcache: add identifier names to arguments of function definitions 2018-08-11 15:46:41 -06:00
extents.c bcache: remove PTR_CACHE 2021-04-11 08:37:55 -06:00
extents.h bcache: add identifier names to arguments of function definitions 2018-08-11 15:46:41 -06:00
features.c bcache: use NULL instead of using plain integer as pointer 2021-04-11 08:37:56 -06:00
features.h bcache: only check feature sets when sb->version >= BCACHE_SB_VERSION_CDEV_WITH_FEATURES 2021-01-28 07:35:07 -07:00
io.c bcache: remove PTR_CACHE 2021-04-11 08:37:55 -06:00
journal.c bcache: avoid journal no-space deadlock by reserving 1 journal bucket 2022-06-09 10:23:29 +02:00
journal.h bcache: avoid journal no-space deadlock by reserving 1 journal bucket 2022-06-09 10:23:29 +02:00
Kconfig block: make the block holder code optional 2021-08-09 11:50:42 -06:00
Makefile bcache: add sysfs file to display feature sets information of cache set 2020-07-25 07:38:21 -06:00
movinggc.c bcache: remove for_each_cache() 2020-10-02 14:25:29 -06:00
request.c md: bcache: check the return value of kzalloc() in detached_dev_do_request() 2022-06-09 10:23:32 +02:00
request.h block: move ->make_request_fn to struct block_device_operations 2020-07-01 07:27:24 -06:00
stats.c bcache: remove bcache device self-defined readahead 2021-06-08 15:06:03 -06:00
stats.h bcache: remove bcache device self-defined readahead 2021-06-08 15:06:03 -06:00
super.c bcache: avoid journal no-space deadlock by reserving 1 journal bucket 2022-06-09 10:23:29 +02:00
sysfs.c bcache: remove bcache device self-defined readahead 2021-06-08 15:06:03 -06:00
sysfs.h bcache: add sysfs_strtoul_bool() for setting bit-field variables 2019-02-09 07:18:32 -07:00
trace.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
util.c treewide: Use fallthrough pseudo-keyword 2020-08-23 17:36:59 -05:00
util.h block: move some macros to blkdev.h 2021-08-11 19:40:28 -06:00
writeback.c bcache: fix set_at_max_writeback_rate() for multiple attached devices 2022-10-26 12:35:48 +02:00
writeback.h bcache: improve multithreaded bch_sectors_dirty_init() 2022-06-09 10:23:28 +02:00