• Filipe Manana's avatar
    Btrfs: correctly determine if blocks are shared in btrfs_compare_trees · 6baa4293
    Filipe Manana authored
    Just comparing the pointers (logical disk addresses) of the btree nodes is
    not completely bullet proof, we have to check if their generation numbers
    match too.
    
    It is guaranteed that a COW operation will result in a block with a different
    logical disk address than the original block's address, but over time we can
    reuse that former logical disk address.
    
    For example, creating a 2Gb filesystem on a loop device, and having a script
    running in a loop always updating the access timestamp of a file, resulted in
    the same logical disk address being reused for the same fs btree block in about
    only 4 minutes.
    
    This could make us skip entire subtrees when doing an incremental send (which
    is currently the only user of btrfs_compare_trees). However the odds of getting
    2 blocks at the same tree level, with the same logical disk address, equal first
    slot keys and different generations, should hopefully be very low.
    Signed-off-by: default avatarFilipe David Borba Manana <fdmanana@gmail.com>
    Signed-off-by: default avatarJosef Bacik <jbacik@fb.com>
    6baa4293
ctree.c 154 KB