LCOV - code coverage report
Current view: top level - fs/btrfs - disk-io.h (source / functions) Hit Total Coverage
Test: fstests of 6.5.0-rc3-djwx @ Mon Jul 31 20:08:22 PDT 2023 Lines: 7 7 100.0 %
Date: 2023-07-31 20:08:22 Functions: 1 1 100.0 %

          Line data    Source code
       1             : /* SPDX-License-Identifier: GPL-2.0 */
       2             : /*
       3             :  * Copyright (C) 2007 Oracle.  All rights reserved.
       4             :  */
       5             : 
       6             : #ifndef BTRFS_DISK_IO_H
       7             : #define BTRFS_DISK_IO_H
       8             : 
       9             : #define BTRFS_SUPER_MIRROR_MAX   3
      10             : #define BTRFS_SUPER_MIRROR_SHIFT 12
      11             : 
      12             : /*
      13             :  * Fixed blocksize for all devices, applies to specific ways of reading
      14             :  * metadata like superblock. Must meet the set_blocksize requirements.
      15             :  *
      16             :  * Do not change.
      17             :  */
      18             : #define BTRFS_BDEV_BLOCKSIZE    (4096)
      19             : 
      20             : static inline u64 btrfs_sb_offset(int mirror)
      21             : {
      22     2784302 :         u64 start = SZ_16K;
      23     2784302 :         if (mirror)
      24     1361638 :                 return start << (BTRFS_SUPER_MIRROR_SHIFT * mirror);
      25             :         return BTRFS_SUPER_INFO_OFFSET;
      26             : }
      27             : 
      28             : struct btrfs_device;
      29             : struct btrfs_fs_devices;
      30             : struct btrfs_tree_parent_check;
      31             : 
      32             : void btrfs_check_leaked_roots(struct btrfs_fs_info *fs_info);
      33             : void btrfs_init_fs_info(struct btrfs_fs_info *fs_info);
      34             : struct extent_buffer *read_tree_block(struct btrfs_fs_info *fs_info, u64 bytenr,
      35             :                                       struct btrfs_tree_parent_check *check);
      36             : struct extent_buffer *btrfs_find_create_tree_block(
      37             :                                                 struct btrfs_fs_info *fs_info,
      38             :                                                 u64 bytenr, u64 owner_root,
      39             :                                                 int level);
      40             : void btrfs_clear_buffer_dirty(struct btrfs_trans_handle *trans,
      41             :                               struct extent_buffer *buf);
      42             : void btrfs_clear_oneshot_options(struct btrfs_fs_info *fs_info);
      43             : int btrfs_start_pre_rw_mount(struct btrfs_fs_info *fs_info);
      44             : int btrfs_check_super_csum(struct btrfs_fs_info *fs_info,
      45             :                            const struct btrfs_super_block *disk_sb);
      46             : int __cold open_ctree(struct super_block *sb,
      47             :                struct btrfs_fs_devices *fs_devices,
      48             :                char *options);
      49             : void __cold close_ctree(struct btrfs_fs_info *fs_info);
      50             : int btrfs_validate_super(struct btrfs_fs_info *fs_info,
      51             :                          struct btrfs_super_block *sb, int mirror_num);
      52             : int btrfs_check_features(struct btrfs_fs_info *fs_info, bool is_rw_mount);
      53             : int write_all_supers(struct btrfs_fs_info *fs_info, int max_mirrors);
      54             : struct btrfs_super_block *btrfs_read_dev_super(struct block_device *bdev);
      55             : struct btrfs_super_block *btrfs_read_dev_one_super(struct block_device *bdev,
      56             :                                                    int copy_num, bool drop_cache);
      57             : int btrfs_commit_super(struct btrfs_fs_info *fs_info);
      58             : struct btrfs_root *btrfs_read_tree_root(struct btrfs_root *tree_root,
      59             :                                         struct btrfs_key *key);
      60             : int btrfs_insert_fs_root(struct btrfs_fs_info *fs_info,
      61             :                          struct btrfs_root *root);
      62             : void btrfs_free_fs_roots(struct btrfs_fs_info *fs_info);
      63             : 
      64             : struct btrfs_root *btrfs_get_fs_root(struct btrfs_fs_info *fs_info,
      65             :                                      u64 objectid, bool check_ref);
      66             : struct btrfs_root *btrfs_get_new_fs_root(struct btrfs_fs_info *fs_info,
      67             :                                          u64 objectid, dev_t anon_dev);
      68             : struct btrfs_root *btrfs_get_fs_root_commit_root(struct btrfs_fs_info *fs_info,
      69             :                                                  struct btrfs_path *path,
      70             :                                                  u64 objectid);
      71             : int btrfs_global_root_insert(struct btrfs_root *root);
      72             : void btrfs_global_root_delete(struct btrfs_root *root);
      73             : struct btrfs_root *btrfs_global_root(struct btrfs_fs_info *fs_info,
      74             :                                      struct btrfs_key *key);
      75             : struct btrfs_root *btrfs_csum_root(struct btrfs_fs_info *fs_info, u64 bytenr);
      76             : struct btrfs_root *btrfs_extent_root(struct btrfs_fs_info *fs_info, u64 bytenr);
      77             : struct btrfs_root *btrfs_block_group_root(struct btrfs_fs_info *fs_info);
      78             : 
      79             : void btrfs_free_fs_info(struct btrfs_fs_info *fs_info);
      80             : int btrfs_cleanup_fs_roots(struct btrfs_fs_info *fs_info);
      81             : void btrfs_btree_balance_dirty(struct btrfs_fs_info *fs_info);
      82             : void btrfs_btree_balance_dirty_nodelay(struct btrfs_fs_info *fs_info);
      83             : void btrfs_drop_and_free_fs_root(struct btrfs_fs_info *fs_info,
      84             :                                  struct btrfs_root *root);
      85             : int btrfs_validate_extent_buffer(struct extent_buffer *eb,
      86             :                                  struct btrfs_tree_parent_check *check);
      87             : #ifdef CONFIG_BTRFS_FS_RUN_SANITY_TESTS
      88             : struct btrfs_root *btrfs_alloc_dummy_root(struct btrfs_fs_info *fs_info);
      89             : #endif
      90             : 
      91             : /*
      92             :  * This function is used to grab the root, and avoid it is freed when we
      93             :  * access it. But it doesn't ensure that the tree is not dropped.
      94             :  *
      95             :  * If you want to ensure the whole tree is safe, you should use
      96             :  *      fs_info->subvol_srcu
      97             :  */
      98    16217496 : static inline struct btrfs_root *btrfs_grab_root(struct btrfs_root *root)
      99             : {
     100    16217496 :         if (!root)
     101             :                 return NULL;
     102    16205329 :         if (refcount_inc_not_zero(&root->refs))
     103    16205935 :                 return root;
     104             :         return NULL;
     105             : }
     106             : 
     107             : void btrfs_put_root(struct btrfs_root *root);
     108             : void btrfs_mark_buffer_dirty(struct extent_buffer *buf);
     109             : int btrfs_buffer_uptodate(struct extent_buffer *buf, u64 parent_transid,
     110             :                           int atomic);
     111             : int btrfs_read_extent_buffer(struct extent_buffer *buf,
     112             :                              struct btrfs_tree_parent_check *check);
     113             : 
     114             : blk_status_t btree_csum_one_bio(struct btrfs_bio *bbio);
     115             : int btrfs_alloc_log_tree_node(struct btrfs_trans_handle *trans,
     116             :                               struct btrfs_root *root);
     117             : int btrfs_init_log_root_tree(struct btrfs_trans_handle *trans,
     118             :                              struct btrfs_fs_info *fs_info);
     119             : int btrfs_add_log_tree(struct btrfs_trans_handle *trans,
     120             :                        struct btrfs_root *root);
     121             : void btrfs_cleanup_dirty_bgs(struct btrfs_transaction *trans,
     122             :                              struct btrfs_fs_info *fs_info);
     123             : void btrfs_cleanup_one_transaction(struct btrfs_transaction *trans,
     124             :                                   struct btrfs_fs_info *fs_info);
     125             : struct btrfs_root *btrfs_create_tree(struct btrfs_trans_handle *trans,
     126             :                                      u64 objectid);
     127             : int btrfs_get_num_tolerated_disk_barrier_failures(u64 flags);
     128             : int btrfs_get_free_objectid(struct btrfs_root *root, u64 *objectid);
     129             : int btrfs_init_root_free_objectid(struct btrfs_root *root);
     130             : 
     131             : #endif

Generated by: LCOV version 1.14