diff mbox series

[06/19] btrfs: initialize btrfs_delayed_ref_head with btrfs_ref

Message ID d5794f417b276985e21c50cbfeb8a4230bf492d5.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 are calling init_delayed_ref_head with all of the elements from
btrfs_ref, clean this up to simply pass in the btrfs_ref and initialize
the btrfs_delayed_ref_head with the values from the btrfs_ref directly.

Signed-off-by: Josef Bacik <josef@toxicpanda.com>
---
 fs/btrfs/delayed-ref.c | 53 ++++++++++++++++++++----------------------
 1 file changed, 25 insertions(+), 28 deletions(-)

Comments

Filipe Manana April 15, 2024, 12:44 p.m. UTC | #1
On Sun, Apr 14, 2024 at 12:54 AM Josef Bacik <josef@toxicpanda.com> wrote:
>
> We are calling init_delayed_ref_head with all of the elements from
> btrfs_ref, clean this up to simply pass in the btrfs_ref and initialize
> the btrfs_delayed_ref_head with the values from the btrfs_ref directly.
>
> Signed-off-by: Josef Bacik <josef@toxicpanda.com>

Reviewed-by: Filipe Manana <fdmanana@suse.com>

Looks good, thanks.

> ---
>  fs/btrfs/delayed-ref.c | 53 ++++++++++++++++++++----------------------
>  1 file changed, 25 insertions(+), 28 deletions(-)
>
> diff --git a/fs/btrfs/delayed-ref.c b/fs/btrfs/delayed-ref.c
> index f5e4a64283e4..5ff6c109e5bf 100644
> --- a/fs/btrfs/delayed-ref.c
> +++ b/fs/btrfs/delayed-ref.c
> @@ -831,18 +831,20 @@ static noinline void update_existing_head_ref(struct btrfs_trans_handle *trans,
>  }
>
>  static void init_delayed_ref_head(struct btrfs_delayed_ref_head *head_ref,
> +                                 struct btrfs_ref *generic_ref,
>                                   struct btrfs_qgroup_extent_record *qrecord,
> -                                 u64 bytenr, u64 num_bytes, u64 ref_root,
> -                                 u64 reserved, int action, bool is_data,
> -                                 bool is_system, u64 owning_root)
> +                                 u64 reserved)
>  {
>         int count_mod = 1;
>         bool must_insert_reserved = false;
>
>         /* If reserved is provided, it must be a data extent. */
> -       BUG_ON(!is_data && reserved);
> +       BUG_ON(generic_ref->type != BTRFS_REF_DATA && reserved);
>
> -       switch (action) {
> +       switch (generic_ref->action) {
> +       case BTRFS_ADD_DELAYED_REF:
> +               /* count_mod is already set to 1. */
> +               break;
>         case BTRFS_UPDATE_DELAYED_HEAD:
>                 count_mod = 0;
>                 break;
> @@ -871,14 +873,14 @@ static void init_delayed_ref_head(struct btrfs_delayed_ref_head *head_ref,
>         }
>
>         refcount_set(&head_ref->refs, 1);
> -       head_ref->bytenr = bytenr;
> -       head_ref->num_bytes = num_bytes;
> +       head_ref->bytenr = generic_ref->bytenr;
> +       head_ref->num_bytes = generic_ref->len;
>         head_ref->ref_mod = count_mod;
>         head_ref->reserved_bytes = reserved;
>         head_ref->must_insert_reserved = must_insert_reserved;
> -       head_ref->owning_root = owning_root;
> -       head_ref->is_data = is_data;
> -       head_ref->is_system = is_system;
> +       head_ref->owning_root = generic_ref->owning_root;
> +       head_ref->is_data = (generic_ref->type == BTRFS_REF_DATA);
> +       head_ref->is_system = (generic_ref->ref_root == BTRFS_CHUNK_TREE_OBJECTID);
>         head_ref->ref_tree = RB_ROOT_CACHED;
>         INIT_LIST_HEAD(&head_ref->ref_add_list);
>         RB_CLEAR_NODE(&head_ref->href_node);
> @@ -888,12 +890,12 @@ static void init_delayed_ref_head(struct btrfs_delayed_ref_head *head_ref,
>         mutex_init(&head_ref->mutex);
>
>         if (qrecord) {
> -               if (ref_root && reserved) {
> +               if (generic_ref->ref_root && reserved) {
>                         qrecord->data_rsv = reserved;
> -                       qrecord->data_rsv_refroot = ref_root;
> +                       qrecord->data_rsv_refroot = generic_ref->ref_root;
>                 }
> -               qrecord->bytenr = bytenr;
> -               qrecord->num_bytes = num_bytes;
> +               qrecord->bytenr = generic_ref->bytenr;
> +               qrecord->num_bytes = generic_ref->len;
>                 qrecord->old_roots = NULL;
>         }
>  }
> @@ -1057,16 +1059,11 @@ int btrfs_add_delayed_tree_ref(struct btrfs_trans_handle *trans,
>         struct btrfs_delayed_ref_root *delayed_refs;
>         struct btrfs_qgroup_extent_record *record = NULL;
>         bool qrecord_inserted;
> -       bool is_system;
>         bool merged;
>         int action = generic_ref->action;
>         int level = generic_ref->tree_ref.level;
> -       u64 bytenr = generic_ref->bytenr;
> -       u64 num_bytes = generic_ref->len;
>         u64 parent = generic_ref->parent;
>
> -       is_system = (generic_ref->ref_root == BTRFS_CHUNK_TREE_OBJECTID);
> -
>         ASSERT(generic_ref->type == BTRFS_REF_METADATA && generic_ref->action);
>         node = kmem_cache_alloc(btrfs_delayed_ref_node_cachep, GFP_NOFS);
>         if (!node)
> @@ -1094,9 +1091,7 @@ int btrfs_add_delayed_tree_ref(struct btrfs_trans_handle *trans,
>         ref->parent = parent;
>         ref->level = level;
>
> -       init_delayed_ref_head(head_ref, record, bytenr, num_bytes,
> -                             generic_ref->ref_root, 0, action,
> -                             false, is_system, generic_ref->owning_root);
> +       init_delayed_ref_head(head_ref, generic_ref, record, 0);
>         head_ref->extent_op = extent_op;
>
>         delayed_refs = &trans->transaction->delayed_refs;
> @@ -1146,8 +1141,6 @@ int btrfs_add_delayed_data_ref(struct btrfs_trans_handle *trans,
>         bool qrecord_inserted;
>         int action = generic_ref->action;
>         bool merged;
> -       u64 bytenr = generic_ref->bytenr;
> -       u64 num_bytes = generic_ref->len;
>         u64 parent = generic_ref->parent;
>         u64 ref_root = generic_ref->ref_root;
>         u64 owner = generic_ref->data_ref.ino;
> @@ -1183,8 +1176,7 @@ int btrfs_add_delayed_data_ref(struct btrfs_trans_handle *trans,
>                 }
>         }
>
> -       init_delayed_ref_head(head_ref, record, bytenr, num_bytes, ref_root,
> -                             reserved, action, true, false, generic_ref->owning_root);
> +       init_delayed_ref_head(head_ref, generic_ref, record, reserved);
>         head_ref->extent_op = NULL;
>
>         delayed_refs = &trans->transaction->delayed_refs;
> @@ -1224,13 +1216,18 @@ int btrfs_add_delayed_extent_op(struct btrfs_trans_handle *trans,
>  {
>         struct btrfs_delayed_ref_head *head_ref;
>         struct btrfs_delayed_ref_root *delayed_refs;
> +       struct btrfs_ref generic_ref = {
> +               .type = BTRFS_REF_METADATA,
> +               .action = BTRFS_UPDATE_DELAYED_HEAD,
> +               .bytenr = bytenr,
> +               .len = num_bytes,
> +       };
>
>         head_ref = kmem_cache_alloc(btrfs_delayed_ref_head_cachep, GFP_NOFS);
>         if (!head_ref)
>                 return -ENOMEM;
>
> -       init_delayed_ref_head(head_ref, NULL, bytenr, num_bytes, 0, 0,
> -                             BTRFS_UPDATE_DELAYED_HEAD, false, false, 0);
> +       init_delayed_ref_head(head_ref, &generic_ref, NULL, 0);
>         head_ref->extent_op = extent_op;
>
>         delayed_refs = &trans->transaction->delayed_refs;
> --
> 2.43.0
>
>
diff mbox series

Patch

diff --git a/fs/btrfs/delayed-ref.c b/fs/btrfs/delayed-ref.c
index f5e4a64283e4..5ff6c109e5bf 100644
--- a/fs/btrfs/delayed-ref.c
+++ b/fs/btrfs/delayed-ref.c
@@ -831,18 +831,20 @@  static noinline void update_existing_head_ref(struct btrfs_trans_handle *trans,
 }
 
 static void init_delayed_ref_head(struct btrfs_delayed_ref_head *head_ref,
+				  struct btrfs_ref *generic_ref,
 				  struct btrfs_qgroup_extent_record *qrecord,
-				  u64 bytenr, u64 num_bytes, u64 ref_root,
-				  u64 reserved, int action, bool is_data,
-				  bool is_system, u64 owning_root)
+				  u64 reserved)
 {
 	int count_mod = 1;
 	bool must_insert_reserved = false;
 
 	/* If reserved is provided, it must be a data extent. */
-	BUG_ON(!is_data && reserved);
+	BUG_ON(generic_ref->type != BTRFS_REF_DATA && reserved);
 
-	switch (action) {
+	switch (generic_ref->action) {
+	case BTRFS_ADD_DELAYED_REF:
+		/* count_mod is already set to 1. */
+		break;
 	case BTRFS_UPDATE_DELAYED_HEAD:
 		count_mod = 0;
 		break;
@@ -871,14 +873,14 @@  static void init_delayed_ref_head(struct btrfs_delayed_ref_head *head_ref,
 	}
 
 	refcount_set(&head_ref->refs, 1);
-	head_ref->bytenr = bytenr;
-	head_ref->num_bytes = num_bytes;
+	head_ref->bytenr = generic_ref->bytenr;
+	head_ref->num_bytes = generic_ref->len;
 	head_ref->ref_mod = count_mod;
 	head_ref->reserved_bytes = reserved;
 	head_ref->must_insert_reserved = must_insert_reserved;
-	head_ref->owning_root = owning_root;
-	head_ref->is_data = is_data;
-	head_ref->is_system = is_system;
+	head_ref->owning_root = generic_ref->owning_root;
+	head_ref->is_data = (generic_ref->type == BTRFS_REF_DATA);
+	head_ref->is_system = (generic_ref->ref_root == BTRFS_CHUNK_TREE_OBJECTID);
 	head_ref->ref_tree = RB_ROOT_CACHED;
 	INIT_LIST_HEAD(&head_ref->ref_add_list);
 	RB_CLEAR_NODE(&head_ref->href_node);
@@ -888,12 +890,12 @@  static void init_delayed_ref_head(struct btrfs_delayed_ref_head *head_ref,
 	mutex_init(&head_ref->mutex);
 
 	if (qrecord) {
-		if (ref_root && reserved) {
+		if (generic_ref->ref_root && reserved) {
 			qrecord->data_rsv = reserved;
-			qrecord->data_rsv_refroot = ref_root;
+			qrecord->data_rsv_refroot = generic_ref->ref_root;
 		}
-		qrecord->bytenr = bytenr;
-		qrecord->num_bytes = num_bytes;
+		qrecord->bytenr = generic_ref->bytenr;
+		qrecord->num_bytes = generic_ref->len;
 		qrecord->old_roots = NULL;
 	}
 }
@@ -1057,16 +1059,11 @@  int btrfs_add_delayed_tree_ref(struct btrfs_trans_handle *trans,
 	struct btrfs_delayed_ref_root *delayed_refs;
 	struct btrfs_qgroup_extent_record *record = NULL;
 	bool qrecord_inserted;
-	bool is_system;
 	bool merged;
 	int action = generic_ref->action;
 	int level = generic_ref->tree_ref.level;
-	u64 bytenr = generic_ref->bytenr;
-	u64 num_bytes = generic_ref->len;
 	u64 parent = generic_ref->parent;
 
-	is_system = (generic_ref->ref_root == BTRFS_CHUNK_TREE_OBJECTID);
-
 	ASSERT(generic_ref->type == BTRFS_REF_METADATA && generic_ref->action);
 	node = kmem_cache_alloc(btrfs_delayed_ref_node_cachep, GFP_NOFS);
 	if (!node)
@@ -1094,9 +1091,7 @@  int btrfs_add_delayed_tree_ref(struct btrfs_trans_handle *trans,
 	ref->parent = parent;
 	ref->level = level;
 
-	init_delayed_ref_head(head_ref, record, bytenr, num_bytes,
-			      generic_ref->ref_root, 0, action,
-			      false, is_system, generic_ref->owning_root);
+	init_delayed_ref_head(head_ref, generic_ref, record, 0);
 	head_ref->extent_op = extent_op;
 
 	delayed_refs = &trans->transaction->delayed_refs;
@@ -1146,8 +1141,6 @@  int btrfs_add_delayed_data_ref(struct btrfs_trans_handle *trans,
 	bool qrecord_inserted;
 	int action = generic_ref->action;
 	bool merged;
-	u64 bytenr = generic_ref->bytenr;
-	u64 num_bytes = generic_ref->len;
 	u64 parent = generic_ref->parent;
 	u64 ref_root = generic_ref->ref_root;
 	u64 owner = generic_ref->data_ref.ino;
@@ -1183,8 +1176,7 @@  int btrfs_add_delayed_data_ref(struct btrfs_trans_handle *trans,
 		}
 	}
 
-	init_delayed_ref_head(head_ref, record, bytenr, num_bytes, ref_root,
-			      reserved, action, true, false, generic_ref->owning_root);
+	init_delayed_ref_head(head_ref, generic_ref, record, reserved);
 	head_ref->extent_op = NULL;
 
 	delayed_refs = &trans->transaction->delayed_refs;
@@ -1224,13 +1216,18 @@  int btrfs_add_delayed_extent_op(struct btrfs_trans_handle *trans,
 {
 	struct btrfs_delayed_ref_head *head_ref;
 	struct btrfs_delayed_ref_root *delayed_refs;
+	struct btrfs_ref generic_ref = {
+		.type = BTRFS_REF_METADATA,
+		.action = BTRFS_UPDATE_DELAYED_HEAD,
+		.bytenr = bytenr,
+		.len = num_bytes,
+	};
 
 	head_ref = kmem_cache_alloc(btrfs_delayed_ref_head_cachep, GFP_NOFS);
 	if (!head_ref)
 		return -ENOMEM;
 
-	init_delayed_ref_head(head_ref, NULL, bytenr, num_bytes, 0, 0,
-			      BTRFS_UPDATE_DELAYED_HEAD, false, false, 0);
+	init_delayed_ref_head(head_ref, &generic_ref, NULL, 0);
 	head_ref->extent_op = extent_op;
 
 	delayed_refs = &trans->transaction->delayed_refs;