• Boris Burkov's avatar
    btrfs: warn on invalid slot in tree mod log rewind · 95c8e349
    Boris Burkov authored
    The way that tree mod log tracks the ultimate length of the eb, the
    variable 'n', eventually turns up the correct value, but at intermediate
    steps during the rewind, n can be inaccurate as a representation of the
    end of the eb. For example, it doesn't get updated on move rewinds, and
    it does get updated for add/remove in the middle of the eb.
    
    To detect cases with invalid moves, introduce a separate variable called
    max_slot which tries to track the maximum valid slot in the rewind eb.
    We can then warn if we do a move whose src range goes beyond the max
    valid slot.
    
    There is a commented caveat that it is possible to have this value be an
    overestimate due to the challenge of properly handling 'add' operations
    in the middle of the eb, but in practice it doesn't cause enough of a
    problem to throw out the max idea in favor of tracking every valid slot.
    
    CC: stable@vger.kernel.org # 5.15+
    Reviewed-by: default avatarFilipe Manana <fdmanana@suse.com>
    Signed-off-by: default avatarBoris Burkov <boris@bur.io>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    95c8e349
tree-mod-log.c 25.2 KB