Btrfs: add a barrier before a waitqueue_active check
authorChris Mason <chris.mason@fusionio.com>
Wed, 25 Jul 2012 20:03:32 +0000 (16:03 -0400)
committerChris Mason <chris.mason@fusionio.com>
Wed, 25 Jul 2012 20:15:08 +0000 (16:15 -0400)
We were missing wakeups on the delayed ref waitqueue due
to races on waitqueue_active.

Signed-off-by: Chris Mason <chris.mason@fusionio.com>
fs/btrfs/extent-tree.c

index 44f06201f376a83809b66fadcd70fd8400baa4c6..4e1b153b7c47c99e00adffd8ee6d24e2db29093d 100644 (file)
@@ -5294,6 +5294,7 @@ static noinline int check_ref_cleanup(struct btrfs_trans_handle *trans,
        rb_erase(&head->node.rb_node, &delayed_refs->root);
 
        delayed_refs->num_entries--;
+       smp_mb();
        if (waitqueue_active(&root->fs_info->tree_mod_seq_wait))
                wake_up(&root->fs_info->tree_mod_seq_wait);