diff options
| author | Yan <yanzheng@21cn.com> | 2008-07-24 12:19:49 -0400 |
|---|---|---|
| committer | Chris Mason <chris.mason@oracle.com> | 2008-09-25 11:04:05 -0400 |
| commit | 9652480bf48500885a30754b4a5c436b5b34456d (patch) | |
| tree | 396958a55cd1be287a093821d916b0c7b86bb5e2 | |
| parent | 445dceb78f3445b9bcade90e93ca35cae6120172 (diff) | |
Fix path slots selection in btrfs_search_forward
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>
| -rw-r--r-- | fs/btrfs/ctree.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c index f2a94999c371..ab4ac0365c7f 100644 --- a/fs/btrfs/ctree.c +++ b/fs/btrfs/ctree.c | |||
| @@ -2992,6 +2992,7 @@ int btrfs_search_forward(struct btrfs_root *root, struct btrfs_key *min_key, | |||
| 2992 | struct extent_buffer *cur; | 2992 | struct extent_buffer *cur; |
| 2993 | struct btrfs_key found_key; | 2993 | struct btrfs_key found_key; |
| 2994 | int slot; | 2994 | int slot; |
| 2995 | int sret; | ||
| 2995 | u32 nritems; | 2996 | u32 nritems; |
| 2996 | int level; | 2997 | int level; |
| 2997 | int ret = 1; | 2998 | int ret = 1; |
| @@ -3009,7 +3010,7 @@ again: | |||
| 3009 | while(1) { | 3010 | while(1) { |
| 3010 | nritems = btrfs_header_nritems(cur); | 3011 | nritems = btrfs_header_nritems(cur); |
| 3011 | level = btrfs_header_level(cur); | 3012 | level = btrfs_header_level(cur); |
| 3012 | bin_search(cur, min_key, level, &slot); | 3013 | sret = bin_search(cur, min_key, level, &slot); |
| 3013 | 3014 | ||
| 3014 | /* at level = 0, we're done, setup the path and exit */ | 3015 | /* at level = 0, we're done, setup the path and exit */ |
| 3015 | if (level == 0) { | 3016 | if (level == 0) { |
| @@ -3018,6 +3019,8 @@ again: | |||
| 3018 | btrfs_item_key_to_cpu(cur, &found_key, slot); | 3019 | btrfs_item_key_to_cpu(cur, &found_key, slot); |
| 3019 | goto out; | 3020 | goto out; |
| 3020 | } | 3021 | } |
| 3022 | if (sret && slot > 0) | ||
| 3023 | slot--; | ||
| 3021 | /* | 3024 | /* |
| 3022 | * check this node pointer against the cache_only and | 3025 | * check this node pointer against the cache_only and |
| 3023 | * min_trans parameters. If it isn't in cache or is too | 3026 | * min_trans parameters. If it isn't in cache or is too |
