Skip to content

Commit 0a944e8

Browse files
committed
ext4: don't perform block validity checks on the journal inode
Since the journal inode is already checked when we added it to the block validity's system zone, if we check it again, we'll just trigger a failure. This was causing failures like this: [ 53.897001] EXT4-fs error (device sda): ext4_find_extent:909: inode #8: comm jbd2/sda-8: pblk 121667583 bad header/extent: invalid extent entries - magic f30a, entries 8, max 340(340), depth 0(0) [ 53.931430] jbd2_journal_bmap: journal block not found at offset 49 on sda-8 [ 53.938480] Aborting journal on device sda-8. ... but only if the system was under enough memory pressure that logical->physical mapping for the journal inode gets pushed out of the extent cache. (This is why it wasn't noticed earlier.) Fixes: 345c0db ("ext4: protect journal inode's blocks using block_validity") Reported-by: Dan Rue <[email protected]> Signed-off-by: Theodore Ts'o <[email protected]> Tested-by: Naresh Kamboju <[email protected]>
1 parent 2c1d0e3 commit 0a944e8

File tree

1 file changed

+8
-4
lines changed

1 file changed

+8
-4
lines changed

fs/ext4/extents.c

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -518,10 +518,14 @@ __read_extent_tree_block(const char *function, unsigned int line,
518518
}
519519
if (buffer_verified(bh) && !(flags & EXT4_EX_FORCE_CACHE))
520520
return bh;
521-
err = __ext4_ext_check(function, line, inode,
522-
ext_block_hdr(bh), depth, pblk);
523-
if (err)
524-
goto errout;
521+
if (!ext4_has_feature_journal(inode->i_sb) ||
522+
(inode->i_ino !=
523+
le32_to_cpu(EXT4_SB(inode->i_sb)->s_es->s_journal_inum))) {
524+
err = __ext4_ext_check(function, line, inode,
525+
ext_block_hdr(bh), depth, pblk);
526+
if (err)
527+
goto errout;
528+
}
525529
set_buffer_verified(bh);
526530
/*
527531
* If this is a leaf block, cache all of its entries

0 commit comments

Comments
 (0)