fs: btrfs: fix btrfs_search_tree invalid results
authorPierre Bourdon <delroth@gmail.com>
Tue, 16 Apr 2019 00:47:14 +0000 (02:47 +0200)
committerTom Rini <trini@konsulko.com>
Fri, 26 Apr 2019 21:53:16 +0000 (17:53 -0400)
commit1627e5e5985d92bebdbfb19ab783eaf69337900e
tree94aaf5fa54cf0e3563f743f586bc33a3d2caac03
parent423eba241d7cb7503bb9c41e02b17e71def86af7
fs: btrfs: fix btrfs_search_tree invalid results

btrfs_search_tree should return the first item in the tree that is
greater or equal to the searched item.

The search algorithm did not properly handle the edge case where the
searched item is higher than the last item of the node but lower than
the first item of the next node. Instead of properly returning the first
item of the next node, it was returning an invalid path pointer
(pointing to a non-existent item after the last item of the node + 1).

This fixes two issues in the btrfs driver:
  - Looking for a ROOT_ITEM could fail if it was the first item of its
    leaf node.
  - Iterating through DIR_INDEX entries (for readdir) could fail if the
    first DIR_INDEX entry was the first item of a leaf node.

Signed-off-by: Pierre Bourdon <delroth@gmail.com>
Cc: Marek Behun <marek.behun@nic.cz>
fs/btrfs/ctree.c