btrfs: comment the rest of implicit barriers before waitqueue_active
authorDavid Sterba <dsterba@suse.com>
Mon, 16 Feb 2015 18:41:40 +0000 (19:41 +0100)
committerDavid Sterba <dsterba@suse.com>
Sat, 10 Oct 2015 16:42:00 +0000 (18:42 +0200)
There are atomic operations that imply the barrier for waitqueue_active
mixed in an if-condition.

Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/delayed-inode.c
fs/btrfs/disk-io.c
fs/btrfs/inode.c
fs/btrfs/locking.c
fs/btrfs/volumes.c

index a2ae42720a6afe92701de402b837d56dd66d03b4..e0941fbb913c2e99740b9df34d06efbc8cffdea1 100644 (file)
@@ -463,6 +463,10 @@ static int __btrfs_add_delayed_deletion_item(struct btrfs_delayed_node *node,
 static void finish_one_item(struct btrfs_delayed_root *delayed_root)
 {
        int seq = atomic_inc_return(&delayed_root->items_seq);
+
+       /*
+        * atomic_dec_return implies a barrier for waitqueue_active
+        */
        if ((atomic_dec_return(&delayed_root->items) <
            BTRFS_DELAYED_BACKGROUND || seq % BTRFS_DELAYED_BATCH == 0) &&
            waitqueue_active(&delayed_root->wait))
index 295795aebe0b42330cc1147e02340eb2c59f1d7b..379526ffd84d296f2b900ff23e3bf47db73dab3c 100644 (file)
@@ -802,6 +802,9 @@ static void run_one_async_done(struct btrfs_work *work)
        limit = btrfs_async_submit_limit(fs_info);
        limit = limit * 2 / 3;
 
+       /*
+        * atomic_dec_return implies a barrier for waitqueue_active
+        */
        if (atomic_dec_return(&fs_info->nr_async_submits) < limit &&
            waitqueue_active(&fs_info->async_submit_wait))
                wake_up(&fs_info->async_submit_wait);
index 611b66d73e80ba0e5f97b4415595d20f8ae35e1a..7be4abe25e06c53ebe9ab16a54b61c3fbad0dd41 100644 (file)
@@ -1096,6 +1096,9 @@ static noinline void async_cow_submit(struct btrfs_work *work)
        nr_pages = (async_cow->end - async_cow->start + PAGE_CACHE_SIZE) >>
                PAGE_CACHE_SHIFT;
 
+       /*
+        * atomic_sub_return implies a barrier for waitqueue_active
+        */
        if (atomic_sub_return(nr_pages, &root->fs_info->async_delalloc_pages) <
            5 * 1024 * 1024 &&
            waitqueue_active(&root->fs_info->async_submit_wait))
index 03f8630dbaf2582e8b6d6891d92815ea06124c9c..8077461fc56ab256d8d02838ac3c345408edf5a4 100644 (file)
@@ -79,6 +79,9 @@ void btrfs_clear_lock_blocking_rw(struct extent_buffer *eb, int rw)
                write_lock(&eb->lock);
                WARN_ON(atomic_read(&eb->spinning_writers));
                atomic_inc(&eb->spinning_writers);
+               /*
+                * atomic_dec_and_test implies a barrier for waitqueue_active
+                */
                if (atomic_dec_and_test(&eb->blocking_writers) &&
                    waitqueue_active(&eb->write_lock_wq))
                        wake_up(&eb->write_lock_wq);
@@ -86,6 +89,9 @@ void btrfs_clear_lock_blocking_rw(struct extent_buffer *eb, int rw)
                BUG_ON(atomic_read(&eb->blocking_readers) == 0);
                read_lock(&eb->lock);
                atomic_inc(&eb->spinning_readers);
+               /*
+                * atomic_dec_and_test implies a barrier for waitqueue_active
+                */
                if (atomic_dec_and_test(&eb->blocking_readers) &&
                    waitqueue_active(&eb->read_lock_wq))
                        wake_up(&eb->read_lock_wq);
@@ -229,6 +235,9 @@ void btrfs_tree_read_unlock_blocking(struct extent_buffer *eb)
        }
        btrfs_assert_tree_read_locked(eb);
        WARN_ON(atomic_read(&eb->blocking_readers) == 0);
+       /*
+        * atomic_dec_and_test implies a barrier for waitqueue_active
+        */
        if (atomic_dec_and_test(&eb->blocking_readers) &&
            waitqueue_active(&eb->read_lock_wq))
                wake_up(&eb->read_lock_wq);
index 6fc735869c186c35fb79fa66decc7d3519ed2e93..ff3527192409ae5a928464e16af7643ddbe0aa5c 100644 (file)
@@ -345,6 +345,9 @@ loop_lock:
                pending = pending->bi_next;
                cur->bi_next = NULL;
 
+               /*
+                * atomic_dec_return implies a barrier for waitqueue_active
+                */
                if (atomic_dec_return(&fs_info->nr_async_bios) < limit &&
                    waitqueue_active(&fs_info->async_submit_wait))
                        wake_up(&fs_info->async_submit_wait);