bcache: add separate workqueue for journal_write to avoid deadlock
authorGuoju Fang <fangguoju@gmail.com>
Thu, 27 Sep 2018 15:41:46 +0000 (23:41 +0800)
committerJens Axboe <axboe@kernel.dk>
Thu, 27 Sep 2018 15:47:01 +0000 (09:47 -0600)
commit0f843e65d9eef4936929bb036c5f771fb261eea4
treeb02f7ba31960169e8789a54b3c546d50834b0da9
parentf151ba989d149bbdfc90e5405724bbea094f9b17
bcache: add separate workqueue for journal_write to avoid deadlock

After write SSD completed, bcache schedules journal_write work to
system_wq, which is a public workqueue in system, without WQ_MEM_RECLAIM
flag. system_wq is also a bound wq, and there may be no idle kworker on
current processor. Creating a new kworker may unfortunately need to
reclaim memory first, by shrinking cache and slab used by vfs, which
depends on bcache device. That's a deadlock.

This patch create a new workqueue for journal_write with WQ_MEM_RECLAIM
flag. It's rescuer thread will work to avoid the deadlock.

Signed-off-by: Guoju Fang <fangguoju@gmail.com>
Cc: stable@vger.kernel.org
Signed-off-by: Coly Li <colyli@suse.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/md/bcache/bcache.h
drivers/md/bcache/journal.c
drivers/md/bcache/super.c