• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/fs/btrfs/

Lines Matching defs:block_group

43 static inline u64 offset_to_bitmap(struct btrfs_block_group_cache *block_group,
49 bytes_per_bitmap = BITS_PER_BITMAP * block_group->sectorsize;
50 bitmap_start = offset - block_group->key.objectid;
53 bitmap_start += block_group->key.objectid;
111 tree_search_offset(struct btrfs_block_group_cache *block_group,
114 struct rb_node *n = block_group->free_space_offset.rb_node;
211 block_group->sectorsize > offset)
222 block_group->sectorsize > offset)
237 static void unlink_free_space(struct btrfs_block_group_cache *block_group,
240 rb_erase(&info->offset_index, &block_group->free_space_offset);
241 block_group->free_extents--;
242 block_group->free_space -= info->bytes;
245 static int link_free_space(struct btrfs_block_group_cache *block_group,
251 ret = tree_insert_offset(&block_group->free_space_offset, info->offset,
256 block_group->free_space += info->bytes;
257 block_group->free_extents++;
261 static void recalculate_thresholds(struct btrfs_block_group_cache *block_group)
273 (div64_u64(block_group->key.offset, 1024 * 1024 * 1024));
280 bitmap_bytes = (block_group->total_bitmaps + 1) * PAGE_CACHE_SIZE;
283 block_group->extents_thresh = 0;
294 block_group->extents_thresh =
298 static void bitmap_clear_bits(struct btrfs_block_group_cache *block_group,
305 start = offset_to_bit(info->offset, block_group->sectorsize, offset);
306 end = start + bytes_to_bits(bytes, block_group->sectorsize);
313 block_group->free_space -= bytes;
316 static void bitmap_set_bits(struct btrfs_block_group_cache *block_group,
323 start = offset_to_bit(info->offset, block_group->sectorsize, offset);
324 end = start + bytes_to_bits(bytes, block_group->sectorsize);
331 block_group->free_space += bytes;
334 static int search_bitmap(struct btrfs_block_group_cache *block_group,
342 i = offset_to_bit(bitmap_info->offset, block_group->sectorsize,
344 bits = bytes_to_bits(*bytes, block_group->sectorsize);
359 *offset = (u64)(i * block_group->sectorsize) +
361 *bytes = (u64)(found_bits) * block_group->sectorsize;
369 *block_group, u64 *offset,
376 if (!block_group->free_space_offset.rb_node)
379 entry = tree_search_offset(block_group,
380 offset_to_bitmap(block_group, *offset),
391 ret = search_bitmap(block_group, entry, offset, bytes);
405 static void add_new_bitmap(struct btrfs_block_group_cache *block_group,
408 u64 bytes_per_bg = BITS_PER_BITMAP * block_group->sectorsize;
409 int max_bitmaps = (int)div64_u64(block_group->key.offset +
411 BUG_ON(block_group->total_bitmaps >= max_bitmaps);
413 info->offset = offset_to_bitmap(block_group, offset);
415 link_free_space(block_group, info);
416 block_group->total_bitmaps++;
418 recalculate_thresholds(block_group);
421 static noinline int remove_from_bitmap(struct btrfs_block_group_cache *block_group,
431 (u64)(BITS_PER_BITMAP * block_group->sectorsize) - 1;
435 ret = search_bitmap(block_group, bitmap_info, &search_start,
440 bitmap_clear_bits(block_group, bitmap_info, *offset,
445 bitmap_clear_bits(block_group, bitmap_info, *offset, *bytes);
452 unlink_free_space(block_group, bitmap_info);
455 block_group->total_bitmaps--;
456 recalculate_thresholds(block_group);
484 ret = search_bitmap(block_group, bitmap_info, &search_start,
491 unlink_free_space(block_group, bitmap_info);
494 block_group->total_bitmaps--;
495 recalculate_thresholds(block_group);
501 static int insert_into_bitmap(struct btrfs_block_group_cache *block_group,
513 if (block_group->free_extents < block_group->extents_thresh &&
514 info->bytes > block_group->sectorsize * 4)
521 if (BITS_PER_BITMAP * block_group->sectorsize >
522 block_group->key.offset)
529 bitmap_info = tree_search_offset(block_group,
530 offset_to_bitmap(block_group, offset),
538 (u64)(BITS_PER_BITMAP * block_group->sectorsize);
541 bitmap_set_bits(block_group, bitmap_info, offset,
547 bitmap_set_bits(block_group, bitmap_info, offset, bytes);
561 add_new_bitmap(block_group, info, offset);
566 spin_unlock(&block_group->tree_lock);
573 spin_lock(&block_group->tree_lock);
581 spin_lock(&block_group->tree_lock);
599 int btrfs_add_free_space(struct btrfs_block_group_cache *block_group,
614 spin_lock(&block_group->tree_lock);
621 right_info = tree_search_offset(block_group, offset + bytes, 0, 0);
626 left_info = tree_search_offset(block_group, offset - 1, 0, 0);
635 ret = insert_into_bitmap(block_group, info);
646 unlink_free_space(block_group, right_info);
653 unlink_free_space(block_group, left_info);
659 ret = link_free_space(block_group, info);
663 spin_unlock(&block_group->tree_lock);
673 int btrfs_remove_free_space(struct btrfs_block_group_cache *block_group,
680 spin_lock(&block_group->tree_lock);
683 info = tree_search_offset(block_group, offset, 0, 0);
689 info = tree_search_offset(block_group,
690 offset_to_bitmap(block_group, offset),
706 block_group->sectorsize - 1;
726 unlink_free_space(block_group, info);
729 block_group->total_bitmaps--;
736 unlink_free_space(block_group, info);
739 link_free_space(block_group, info);
753 unlink_free_space(block_group, info);
759 ret = link_free_space(block_group, info);
769 spin_unlock(&block_group->tree_lock);
774 ret = btrfs_add_free_space(block_group, old_start,
780 ret = remove_from_bitmap(block_group, info, &offset, &bytes);
785 spin_unlock(&block_group->tree_lock);
790 void btrfs_dump_free_space(struct btrfs_block_group_cache *block_group,
797 for (n = rb_first(&block_group->free_space_offset); n; n = rb_next(n)) {
807 list_empty(&block_group->cluster_list) ? "no" : "yes");
812 u64 btrfs_block_group_free_space(struct btrfs_block_group_cache *block_group)
818 for (n = rb_first(&block_group->free_space_offset); n;
835 struct btrfs_block_group_cache *block_group,
843 if (cluster->block_group != block_group)
847 cluster->block_group = NULL;
861 tree_insert_offset(&block_group->free_space_offset,
868 btrfs_put_block_group(block_group);
872 void btrfs_remove_free_space_cache(struct btrfs_block_group_cache *block_group)
879 spin_lock(&block_group->tree_lock);
880 while ((head = block_group->cluster_list.next) !=
881 &block_group->cluster_list) {
885 WARN_ON(cluster->block_group != block_group);
886 __btrfs_return_cluster_to_free_space(block_group, cluster);
888 spin_unlock(&block_group->tree_lock);
890 spin_lock(&block_group->tree_lock);
894 while ((node = rb_last(&block_group->free_space_offset)) != NULL) {
896 unlink_free_space(block_group, info);
901 spin_unlock(&block_group->tree_lock);
903 spin_lock(&block_group->tree_lock);
907 spin_unlock(&block_group->tree_lock);
910 u64 btrfs_find_space_for_alloc(struct btrfs_block_group_cache *block_group,
917 spin_lock(&block_group->tree_lock);
918 entry = find_free_space(block_group, &offset, &bytes_search, 0);
924 bitmap_clear_bits(block_group, entry, offset, bytes);
926 unlink_free_space(block_group, entry);
929 block_group->total_bitmaps--;
930 recalculate_thresholds(block_group);
933 unlink_free_space(block_group, entry);
939 link_free_space(block_group, entry);
943 spin_unlock(&block_group->tree_lock);
957 struct btrfs_block_group_cache *block_group,
964 if (!block_group) {
965 block_group = cluster->block_group;
966 if (!block_group) {
970 } else if (cluster->block_group != block_group) {
975 atomic_inc(&block_group->count);
979 spin_lock(&block_group->tree_lock);
980 ret = __btrfs_return_cluster_to_free_space(block_group, cluster);
981 spin_unlock(&block_group->tree_lock);
984 btrfs_put_block_group(block_group);
988 static u64 btrfs_alloc_from_bitmap(struct btrfs_block_group_cache *block_group,
998 spin_lock(&block_group->tree_lock);
1004 if (cluster->block_group != block_group)
1013 entry = tree_search_offset(block_group,
1014 offset_to_bitmap(block_group, search_start),
1022 err = search_bitmap(block_group, entry, &search_start,
1028 bitmap_clear_bits(block_group, entry, ret, bytes);
1031 spin_unlock(&block_group->tree_lock);
1041 u64 btrfs_alloc_from_cluster(struct btrfs_block_group_cache *block_group,
1050 return btrfs_alloc_from_bitmap(block_group, cluster, bytes,
1057 if (cluster->block_group != block_group)
1094 static int btrfs_bitmap_cluster(struct btrfs_block_group_cache *block_group,
1108 i = offset_to_bit(entry->offset, block_group->sectorsize,
1110 search_bits = bytes_to_bits(min_bytes, block_group->sectorsize);
1111 total_bits = bytes_to_bits(bytes, block_group->sectorsize);
1137 if (cluster->max_size < found_bits * block_group->sectorsize)
1138 cluster->max_size = found_bits * block_group->sectorsize;
1150 cluster->window_start = start * block_group->sectorsize +
1167 struct btrfs_block_group_cache *block_group,
1185 } else if (block_group->flags & BTRFS_BLOCK_GROUP_METADATA) {
1198 spin_lock(&block_group->tree_lock);
1202 if (cluster->block_group) {
1207 entry = tree_search_offset(block_group, offset, found_bitmap, 1);
1223 ret = btrfs_bitmap_cluster(block_group, entry, cluster,
1318 rb_erase(&entry->offset_index, &block_group->free_space_offset);
1332 atomic_inc(&block_group->count);
1333 list_add_tail(&cluster->block_group_list, &block_group->cluster_list);
1334 cluster->block_group = block_group;
1337 spin_unlock(&block_group->tree_lock);
1353 cluster->block_group = NULL;