]> git.baikalelectronics.ru Git - kernel.git/commit
bcache: improve multithreaded bch_btree_check()
authorColy Li <colyli@suse.de>
Tue, 24 May 2022 10:23:33 +0000 (18:23 +0800)
committerJens Axboe <axboe@kernel.dk>
Tue, 24 May 2022 12:19:33 +0000 (06:19 -0600)
commite4c25aeccfc3a690b1b051dd6a4913d5f84389d8
tree49f62a72b3ffaf573f93726f69afd0f03d94f97a
parentc243e0685508a75825cc2ac3475de3e313ca1849
bcache: improve multithreaded bch_btree_check()

Commit 7145c87c3d76 ("bcache: make bch_btree_check() to be
multithreaded") makes bch_btree_check() to be much faster when checking
all btree nodes during cache device registration. But it isn't in ideal
shap yet, still can be improved.

This patch does the following thing to improve current parallel btree
nodes check by multiple threads in bch_btree_check(),
- Add read lock to root node while checking all the btree nodes with
  multiple threads. Although currently it is not mandatory but it is
  good to have a read lock in code logic.
- Remove local variable 'char name[32]', and generate kernel thread name
  string directly when calling kthread_run().
- Allocate local variable "struct btree_check_state check_state" on the
  stack and avoid unnecessary dynamic memory allocation for it.
- Reduce BCH_BTR_CHKTHREAD_MAX from 64 to 12 which is enough indeed.
- Increase check_state->started to count created kernel thread after it
  succeeds to create.
- When wait for all checking kernel threads to finish, use wait_event()
  to replace wait_event_interruptible().

With this change, the code is more clear, and some potential error
conditions are avoided.

Fixes: 7145c87c3d76 ("bcache: make bch_btree_check() to be multithreaded")
Signed-off-by: Coly Li <colyli@suse.de>
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/r/20220524102336.10684-2-colyli@suse.de
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/md/bcache/btree.c
drivers/md/bcache/btree.h