1 /* 2 * Copyright (C) 2015 Facebook. All rights reserved. 3 * 4 * This program is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU General Public 6 * License v2 as published by the Free Software Foundation. 7 * 8 * This program is distributed in the hope that it will be useful, 9 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 11 * General Public License for more details. 12 * 13 * You should have received a copy of the GNU General Public 14 * License along with this program; if not, write to the 15 * Free Software Foundation, Inc., 59 Temple Place - Suite 330, 16 * Boston, MA 021110-1307, USA. 17 */ 18 19 #ifndef __BTRFS_FREE_SPACE_TREE 20 #define __BTRFS_FREE_SPACE_TREE 21 22 /* 23 * The default size for new free space bitmap items. The last bitmap in a block 24 * group may be truncated, and none of the free space tree code assumes that 25 * existing bitmaps are this size. 26 */ 27 #define BTRFS_FREE_SPACE_BITMAP_SIZE 256 28 #define BTRFS_FREE_SPACE_BITMAP_BITS (BTRFS_FREE_SPACE_BITMAP_SIZE * BITS_PER_BYTE) 29 30 void set_free_space_tree_thresholds(struct btrfs_block_group_cache *block_group); 31 int btrfs_create_free_space_tree(struct btrfs_fs_info *fs_info); 32 int btrfs_clear_free_space_tree(struct btrfs_fs_info *fs_info); 33 int load_free_space_tree(struct btrfs_caching_control *caching_ctl); 34 int add_block_group_free_space(struct btrfs_trans_handle *trans, 35 struct btrfs_fs_info *fs_info, 36 struct btrfs_block_group_cache *block_group); 37 int remove_block_group_free_space(struct btrfs_trans_handle *trans, 38 struct btrfs_fs_info *fs_info, 39 struct btrfs_block_group_cache *block_group); 40 int add_to_free_space_tree(struct btrfs_trans_handle *trans, 41 struct btrfs_fs_info *fs_info, 42 u64 start, u64 size); 43 int remove_from_free_space_tree(struct btrfs_trans_handle *trans, 44 struct btrfs_fs_info *fs_info, 45 u64 start, u64 size); 46 47 /* Exposed for testing. */ 48 struct btrfs_free_space_info * 49 search_free_space_info(struct btrfs_trans_handle *trans, 50 struct btrfs_fs_info *fs_info, 51 struct btrfs_block_group_cache *block_group, 52 struct btrfs_path *path, int cow); 53 int __add_to_free_space_tree(struct btrfs_trans_handle *trans, 54 struct btrfs_fs_info *fs_info, 55 struct btrfs_block_group_cache *block_group, 56 struct btrfs_path *path, u64 start, u64 size); 57 int __remove_from_free_space_tree(struct btrfs_trans_handle *trans, 58 struct btrfs_fs_info *fs_info, 59 struct btrfs_block_group_cache *block_group, 60 struct btrfs_path *path, u64 start, u64 size); 61 int convert_free_space_to_bitmaps(struct btrfs_trans_handle *trans, 62 struct btrfs_fs_info *fs_info, 63 struct btrfs_block_group_cache *block_group, 64 struct btrfs_path *path); 65 int convert_free_space_to_extents(struct btrfs_trans_handle *trans, 66 struct btrfs_fs_info *fs_info, 67 struct btrfs_block_group_cache *block_group, 68 struct btrfs_path *path); 69 int free_space_test_bit(struct btrfs_block_group_cache *block_group, 70 struct btrfs_path *path, u64 offset); 71 72 #endif 73