linux/drivers/md/bcache
Coly Li 0f0709e6bf bcache: stop bcache device when backing device is offline
Currently bcache does not handle backing device failure, if backing
device is offline and disconnected from system, its bcache device can still
be accessible. If the bcache device is in writeback mode, I/O requests even
can success if the requests hit on cache device. That is to say, when and
how bcache handles offline backing device is undefined.

This patch tries to handle backing device offline in a rather simple way,
- Add cached_dev->status_update_thread kernel thread to update backing
  device status in every 1 second.
- Add cached_dev->offline_seconds to record how many seconds the backing
  device is observed to be offline. If the backing device is offline for
  BACKING_DEV_OFFLINE_TIMEOUT (30) seconds, set dc->io_disable to 1 and
  call bcache_device_stop() to stop the bache device which linked to the
  offline backing device.

Now if a backing device is offline for BACKING_DEV_OFFLINE_TIMEOUT seconds,
its bcache device will be removed, then user space application writing on
it will get error immediately, and handler the device failure in time.

This patch is quite simple, does not handle more complicated situations.
Once the bcache device is stopped, users need to recovery the backing
device, register and attach it manually.

Changelog:
v3: call wait_for_kthread_stop() before exits kernel thread.
v2: remove "bcache: " prefix when calling pr_warn().
v1: initial version.

Signed-off-by: Coly Li <colyli@suse.de>
Reviewed-by: Hannes Reinecke <hare@suse.com>
Cc: Michael Lyle <mlyle@lyle.org>
Cc: Junhui Tang <tang.junhui@zte.com.cn>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
2018-05-28 14:53:16 -06:00
..
alloc.c bcache: add wait_for_kthread_stop() in bch_allocator_thread() 2018-05-03 08:35:13 -06:00
bcache.h bcache: stop bcache device when backing device is offline 2018-05-28 14:53:16 -06:00
bset.c bcache: Suppress more warnings about set-but-not-used variables 2018-03-18 20:15:20 -06:00
bset.h bcache: Add __printf annotation to __bch_check_keys() 2018-03-18 20:15:20 -06:00
btree.c bcache: Fix kernel-doc warnings 2018-03-18 20:15:20 -06:00
btree.h Merge branch 'for-4.15/block' of git://git.kernel.dk/linux-block 2017-11-14 15:32:19 -08:00
closure.c bcache: Fix kernel-doc warnings 2018-03-18 20:15:20 -06:00
closure.h bcache: move closure debug file into debug directory 2018-03-18 20:15:20 -06:00
debug.c bcache: store disk name in struct cache and struct cached_dev 2018-05-03 08:35:08 -06:00
debug.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
extents.c bcache: Remove an unused variable 2018-03-18 20:15:20 -06:00
extents.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
io.c bcache: store disk name in struct cache and struct cached_dev 2018-05-03 08:35:08 -06:00
journal.c bcache: Reduce the number of sparse complaints about lock imbalances 2018-03-18 20:15:20 -06:00
journal.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
Kconfig bcache: Kill dead cgroup code 2014-03-18 12:22:35 -07:00
Makefile License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
movinggc.c block: move bio_alloc_pages() to bcache 2018-01-06 09:18:00 -07:00
request.c bcache: store disk name in struct cache and struct cached_dev 2018-05-03 08:35:08 -06:00
request.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
stats.c md: Convert timers to use timer_setup() 2017-11-14 20:11:57 -07:00
stats.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
super.c bcache: stop bcache device when backing device is offline 2018-05-28 14:53:16 -06:00
sysfs.c bcache: add io_disable to struct cached_dev 2018-03-18 20:15:20 -06:00
sysfs.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01: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: Fix kernel-doc warnings 2018-03-18 20:15:20 -06:00
util.h bcache: add CACHE_SET_IO_DISABLE to struct cache_set flags 2018-03-18 20:15:20 -06:00
writeback.c bcache: count backing device I/O error for writeback I/O 2018-05-03 08:35:12 -06:00
writeback.h bcache: Fix indentation 2018-03-18 20:15:20 -06:00