diff options
author | Yan Zheng <zheng.yan@oracle.com> | 2009-07-24 12:42:46 -0400 |
---|---|---|
committer | Chris Mason <chris.mason@oracle.com> | 2009-07-24 12:42:46 -0400 |
commit | d717aa1d31c36cb56059e97966cb76f0be021969 (patch) | |
tree | bb3f8aafe721504c329d448f84f3b3868e056413 /fs | |
parent | 0a4eefbb745ec0e8a5b694ae3f40cc34082d8f61 (diff) |
Btrfs: Avoid delayed reference update looping
btrfs_split_leaf and btrfs_del_items can end up in a loop
where one is constantly spliting a given leaf and the other
is constantly merging it back with the adjacent nodes.
There is a better fix for this, but in the interest of something
small, this patch just changes btrfs_del_items back to balancing less
often.
Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/btrfs/ctree.c | 5 |
1 files changed, 1 insertions, 4 deletions
diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c index 978449af4ccd..3fdcc0512d3a 100644 --- a/fs/btrfs/ctree.c +++ b/fs/btrfs/ctree.c | |||
@@ -1040,9 +1040,6 @@ static noinline int balance_level(struct btrfs_trans_handle *trans, | |||
1040 | BTRFS_NODEPTRS_PER_BLOCK(root) / 4) | 1040 | BTRFS_NODEPTRS_PER_BLOCK(root) / 4) |
1041 | return 0; | 1041 | return 0; |
1042 | 1042 | ||
1043 | if (btrfs_header_nritems(mid) > 2) | ||
1044 | return 0; | ||
1045 | |||
1046 | if (btrfs_header_nritems(mid) < 2) | 1043 | if (btrfs_header_nritems(mid) < 2) |
1047 | err_on_enospc = 1; | 1044 | err_on_enospc = 1; |
1048 | 1045 | ||
@@ -3796,7 +3793,7 @@ int btrfs_del_items(struct btrfs_trans_handle *trans, struct btrfs_root *root, | |||
3796 | } | 3793 | } |
3797 | 3794 | ||
3798 | /* delete the leaf if it is mostly empty */ | 3795 | /* delete the leaf if it is mostly empty */ |
3799 | if (used < BTRFS_LEAF_DATA_SIZE(root) / 2) { | 3796 | if (used < BTRFS_LEAF_DATA_SIZE(root) / 3) { |
3800 | /* push_leaf_left fixes the path. | 3797 | /* push_leaf_left fixes the path. |
3801 | * make sure the path still points to our leaf | 3798 | * make sure the path still points to our leaf |
3802 | * for possible call to del_ptr below | 3799 | * for possible call to del_ptr below |