lkml.org 
[lkml]   [2019]   [Jul]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.19 125/271] bcache: check CACHE_SET_IO_DISABLE bit in bch_journal()
    Date
    [ Upstream commit 383ff2183ad16a8842d1fbd9dd3e1cbd66813e64 ]

    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>
    ---
    drivers/md/bcache/journal.c | 4 ++++
    1 file changed, 4 insertions(+)

    diff --git a/drivers/md/bcache/journal.c b/drivers/md/bcache/journal.c
    index f880e5eba8dd..8d4d63b51553 100644
    --- a/drivers/md/bcache/journal.c
    +++ b/drivers/md/bcache/journal.c
    @@ -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;

    --
    2.20.1


    \
     
     \ /
      Last update: 2019-07-25 07:44    [W:2.574 / U:0.428 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site