aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/btrfs/compression.c3
-rw-r--r--fs/btrfs/extent-tree.c3
-rw-r--r--fs/btrfs/locking.c3
-rw-r--r--fs/btrfs/ordered-data.c6
-rw-r--r--fs/btrfs/transaction.c3
5 files changed, 16 insertions, 2 deletions
diff --git a/fs/btrfs/compression.c b/fs/btrfs/compression.c
index 57ee8ca29b06..3a9317ce67f8 100644
--- a/fs/btrfs/compression.c
+++ b/fs/btrfs/compression.c
@@ -839,6 +839,9 @@ static void free_workspace(int type, struct list_head *workspace)
839 btrfs_compress_op[idx]->free_workspace(workspace); 839 btrfs_compress_op[idx]->free_workspace(workspace);
840 atomic_dec(alloc_workspace); 840 atomic_dec(alloc_workspace);
841wake: 841wake:
842 /*
843 * Make sure counter is updated before we wake up waiters.
844 */
842 smp_mb(); 845 smp_mb();
843 if (waitqueue_active(workspace_wait)) 846 if (waitqueue_active(workspace_wait))
844 wake_up(workspace_wait); 847 wake_up(workspace_wait);
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
index 9f9604201333..59eb92f65c62 100644
--- a/fs/btrfs/extent-tree.c
+++ b/fs/btrfs/extent-tree.c
@@ -10363,8 +10363,7 @@ void btrfs_end_write_no_snapshoting(struct btrfs_root *root)
10363{ 10363{
10364 percpu_counter_dec(&root->subv_writers->counter); 10364 percpu_counter_dec(&root->subv_writers->counter);
10365 /* 10365 /*
10366 * Make sure counter is updated before we wake up 10366 * Make sure counter is updated before we wake up waiters.
10367 * waiters.
10368 */ 10367 */
10369 smp_mb(); 10368 smp_mb();
10370 if (waitqueue_active(&root->subv_writers->wait)) 10369 if (waitqueue_active(&root->subv_writers->wait))
diff --git a/fs/btrfs/locking.c b/fs/btrfs/locking.c
index d7e6baf1b205..03f8630dbaf2 100644
--- a/fs/btrfs/locking.c
+++ b/fs/btrfs/locking.c
@@ -280,6 +280,9 @@ void btrfs_tree_unlock(struct extent_buffer *eb)
280 if (blockers) { 280 if (blockers) {
281 WARN_ON(atomic_read(&eb->spinning_writers)); 281 WARN_ON(atomic_read(&eb->spinning_writers));
282 atomic_dec(&eb->blocking_writers); 282 atomic_dec(&eb->blocking_writers);
283 /*
284 * Make sure counter is updated before we wake up waiters.
285 */
283 smp_mb(); 286 smp_mb();
284 if (waitqueue_active(&eb->write_lock_wq)) 287 if (waitqueue_active(&eb->write_lock_wq))
285 wake_up(&eb->write_lock_wq); 288 wake_up(&eb->write_lock_wq);
diff --git a/fs/btrfs/ordered-data.c b/fs/btrfs/ordered-data.c
index 52170cf1757e..071005f008c1 100644
--- a/fs/btrfs/ordered-data.c
+++ b/fs/btrfs/ordered-data.c
@@ -345,6 +345,9 @@ int btrfs_dec_test_first_ordered_pending(struct inode *inode,
345 345
346 if (entry->bytes_left == 0) { 346 if (entry->bytes_left == 0) {
347 ret = test_and_set_bit(BTRFS_ORDERED_IO_DONE, &entry->flags); 347 ret = test_and_set_bit(BTRFS_ORDERED_IO_DONE, &entry->flags);
348 /*
349 * Implicit memory barrier after test_and_set_bit
350 */
348 if (waitqueue_active(&entry->wait)) 351 if (waitqueue_active(&entry->wait))
349 wake_up(&entry->wait); 352 wake_up(&entry->wait);
350 } else { 353 } else {
@@ -409,6 +412,9 @@ have_entry:
409 412
410 if (entry->bytes_left == 0) { 413 if (entry->bytes_left == 0) {
411 ret = test_and_set_bit(BTRFS_ORDERED_IO_DONE, &entry->flags); 414 ret = test_and_set_bit(BTRFS_ORDERED_IO_DONE, &entry->flags);
415 /*
416 * Implicit memory barrier after test_and_set_bit
417 */
412 if (waitqueue_active(&entry->wait)) 418 if (waitqueue_active(&entry->wait))
413 wake_up(&entry->wait); 419 wake_up(&entry->wait);
414 } else { 420 } else {
diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c
index e8e5b5a10719..3fd70f797b7d 100644
--- a/fs/btrfs/transaction.c
+++ b/fs/btrfs/transaction.c
@@ -861,6 +861,9 @@ static int __btrfs_end_transaction(struct btrfs_trans_handle *trans,
861 atomic_dec(&cur_trans->num_writers); 861 atomic_dec(&cur_trans->num_writers);
862 extwriter_counter_dec(cur_trans, trans->type); 862 extwriter_counter_dec(cur_trans, trans->type);
863 863
864 /*
865 * Make sure counter is updated before we wake up waiters.
866 */
864 smp_mb(); 867 smp_mb();
865 if (waitqueue_active(&cur_trans->writer_wait)) 868 if (waitqueue_active(&cur_trans->writer_wait))
866 wake_up(&cur_trans->writer_wait); 869 wake_up(&cur_trans->writer_wait);