Message ID | 20181206065903.11343-7-wqu@suse.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | btrfs: Refactor delayed ref parameter list | expand |
On 6.12.18 г. 8:59 ч., Qu Wenruo wrote: > Since add_pinned_bytes() only needs to know if the extent is metadata > and if it's a chunk tree extent, btrfs_ref is a perfect match for it, as > we don't need various owner/level trick to determine extent type. > > Signed-off-by: Qu Wenruo <wqu@suse.com> Reviewed-by: Nikolay Borisov <nborisov@suse.com> > --- > fs/btrfs/extent-tree.c | 26 ++++++++++---------------- > 1 file changed, 10 insertions(+), 16 deletions(-) > > diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c > index 1d812bc2c7fc..70c05ca30d9a 100644 > --- a/fs/btrfs/extent-tree.c > +++ b/fs/btrfs/extent-tree.c > @@ -738,14 +738,15 @@ static struct btrfs_space_info *__find_space_info(struct btrfs_fs_info *info, > return NULL; > } > > -static void add_pinned_bytes(struct btrfs_fs_info *fs_info, s64 num_bytes, > - bool metadata, u64 root_objectid) > +static void add_pinned_bytes(struct btrfs_fs_info *fs_info, > + struct btrfs_ref *ref) > { > struct btrfs_space_info *space_info; > + s64 num_bytes = -ref->len; > u64 flags; > > - if (metadata) { > - if (root_objectid == BTRFS_CHUNK_TREE_OBJECTID) > + if (ref->type == BTRFS_REF_METADATA) { > + if (ref->tree_ref.root == BTRFS_CHUNK_TREE_OBJECTID) > flags = BTRFS_BLOCK_GROUP_SYSTEM; > else > flags = BTRFS_BLOCK_GROUP_METADATA; > @@ -2053,11 +2054,8 @@ int btrfs_inc_extent_ref(struct btrfs_trans_handle *trans, > > btrfs_ref_tree_mod(fs_info, &generic_ref); > > - if (ret == 0 && old_ref_mod < 0 && new_ref_mod >= 0) { > - bool metadata = owner < BTRFS_FIRST_FREE_OBJECTID; > - > - add_pinned_bytes(fs_info, -num_bytes, metadata, root_objectid); > - } > + if (ret == 0 && old_ref_mod < 0 && new_ref_mod >= 0) > + add_pinned_bytes(fs_info, &generic_ref); > > return ret; > } > @@ -7059,8 +7057,7 @@ void btrfs_free_tree_block(struct btrfs_trans_handle *trans, > } > out: > if (pin) > - add_pinned_bytes(fs_info, buf->len, true, > - root->root_key.objectid); > + add_pinned_bytes(fs_info, &generic_ref); > > if (last_ref) { > /* > @@ -7111,11 +7108,8 @@ int btrfs_free_extent(struct btrfs_trans_handle *trans, > if (root_objectid != BTRFS_TREE_LOG_OBJECTID) > btrfs_ref_tree_mod(fs_info, &generic_ref); > > - if (ret == 0 && old_ref_mod >= 0 && new_ref_mod < 0) { > - bool metadata = owner < BTRFS_FIRST_FREE_OBJECTID; > - > - add_pinned_bytes(fs_info, num_bytes, metadata, root_objectid); > - } > + if (ret == 0 && old_ref_mod >= 0 && new_ref_mod < 0) > + add_pinned_bytes(fs_info, &generic_ref); > > return ret; > } >
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index 1d812bc2c7fc..70c05ca30d9a 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c @@ -738,14 +738,15 @@ static struct btrfs_space_info *__find_space_info(struct btrfs_fs_info *info, return NULL; } -static void add_pinned_bytes(struct btrfs_fs_info *fs_info, s64 num_bytes, - bool metadata, u64 root_objectid) +static void add_pinned_bytes(struct btrfs_fs_info *fs_info, + struct btrfs_ref *ref) { struct btrfs_space_info *space_info; + s64 num_bytes = -ref->len; u64 flags; - if (metadata) { - if (root_objectid == BTRFS_CHUNK_TREE_OBJECTID) + if (ref->type == BTRFS_REF_METADATA) { + if (ref->tree_ref.root == BTRFS_CHUNK_TREE_OBJECTID) flags = BTRFS_BLOCK_GROUP_SYSTEM; else flags = BTRFS_BLOCK_GROUP_METADATA; @@ -2053,11 +2054,8 @@ int btrfs_inc_extent_ref(struct btrfs_trans_handle *trans, btrfs_ref_tree_mod(fs_info, &generic_ref); - if (ret == 0 && old_ref_mod < 0 && new_ref_mod >= 0) { - bool metadata = owner < BTRFS_FIRST_FREE_OBJECTID; - - add_pinned_bytes(fs_info, -num_bytes, metadata, root_objectid); - } + if (ret == 0 && old_ref_mod < 0 && new_ref_mod >= 0) + add_pinned_bytes(fs_info, &generic_ref); return ret; } @@ -7059,8 +7057,7 @@ void btrfs_free_tree_block(struct btrfs_trans_handle *trans, } out: if (pin) - add_pinned_bytes(fs_info, buf->len, true, - root->root_key.objectid); + add_pinned_bytes(fs_info, &generic_ref); if (last_ref) { /* @@ -7111,11 +7108,8 @@ int btrfs_free_extent(struct btrfs_trans_handle *trans, if (root_objectid != BTRFS_TREE_LOG_OBJECTID) btrfs_ref_tree_mod(fs_info, &generic_ref); - if (ret == 0 && old_ref_mod >= 0 && new_ref_mod < 0) { - bool metadata = owner < BTRFS_FIRST_FREE_OBJECTID; - - add_pinned_bytes(fs_info, num_bytes, metadata, root_objectid); - } + if (ret == 0 && old_ref_mod >= 0 && new_ref_mod < 0) + add_pinned_bytes(fs_info, &generic_ref); return ret; }
Since add_pinned_bytes() only needs to know if the extent is metadata and if it's a chunk tree extent, btrfs_ref is a perfect match for it, as we don't need various owner/level trick to determine extent type. Signed-off-by: Qu Wenruo <wqu@suse.com> --- fs/btrfs/extent-tree.c | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-)