• Zhang Yi's avatar
    jbd2: correct the end of the journal recovery scan range · 2dfba3bb
    Zhang Yi authored
    We got a filesystem inconsistency issue below while running generic/475
    I/O failure pressure test with fast_commit feature enabled.
    
     Symlink /p3/d3/d1c/d6c/dd6/dce/l101 (inode #132605) is invalid.
    
    If fast_commit feature is enabled, a special fast_commit journal area is
    appended to the end of the normal journal area. The journal->j_last
    point to the first unused block behind the normal journal area instead
    of the whole log area, and the journal->j_fc_last point to the first
    unused block behind the fast_commit journal area. While doing journal
    recovery, do_one_pass(PASS_SCAN) should first scan the normal journal
    area and turn around to the first block once it meet journal->j_last,
    but the wrap() macro misuse the journal->j_fc_last, so the recovering
    could not read the next magic block (commit block perhaps) and would end
    early mistakenly and missing tN and every transaction after it in the
    following example. Finally, it could lead to filesystem inconsistency.
    
     | normal journal area                             | fast commit area |
     +-------------------------------------------------+------------------+
     | tN(rere) | tN+1 |~| tN-x |...| tN-1 | tN(front) |       ....       |
     +-------------------------------------------------+------------------+
                         /                             /                  /
                    start               journal->j_last journal->j_fc_last
    
    This patch fix it by use the correct ending journal->j_last.
    
    Fixes: 5b849b5f ("jbd2: fast commit recovery path")
    Cc: stable@kernel.org
    Reported-by: default avatarTheodore Ts'o <tytso@mit.edu>
    Link: https://lore.kernel.org/linux-ext4/20230613043120.GB1584772@mit.edu/Signed-off-by: default avatarZhang Yi <yi.zhang@huawei.com>
    Reviewed-by: default avatarJan Kara <jack@suse.cz>
    Link: https://lore.kernel.org/r/20230626073322.3956567-1-yi.zhang@huaweicloud.comSigned-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
    2dfba3bb
recovery.c 23.9 KB