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