Revert "bcache: set CACHE_SET_IO_DISABLE in bch_cached_dev_error()"
This reverts commit6147305c73
. Although this patch helps the failed bcache device to stop faster when too many I/O errors detected on corresponding cached device, setting CACHE_SET_IO_DISABLE bit to cache set c->flags was not a good idea. This operation will disable all I/Os on cache set, which means other attached bcache devices won't work neither. Without this patch, the failed bcache device can also be stopped eventually if internal I/O accomplished (e.g. writeback). Therefore here I revert it. Fixes:6147305c73
("bcache: set CACHE_SET_IO_DISABLE in bch_cached_dev_error()") Reported-by: Yong Li <mr.liyong@qq.com> Signed-off-by: Coly Li <colyli@suse.de> Cc: stable@vger.kernel.org Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
0ae49cb7aa
commit
695277f16b
|
@ -1437,8 +1437,6 @@ int bch_flash_dev_create(struct cache_set *c, uint64_t size)
|
|||
|
||||
bool bch_cached_dev_error(struct cached_dev *dc)
|
||||
{
|
||||
struct cache_set *c;
|
||||
|
||||
if (!dc || test_bit(BCACHE_DEV_CLOSING, &dc->disk.flags))
|
||||
return false;
|
||||
|
||||
|
@ -1449,21 +1447,6 @@ bool bch_cached_dev_error(struct cached_dev *dc)
|
|||
pr_err("stop %s: too many IO errors on backing device %s\n",
|
||||
dc->disk.disk->disk_name, dc->backing_dev_name);
|
||||
|
||||
/*
|
||||
* If the cached device is still attached to a cache set,
|
||||
* even dc->io_disable is true and no more I/O requests
|
||||
* accepted, cache device internal I/O (writeback scan or
|
||||
* garbage collection) may still prevent bcache device from
|
||||
* being stopped. So here CACHE_SET_IO_DISABLE should be
|
||||
* set to c->flags too, to make the internal I/O to cache
|
||||
* device rejected and stopped immediately.
|
||||
* If c is NULL, that means the bcache device is not attached
|
||||
* to any cache set, then no CACHE_SET_IO_DISABLE bit to set.
|
||||
*/
|
||||
c = dc->disk.c;
|
||||
if (c && test_and_set_bit(CACHE_SET_IO_DISABLE, &c->flags))
|
||||
pr_info("CACHE_SET_IO_DISABLE already set");
|
||||
|
||||
bcache_device_stop(&dc->disk);
|
||||
return true;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue