aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
Diffstat (limited to 'fs')
-rw-r--r--fs/btrfs/disk-io.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
index bd48bf21118e..8140cb01951f 100644
--- a/fs/btrfs/disk-io.c
+++ b/fs/btrfs/disk-io.c
@@ -3615,11 +3615,11 @@ int btrfs_destroy_delayed_refs(struct btrfs_transaction *trans,
3615 } 3615 }
3616 3616
3617 while ((node = rb_first(&delayed_refs->root)) != NULL) { 3617 while ((node = rb_first(&delayed_refs->root)) != NULL) {
3618 ref = rb_entry(node, struct btrfs_delayed_ref_node, rb_node); 3618 struct btrfs_delayed_ref_head *head = NULL;
3619 3619
3620 ref = rb_entry(node, struct btrfs_delayed_ref_node, rb_node);
3620 atomic_set(&ref->refs, 1); 3621 atomic_set(&ref->refs, 1);
3621 if (btrfs_delayed_ref_is_head(ref)) { 3622 if (btrfs_delayed_ref_is_head(ref)) {
3622 struct btrfs_delayed_ref_head *head;
3623 3623
3624 head = btrfs_delayed_node_to_head(ref); 3624 head = btrfs_delayed_node_to_head(ref);
3625 if (!mutex_trylock(&head->mutex)) { 3625 if (!mutex_trylock(&head->mutex)) {
@@ -3641,10 +3641,12 @@ int btrfs_destroy_delayed_refs(struct btrfs_transaction *trans,
3641 delayed_refs->num_heads_ready--; 3641 delayed_refs->num_heads_ready--;
3642 list_del_init(&head->cluster); 3642 list_del_init(&head->cluster);
3643 } 3643 }
3644
3644 ref->in_tree = 0; 3645 ref->in_tree = 0;
3645 rb_erase(&ref->rb_node, &delayed_refs->root); 3646 rb_erase(&ref->rb_node, &delayed_refs->root);
3646 delayed_refs->num_entries--; 3647 delayed_refs->num_entries--;
3647 3648 if (head)
3649 mutex_unlock(&head->mutex);
3648 spin_unlock(&delayed_refs->lock); 3650 spin_unlock(&delayed_refs->lock);
3649 btrfs_put_delayed_ref(ref); 3651 btrfs_put_delayed_ref(ref);
3650 3652