• Coly Li's avatar
    bcache: set dc->io_disable to true in conditional_stop_bcache_device() · 4fd8e138
    Coly Li authored
    Commit 7e027ca4 ("bcache: add stop_when_cache_set_failed option to
    backing device") adds stop_when_cache_set_failed option and stops bcache
    device if stop_when_cache_set_failed is auto and there is dirty data on
    broken cache device. There might exists a small time gap that the cache
    set is released and set to NULL but bcache device is not released yet
    (because they are released in parallel). During this time gap, dc->c is
    NULL so CACHE_SET_IO_DISABLE won't be checked, and dc->io_disable is still
    false, so new coming I/O requests will be accepted and directly go into
    backing device as no cache set attached to. If there is dirty data on
    cache device, this behavior may introduce potential inconsistent data.
    
    This patch sets dc->io_disable to true before calling bcache_device_stop()
    to make sure the backing device will reject new coming I/O request as
    well, so even in the small time gap no I/O will directly go into backing
    device to corrupt data consistency.
    
    Fixes: 7e027ca4 ("bcache: add stop_when_cache_set_failed option to backing device")
    Signed-off-by: default avatarColy Li <colyli@suse.de>
    Reviewed-by: default avatarHannes Reinecke <hare@suse.com>
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    4fd8e138
super.c 56.9 KB