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_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