diff options
author | Yan, Zheng <zheng.yan@oracle.com> | 2010-02-01 03:41:17 +0100 |
---|---|---|
committer | Chris Mason <chris.mason@oracle.com> | 2010-02-04 17:31:45 +0100 |
commit | 7a7965f83e89f0be506a96769938a721e4e5ae50 (patch) | |
tree | be4ffe67af162c6c7cfd0780c507fd5f2d522635 /fs/btrfs | |
parent | Btrfs: remove BUG_ON() due to mounting bad filesystem (diff) | |
download | linux-7a7965f83e89f0be506a96769938a721e4e5ae50.tar.xz linux-7a7965f83e89f0be506a96769938a721e4e5ae50.zip |
Btrfs: Fix oopsen when dropping empty tree.
When dropping a empty tree, walk_down_tree() skips checking
extent information for the tree root. This will triggers a
BUG_ON in walk_up_proc().
Signed-off-by: Yan Zheng <zheng.yan@oracle.com>
Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to 'fs/btrfs')
-rw-r--r-- | fs/btrfs/extent-tree.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index 432a2da4641e..559f72489b3b 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c @@ -5402,10 +5402,6 @@ static noinline int walk_down_tree(struct btrfs_trans_handle *trans, int ret; while (level >= 0) { - if (path->slots[level] >= - btrfs_header_nritems(path->nodes[level])) - break; - ret = walk_down_proc(trans, root, path, wc, lookup_info); if (ret > 0) break; @@ -5413,6 +5409,10 @@ static noinline int walk_down_tree(struct btrfs_trans_handle *trans, if (level == 0) break; + if (path->slots[level] >= + btrfs_header_nritems(path->nodes[level])) + break; + ret = do_walk_down(trans, root, path, wc, &lookup_info); if (ret > 0) { path->slots[level]++; |