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