Lines Matching refs:entry
580 struct btrfs_free_space_entry *entry; in io_ctl_add_entry() local
585 entry = io_ctl->cur; in io_ctl_add_entry()
586 put_unaligned_le64(offset, &entry->offset); in io_ctl_add_entry()
587 put_unaligned_le64(bytes, &entry->bytes); in io_ctl_add_entry()
588 entry->type = (bitmap) ? BTRFS_FREE_SPACE_BITMAP : in io_ctl_add_entry()
648 struct btrfs_free_space *entry, u8 *type) in io_ctl_read_entry() argument
660 entry->offset = get_unaligned_le64(&e->offset); in io_ctl_read_entry()
661 entry->bytes = get_unaligned_le64(&e->bytes); in io_ctl_read_entry()
675 struct btrfs_free_space *entry) in io_ctl_read_bitmap() argument
683 copy_page(entry->bitmap, io_ctl->cur); in io_ctl_read_bitmap()
1249 struct btrfs_free_space *entry, *next; in write_bitmap_entries() local
1253 list_for_each_entry_safe(entry, next, bitmap_list, list) { in write_bitmap_entries()
1254 ret = io_ctl_add_bitmap(io_ctl, entry->bitmap); in write_bitmap_entries()
1257 list_del_init(&entry->list); in write_bitmap_entries()
1278 struct btrfs_free_space *entry, *next; in cleanup_bitmap_list() local
1280 list_for_each_entry_safe(entry, next, bitmap_list, list) in cleanup_bitmap_list()
1281 list_del_init(&entry->list); in cleanup_bitmap_list()
1678 static inline u64 get_max_extent_size(const struct btrfs_free_space *entry) in get_max_extent_size() argument
1680 if (entry->bitmap && entry->max_extent_size) in get_max_extent_size()
1681 return entry->max_extent_size; in get_max_extent_size()
1682 return entry->bytes; in get_max_extent_size()
1691 const struct btrfs_free_space *entry, *exist; in entry_less() local
1693 entry = rb_entry(node, struct btrfs_free_space, bytes_index); in entry_less()
1695 return get_max_extent_size(exist) < get_max_extent_size(entry); in entry_less()
1710 struct btrfs_free_space *entry = NULL, *prev = NULL; in tree_search_offset() local
1716 entry = rb_entry(n, struct btrfs_free_space, offset_index); in tree_search_offset()
1717 prev = entry; in tree_search_offset()
1719 if (offset < entry->offset) in tree_search_offset()
1721 else if (offset > entry->offset) in tree_search_offset()
1726 entry = NULL; in tree_search_offset()
1730 if (!entry) in tree_search_offset()
1732 if (entry->bitmap) in tree_search_offset()
1733 return entry; in tree_search_offset()
1742 entry = rb_entry(n, struct btrfs_free_space, offset_index); in tree_search_offset()
1743 if (entry->offset != offset) in tree_search_offset()
1746 WARN_ON(!entry->bitmap); in tree_search_offset()
1747 return entry; in tree_search_offset()
1748 } else if (entry) { in tree_search_offset()
1749 if (entry->bitmap) { in tree_search_offset()
1754 n = rb_prev(&entry->offset_index); in tree_search_offset()
1760 entry = prev; in tree_search_offset()
1763 return entry; in tree_search_offset()
1770 entry = prev; in tree_search_offset()
1771 if (entry->offset > offset) { in tree_search_offset()
1772 n = rb_prev(&entry->offset_index); in tree_search_offset()
1774 entry = rb_entry(n, struct btrfs_free_space, in tree_search_offset()
1776 ASSERT(entry->offset <= offset); in tree_search_offset()
1779 return entry; in tree_search_offset()
1785 if (entry->bitmap) { in tree_search_offset()
1786 n = rb_prev(&entry->offset_index); in tree_search_offset()
1794 if (entry->offset + BITS_PER_BITMAP * ctl->unit > offset) in tree_search_offset()
1795 return entry; in tree_search_offset()
1796 } else if (entry->offset + entry->bytes > offset) in tree_search_offset()
1797 return entry; in tree_search_offset()
1803 n = rb_next(&entry->offset_index); in tree_search_offset()
1806 entry = rb_entry(n, struct btrfs_free_space, offset_index); in tree_search_offset()
1807 if (entry->bitmap) { in tree_search_offset()
1808 if (entry->offset + BITS_PER_BITMAP * in tree_search_offset()
1812 if (entry->offset + entry->bytes > offset) in tree_search_offset()
1816 return entry; in tree_search_offset()
2016 struct btrfs_free_space *entry; in find_free_space() local
2028 entry = tree_search_offset(ctl, offset_to_bitmap(ctl, *offset), in find_free_space()
2030 if (!entry) in find_free_space()
2032 node = &entry->offset_index; in find_free_space()
2037 entry = rb_entry(node, struct btrfs_free_space, in find_free_space()
2040 entry = rb_entry(node, struct btrfs_free_space, in find_free_space()
2051 if (entry->bytes < *bytes) { in find_free_space()
2052 *max_extent_size = max(get_max_extent_size(entry), in find_free_space()
2063 tmp = entry->offset - ctl->start + align - 1; in find_free_space()
2066 align_off = tmp - entry->offset; in find_free_space()
2069 tmp = entry->offset; in find_free_space()
2079 if (entry->bytes < *bytes + align_off) { in find_free_space()
2080 *max_extent_size = max(get_max_extent_size(entry), in find_free_space()
2085 if (entry->bitmap) { in find_free_space()
2089 ret = search_bitmap(ctl, entry, &tmp, &size, true); in find_free_space()
2093 return entry; in find_free_space()
2096 max(get_max_extent_size(entry), in find_free_space()
2112 *bytes = entry->bytes - align_off; in find_free_space()
2113 return entry; in find_free_space()
2342 struct btrfs_free_space *entry; in insert_into_bitmap() local
2353 entry = rb_entry(node, struct btrfs_free_space, offset_index); in insert_into_bitmap()
2354 if (!entry->bitmap) { in insert_into_bitmap()
2359 if (entry->offset == offset_to_bitmap(ctl, offset)) { in insert_into_bitmap()
2360 bytes_added = add_bytes_to_bitmap(ctl, entry, offset, in insert_into_bitmap()
2999 struct btrfs_free_space *entry; in __btrfs_return_cluster_to_free_space() local
3001 entry = rb_entry(node, struct btrfs_free_space, offset_index); in __btrfs_return_cluster_to_free_space()
3002 node = rb_next(&entry->offset_index); in __btrfs_return_cluster_to_free_space()
3003 rb_erase(&entry->offset_index, &cluster->root); in __btrfs_return_cluster_to_free_space()
3004 RB_CLEAR_NODE(&entry->offset_index); in __btrfs_return_cluster_to_free_space()
3006 if (!entry->bitmap) { in __btrfs_return_cluster_to_free_space()
3008 if (!btrfs_free_space_trimmed(entry)) { in __btrfs_return_cluster_to_free_space()
3011 entry->bytes; in __btrfs_return_cluster_to_free_space()
3014 try_merge_free_space(ctl, entry, false); in __btrfs_return_cluster_to_free_space()
3015 steal_from_bitmap(ctl, entry, false); in __btrfs_return_cluster_to_free_space()
3018 if (!btrfs_free_space_trimmed(entry)) { in __btrfs_return_cluster_to_free_space()
3021 entry->bytes; in __btrfs_return_cluster_to_free_space()
3024 tree_insert_offset(ctl, NULL, entry); in __btrfs_return_cluster_to_free_space()
3025 rb_add_cached(&entry->bytes_index, &ctl->free_space_bytes, in __btrfs_return_cluster_to_free_space()
3091 struct btrfs_free_space *entry = NULL; in btrfs_find_space_for_alloc() local
3102 entry = find_free_space(ctl, &offset, &bytes_search, in btrfs_find_space_for_alloc()
3105 if (!entry) in btrfs_find_space_for_alloc()
3109 if (entry->bitmap) { in btrfs_find_space_for_alloc()
3110 bitmap_clear_bits(ctl, entry, offset, bytes, true); in btrfs_find_space_for_alloc()
3112 if (!btrfs_free_space_trimmed(entry)) in btrfs_find_space_for_alloc()
3115 if (!entry->bytes) in btrfs_find_space_for_alloc()
3116 free_bitmap(ctl, entry); in btrfs_find_space_for_alloc()
3118 unlink_free_space(ctl, entry, true); in btrfs_find_space_for_alloc()
3119 align_gap_len = offset - entry->offset; in btrfs_find_space_for_alloc()
3120 align_gap = entry->offset; in btrfs_find_space_for_alloc()
3121 align_gap_trim_state = entry->trim_state; in btrfs_find_space_for_alloc()
3123 if (!btrfs_free_space_trimmed(entry)) in btrfs_find_space_for_alloc()
3126 entry->offset = offset + bytes; in btrfs_find_space_for_alloc()
3127 WARN_ON(entry->bytes < bytes + align_gap_len); in btrfs_find_space_for_alloc()
3129 entry->bytes -= bytes + align_gap_len; in btrfs_find_space_for_alloc()
3130 if (!entry->bytes) in btrfs_find_space_for_alloc()
3131 kmem_cache_free(btrfs_free_space_cachep, entry); in btrfs_find_space_for_alloc()
3133 link_free_space(ctl, entry); in btrfs_find_space_for_alloc()
3190 struct btrfs_free_space *entry, in btrfs_alloc_from_bitmap() argument
3203 ret2 = search_bitmap(ctl, entry, &search_start, &search_bytes, true); in btrfs_alloc_from_bitmap()
3205 *max_extent_size = max(get_max_extent_size(entry), in btrfs_alloc_from_bitmap()
3211 bitmap_clear_bits(ctl, entry, ret, bytes, false); in btrfs_alloc_from_bitmap()
3228 struct btrfs_free_space *entry = NULL; in btrfs_alloc_from_cluster() local
3245 entry = rb_entry(node, struct btrfs_free_space, offset_index); in btrfs_alloc_from_cluster()
3247 if (entry->bytes < bytes) in btrfs_alloc_from_cluster()
3248 *max_extent_size = max(get_max_extent_size(entry), in btrfs_alloc_from_cluster()
3251 if (entry->bytes < bytes || in btrfs_alloc_from_cluster()
3252 (!entry->bitmap && entry->offset < min_start)) { in btrfs_alloc_from_cluster()
3253 node = rb_next(&entry->offset_index); in btrfs_alloc_from_cluster()
3256 entry = rb_entry(node, struct btrfs_free_space, in btrfs_alloc_from_cluster()
3261 if (entry->bitmap) { in btrfs_alloc_from_cluster()
3263 cluster, entry, bytes, in btrfs_alloc_from_cluster()
3267 node = rb_next(&entry->offset_index); in btrfs_alloc_from_cluster()
3270 entry = rb_entry(node, struct btrfs_free_space, in btrfs_alloc_from_cluster()
3276 ret = entry->offset; in btrfs_alloc_from_cluster()
3278 entry->offset += bytes; in btrfs_alloc_from_cluster()
3279 entry->bytes -= bytes; in btrfs_alloc_from_cluster()
3292 if (!btrfs_free_space_trimmed(entry)) in btrfs_alloc_from_cluster()
3296 if (!entry->bitmap && !btrfs_free_space_trimmed(entry)) in btrfs_alloc_from_cluster()
3300 if (entry->bytes == 0) { in btrfs_alloc_from_cluster()
3301 rb_erase(&entry->offset_index, &cluster->root); in btrfs_alloc_from_cluster()
3303 if (entry->bitmap) { in btrfs_alloc_from_cluster()
3305 entry->bitmap); in btrfs_alloc_from_cluster()
3308 } else if (!btrfs_free_space_trimmed(entry)) { in btrfs_alloc_from_cluster()
3311 kmem_cache_free(btrfs_free_space_cachep, entry); in btrfs_alloc_from_cluster()
3321 struct btrfs_free_space *entry, in btrfs_bitmap_cluster() argument
3339 i = offset_to_bit(entry->offset, ctl->unit, in btrfs_bitmap_cluster()
3340 max_t(u64, offset, entry->offset)); in btrfs_bitmap_cluster()
3348 if (entry->max_extent_size && in btrfs_bitmap_cluster()
3349 entry->max_extent_size < cont1_bytes) in btrfs_bitmap_cluster()
3353 for_each_set_bit_from(i, entry->bitmap, BITS_PER_BITMAP) { in btrfs_bitmap_cluster()
3354 next_zero = find_next_zero_bit(entry->bitmap, in btrfs_bitmap_cluster()
3368 entry->max_extent_size = (u64)max_bits * ctl->unit; in btrfs_bitmap_cluster()
3387 cluster->window_start = start * ctl->unit + entry->offset; in btrfs_bitmap_cluster()
3388 rb_erase(&entry->offset_index, &ctl->free_space_offset); in btrfs_bitmap_cluster()
3389 rb_erase_cached(&entry->bytes_index, &ctl->free_space_bytes); in btrfs_bitmap_cluster()
3398 RB_CLEAR_NODE(&entry->bytes_index); in btrfs_bitmap_cluster()
3400 ret = tree_insert_offset(ctl, cluster, entry); in btrfs_bitmap_cluster()
3421 struct btrfs_free_space *entry = NULL; in setup_cluster_no_bitmap() local
3430 entry = tree_search_offset(ctl, offset, 0, 1); in setup_cluster_no_bitmap()
3431 if (!entry) in setup_cluster_no_bitmap()
3438 while (entry->bitmap || entry->bytes < min_bytes) { in setup_cluster_no_bitmap()
3439 if (entry->bitmap && list_empty(&entry->list)) in setup_cluster_no_bitmap()
3440 list_add_tail(&entry->list, bitmaps); in setup_cluster_no_bitmap()
3441 node = rb_next(&entry->offset_index); in setup_cluster_no_bitmap()
3444 entry = rb_entry(node, struct btrfs_free_space, offset_index); in setup_cluster_no_bitmap()
3447 window_free = entry->bytes; in setup_cluster_no_bitmap()
3448 max_extent = entry->bytes; in setup_cluster_no_bitmap()
3449 first = entry; in setup_cluster_no_bitmap()
3450 last = entry; in setup_cluster_no_bitmap()
3452 for (node = rb_next(&entry->offset_index); node; in setup_cluster_no_bitmap()
3453 node = rb_next(&entry->offset_index)) { in setup_cluster_no_bitmap()
3454 entry = rb_entry(node, struct btrfs_free_space, offset_index); in setup_cluster_no_bitmap()
3456 if (entry->bitmap) { in setup_cluster_no_bitmap()
3457 if (list_empty(&entry->list)) in setup_cluster_no_bitmap()
3458 list_add_tail(&entry->list, bitmaps); in setup_cluster_no_bitmap()
3462 if (entry->bytes < min_bytes) in setup_cluster_no_bitmap()
3465 last = entry; in setup_cluster_no_bitmap()
3466 window_free += entry->bytes; in setup_cluster_no_bitmap()
3467 if (entry->bytes > max_extent) in setup_cluster_no_bitmap()
3468 max_extent = entry->bytes; in setup_cluster_no_bitmap()
3485 entry = rb_entry(node, struct btrfs_free_space, offset_index); in setup_cluster_no_bitmap()
3486 node = rb_next(&entry->offset_index); in setup_cluster_no_bitmap()
3487 if (entry->bitmap || entry->bytes < min_bytes) in setup_cluster_no_bitmap()
3490 rb_erase(&entry->offset_index, &ctl->free_space_offset); in setup_cluster_no_bitmap()
3491 rb_erase_cached(&entry->bytes_index, &ctl->free_space_bytes); in setup_cluster_no_bitmap()
3492 ret = tree_insert_offset(ctl, cluster, entry); in setup_cluster_no_bitmap()
3493 total_size += entry->bytes; in setup_cluster_no_bitmap()
3495 } while (node && entry != last); in setup_cluster_no_bitmap()
3513 struct btrfs_free_space *entry = NULL; in setup_cluster_bitmap() local
3525 entry = list_first_entry(bitmaps, struct btrfs_free_space, list); in setup_cluster_bitmap()
3527 if (!entry || entry->offset != bitmap_offset) { in setup_cluster_bitmap()
3528 entry = tree_search_offset(ctl, bitmap_offset, 1, 0); in setup_cluster_bitmap()
3529 if (entry && list_empty(&entry->list)) in setup_cluster_bitmap()
3530 list_add(&entry->list, bitmaps); in setup_cluster_bitmap()
3533 list_for_each_entry(entry, bitmaps, list) { in setup_cluster_bitmap()
3534 if (entry->bytes < bytes) in setup_cluster_bitmap()
3536 ret = btrfs_bitmap_cluster(block_group, entry, cluster, offset, in setup_cluster_bitmap()
3563 struct btrfs_free_space *entry, *tmp; in btrfs_find_space_cluster() local
3617 list_for_each_entry_safe(entry, tmp, &bitmaps, list) in btrfs_find_space_cluster()
3618 list_del_init(&entry->list); in btrfs_find_space_cluster()
3717 struct btrfs_free_space *entry; in trim_no_bitmap() local
3735 entry = tree_search_offset(ctl, start, 0, 1); in trim_no_bitmap()
3736 if (!entry) in trim_no_bitmap()
3740 while (entry->bitmap || in trim_no_bitmap()
3741 (async && btrfs_free_space_trimmed(entry))) { in trim_no_bitmap()
3742 node = rb_next(&entry->offset_index); in trim_no_bitmap()
3745 entry = rb_entry(node, struct btrfs_free_space, in trim_no_bitmap()
3749 if (entry->offset >= end) in trim_no_bitmap()
3752 extent_start = entry->offset; in trim_no_bitmap()
3753 extent_bytes = entry->bytes; in trim_no_bitmap()
3754 extent_trim_state = entry->trim_state; in trim_no_bitmap()
3756 start = entry->offset; in trim_no_bitmap()
3757 bytes = entry->bytes; in trim_no_bitmap()
3763 unlink_free_space(ctl, entry, true); in trim_no_bitmap()
3774 entry->offset += max_discard_size; in trim_no_bitmap()
3775 entry->bytes -= max_discard_size; in trim_no_bitmap()
3776 link_free_space(ctl, entry); in trim_no_bitmap()
3778 kmem_cache_free(btrfs_free_space_cachep, entry); in trim_no_bitmap()
3789 unlink_free_space(ctl, entry, true); in trim_no_bitmap()
3790 kmem_cache_free(btrfs_free_space_cachep, entry); in trim_no_bitmap()
3846 struct btrfs_free_space *entry; in reset_trimming_bitmap() local
3849 entry = tree_search_offset(ctl, offset, 1, 0); in reset_trimming_bitmap()
3850 if (entry) { in reset_trimming_bitmap()
3851 if (btrfs_free_space_trimmed(entry)) { in reset_trimming_bitmap()
3853 entry->bitmap_extents; in reset_trimming_bitmap()
3854 ctl->discardable_bytes[BTRFS_STAT_CURR] += entry->bytes; in reset_trimming_bitmap()
3856 entry->trim_state = BTRFS_TRIM_STATE_UNTRIMMED; in reset_trimming_bitmap()
3863 struct btrfs_free_space *entry) in end_trimming_bitmap() argument
3865 if (btrfs_free_space_trimming_bitmap(entry)) { in end_trimming_bitmap()
3866 entry->trim_state = BTRFS_TRIM_STATE_TRIMMED; in end_trimming_bitmap()
3868 entry->bitmap_extents; in end_trimming_bitmap()
3869 ctl->discardable_bytes[BTRFS_STAT_CURR] -= entry->bytes; in end_trimming_bitmap()
3883 struct btrfs_free_space *entry; in trim_bitmaps() local
3905 entry = tree_search_offset(ctl, offset, 1, 0); in trim_bitmaps()
3914 if (!entry || (async && minlen && start == offset && in trim_bitmaps()
3915 btrfs_free_space_trimmed(entry))) { in trim_bitmaps()
3929 entry->trim_state = BTRFS_TRIM_STATE_TRIMMING; in trim_bitmaps()
3932 ret2 = search_bitmap(ctl, entry, &start, &bytes, false); in trim_bitmaps()
3939 end_trimming_bitmap(ctl, entry); in trim_bitmaps()
3941 entry->trim_state = BTRFS_TRIM_STATE_UNTRIMMED; in trim_bitmaps()
3976 bitmap_clear_bits(ctl, entry, start, bytes, true); in trim_bitmaps()
3977 if (entry->bytes == 0) in trim_bitmaps()
3978 free_bitmap(ctl, entry); in trim_bitmaps()