diff options
author | Alan Huang <mmpgouride@gmail.com> | 2024-08-27 23:14:48 +0800 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2024-09-27 22:32:23 -0400 |
commit | e057a290ef715d2765560778625e1660b7352994 (patch) | |
tree | a4bad53c297e41293809b9b685de8bc2111c5a92 /block/blk-stat.c | |
parent | d50d7a5fa4df3190b6b6c6d6551b631fda4a4ed2 (diff) |
bcachefs: Fix lost wake up
If the reader acquires the read lock and then the writer enters the slow
path, while the reader proceeds to the unlock path, the following scenario
can occur without the change:
writer: pcpu_read_count(lock) return 1 (so __do_six_trylock will return 0)
reader: this_cpu_dec(*lock->readers)
reader: smp_mb()
reader: state = atomic_read(&lock->state) (there is no waiting flag set)
writer: six_set_bitmask()
then the writer will sleep forever.
Signed-off-by: Alan Huang <mmpgouride@gmail.com>
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'block/blk-stat.c')
0 files changed, 0 insertions, 0 deletions