]> git.baikalelectronics.ru Git - kernel.git/commit
bcache: add failure check to run_cache_set() for journal replay
authorColy Li <colyli@suse.de>
Wed, 24 Apr 2019 16:48:34 +0000 (00:48 +0800)
committerJens Axboe <axboe@kernel.dk>
Wed, 24 Apr 2019 16:56:28 +0000 (10:56 -0600)
commit6c549b74e66a2e1a4e4ba3b07f757b9e7e50ec19
treec122d0812e00ab2a9a1ede1ba93caa3badfd2204
parentac328a5ea6839b48eb45c987df0e0ad77a3db4a5
bcache: add failure check to run_cache_set() for journal replay

Currently run_cache_set() has no return value, if there is failure in
bch_journal_replay(), the caller of run_cache_set() has no idea about
such failure and just continue to execute following code after
run_cache_set().  The internal failure is triggered inside
bch_journal_replay() and being handled in async way. This behavior is
inefficient, while failure handling inside bch_journal_replay(), cache
register code is still running to start the cache set. Registering and
unregistering code running as same time may introduce some rare race
condition, and make the code to be more hard to be understood.

This patch adds return value to run_cache_set(), and returns -EIO if
bch_journal_rreplay() fails. Then caller of run_cache_set() may detect
such failure and stop registering code flow immedidately inside
register_cache_set().

If journal replay fails, run_cache_set() can report error immediately
to register_cache_set(). This patch makes the failure handling for
bch_journal_replay() be in synchronized way, easier to understand and
debug, and avoid poetential race condition for register-and-unregister
in same time.

Signed-off-by: Coly Li <colyli@suse.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/md/bcache/super.c