lkml.org 
[lkml]   [2019]   [Mar]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 4.14 029/123] jbd2: fix invalid descriptor block checksum
    Date
    From: luojiajun <luojiajun3@huawei.com>

    [ Upstream commit 6e876c3dd205d30b0db6850e97a03d75457df007 ]

    In jbd2_journal_commit_transaction(), if we are in abort mode,
    we may flush the buffer without setting descriptor block checksum
    by goto start_journal_io. Then fs is mounted,
    jbd2_descriptor_block_csum_verify() failed.

    [ 271.379811] EXT4-fs (vdd): shut down requested (2)
    [ 271.381827] Aborting journal on device vdd-8.
    [ 271.597136] JBD2: Invalid checksum recovering block 22199 in log
    [ 271.598023] JBD2: recovery failed
    [ 271.598484] EXT4-fs (vdd): error loading journal

    Fix this problem by keep setting descriptor block checksum if the
    descriptor buffer is not NULL.

    This checksum problem can be reproduced by xfstests generic/388.

    Signed-off-by: luojiajun <luojiajun3@huawei.com>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    fs/jbd2/commit.c | 6 ++++--
    1 file changed, 4 insertions(+), 2 deletions(-)

    diff --git a/fs/jbd2/commit.c b/fs/jbd2/commit.c
    index 3c1c31321d9b..d11401afd52f 100644
    --- a/fs/jbd2/commit.c
    +++ b/fs/jbd2/commit.c
    @@ -693,9 +693,11 @@ void jbd2_journal_commit_transaction(journal_t *journal)
    the last tag we set up. */

    tag->t_flags |= cpu_to_be16(JBD2_FLAG_LAST_TAG);
    -
    - jbd2_descriptor_block_csum_set(journal, descriptor);
    start_journal_io:
    + if (descriptor)
    + jbd2_descriptor_block_csum_set(journal,
    + descriptor);
    +
    for (i = 0; i < bufs; i++) {
    struct buffer_head *bh = wbuf[i];
    /*
    --
    2.19.1
    \
     
     \ /
      Last update: 2019-03-27 20:09    [W:3.315 / U:0.648 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site