From 21b77a1655502ccbb47e73b6556f0e6715181305 Mon Sep 17 00:00:00 2001 From: Chris Mason Date: Wed, 25 Jun 2008 16:01:30 -0400 Subject: [PATCH] --- yaml --- r: 128808 b: refs/heads/master c: 168fd7d271d9d8e81ff0b03eb08c36d82670c8a9 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/fs/btrfs/ctree.c | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 859209b788a4..3cddc1e6cfb5 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 594a24eb0e7fa8413f8b443863be4b7c72bfde9f +refs/heads/master: 168fd7d271d9d8e81ff0b03eb08c36d82670c8a9 diff --git a/trunk/fs/btrfs/ctree.c b/trunk/fs/btrfs/ctree.c index 9601241e552b..b8f7aecf68d7 100644 --- a/trunk/fs/btrfs/ctree.c +++ b/trunk/fs/btrfs/ctree.c @@ -2999,7 +2999,14 @@ int btrfs_next_leaf(struct btrfs_root *root, struct btrfs_path *path) return ret; nritems = btrfs_header_nritems(path->nodes[0]); + /* + * by releasing the path above we dropped all our locks. A balance + * could have added more items next to the key that used to be + * at the very end of the block. So, check again here and + * advance the path if there are now more items available. + */ if (nritems > 0 && path->slots[0] < nritems - 1) { + path->slots[0]++; goto done; }