1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * Copyright (C) 2008 Oracle. All rights reserved. 4 */ 5 6 #ifndef BTRFS_LOCKING_H 7 #define BTRFS_LOCKING_H 8 9 #define BTRFS_WRITE_LOCK 1 10 #define BTRFS_READ_LOCK 2 11 #define BTRFS_WRITE_LOCK_BLOCKING 3 12 #define BTRFS_READ_LOCK_BLOCKING 4 13 14 void btrfs_tree_lock(struct extent_buffer *eb); 15 void btrfs_tree_unlock(struct extent_buffer *eb); 16 17 void btrfs_tree_read_lock(struct extent_buffer *eb); 18 void btrfs_tree_read_unlock(struct extent_buffer *eb); 19 void btrfs_tree_read_unlock_blocking(struct extent_buffer *eb); 20 void btrfs_set_lock_blocking_read(struct extent_buffer *eb); 21 void btrfs_set_lock_blocking_write(struct extent_buffer *eb); 22 void btrfs_clear_lock_blocking_read(struct extent_buffer *eb); 23 void btrfs_clear_lock_blocking_write(struct extent_buffer *eb); 24 void btrfs_assert_tree_locked(struct extent_buffer *eb); 25 int btrfs_try_tree_read_lock(struct extent_buffer *eb); 26 int btrfs_try_tree_write_lock(struct extent_buffer *eb); 27 int btrfs_tree_read_lock_atomic(struct extent_buffer *eb); 28 29 30 static inline void btrfs_tree_unlock_rw(struct extent_buffer *eb, int rw) 31 { 32 if (rw == BTRFS_WRITE_LOCK || rw == BTRFS_WRITE_LOCK_BLOCKING) 33 btrfs_tree_unlock(eb); 34 else if (rw == BTRFS_READ_LOCK_BLOCKING) 35 btrfs_tree_read_unlock_blocking(eb); 36 else if (rw == BTRFS_READ_LOCK) 37 btrfs_tree_read_unlock(eb); 38 else 39 BUG(); 40 } 41 42 #endif 43