1
0
Fork 0
alistair23-linux/drivers/md/bcache
Guoju Fang fd3572bd5b bcache: fix a lost wake-up problem caused by mca_cannibalize_lock
[ Upstream commit 34cf78bf34 ]

This patch fix a lost wake-up problem caused by the race between
mca_cannibalize_lock and bch_cannibalize_unlock.

Consider two processes, A and B. Process A is executing
mca_cannibalize_lock, while process B takes c->btree_cache_alloc_lock
and is executing bch_cannibalize_unlock. The problem happens that after
process A executes cmpxchg and will execute prepare_to_wait. In this
timeslice process B executes wake_up, but after that process A executes
prepare_to_wait and set the state to TASK_INTERRUPTIBLE. Then process A
goes to sleep but no one will wake up it. This problem may cause bcache
device to dead.

Signed-off-by: Guoju Fang <fangguoju@gmail.com>
Signed-off-by: Coly Li <colyli@suse.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2020-10-01 13:17:18 +02:00
..
Kconfig treewide: Add SPDX license identifier - Makefile/Kconfig 2019-05-21 10:50:46 +02:00
Makefile License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
alloc.c bcache: fix deadlock in bcache_allocator 2019-12-31 16:45:30 +01:00
bcache.h bcache: fix a lost wake-up problem caused by mca_cannibalize_lock 2020-10-01 13:17:18 +02:00
bset.c bcache: allocate meta data pages as compound pages 2020-08-21 13:05:25 +02:00
bset.h bcache: explicity type cast in bset_bkey_last() 2020-02-24 08:37:01 +01:00
btree.c bcache: fix a lost wake-up problem caused by mca_cannibalize_lock 2020-10-01 13:17:18 +02:00
btree.h bcache: fix race in btree_flush_write() 2019-06-28 07:39:18 -06:00
closure.c closures: fix a race on wakeup from closure_sync 2019-09-03 08:08:31 -06:00
closure.h bcache: fix typo in code comments of closure_return_with_destructor() 2018-10-08 08:19:43 -06:00
debug.c bcache: Fix an error code in bch_dump_read() 2019-09-03 08:08:29 -06:00
debug.h bcache: add identifier names to arguments of function definitions 2018-08-11 15:46:41 -06:00
extents.c bcache: treat stale && dirty keys as bad keys 2019-02-09 07:18:31 -07:00
extents.h bcache: add identifier names to arguments of function definitions 2018-08-11 15:46:41 -06:00
io.c bcache: ignore read-ahead request failure on backing device 2019-06-28 07:39:14 -06:00
journal.c bcache: allocate meta data pages as compound pages 2020-08-21 13:05:25 +02:00
journal.h bcache: performance improvement for btree_flush_write() 2019-06-28 07:39:18 -06:00
movinggc.c bcache: style fix to add a blank line after declarations 2018-08-11 15:46:41 -06:00
request.c bcache: add readahead cache policy options via sysfs interface 2020-02-11 04:35:37 -08:00
request.h bcache: Clean up bch_get_congested() 2019-04-24 10:56:27 -06:00
stats.c bcache: fix memory corruption in bch_cache_accounting_clear() 2020-02-24 08:37:01 +01:00
stats.h bcache: add identifier names to arguments of function definitions 2018-08-11 15:46:41 -06:00
super.c bcache: fix a lost wake-up problem caused by mca_cannibalize_lock 2020-10-01 13:17:18 +02:00
sysfs.c bcache: add readahead cache policy options via sysfs interface 2020-02-11 04:35:37 -08:00
sysfs.h bcache: add sysfs_strtoul_bool() for setting bit-field variables 2019-02-09 07:18:32 -07:00
trace.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
util.c bcache: avoid to use bio_for_each_segment_all() in bch_bio_alloc_pages() 2019-02-15 08:40:11 -07:00
util.h bcache: Revert "bcache: fix high CPU occupancy during journal" 2019-06-28 07:39:17 -06:00
writeback.c bcache: fix overflow in offset_to_stripe() 2020-08-21 13:05:25 +02:00
writeback.h bcache: fix overflow in offset_to_stripe() 2020-08-21 13:05:25 +02:00