bcache: check CACHE_SET_IO_DISABLE bit in bch_journal()
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>
This commit is contained in:
parent
e775339e1a
commit
383ff2183a
|
@ -811,6 +811,10 @@ atomic_t *bch_journal(struct cache_set *c,
|
||||||
struct journal_write *w;
|
struct journal_write *w;
|
||||||
atomic_t *ret;
|
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))
|
if (!CACHE_SYNC(&c->sb))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue