xref: /openbmc/linux/fs/btrfs/free-space-tree.h (revision 1d6a4fc8)
19888c340SDavid Sterba /* SPDX-License-Identifier: GPL-2.0 */
2a5ed9182SOmar Sandoval /*
3a5ed9182SOmar Sandoval  * Copyright (C) 2015 Facebook.  All rights reserved.
4a5ed9182SOmar Sandoval  */
5a5ed9182SOmar Sandoval 
69888c340SDavid Sterba #ifndef BTRFS_FREE_SPACE_TREE_H
79888c340SDavid Sterba #define BTRFS_FREE_SPACE_TREE_H
8a5ed9182SOmar Sandoval 
9aac0023cSJosef Bacik struct btrfs_caching_control;
10aac0023cSJosef Bacik 
11a5ed9182SOmar Sandoval /*
12a5ed9182SOmar Sandoval  * The default size for new free space bitmap items. The last bitmap in a block
13a5ed9182SOmar Sandoval  * group may be truncated, and none of the free space tree code assumes that
14a5ed9182SOmar Sandoval  * existing bitmaps are this size.
15a5ed9182SOmar Sandoval  */
16a5ed9182SOmar Sandoval #define BTRFS_FREE_SPACE_BITMAP_SIZE 256
17a5ed9182SOmar Sandoval #define BTRFS_FREE_SPACE_BITMAP_BITS (BTRFS_FREE_SPACE_BITMAP_SIZE * BITS_PER_BYTE)
18a5ed9182SOmar Sandoval 
1932da5386SDavid Sterba void set_free_space_tree_thresholds(struct btrfs_block_group *block_group);
20a5ed9182SOmar Sandoval int btrfs_create_free_space_tree(struct btrfs_fs_info *fs_info);
21*1d6a4fc8SQu Wenruo int btrfs_delete_free_space_tree(struct btrfs_fs_info *fs_info);
22*1d6a4fc8SQu Wenruo int btrfs_rebuild_free_space_tree(struct btrfs_fs_info *fs_info);
23a5ed9182SOmar Sandoval int load_free_space_tree(struct btrfs_caching_control *caching_ctl);
24a5ed9182SOmar Sandoval int add_block_group_free_space(struct btrfs_trans_handle *trans,
2532da5386SDavid Sterba 			       struct btrfs_block_group *block_group);
26a5ed9182SOmar Sandoval int remove_block_group_free_space(struct btrfs_trans_handle *trans,
2732da5386SDavid Sterba 				  struct btrfs_block_group *block_group);
28a5ed9182SOmar Sandoval int add_to_free_space_tree(struct btrfs_trans_handle *trans,
29a5ed9182SOmar Sandoval 			   u64 start, u64 size);
30a5ed9182SOmar Sandoval int remove_from_free_space_tree(struct btrfs_trans_handle *trans,
31a5ed9182SOmar Sandoval 				u64 start, u64 size);
32a5ed9182SOmar Sandoval 
332d77ab3cSNikolay Borisov #ifdef CONFIG_BTRFS_FS_RUN_SANITY_TESTS
34a5ed9182SOmar Sandoval struct btrfs_free_space_info *
35a5ed9182SOmar Sandoval search_free_space_info(struct btrfs_trans_handle *trans,
3632da5386SDavid Sterba 		       struct btrfs_block_group *block_group,
37a5ed9182SOmar Sandoval 		       struct btrfs_path *path, int cow);
38a5ed9182SOmar Sandoval int __add_to_free_space_tree(struct btrfs_trans_handle *trans,
3932da5386SDavid Sterba 			     struct btrfs_block_group *block_group,
40a5ed9182SOmar Sandoval 			     struct btrfs_path *path, u64 start, u64 size);
41a5ed9182SOmar Sandoval int __remove_from_free_space_tree(struct btrfs_trans_handle *trans,
4232da5386SDavid Sterba 				  struct btrfs_block_group *block_group,
43a5ed9182SOmar Sandoval 				  struct btrfs_path *path, u64 start, u64 size);
44a5ed9182SOmar Sandoval int convert_free_space_to_bitmaps(struct btrfs_trans_handle *trans,
4532da5386SDavid Sterba 				  struct btrfs_block_group *block_group,
46a5ed9182SOmar Sandoval 				  struct btrfs_path *path);
47a5ed9182SOmar Sandoval int convert_free_space_to_extents(struct btrfs_trans_handle *trans,
4832da5386SDavid Sterba 				  struct btrfs_block_group *block_group,
49a5ed9182SOmar Sandoval 				  struct btrfs_path *path);
5032da5386SDavid Sterba int free_space_test_bit(struct btrfs_block_group *block_group,
51a5ed9182SOmar Sandoval 			struct btrfs_path *path, u64 offset);
522d77ab3cSNikolay Borisov #endif
53a5ed9182SOmar Sandoval 
54a5ed9182SOmar Sandoval #endif
55