linux/fs/btrfs/locking.h
<<
>>
Prefs
   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