btrfs: replace btrfs_set_lock_blocking_rw with appropriate helpers
[sfrench/cifs-2.6.git] / fs / btrfs / locking.h
index 29135def468e97ab240ddf11d0c51c2555dbb5dc..9d9f649e35ccf75714b0b1c83fa9e44ee86a3197 100644 (file)
@@ -17,8 +17,10 @@ void btrfs_tree_unlock(struct extent_buffer *eb);
 void btrfs_tree_read_lock(struct extent_buffer *eb);
 void btrfs_tree_read_unlock(struct extent_buffer *eb);
 void btrfs_tree_read_unlock_blocking(struct extent_buffer *eb);
-void btrfs_set_lock_blocking_rw(struct extent_buffer *eb, int rw);
-void btrfs_clear_lock_blocking_rw(struct extent_buffer *eb, int rw);
+void btrfs_set_lock_blocking_read(struct extent_buffer *eb);
+void btrfs_set_lock_blocking_write(struct extent_buffer *eb);
+void btrfs_clear_lock_blocking_read(struct extent_buffer *eb);
+void btrfs_clear_lock_blocking_write(struct extent_buffer *eb);
 void btrfs_assert_tree_locked(struct extent_buffer *eb);
 int btrfs_try_tree_read_lock(struct extent_buffer *eb);
 int btrfs_try_tree_write_lock(struct extent_buffer *eb);
@@ -37,13 +39,21 @@ static inline void btrfs_tree_unlock_rw(struct extent_buffer *eb, int rw)
                BUG();
 }
 
-static inline void btrfs_set_lock_blocking(struct extent_buffer *eb)
+/*
+ * If we currently have a spinning reader or writer lock (indicated by the rw
+ * flag) this will bump the count of blocking holders and drop the spinlock.
+ */
+static inline void btrfs_set_lock_blocking_rw(struct extent_buffer *eb, int rw)
 {
-       btrfs_set_lock_blocking_rw(eb, BTRFS_WRITE_LOCK);
+       if (rw == BTRFS_WRITE_LOCK)
+               btrfs_set_lock_blocking_write(eb);
+       else if (rw == BTRFS_READ_LOCK)
+               btrfs_set_lock_blocking_read(eb);
 }
 
-static inline void btrfs_clear_lock_blocking(struct extent_buffer *eb)
+static inline void btrfs_set_lock_blocking(struct extent_buffer *eb)
 {
-       btrfs_clear_lock_blocking_rw(eb, BTRFS_WRITE_LOCK_BLOCKING);
+       btrfs_set_lock_blocking_write(eb);
 }
+
 #endif