Simplify the error handling in __btrfs_run_delayed_refs by breaking out
the code used to return a head back to the delayed_refs tree for
processing into a helper function.

Signed-off-by: Josef Bacik <jba...@fb.com>
---
 fs/btrfs/extent-tree.c | 30 +++++++++++++++---------------
 1 file changed, 15 insertions(+), 15 deletions(-)

diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
index 00d86c8afaef..f356b4a66186 100644
--- a/fs/btrfs/extent-tree.c
+++ b/fs/btrfs/extent-tree.c
@@ -2576,6 +2576,17 @@ select_delayed_ref(struct btrfs_delayed_ref_head *head)
        return ref;
 }
 
+static void
+unselect_delayed_ref_head(struct btrfs_delayed_ref_root *delayed_refs,
+                         struct btrfs_delayed_ref_head *head)
+{
+       spin_lock(&delayed_refs->lock);
+       head->processing = 0;
+       delayed_refs->num_heads_ready++;
+       spin_unlock(&delayed_refs->lock);
+       btrfs_delayed_ref_unlock(head);
+}
+
 /*
  * Returns 0 on success or if called with an already aborted transaction.
  * Returns -ENOMEM or -EIO on failure and will abort the transaction.
@@ -2649,11 +2660,7 @@ static noinline int __btrfs_run_delayed_refs(struct 
btrfs_trans_handle *trans,
                if (ref && ref->seq &&
                    btrfs_check_delayed_seq(fs_info, delayed_refs, ref->seq)) {
                        spin_unlock(&locked_ref->lock);
-                       spin_lock(&delayed_refs->lock);
-                       locked_ref->processing = 0;
-                       delayed_refs->num_heads_ready++;
-                       spin_unlock(&delayed_refs->lock);
-                       btrfs_delayed_ref_unlock(locked_ref);
+                       unselect_delayed_ref_head(delayed_refs, locked_ref);
                        locked_ref = NULL;
                        cond_resched();
                        count++;
@@ -2699,14 +2706,11 @@ static noinline int __btrfs_run_delayed_refs(struct 
btrfs_trans_handle *trans,
                                         */
                                        if (must_insert_reserved)
                                                
locked_ref->must_insert_reserved = 1;
-                                       spin_lock(&delayed_refs->lock);
-                                       locked_ref->processing = 0;
-                                       delayed_refs->num_heads_ready++;
-                                       spin_unlock(&delayed_refs->lock);
+                                       unselect_delayed_ref_head(delayed_refs,
+                                                                 locked_ref);
                                        btrfs_debug(fs_info,
                                                    "run_delayed_extent_op 
returned %d",
                                                    ret);
-                                       btrfs_delayed_ref_unlock(locked_ref);
                                        return ret;
                                }
                                continue;
@@ -2764,11 +2768,7 @@ static noinline int __btrfs_run_delayed_refs(struct 
btrfs_trans_handle *trans,
 
                btrfs_free_delayed_extent_op(extent_op);
                if (ret) {
-                       spin_lock(&delayed_refs->lock);
-                       locked_ref->processing = 0;
-                       delayed_refs->num_heads_ready++;
-                       spin_unlock(&delayed_refs->lock);
-                       btrfs_delayed_ref_unlock(locked_ref);
+                       unselect_delayed_ref_head(delayed_refs, locked_ref);
                        btrfs_put_delayed_ref(ref);
                        btrfs_debug(fs_info, "run_one_delayed_ref returned %d",
                                    ret);
-- 
2.7.4

--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to