mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 19:30:30 +09:00
bcache: check CACHE_SET_IO_DISABLE bit in bch_journal()
[ Upstream commit 383ff2183a ]
When too many I/O errors happen on cache set and CACHE_SET_IO_DISABLE
bit is set, bch_journal() may continue to work because the journaling
bkey might be still in write set yet. The caller of bch_journal() may
believe the journal still work but the truth is in-memory journal write
set won't be written into cache device any more. This behavior may
introduce potential inconsistent metadata status.
This patch checks CACHE_SET_IO_DISABLE bit at the head of bch_journal(),
if the bit is set, bch_journal() returns NULL immediately to notice
caller to know journal does not work.
Signed-off-by: Coly Li <colyli@suse.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
57cfb755c3
commit
d81080a0bc
@@ -810,6 +810,10 @@ atomic_t *bch_journal(struct cache_set *c,
|
||||
struct journal_write *w;
|
||||
atomic_t *ret;
|
||||
|
||||
/* No journaling if CACHE_SET_IO_DISABLE set already */
|
||||
if (unlikely(test_bit(CACHE_SET_IO_DISABLE, &c->flags)))
|
||||
return NULL;
|
||||
|
||||
if (!CACHE_SYNC(&c->sb))
|
||||
return NULL;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user