From: Coly Li <col...@suse.de>

commit 695277f16b3a102fcc22c97fdf2de77c7b19f0b3 upstream.

This reverts commit 6147305c73e4511ca1a975b766b97a779d442567.

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: 6147305c73e4 ("bcache: set CACHE_SET_IO_DISABLE in 
bch_cached_dev_error()")
Reported-by: Yong Li <mr.liy...@qq.com>
Signed-off-by: Coly Li <col...@suse.de>
Cc: sta...@vger.kernel.org
Signed-off-by: Jens Axboe <ax...@kernel.dk>
Signed-off-by: Greg Kroah-Hartman <gre...@linuxfoundation.org>

---
 drivers/md/bcache/super.c |   17 -----------------
 1 file changed, 17 deletions(-)

--- a/drivers/md/bcache/super.c
+++ b/drivers/md/bcache/super.c
@@ -1423,8 +1423,6 @@ int bch_flash_dev_create(struct cache_se
 
 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;
 
@@ -1435,21 +1433,6 @@ bool bch_cached_dev_error(struct cached_
        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;
 }


Reply via email to