diff mbox series

[13/19] btrfs: make __btrfs_inc_extent_ref take a btrfs_delayed_ref_node

Message ID c927df817dc837de0678790446568f03b054feda.1713052088.git.josef@toxicpanda.com (mailing list archive)
State New
Headers show
Series btrfs: delayed refs cleanups | expand

Commit Message

Josef Bacik April 13, 2024, 11:53 p.m. UTC
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(-)

Comments

Filipe Manana April 15, 2024, 1 p.m. UTC | #1
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 mbox series

Patch

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);