On Tue 26-02-19 09:31:25, luojiajun wrote: > 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@xxxxxxxxxx> The patch looks good to me. You can add: Reviewed-by: Jan Kara <jack@xxxxxxx> Honza > --- > 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 150cc03..bb47692 100644 > --- a/fs/jbd2/commit.c > +++ b/fs/jbd2/commit.c > @@ -691,9 +691,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); > +start_journal_io: > + if (descriptor) > + jbd2_descriptor_block_csum_set(journal, > + descriptor); > > - jbd2_descriptor_block_csum_set(journal, descriptor); > -start_journal_io: > for (i = 0; i < bufs; i++) { > struct buffer_head *bh = wbuf[i]; > /* > -- > 2.7.4 > > -- Jan Kara <jack@xxxxxxxx> SUSE Labs, CR