• Zhang Yi's avatar
    jbd2: continue to record log between each mount · c7fc6055
    Zhang Yi authored
    
    
    For a newly mounted file system, the journal committing thread always
    record new transactions from the start of the journal area, no matter
    whether the journal was clean or just has been recovered. So the logdump
    code in debugfs cannot dump continuous logs between each mount, it is
    disadvantageous to analysis corrupted file system image and locate the
    file system inconsistency bugs.
    
    If we get a corrupted file system in the running products and want to
    find out what has happened, besides lookup the system log, one effective
    way is to backtrack the journal log. But we may not always run e2fsck
    before each mount and the default fsck -a mode also cannot always
    checkout all inconsistencies, so it could left over some inconsistencies
    into the next mount until we detect it. Finally, transactions in the
    journal may probably discontinuous and some relatively new transactions
    has been covered, it becomes hard to analyse. If we could record
    transactions continuously between each mount, we could acquire more
    useful info from the journal. Like this:
    
     |Previous mount checkpointed/recovered logs|Current mount logs         |
     |{------}{---}{--------} ... {------}| ... |{======}{========}...000000|
    
    And yes the journal area is limited and cannot record everything, the
    problematic transaction may also be covered even if we do this, but
    this is still useful for fuzzy tests and short-running products.
    
    This patch save the head blocknr in the superblock after flushing the
    journal or unmounting the file system, let the next mount could continue
    to record new transaction behind it. This change is backward compatible
    because the old kernel does not care about the head blocknr of the
    journal. It is also fine if we mount a clean old image without valid
    head blocknr, we fail back to set it to s_first just like before.
    Finally, for the case of mount an unclean file system, we could also get
    the journal head easily after scanning/replaying the journal, it will
    continue to record new transaction after the recovered transactions.
    Signed-off-by: default avatarZhang Yi <yi.zhang@huawei.com>
    Reviewed-by: default avatarJan Kara <jack@suse.cz>
    Link: https://lore.kernel.org/r/20230322013353.1843306-2-yi.zhang@huaweicloud.com
    
    Signed-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
    c7fc6055
recovery.c 24.1 KB