diff options
Diffstat (limited to 'fs/btrfs/disk-io.c')
-rw-r--r-- | fs/btrfs/disk-io.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index 7f8377871283..695363ae1c28 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c | |||
@@ -4062,6 +4062,7 @@ static int btrfs_destroy_delayed_refs(struct btrfs_transaction *trans, | |||
4062 | 4062 | ||
4063 | while ((node = rb_first(&delayed_refs->href_root)) != NULL) { | 4063 | while ((node = rb_first(&delayed_refs->href_root)) != NULL) { |
4064 | struct btrfs_delayed_ref_head *head; | 4064 | struct btrfs_delayed_ref_head *head; |
4065 | struct btrfs_delayed_ref_node *tmp; | ||
4065 | bool pin_bytes = false; | 4066 | bool pin_bytes = false; |
4066 | 4067 | ||
4067 | head = rb_entry(node, struct btrfs_delayed_ref_head, | 4068 | head = rb_entry(node, struct btrfs_delayed_ref_head, |
@@ -4077,11 +4078,10 @@ static int btrfs_destroy_delayed_refs(struct btrfs_transaction *trans, | |||
4077 | continue; | 4078 | continue; |
4078 | } | 4079 | } |
4079 | spin_lock(&head->lock); | 4080 | spin_lock(&head->lock); |
4080 | while ((node = rb_first(&head->ref_root)) != NULL) { | 4081 | list_for_each_entry_safe_reverse(ref, tmp, &head->ref_list, |
4081 | ref = rb_entry(node, struct btrfs_delayed_ref_node, | 4082 | list) { |
4082 | rb_node); | ||
4083 | ref->in_tree = 0; | 4083 | ref->in_tree = 0; |
4084 | rb_erase(&ref->rb_node, &head->ref_root); | 4084 | list_del(&ref->list); |
4085 | atomic_dec(&delayed_refs->num_entries); | 4085 | atomic_dec(&delayed_refs->num_entries); |
4086 | btrfs_put_delayed_ref(ref); | 4086 | btrfs_put_delayed_ref(ref); |
4087 | } | 4087 | } |