summaryrefslogtreecommitdiff
path: root/extent-tree.c
diff options
context:
space:
mode:
Diffstat (limited to 'extent-tree.c')
-rw-r--r--extent-tree.c32
1 files changed, 13 insertions, 19 deletions
diff --git a/extent-tree.c b/extent-tree.c
index 6bc1cc80..3ec57fa5 100644
--- a/extent-tree.c
+++ b/extent-tree.c
@@ -1697,8 +1697,6 @@ int btrfs_write_dirty_block_groups(struct btrfs_trans_handle *trans,
struct extent_io_tree *block_group_cache;
struct btrfs_block_group_cache *cache;
int ret;
- int err = 0;
- int werr = 0;
struct btrfs_path *path;
u64 last = 0;
u64 start;
@@ -1713,30 +1711,26 @@ int btrfs_write_dirty_block_groups(struct btrfs_trans_handle *trans,
while(1) {
ret = find_first_extent_bit(block_group_cache, last,
&start, &end, BLOCK_GROUP_DIRTY);
- if (ret)
- break;
+ if (ret) {
+ if (last == 0)
+ break;
+ last = 0;
+ continue;
+ }
last = end + 1;
ret = get_state_private(block_group_cache, start, &ptr);
- if (ret)
- break;
- cache = (struct btrfs_block_group_cache *)(unsigned long)ptr;
- err = write_one_cache_group(trans, root,
- path, cache);
- /*
- * if we fail to write the cache group, we want
- * to keep it marked dirty in hopes that a later
- * write will work
- */
- if (err) {
- werr = err;
- continue;
- }
+ BUG_ON(ret);
+
clear_extent_bits(block_group_cache, start, end,
BLOCK_GROUP_DIRTY, GFP_NOFS);
+
+ cache = (struct btrfs_block_group_cache *)(unsigned long)ptr;
+ ret = write_one_cache_group(trans, root, path, cache);
+ BUG_ON(ret);
}
btrfs_free_path(path);
- return werr;
+ return 0;
}
static struct btrfs_space_info *__find_space_info(struct btrfs_fs_info *info,