xref: /OK3568_Linux_fs/kernel/fs/btrfs/free-space-tree.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Copyright (C) 2015 Facebook.  All rights reserved.
4*4882a593Smuzhiyun  */
5*4882a593Smuzhiyun 
6*4882a593Smuzhiyun #ifndef BTRFS_FREE_SPACE_TREE_H
7*4882a593Smuzhiyun #define BTRFS_FREE_SPACE_TREE_H
8*4882a593Smuzhiyun 
9*4882a593Smuzhiyun struct btrfs_caching_control;
10*4882a593Smuzhiyun 
11*4882a593Smuzhiyun /*
12*4882a593Smuzhiyun  * The default size for new free space bitmap items. The last bitmap in a block
13*4882a593Smuzhiyun  * group may be truncated, and none of the free space tree code assumes that
14*4882a593Smuzhiyun  * existing bitmaps are this size.
15*4882a593Smuzhiyun  */
16*4882a593Smuzhiyun #define BTRFS_FREE_SPACE_BITMAP_SIZE 256
17*4882a593Smuzhiyun #define BTRFS_FREE_SPACE_BITMAP_BITS (BTRFS_FREE_SPACE_BITMAP_SIZE * BITS_PER_BYTE)
18*4882a593Smuzhiyun 
19*4882a593Smuzhiyun void set_free_space_tree_thresholds(struct btrfs_block_group *block_group);
20*4882a593Smuzhiyun int btrfs_create_free_space_tree(struct btrfs_fs_info *fs_info);
21*4882a593Smuzhiyun int btrfs_clear_free_space_tree(struct btrfs_fs_info *fs_info);
22*4882a593Smuzhiyun int load_free_space_tree(struct btrfs_caching_control *caching_ctl);
23*4882a593Smuzhiyun int add_block_group_free_space(struct btrfs_trans_handle *trans,
24*4882a593Smuzhiyun 			       struct btrfs_block_group *block_group);
25*4882a593Smuzhiyun int remove_block_group_free_space(struct btrfs_trans_handle *trans,
26*4882a593Smuzhiyun 				  struct btrfs_block_group *block_group);
27*4882a593Smuzhiyun int add_to_free_space_tree(struct btrfs_trans_handle *trans,
28*4882a593Smuzhiyun 			   u64 start, u64 size);
29*4882a593Smuzhiyun int remove_from_free_space_tree(struct btrfs_trans_handle *trans,
30*4882a593Smuzhiyun 				u64 start, u64 size);
31*4882a593Smuzhiyun 
32*4882a593Smuzhiyun #ifdef CONFIG_BTRFS_FS_RUN_SANITY_TESTS
33*4882a593Smuzhiyun struct btrfs_free_space_info *
34*4882a593Smuzhiyun search_free_space_info(struct btrfs_trans_handle *trans,
35*4882a593Smuzhiyun 		       struct btrfs_block_group *block_group,
36*4882a593Smuzhiyun 		       struct btrfs_path *path, int cow);
37*4882a593Smuzhiyun int __add_to_free_space_tree(struct btrfs_trans_handle *trans,
38*4882a593Smuzhiyun 			     struct btrfs_block_group *block_group,
39*4882a593Smuzhiyun 			     struct btrfs_path *path, u64 start, u64 size);
40*4882a593Smuzhiyun int __remove_from_free_space_tree(struct btrfs_trans_handle *trans,
41*4882a593Smuzhiyun 				  struct btrfs_block_group *block_group,
42*4882a593Smuzhiyun 				  struct btrfs_path *path, u64 start, u64 size);
43*4882a593Smuzhiyun int convert_free_space_to_bitmaps(struct btrfs_trans_handle *trans,
44*4882a593Smuzhiyun 				  struct btrfs_block_group *block_group,
45*4882a593Smuzhiyun 				  struct btrfs_path *path);
46*4882a593Smuzhiyun int convert_free_space_to_extents(struct btrfs_trans_handle *trans,
47*4882a593Smuzhiyun 				  struct btrfs_block_group *block_group,
48*4882a593Smuzhiyun 				  struct btrfs_path *path);
49*4882a593Smuzhiyun int free_space_test_bit(struct btrfs_block_group *block_group,
50*4882a593Smuzhiyun 			struct btrfs_path *path, u64 offset);
51*4882a593Smuzhiyun #endif
52*4882a593Smuzhiyun 
53*4882a593Smuzhiyun #endif
54