Fix path slots selection in btrfs_search_forward
authorYan <yanzheng@21cn.com>
Thu, 24 Jul 2008 16:19:49 +0000 (12:19 -0400)
committerChris Mason <chris.mason@oracle.com>
Thu, 25 Sep 2008 15:04:05 +0000 (11:04 -0400)
We should decrease the found slot by one as btrfs_search_slot does
when bin_search return 1 and node level > 0.

Signed-off-by: Chris Mason <chris.mason@oracle.com>
fs/btrfs/ctree.c

index f2a94999c3716dab1f8fae1e9f70b58273b06742..ab4ac0365c7f58c46e986b3441b9ef6f865bcd24 100644 (file)
@@ -2992,6 +2992,7 @@ int btrfs_search_forward(struct btrfs_root *root, struct btrfs_key *min_key,
        struct extent_buffer *cur;
        struct btrfs_key found_key;
        int slot;
+       int sret;
        u32 nritems;
        int level;
        int ret = 1;
@@ -3009,7 +3010,7 @@ again:
        while(1) {
                nritems = btrfs_header_nritems(cur);
                level = btrfs_header_level(cur);
-               bin_search(cur, min_key, level, &slot);
+               sret = bin_search(cur, min_key, level, &slot);
 
                /* at level = 0, we're done, setup the path and exit */
                if (level == 0) {
@@ -3018,6 +3019,8 @@ again:
                        btrfs_item_key_to_cpu(cur, &found_key, slot);
                        goto out;
                }
+               if (sret && slot > 0)
+                       slot--;
                /*
                 * check this node pointer against the cache_only and
                 * min_trans parameters.  If it isn't in cache or is too