• Filipe David Borba Manana's avatar
    Btrfs: fix btrfs_search_slot_for_read backwards iteration · 23c6bf6a
    Filipe David Borba Manana authored
    If the current path's leaf slot is 0, we do search for the previous
    leaf (via btrfs_prev_leaf) and set the new path's leaf slot to a
    value corresponding to the number of items - 1 of the former leaf.
    Fix this by using the slot set by btrfs_prev_leaf, decrementing it
    by 1 if it's equal to the leaf's number of items.
    Use of btrfs_search_slot_for_read() for backward iteration is used in
    particular by the send feature, which could miss items when the input
    leaf has less items than its previous leaf.
    This could be reproduced by running btrfs/007 from xfstests in a loop.
    Signed-off-by: default avatarFilipe David Borba Manana <fdmanana@gmail.com>
    Signed-off-by: default avatarChris Mason <clm@fb.com>