btrfs-progs: pass @trans to functions working with dirty block groups

We are going to touch dirty_bgs in transaction directly, so every call
chain should pass @trans to the leaf functions.

Reviewed-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: Su Yue <Damenly_Su@gmx.com>
Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
Su Yue 2019-12-18 13:18:47 +08:00 committed by David Sterba
parent a0edc6859e
commit 162d891e4a
6 changed files with 23 additions and 24 deletions

View File

@ -6692,8 +6692,8 @@ static int delete_extent_records(struct btrfs_trans_handle *trans,
u64 bytes = (found_key.type == BTRFS_EXTENT_ITEM_KEY) ? u64 bytes = (found_key.type == BTRFS_EXTENT_ITEM_KEY) ?
found_key.offset : fs_info->nodesize; found_key.offset : fs_info->nodesize;
ret = btrfs_update_block_group(fs_info->extent_root, ret = btrfs_update_block_group(trans, bytenr, bytes,
bytenr, bytes, 0, 0); 0, 0);
if (ret) if (ret)
break; break;
} }
@ -6774,7 +6774,7 @@ static int record_extent(struct btrfs_trans_handle *trans,
} }
btrfs_mark_buffer_dirty(leaf); btrfs_mark_buffer_dirty(leaf);
ret = btrfs_update_block_group(extent_root, rec->start, ret = btrfs_update_block_group(trans, rec->start,
rec->max_size, 1, 0); rec->max_size, 1, 0);
if (ret) if (ret)
goto fail; goto fail;

View File

@ -735,7 +735,7 @@ static int repair_tree_block_ref(struct btrfs_root *root,
} }
btrfs_mark_buffer_dirty(eb); btrfs_mark_buffer_dirty(eb);
printf("Added an extent item [%llu %u]\n", bytenr, node_size); printf("Added an extent item [%llu %u]\n", bytenr, node_size);
btrfs_update_block_group(extent_root, bytenr, node_size, 1, 0); btrfs_update_block_group(trans, bytenr, node_size, 1, 0);
nrefs->refs[level] = 0; nrefs->refs[level] = 0;
nrefs->full_backref[level] = nrefs->full_backref[level] =
@ -3303,8 +3303,8 @@ static int repair_extent_data_item(struct btrfs_root *root,
btrfs_set_extent_flags(eb, ei, BTRFS_EXTENT_FLAG_DATA); btrfs_set_extent_flags(eb, ei, BTRFS_EXTENT_FLAG_DATA);
btrfs_mark_buffer_dirty(eb); btrfs_mark_buffer_dirty(eb);
ret = btrfs_update_block_group(extent_root, disk_bytenr, ret = btrfs_update_block_group(trans, disk_bytenr, num_bytes,
num_bytes, 1, 0); 1, 0);
btrfs_release_path(&path); btrfs_release_path(&path);
} }

View File

@ -1084,7 +1084,7 @@ err:
return ret; return ret;
} }
static int block_group_free_all_extent(struct btrfs_root *root, static int block_group_free_all_extent(struct btrfs_trans_handle *trans,
struct block_group_record *bg) struct block_group_record *bg)
{ {
struct btrfs_block_group_cache *cache; struct btrfs_block_group_cache *cache;
@ -1092,7 +1092,7 @@ static int block_group_free_all_extent(struct btrfs_root *root,
u64 start; u64 start;
u64 end; u64 end;
info = root->fs_info; info = trans->fs_info;
cache = btrfs_lookup_block_group(info, bg->objectid); cache = btrfs_lookup_block_group(info, bg->objectid);
if (!cache) if (!cache)
return -ENOENT; return -ENOENT;
@ -1124,7 +1124,7 @@ static int remove_chunk_extent_item(struct btrfs_trans_handle *trans,
if (ret) if (ret)
return ret; return ret;
ret = block_group_free_all_extent(root, chunk->bg_rec); ret = block_group_free_all_extent(trans, chunk->bg_rec);
if (ret) if (ret)
return ret; return ret;
} }

View File

@ -2572,8 +2572,8 @@ int btrfs_make_block_group(struct btrfs_trans_handle *trans,
u64 type, u64 chunk_offset, u64 size); u64 type, u64 chunk_offset, u64 size);
int btrfs_make_block_groups(struct btrfs_trans_handle *trans, int btrfs_make_block_groups(struct btrfs_trans_handle *trans,
struct btrfs_fs_info *fs_info); struct btrfs_fs_info *fs_info);
int btrfs_update_block_group(struct btrfs_root *root, u64 bytenr, u64 num, int btrfs_update_block_group(struct btrfs_trans_handle *trans, u64 bytenr,
int alloc, int mark_free); u64 num, int alloc, int mark_free);
int btrfs_record_file_extent(struct btrfs_trans_handle *trans, int btrfs_record_file_extent(struct btrfs_trans_handle *trans,
struct btrfs_root *root, u64 objectid, struct btrfs_root *root, u64 objectid,
struct btrfs_inode_item *inode, struct btrfs_inode_item *inode,

View File

@ -1872,9 +1872,10 @@ static int do_chunk_alloc(struct btrfs_trans_handle *trans,
return 0; return 0;
} }
static int update_block_group(struct btrfs_fs_info *info, u64 bytenr, static int update_block_group(struct btrfs_trans_handle *trans, u64 bytenr,
u64 num_bytes, int alloc, int mark_free) u64 num_bytes, int alloc, int mark_free)
{ {
struct btrfs_fs_info *info = trans->fs_info;
struct btrfs_block_group_cache *cache; struct btrfs_block_group_cache *cache;
u64 total = num_bytes; u64 total = num_bytes;
u64 old_val; u64 old_val;
@ -2237,8 +2238,7 @@ static int __free_extent(struct btrfs_trans_handle *trans,
goto fail; goto fail;
} }
update_block_group(trans->fs_info, bytenr, num_bytes, 0, update_block_group(trans, bytenr, num_bytes, 0, mark_free);
mark_free);
} }
fail: fail:
btrfs_free_path(path); btrfs_free_path(path);
@ -2570,8 +2570,7 @@ static int alloc_reserved_tree_block(struct btrfs_trans_handle *trans,
if (ret) if (ret)
return ret; return ret;
ret = update_block_group(fs_info, ins.objectid, fs_info->nodesize, 1, ret = update_block_group(trans, ins.objectid, fs_info->nodesize, 1, 0);
0);
if (sinfo) { if (sinfo) {
if (fs_info->nodesize > sinfo->bytes_reserved) { if (fs_info->nodesize > sinfo->bytes_reserved) {
WARN_ON(1); WARN_ON(1);
@ -3031,12 +3030,11 @@ int btrfs_make_block_groups(struct btrfs_trans_handle *trans,
return 0; return 0;
} }
int btrfs_update_block_group(struct btrfs_root *root, int btrfs_update_block_group(struct btrfs_trans_handle *trans,
u64 bytenr, u64 num_bytes, int alloc, u64 bytenr, u64 num_bytes, int alloc,
int mark_free) int mark_free)
{ {
return update_block_group(root->fs_info, bytenr, num_bytes, return update_block_group(trans, bytenr, num_bytes, alloc, mark_free);
alloc, mark_free);
} }
/* /*
@ -3449,12 +3447,12 @@ int btrfs_fix_block_accounting(struct btrfs_trans_handle *trans)
btrfs_item_key_to_cpu(leaf, &key, slot); btrfs_item_key_to_cpu(leaf, &key, slot);
if (key.type == BTRFS_EXTENT_ITEM_KEY) { if (key.type == BTRFS_EXTENT_ITEM_KEY) {
bytes_used += key.offset; bytes_used += key.offset;
ret = btrfs_update_block_group(root, ret = btrfs_update_block_group(trans,
key.objectid, key.offset, 1, 0); key.objectid, key.offset, 1, 0);
BUG_ON(ret); BUG_ON(ret);
} else if (key.type == BTRFS_METADATA_ITEM_KEY) { } else if (key.type == BTRFS_METADATA_ITEM_KEY) {
bytes_used += fs_info->nodesize; bytes_used += fs_info->nodesize;
ret = btrfs_update_block_group(root, ret = btrfs_update_block_group(trans,
key.objectid, fs_info->nodesize, 1, 0); key.objectid, fs_info->nodesize, 1, 0);
if (ret) if (ret)
goto out; goto out;
@ -3609,7 +3607,7 @@ static int __btrfs_record_file_extent(struct btrfs_trans_handle *trans,
BTRFS_EXTENT_FLAG_DATA); BTRFS_EXTENT_FLAG_DATA);
btrfs_mark_buffer_dirty(leaf); btrfs_mark_buffer_dirty(leaf);
ret = btrfs_update_block_group(root, disk_bytenr, ret = btrfs_update_block_group(trans, disk_bytenr,
num_bytes, 1, 0); num_bytes, 1, 0);
if (ret) if (ret)
goto fail; goto fail;

View File

@ -2338,8 +2338,9 @@ again:
return 0; return 0;
} }
static void fixup_block_groups(struct btrfs_fs_info *fs_info) static void fixup_block_groups(struct btrfs_trans_handle *trans)
{ {
struct btrfs_fs_info *fs_info = trans->fs_info;
struct btrfs_block_group_cache *bg; struct btrfs_block_group_cache *bg;
struct btrfs_mapping_tree *map_tree = &fs_info->mapping_tree; struct btrfs_mapping_tree *map_tree = &fs_info->mapping_tree;
struct cache_extent *ce; struct cache_extent *ce;
@ -2499,7 +2500,7 @@ static int fixup_chunks_and_devices(struct btrfs_fs_info *fs_info,
return PTR_ERR(trans); return PTR_ERR(trans);
} }
fixup_block_groups(fs_info); fixup_block_groups(trans);
ret = fixup_dev_extents(trans); ret = fixup_dev_extents(trans);
if (ret < 0) if (ret < 0)
goto error; goto error;