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 14void btrfs_tree_lock(struct extent_buffer *eb); 15void btrfs_tree_unlock(struct extent_buffer *eb); 16 17void btrfs_tree_read_lock(struct extent_buffer *eb); 18void btrfs_tree_read_unlock(struct extent_buffer *eb); 19void btrfs_tree_read_unlock_blocking(struct extent_buffer *eb); 20void btrfs_set_lock_blocking_rw(struct extent_buffer *eb, int rw); 21void btrfs_clear_lock_blocking_rw(struct extent_buffer *eb, int rw); 22void btrfs_assert_tree_locked(struct extent_buffer *eb); 23int btrfs_try_tree_read_lock(struct extent_buffer *eb); 24int btrfs_try_tree_write_lock(struct extent_buffer *eb); 25int btrfs_tree_read_lock_atomic(struct extent_buffer *eb); 26 27 28static inline void btrfs_tree_unlock_rw(struct extent_buffer *eb, int rw) 29{ 30 if (rw == BTRFS_WRITE_LOCK || rw == BTRFS_WRITE_LOCK_BLOCKING) 31 btrfs_tree_unlock(eb); 32 else if (rw == BTRFS_READ_LOCK_BLOCKING) 33 btrfs_tree_read_unlock_blocking(eb); 34 else if (rw == BTRFS_READ_LOCK) 35 btrfs_tree_read_unlock(eb); 36 else 37 BUG(); 38} 39 40static inline void btrfs_set_lock_blocking(struct extent_buffer *eb) 41{ 42 btrfs_set_lock_blocking_rw(eb, BTRFS_WRITE_LOCK); 43} 44 45static inline void btrfs_clear_lock_blocking(struct extent_buffer *eb) 46{ 47 btrfs_clear_lock_blocking_rw(eb, BTRFS_WRITE_LOCK_BLOCKING); 48} 49#endif 50