2018-04-03 20:16:55 +03:00
/* SPDX-License-Identifier: GPL-2.0 */
2015-09-30 06:50:35 +03:00
/*
* Copyright ( C ) 2015 Facebook . All rights reserved .
*/
2018-04-03 20:16:55 +03:00
# ifndef BTRFS_FREE_SPACE_TREE_H
# define BTRFS_FREE_SPACE_TREE_H
2015-09-30 06:50:35 +03:00
2024-01-27 05:19:56 +03:00
# include <linux/bits.h>
2019-06-20 22:37:44 +03:00
struct btrfs_caching_control ;
2024-01-27 05:19:56 +03:00
struct btrfs_fs_info ;
struct btrfs_path ;
struct btrfs_block_group ;
struct btrfs_trans_handle ;
2019-06-20 22:37:44 +03:00
2015-09-30 06:50:35 +03:00
/*
* The default size for new free space bitmap items . The last bitmap in a block
* group may be truncated , and none of the free space tree code assumes that
* existing bitmaps are this size .
*/
# define BTRFS_FREE_SPACE_BITMAP_SIZE 256
# define BTRFS_FREE_SPACE_BITMAP_BITS (BTRFS_FREE_SPACE_BITMAP_SIZE * BITS_PER_BYTE)
2019-10-29 21:20:18 +03:00
void set_free_space_tree_thresholds ( struct btrfs_block_group * block_group ) ;
2015-09-30 06:50:35 +03:00
int btrfs_create_free_space_tree ( struct btrfs_fs_info * fs_info ) ;
2023-04-28 09:13:05 +03:00
int btrfs_delete_free_space_tree ( struct btrfs_fs_info * fs_info ) ;
int btrfs_rebuild_free_space_tree ( struct btrfs_fs_info * fs_info ) ;
2015-09-30 06:50:35 +03:00
int load_free_space_tree ( struct btrfs_caching_control * caching_ctl ) ;
int add_block_group_free_space ( struct btrfs_trans_handle * trans ,
2019-10-29 21:20:18 +03:00
struct btrfs_block_group * block_group ) ;
2015-09-30 06:50:35 +03:00
int remove_block_group_free_space ( struct btrfs_trans_handle * trans ,
2019-10-29 21:20:18 +03:00
struct btrfs_block_group * block_group ) ;
2015-09-30 06:50:35 +03:00
int add_to_free_space_tree ( struct btrfs_trans_handle * trans ,
u64 start , u64 size ) ;
int remove_from_free_space_tree ( struct btrfs_trans_handle * trans ,
u64 start , u64 size ) ;
2017-08-16 18:15:23 +03:00
# ifdef CONFIG_BTRFS_FS_RUN_SANITY_TESTS
2015-09-30 06:50:35 +03:00
struct btrfs_free_space_info *
search_free_space_info ( struct btrfs_trans_handle * trans ,
2019-10-29 21:20:18 +03:00
struct btrfs_block_group * block_group ,
2015-09-30 06:50:35 +03:00
struct btrfs_path * path , int cow ) ;
int __add_to_free_space_tree ( struct btrfs_trans_handle * trans ,
2019-10-29 21:20:18 +03:00
struct btrfs_block_group * block_group ,
2015-09-30 06:50:35 +03:00
struct btrfs_path * path , u64 start , u64 size ) ;
int __remove_from_free_space_tree ( struct btrfs_trans_handle * trans ,
2019-10-29 21:20:18 +03:00
struct btrfs_block_group * block_group ,
2015-09-30 06:50:35 +03:00
struct btrfs_path * path , u64 start , u64 size ) ;
int convert_free_space_to_bitmaps ( struct btrfs_trans_handle * trans ,
2019-10-29 21:20:18 +03:00
struct btrfs_block_group * block_group ,
2015-09-30 06:50:35 +03:00
struct btrfs_path * path ) ;
int convert_free_space_to_extents ( struct btrfs_trans_handle * trans ,
2019-10-29 21:20:18 +03:00
struct btrfs_block_group * block_group ,
2015-09-30 06:50:35 +03:00
struct btrfs_path * path ) ;
2019-10-29 21:20:18 +03:00
int free_space_test_bit ( struct btrfs_block_group * block_group ,
2015-09-30 06:50:35 +03:00
struct btrfs_path * path , u64 offset ) ;
2017-08-16 18:15:23 +03:00
# endif
2015-09-30 06:50:35 +03:00
# endif