linux/drivers/md/bcache
Coly Li 9e23ccf8f0 bcache: asynchronous devices registration
When there is a lot of data cached on cache device, the bcach internal
btree can take a very long to validate during the backing device and
cache device registration. In my test, it may takes 55+ minutes to check
all the internal btree nodes.

The problem is that the registration is invoked by udev rules and the
udevd has 180 seconds timeout by default. If the btree node checking
time is longer than udevd timeout, the registering  process will be
killed by udevd with SIGKILL. If the registering process has pending
sigal, creating kthread for bcache will fail and the device registration
will fail. The result is, for bcache device which cached a lot of data
on cache device, the bcache device node like /dev/bcache<N> won't create
always due to the very long btree checking time.

A solution to avoid the udevd 180 seconds timeout is to register devices
in an asynchronous way. Which is, after writing cache or backing device
path into /sys/fs/bcache/register_async, the kernel code will create a
kworker and move all the btree node checking (for cache device) or dirty
data counting (for cached device) in the kwork context. Then the kworder
is scheduled on system_wq and the registration code just returned to
user space udev rule task. By this asynchronous way, the udev task for
bcache rule will complete in seconds, no matter how long time spent in
the kworker context, it won't be killed by udevd for a timeout.

After all the checking and counting are done asynchronously in the
kworker, the bcache device will eventually be created successfully.

This patch does the above chagne and add a register sysfs file
/sys/fs/bcache/register_async. Writing the registering device path into
this sysfs file will do the asynchronous registration.

The register_async interface is for very rare condition and won't be
used for common users. In future I plan to make the asynchronous
registration as default behavior, which depends on feedback for this
patch.

Signed-off-by: Coly Li <colyli@suse.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
2020-05-27 05:19:36 -06:00
..
alloc.c Revert "bcache: ignore pending signals when creating gc and allocator thread" 2020-03-02 20:01:32 -07:00
bcache.h bcache: Convert pr_<level> uses to a more typical style 2020-05-27 05:19:36 -06:00
bset.c bcache: Convert pr_<level> uses to a more typical style 2020-05-27 05:19:36 -06:00
bset.h bcache: explicity type cast in bset_bkey_last() 2020-02-01 07:55:39 -07:00
btree.c bcache: Convert pr_<level> uses to a more typical style 2020-05-27 05:19:36 -06:00
btree.h bcache: remove dupplicated declaration from btree.h 2020-03-24 19:56:42 -06:00
closure.c bcache: don't export symbols 2019-11-13 15:42:51 -07: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 an error code in bch_dump_read() 2019-09-03 08:08:29 -06:00
debug.h bcache: add identifier names to arguments of function definitions 2018-08-11 15:46:41 -06:00
extents.c bcache: Convert pr_<level> uses to a more typical style 2020-05-27 05:19:36 -06:00
extents.h bcache: add identifier names to arguments of function definitions 2018-08-11 15:46:41 -06:00
io.c bcache: Convert pr_<level> uses to a more typical style 2020-05-27 05:19:36 -06:00
journal.c bcache: Convert pr_<level> uses to a more typical style 2020-05-27 05:19:36 -06:00
journal.h Revert "bcache: fix fifo index swapping condition in journal_pin_cmp()" 2019-11-18 08:35:47 -07:00
Kconfig treewide: Add SPDX license identifier - Makefile/Kconfig 2019-05-21 10:50:46 +02:00
Makefile bcache: remove the extra cflags for request.o 2019-11-13 15:42:50 -07:00
movinggc.c bcache: style fix to add a blank line after declarations 2018-08-11 15:46:41 -06:00
request.c bcache: Convert pr_<level> uses to a more typical style 2020-05-27 05:19:36 -06:00
request.h bcache: pass the make_request methods to blk_queue_make_request 2020-03-27 10:23:43 -06:00
stats.c bcache: fix memory corruption in bch_cache_accounting_clear() 2020-02-01 07:55:39 -07:00
stats.h bcache: add identifier names to arguments of function definitions 2018-08-11 15:46:41 -06:00
super.c bcache: asynchronous devices registration 2020-05-27 05:19:36 -06:00
sysfs.c bcache: Convert pr_<level> uses to a more typical style 2020-05-27 05:19:36 -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 bcache: avoid to use bio_for_each_segment_all() in bch_bio_alloc_pages() 2019-02-15 08:40:11 -07:00
util.h bcache: Revert "bcache: fix high CPU occupancy during journal" 2019-06-28 07:39:17 -06:00
writeback.c bcache: Convert pr_<level> uses to a more typical style 2020-05-27 05:19:36 -06:00
writeback.h bcache: make bch_sectors_dirty_init() to be multithreaded 2020-03-22 10:06:57 -06:00