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_read(struct extent_buffer *eb); 21void btrfs_set_lock_blocking_write(struct extent_buffer *eb); 22void btrfs_clear_lock_blocking_read(struct extent_buffer *eb); 23void btrfs_clear_lock_blocking_write(struct extent_buffer *eb); 24void btrfs_assert_tree_locked(struct extent_buffer *eb); 25int btrfs_try_tree_read_lock(struct extent_buffer *eb); 26int btrfs_try_tree_write_lock(struct extent_buffer *eb); 27int btrfs_tree_read_lock_atomic(struct extent_buffer *eb); 28 29 30static 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