From 649fa5c4bb278f6b74b50e7b4070c15509859095 Mon Sep 17 00:00:00 2001 From: Josef Bacik Date: Wed, 30 Jan 2013 16:03:59 -0500 Subject: [PATCH] --- yaml --- r: 360431 b: refs/heads/master c: eb12db690c7eb0f6593ba5792f5861409e88bc03 h: refs/heads/master i: 360429: 1c5252cacf6d0e0e2a0b11952d50b9090aade827 360427: 033f768b41fac6bc6f505799b7c8d1a3cc0dfad3 360423: 3353413c4084fe190413fedd4f41c975a9006654 360415: 214ebbc9f017f6fc542563e34fb933e2882c9805 v: v3 --- [refs] | 2 +- trunk/fs/btrfs/disk-io.c | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index ff0b0480a8df..76afb3930ef1 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 063d006fa06fbf73fab370921120380333a33e85 +refs/heads/master: eb12db690c7eb0f6593ba5792f5861409e88bc03 diff --git a/trunk/fs/btrfs/disk-io.c b/trunk/fs/btrfs/disk-io.c index bd48bf21118e..8140cb01951f 100644 --- a/trunk/fs/btrfs/disk-io.c +++ b/trunk/fs/btrfs/disk-io.c @@ -3615,11 +3615,11 @@ int btrfs_destroy_delayed_refs(struct btrfs_transaction *trans, } while ((node = rb_first(&delayed_refs->root)) != NULL) { - ref = rb_entry(node, struct btrfs_delayed_ref_node, rb_node); + struct btrfs_delayed_ref_head *head = NULL; + ref = rb_entry(node, struct btrfs_delayed_ref_node, rb_node); atomic_set(&ref->refs, 1); if (btrfs_delayed_ref_is_head(ref)) { - struct btrfs_delayed_ref_head *head; head = btrfs_delayed_node_to_head(ref); if (!mutex_trylock(&head->mutex)) { @@ -3641,10 +3641,12 @@ int btrfs_destroy_delayed_refs(struct btrfs_transaction *trans, delayed_refs->num_heads_ready--; list_del_init(&head->cluster); } + ref->in_tree = 0; rb_erase(&ref->rb_node, &delayed_refs->root); delayed_refs->num_entries--; - + if (head) + mutex_unlock(&head->mutex); spin_unlock(&delayed_refs->lock); btrfs_put_delayed_ref(ref);