On Wed, Mar 17, 2021 at 05:23:31PM +0100, Jan Kara wrote: > [Upstream commit ce9f24cccdc019229b70a5c15e2b09ad9c0ab5d1] > > Currently, system zones just track ranges of block, that are "important" > fs metadata (bitmaps, group descriptors, journal blocks, etc.). This > however complicates how extent tree (or indirect blocks) can be checked > for inodes that actually track such metadata - currently the journal > inode but arguably we should be treating quota files or resize inode > similarly. We cannot run __ext4_ext_check() on such metadata inodes when > loading their extents as that would immediately trigger the validity > checks and so we just hack around that and special-case the journal > inode. This however leads to a situation that a journal inode which has > extent tree of depth at least one can have invalid extent tree that gets > unnoticed until ext4_cache_extents() crashes. > > To overcome this limitation, track inode number each system zone belongs > to (0 is used for zones not belonging to any inode). We can then verify > inode number matches the expected one when verifying extent tree and > thus avoid the false errors. With this there's no need to to > special-case journal inode during extent tree checking anymore so remove > it. > > Fixes: 0a944e8a6c66 ("ext4: don't perform block validity checks on the journal inode") > Reported-by: Wolfgang Frisch <wolfgang.frisch@xxxxxxxx> > Reviewed-by: Lukas Czerner <lczerner@xxxxxxxxxx> > Signed-off-by: Jan Kara <jack@xxxxxxx> > Link: https://lore.kernel.org/r/20200728130437.7804-4-jack@xxxxxxx > Signed-off-by: Theodore Ts'o <tytso@xxxxxxx> Now queued up, thanks! greg k-h