Message ID | c927df817dc837de0678790446568f03b054feda.1713052088.git.josef@toxicpanda.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | btrfs: delayed refs cleanups | expand |
On Sun, Apr 14, 2024 at 12:54 AM Josef Bacik <josef@toxicpanda.com> wrote: > > We're just extracting the values from btrfs_delayed_ref_node and passing > them through, simply pass the btrfs_delayed_ref_node into > __btrfs_inc_extent_ref and shrink the function arguments. > > Signed-off-by: Josef Bacik <josef@toxicpanda.com> > --- > fs/btrfs/delayed-ref.h | 16 ++++++++++++++++ > fs/btrfs/extent-tree.c | 41 +++++++++-------------------------------- > 2 files changed, 25 insertions(+), 32 deletions(-) > > diff --git a/fs/btrfs/delayed-ref.h b/fs/btrfs/delayed-ref.h > index 3e7afac518ac..0bc80ed8b2c7 100644 > --- a/fs/btrfs/delayed-ref.h > +++ b/fs/btrfs/delayed-ref.h > @@ -426,6 +426,22 @@ btrfs_delayed_data_ref_to_node(struct btrfs_delayed_data_ref *ref) > return container_of(ref, struct btrfs_delayed_ref_node, data_ref); > } > > +static inline u64 btrfs_delayed_ref_owner(struct btrfs_delayed_ref_node *node) > +{ > + if ((node->type == BTRFS_EXTENT_DATA_REF_KEY) || > + (node->type == BTRFS_SHARED_DATA_REF_KEY)) There's no need for so many parenthesis, easier to read and what we generally do in simple cases like this: if (node->type == ... || node->type == ...) > + return node->data_ref.objectid; > + return node->tree_ref.level; > +} > + > +static inline u64 btrfs_delayed_ref_offset(struct btrfs_delayed_ref_node *node) > +{ > + if ((node->type == BTRFS_EXTENT_DATA_REF_KEY) || > + (node->type == BTRFS_SHARED_DATA_REF_KEY)) Same here. Either way, the change looks good, so: Reviewed-by: Filipe Manana <fdmanana@suse.com> Thanks. > + return node->data_ref.offset; > + return 0; > +} > + > static inline u8 btrfs_ref_type(struct btrfs_ref *ref) > { > ASSERT(ref->type != BTRFS_REF_NOT_SET); > diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c > index 0e42c8bddc0c..6a8108e151d7 100644 > --- a/fs/btrfs/extent-tree.c > +++ b/fs/btrfs/extent-tree.c > @@ -1462,34 +1462,12 @@ int btrfs_inc_extent_ref(struct btrfs_trans_handle *trans, > * @node: The delayed ref node used to get the bytenr/length for > * extent whose references are incremented. > * > - * @parent: If this is a shared extent (BTRFS_SHARED_DATA_REF_KEY/ > - * BTRFS_SHARED_BLOCK_REF_KEY) then it holds the logical > - * bytenr of the parent block. Since new extents are always > - * created with indirect references, this will only be the case > - * when relocating a shared extent. In that case, root_objectid > - * will be BTRFS_TREE_RELOC_OBJECTID. Otherwise, parent must > - * be 0 > - * > - * @root_objectid: The id of the root where this modification has originated, > - * this can be either one of the well-known metadata trees or > - * the subvolume id which references this extent. > - * > - * @owner: For data extents it is the inode number of the owning file. > - * For metadata extents this parameter holds the level in the > - * tree of the extent. > - * > - * @offset: For metadata extents the offset is ignored and is currently > - * always passed as 0. For data extents it is the fileoffset > - * this extent belongs to. > - * > * @extent_op Pointer to a structure, holding information necessary when > * updating a tree block's flags > * > */ > static int __btrfs_inc_extent_ref(struct btrfs_trans_handle *trans, > struct btrfs_delayed_ref_node *node, > - u64 parent, u64 root_objectid, > - u64 owner, u64 offset, > struct btrfs_delayed_extent_op *extent_op) > { > struct btrfs_path *path; > @@ -1498,6 +1476,8 @@ static int __btrfs_inc_extent_ref(struct btrfs_trans_handle *trans, > struct btrfs_key key; > u64 bytenr = node->bytenr; > u64 num_bytes = node->num_bytes; > + u64 owner = btrfs_delayed_ref_owner(node); > + u64 offset = btrfs_delayed_ref_offset(node); > u64 refs; > int refs_to_add = node->ref_mod; > int ret; > @@ -1508,7 +1488,7 @@ static int __btrfs_inc_extent_ref(struct btrfs_trans_handle *trans, > > /* this will setup the path even if it fails to insert the back ref */ > ret = insert_inline_extent_backref(trans, path, bytenr, num_bytes, > - parent, root_objectid, owner, > + node->parent, node->ref_root, owner, > offset, refs_to_add, extent_op); > if ((ret < 0 && ret != -EAGAIN) || !ret) > goto out; > @@ -1531,11 +1511,11 @@ static int __btrfs_inc_extent_ref(struct btrfs_trans_handle *trans, > > /* now insert the actual backref */ > if (owner < BTRFS_FIRST_FREE_OBJECTID) > - ret = insert_tree_block_ref(trans, path, bytenr, parent, > - root_objectid); > + ret = insert_tree_block_ref(trans, path, bytenr, node->parent, > + node->ref_root); > else > - ret = insert_extent_data_ref(trans, path, bytenr, parent, > - root_objectid, owner, offset, > + ret = insert_extent_data_ref(trans, path, bytenr, node->parent, > + node->ref_root, owner, offset, > refs_to_add); > > if (ret) > @@ -1604,9 +1584,7 @@ static int run_delayed_data_ref(struct btrfs_trans_handle *trans, > if (!ret) > ret = btrfs_record_squota_delta(trans->fs_info, &delta); > } else if (node->action == BTRFS_ADD_DELAYED_REF) { > - ret = __btrfs_inc_extent_ref(trans, node, parent, node->ref_root, > - ref->objectid, ref->offset, > - extent_op); > + ret = __btrfs_inc_extent_ref(trans, node, extent_op); > } else if (node->action == BTRFS_DROP_DELAYED_REF) { > ret = __btrfs_free_extent(trans, href, node, parent, > node->ref_root, ref->objectid, > @@ -1764,8 +1742,7 @@ static int run_delayed_tree_ref(struct btrfs_trans_handle *trans, > if (!ret) > btrfs_record_squota_delta(fs_info, &delta); > } else if (node->action == BTRFS_ADD_DELAYED_REF) { > - ret = __btrfs_inc_extent_ref(trans, node, parent, ref_root, > - ref->level, 0, extent_op); > + ret = __btrfs_inc_extent_ref(trans, node, extent_op); > } else if (node->action == BTRFS_DROP_DELAYED_REF) { > ret = __btrfs_free_extent(trans, href, node, parent, ref_root, > ref->level, 0, extent_op); > -- > 2.43.0 > >
diff --git a/fs/btrfs/delayed-ref.h b/fs/btrfs/delayed-ref.h index 3e7afac518ac..0bc80ed8b2c7 100644 --- a/fs/btrfs/delayed-ref.h +++ b/fs/btrfs/delayed-ref.h @@ -426,6 +426,22 @@ btrfs_delayed_data_ref_to_node(struct btrfs_delayed_data_ref *ref) return container_of(ref, struct btrfs_delayed_ref_node, data_ref); } +static inline u64 btrfs_delayed_ref_owner(struct btrfs_delayed_ref_node *node) +{ + if ((node->type == BTRFS_EXTENT_DATA_REF_KEY) || + (node->type == BTRFS_SHARED_DATA_REF_KEY)) + return node->data_ref.objectid; + return node->tree_ref.level; +} + +static inline u64 btrfs_delayed_ref_offset(struct btrfs_delayed_ref_node *node) +{ + if ((node->type == BTRFS_EXTENT_DATA_REF_KEY) || + (node->type == BTRFS_SHARED_DATA_REF_KEY)) + return node->data_ref.offset; + return 0; +} + static inline u8 btrfs_ref_type(struct btrfs_ref *ref) { ASSERT(ref->type != BTRFS_REF_NOT_SET); diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index 0e42c8bddc0c..6a8108e151d7 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c @@ -1462,34 +1462,12 @@ int btrfs_inc_extent_ref(struct btrfs_trans_handle *trans, * @node: The delayed ref node used to get the bytenr/length for * extent whose references are incremented. * - * @parent: If this is a shared extent (BTRFS_SHARED_DATA_REF_KEY/ - * BTRFS_SHARED_BLOCK_REF_KEY) then it holds the logical - * bytenr of the parent block. Since new extents are always - * created with indirect references, this will only be the case - * when relocating a shared extent. In that case, root_objectid - * will be BTRFS_TREE_RELOC_OBJECTID. Otherwise, parent must - * be 0 - * - * @root_objectid: The id of the root where this modification has originated, - * this can be either one of the well-known metadata trees or - * the subvolume id which references this extent. - * - * @owner: For data extents it is the inode number of the owning file. - * For metadata extents this parameter holds the level in the - * tree of the extent. - * - * @offset: For metadata extents the offset is ignored and is currently - * always passed as 0. For data extents it is the fileoffset - * this extent belongs to. - * * @extent_op Pointer to a structure, holding information necessary when * updating a tree block's flags * */ static int __btrfs_inc_extent_ref(struct btrfs_trans_handle *trans, struct btrfs_delayed_ref_node *node, - u64 parent, u64 root_objectid, - u64 owner, u64 offset, struct btrfs_delayed_extent_op *extent_op) { struct btrfs_path *path; @@ -1498,6 +1476,8 @@ static int __btrfs_inc_extent_ref(struct btrfs_trans_handle *trans, struct btrfs_key key; u64 bytenr = node->bytenr; u64 num_bytes = node->num_bytes; + u64 owner = btrfs_delayed_ref_owner(node); + u64 offset = btrfs_delayed_ref_offset(node); u64 refs; int refs_to_add = node->ref_mod; int ret; @@ -1508,7 +1488,7 @@ static int __btrfs_inc_extent_ref(struct btrfs_trans_handle *trans, /* this will setup the path even if it fails to insert the back ref */ ret = insert_inline_extent_backref(trans, path, bytenr, num_bytes, - parent, root_objectid, owner, + node->parent, node->ref_root, owner, offset, refs_to_add, extent_op); if ((ret < 0 && ret != -EAGAIN) || !ret) goto out; @@ -1531,11 +1511,11 @@ static int __btrfs_inc_extent_ref(struct btrfs_trans_handle *trans, /* now insert the actual backref */ if (owner < BTRFS_FIRST_FREE_OBJECTID) - ret = insert_tree_block_ref(trans, path, bytenr, parent, - root_objectid); + ret = insert_tree_block_ref(trans, path, bytenr, node->parent, + node->ref_root); else - ret = insert_extent_data_ref(trans, path, bytenr, parent, - root_objectid, owner, offset, + ret = insert_extent_data_ref(trans, path, bytenr, node->parent, + node->ref_root, owner, offset, refs_to_add); if (ret) @@ -1604,9 +1584,7 @@ static int run_delayed_data_ref(struct btrfs_trans_handle *trans, if (!ret) ret = btrfs_record_squota_delta(trans->fs_info, &delta); } else if (node->action == BTRFS_ADD_DELAYED_REF) { - ret = __btrfs_inc_extent_ref(trans, node, parent, node->ref_root, - ref->objectid, ref->offset, - extent_op); + ret = __btrfs_inc_extent_ref(trans, node, extent_op); } else if (node->action == BTRFS_DROP_DELAYED_REF) { ret = __btrfs_free_extent(trans, href, node, parent, node->ref_root, ref->objectid, @@ -1764,8 +1742,7 @@ static int run_delayed_tree_ref(struct btrfs_trans_handle *trans, if (!ret) btrfs_record_squota_delta(fs_info, &delta); } else if (node->action == BTRFS_ADD_DELAYED_REF) { - ret = __btrfs_inc_extent_ref(trans, node, parent, ref_root, - ref->level, 0, extent_op); + ret = __btrfs_inc_extent_ref(trans, node, extent_op); } else if (node->action == BTRFS_DROP_DELAYED_REF) { ret = __btrfs_free_extent(trans, href, node, parent, ref_root, ref->level, 0, extent_op);
We're just extracting the values from btrfs_delayed_ref_node and passing them through, simply pass the btrfs_delayed_ref_node into __btrfs_inc_extent_ref and shrink the function arguments. Signed-off-by: Josef Bacik <josef@toxicpanda.com> --- fs/btrfs/delayed-ref.h | 16 ++++++++++++++++ fs/btrfs/extent-tree.c | 41 +++++++++-------------------------------- 2 files changed, 25 insertions(+), 32 deletions(-)