Commit 3fa83c7f authored by Shan Hai's avatar Shan Hai Committed by Kleber Sacilotto de Souza

bcache: release dc->writeback_lock properly in bch_writeback_thread()

BugLink: https://bugs.launchpad.net/bugs/1792419

commit 3943b040 upstream.

The writeback thread would exit with a lock held when the cache device
is detached via sysfs interface, fix it by releasing the held lock
before exiting the while-loop.

Fixes: fadd94e0 (bcache: quit dc->writeback_thread when BCACHE_DEV_DETACHING is set)
Signed-off-by: default avatarShan Hai <shan.hai@oracle.com>
Signed-off-by: default avatarColy Li <colyli@suse.de>
Tested-by: default avatarShenghui Wang <shhuiw@foxmail.com>
Cc: stable@vger.kernel.org #4.17+
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: default avatarStefan Bader <stefan.bader@canonical.com>
Signed-off-by: default avatarKleber Sacilotto de Souza <kleber.souza@canonical.com>
parent 6b94de9a
...@@ -462,8 +462,10 @@ static int bch_writeback_thread(void *arg) ...@@ -462,8 +462,10 @@ static int bch_writeback_thread(void *arg)
* data on cache. BCACHE_DEV_DETACHING flag is set in * data on cache. BCACHE_DEV_DETACHING flag is set in
* bch_cached_dev_detach(). * bch_cached_dev_detach().
*/ */
if (test_bit(BCACHE_DEV_DETACHING, &dc->disk.flags)) if (test_bit(BCACHE_DEV_DETACHING, &dc->disk.flags)) {
up_write(&dc->writeback_lock);
break; break;
}
} }
up_write(&dc->writeback_lock); up_write(&dc->writeback_lock);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment