4339 lines · c
1// SPDX-License-Identifier: GPL-2.02/*3 * Copyright (C) 2008 Red Hat. All rights reserved.4 */5 6#include <linux/pagemap.h>7#include <linux/sched.h>8#include <linux/sched/signal.h>9#include <linux/slab.h>10#include <linux/math64.h>11#include <linux/ratelimit.h>12#include <linux/error-injection.h>13#include <linux/sched/mm.h>14#include "ctree.h"15#include "fs.h"16#include "messages.h"17#include "misc.h"18#include "free-space-cache.h"19#include "transaction.h"20#include "disk-io.h"21#include "extent_io.h"22#include "space-info.h"23#include "block-group.h"24#include "discard.h"25#include "subpage.h"26#include "inode-item.h"27#include "accessors.h"28#include "file-item.h"29#include "file.h"30#include "super.h"31 32#define BITS_PER_BITMAP (PAGE_SIZE * 8UL)33#define MAX_CACHE_BYTES_PER_GIG SZ_64K34#define FORCE_EXTENT_THRESHOLD SZ_1M35 36static struct kmem_cache *btrfs_free_space_cachep;37static struct kmem_cache *btrfs_free_space_bitmap_cachep;38 39struct btrfs_trim_range {40 u64 start;41 u64 bytes;42 struct list_head list;43};44 45static int link_free_space(struct btrfs_free_space_ctl *ctl,46 struct btrfs_free_space *info);47static void unlink_free_space(struct btrfs_free_space_ctl *ctl,48 struct btrfs_free_space *info, bool update_stat);49static int search_bitmap(struct btrfs_free_space_ctl *ctl,50 struct btrfs_free_space *bitmap_info, u64 *offset,51 u64 *bytes, bool for_alloc);52static void free_bitmap(struct btrfs_free_space_ctl *ctl,53 struct btrfs_free_space *bitmap_info);54static void bitmap_clear_bits(struct btrfs_free_space_ctl *ctl,55 struct btrfs_free_space *info, u64 offset,56 u64 bytes, bool update_stats);57 58static void btrfs_crc32c_final(u32 crc, u8 *result)59{60 put_unaligned_le32(~crc, result);61}62 63static void __btrfs_remove_free_space_cache(struct btrfs_free_space_ctl *ctl)64{65 struct btrfs_free_space *info;66 struct rb_node *node;67 68 while ((node = rb_last(&ctl->free_space_offset)) != NULL) {69 info = rb_entry(node, struct btrfs_free_space, offset_index);70 if (!info->bitmap) {71 unlink_free_space(ctl, info, true);72 kmem_cache_free(btrfs_free_space_cachep, info);73 } else {74 free_bitmap(ctl, info);75 }76 77 cond_resched_lock(&ctl->tree_lock);78 }79}80 81static struct inode *__lookup_free_space_inode(struct btrfs_root *root,82 struct btrfs_path *path,83 u64 offset)84{85 struct btrfs_key key;86 struct btrfs_key location;87 struct btrfs_disk_key disk_key;88 struct btrfs_free_space_header *header;89 struct extent_buffer *leaf;90 struct inode *inode = NULL;91 unsigned nofs_flag;92 int ret;93 94 key.objectid = BTRFS_FREE_SPACE_OBJECTID;95 key.offset = offset;96 key.type = 0;97 98 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);99 if (ret < 0)100 return ERR_PTR(ret);101 if (ret > 0) {102 btrfs_release_path(path);103 return ERR_PTR(-ENOENT);104 }105 106 leaf = path->nodes[0];107 header = btrfs_item_ptr(leaf, path->slots[0],108 struct btrfs_free_space_header);109 btrfs_free_space_key(leaf, header, &disk_key);110 btrfs_disk_key_to_cpu(&location, &disk_key);111 btrfs_release_path(path);112 113 /*114 * We are often under a trans handle at this point, so we need to make115 * sure NOFS is set to keep us from deadlocking.116 */117 nofs_flag = memalloc_nofs_save();118 inode = btrfs_iget_path(location.objectid, root, path);119 btrfs_release_path(path);120 memalloc_nofs_restore(nofs_flag);121 if (IS_ERR(inode))122 return inode;123 124 mapping_set_gfp_mask(inode->i_mapping,125 mapping_gfp_constraint(inode->i_mapping,126 ~(__GFP_FS | __GFP_HIGHMEM)));127 128 return inode;129}130 131struct inode *lookup_free_space_inode(struct btrfs_block_group *block_group,132 struct btrfs_path *path)133{134 struct btrfs_fs_info *fs_info = block_group->fs_info;135 struct inode *inode = NULL;136 u32 flags = BTRFS_INODE_NODATASUM | BTRFS_INODE_NODATACOW;137 138 spin_lock(&block_group->lock);139 if (block_group->inode)140 inode = igrab(&block_group->inode->vfs_inode);141 spin_unlock(&block_group->lock);142 if (inode)143 return inode;144 145 inode = __lookup_free_space_inode(fs_info->tree_root, path,146 block_group->start);147 if (IS_ERR(inode))148 return inode;149 150 spin_lock(&block_group->lock);151 if (!((BTRFS_I(inode)->flags & flags) == flags)) {152 btrfs_info(fs_info, "Old style space inode found, converting.");153 BTRFS_I(inode)->flags |= BTRFS_INODE_NODATASUM |154 BTRFS_INODE_NODATACOW;155 block_group->disk_cache_state = BTRFS_DC_CLEAR;156 }157 158 if (!test_and_set_bit(BLOCK_GROUP_FLAG_IREF, &block_group->runtime_flags))159 block_group->inode = BTRFS_I(igrab(inode));160 spin_unlock(&block_group->lock);161 162 return inode;163}164 165static int __create_free_space_inode(struct btrfs_root *root,166 struct btrfs_trans_handle *trans,167 struct btrfs_path *path,168 u64 ino, u64 offset)169{170 struct btrfs_key key;171 struct btrfs_disk_key disk_key;172 struct btrfs_free_space_header *header;173 struct btrfs_inode_item *inode_item;174 struct extent_buffer *leaf;175 /* We inline CRCs for the free disk space cache */176 const u64 flags = BTRFS_INODE_NOCOMPRESS | BTRFS_INODE_PREALLOC |177 BTRFS_INODE_NODATASUM | BTRFS_INODE_NODATACOW;178 int ret;179 180 ret = btrfs_insert_empty_inode(trans, root, path, ino);181 if (ret)182 return ret;183 184 leaf = path->nodes[0];185 inode_item = btrfs_item_ptr(leaf, path->slots[0],186 struct btrfs_inode_item);187 btrfs_item_key(leaf, &disk_key, path->slots[0]);188 memzero_extent_buffer(leaf, (unsigned long)inode_item,189 sizeof(*inode_item));190 btrfs_set_inode_generation(leaf, inode_item, trans->transid);191 btrfs_set_inode_size(leaf, inode_item, 0);192 btrfs_set_inode_nbytes(leaf, inode_item, 0);193 btrfs_set_inode_uid(leaf, inode_item, 0);194 btrfs_set_inode_gid(leaf, inode_item, 0);195 btrfs_set_inode_mode(leaf, inode_item, S_IFREG | 0600);196 btrfs_set_inode_flags(leaf, inode_item, flags);197 btrfs_set_inode_nlink(leaf, inode_item, 1);198 btrfs_set_inode_transid(leaf, inode_item, trans->transid);199 btrfs_set_inode_block_group(leaf, inode_item, offset);200 btrfs_mark_buffer_dirty(trans, leaf);201 btrfs_release_path(path);202 203 key.objectid = BTRFS_FREE_SPACE_OBJECTID;204 key.offset = offset;205 key.type = 0;206 ret = btrfs_insert_empty_item(trans, root, path, &key,207 sizeof(struct btrfs_free_space_header));208 if (ret < 0) {209 btrfs_release_path(path);210 return ret;211 }212 213 leaf = path->nodes[0];214 header = btrfs_item_ptr(leaf, path->slots[0],215 struct btrfs_free_space_header);216 memzero_extent_buffer(leaf, (unsigned long)header, sizeof(*header));217 btrfs_set_free_space_key(leaf, header, &disk_key);218 btrfs_mark_buffer_dirty(trans, leaf);219 btrfs_release_path(path);220 221 return 0;222}223 224int create_free_space_inode(struct btrfs_trans_handle *trans,225 struct btrfs_block_group *block_group,226 struct btrfs_path *path)227{228 int ret;229 u64 ino;230 231 ret = btrfs_get_free_objectid(trans->fs_info->tree_root, &ino);232 if (ret < 0)233 return ret;234 235 return __create_free_space_inode(trans->fs_info->tree_root, trans, path,236 ino, block_group->start);237}238 239/*240 * inode is an optional sink: if it is NULL, btrfs_remove_free_space_inode241 * handles lookup, otherwise it takes ownership and iputs the inode.242 * Don't reuse an inode pointer after passing it into this function.243 */244int btrfs_remove_free_space_inode(struct btrfs_trans_handle *trans,245 struct inode *inode,246 struct btrfs_block_group *block_group)247{248 struct btrfs_path *path;249 struct btrfs_key key;250 int ret = 0;251 252 path = btrfs_alloc_path();253 if (!path)254 return -ENOMEM;255 256 if (!inode)257 inode = lookup_free_space_inode(block_group, path);258 if (IS_ERR(inode)) {259 if (PTR_ERR(inode) != -ENOENT)260 ret = PTR_ERR(inode);261 goto out;262 }263 ret = btrfs_orphan_add(trans, BTRFS_I(inode));264 if (ret) {265 btrfs_add_delayed_iput(BTRFS_I(inode));266 goto out;267 }268 clear_nlink(inode);269 /* One for the block groups ref */270 spin_lock(&block_group->lock);271 if (test_and_clear_bit(BLOCK_GROUP_FLAG_IREF, &block_group->runtime_flags)) {272 block_group->inode = NULL;273 spin_unlock(&block_group->lock);274 iput(inode);275 } else {276 spin_unlock(&block_group->lock);277 }278 /* One for the lookup ref */279 btrfs_add_delayed_iput(BTRFS_I(inode));280 281 key.objectid = BTRFS_FREE_SPACE_OBJECTID;282 key.type = 0;283 key.offset = block_group->start;284 ret = btrfs_search_slot(trans, trans->fs_info->tree_root, &key, path,285 -1, 1);286 if (ret) {287 if (ret > 0)288 ret = 0;289 goto out;290 }291 ret = btrfs_del_item(trans, trans->fs_info->tree_root, path);292out:293 btrfs_free_path(path);294 return ret;295}296 297int btrfs_truncate_free_space_cache(struct btrfs_trans_handle *trans,298 struct btrfs_block_group *block_group,299 struct inode *vfs_inode)300{301 struct btrfs_truncate_control control = {302 .inode = BTRFS_I(vfs_inode),303 .new_size = 0,304 .ino = btrfs_ino(BTRFS_I(vfs_inode)),305 .min_type = BTRFS_EXTENT_DATA_KEY,306 .clear_extent_range = true,307 };308 struct btrfs_inode *inode = BTRFS_I(vfs_inode);309 struct btrfs_root *root = inode->root;310 struct extent_state *cached_state = NULL;311 int ret = 0;312 bool locked = false;313 314 if (block_group) {315 struct btrfs_path *path = btrfs_alloc_path();316 317 if (!path) {318 ret = -ENOMEM;319 goto fail;320 }321 locked = true;322 mutex_lock(&trans->transaction->cache_write_mutex);323 if (!list_empty(&block_group->io_list)) {324 list_del_init(&block_group->io_list);325 326 btrfs_wait_cache_io(trans, block_group, path);327 btrfs_put_block_group(block_group);328 }329 330 /*331 * now that we've truncated the cache away, its no longer332 * setup or written333 */334 spin_lock(&block_group->lock);335 block_group->disk_cache_state = BTRFS_DC_CLEAR;336 spin_unlock(&block_group->lock);337 btrfs_free_path(path);338 }339 340 btrfs_i_size_write(inode, 0);341 truncate_pagecache(vfs_inode, 0);342 343 lock_extent(&inode->io_tree, 0, (u64)-1, &cached_state);344 btrfs_drop_extent_map_range(inode, 0, (u64)-1, false);345 346 /*347 * We skip the throttling logic for free space cache inodes, so we don't348 * need to check for -EAGAIN.349 */350 ret = btrfs_truncate_inode_items(trans, root, &control);351 352 inode_sub_bytes(&inode->vfs_inode, control.sub_bytes);353 btrfs_inode_safe_disk_i_size_write(inode, control.last_size);354 355 unlock_extent(&inode->io_tree, 0, (u64)-1, &cached_state);356 if (ret)357 goto fail;358 359 ret = btrfs_update_inode(trans, inode);360 361fail:362 if (locked)363 mutex_unlock(&trans->transaction->cache_write_mutex);364 if (ret)365 btrfs_abort_transaction(trans, ret);366 367 return ret;368}369 370static void readahead_cache(struct inode *inode)371{372 struct file_ra_state ra;373 unsigned long last_index;374 375 file_ra_state_init(&ra, inode->i_mapping);376 last_index = (i_size_read(inode) - 1) >> PAGE_SHIFT;377 378 page_cache_sync_readahead(inode->i_mapping, &ra, NULL, 0, last_index);379}380 381static int io_ctl_init(struct btrfs_io_ctl *io_ctl, struct inode *inode,382 int write)383{384 int num_pages;385 386 num_pages = DIV_ROUND_UP(i_size_read(inode), PAGE_SIZE);387 388 /* Make sure we can fit our crcs and generation into the first page */389 if (write && (num_pages * sizeof(u32) + sizeof(u64)) > PAGE_SIZE)390 return -ENOSPC;391 392 memset(io_ctl, 0, sizeof(struct btrfs_io_ctl));393 394 io_ctl->pages = kcalloc(num_pages, sizeof(struct page *), GFP_NOFS);395 if (!io_ctl->pages)396 return -ENOMEM;397 398 io_ctl->num_pages = num_pages;399 io_ctl->fs_info = inode_to_fs_info(inode);400 io_ctl->inode = inode;401 402 return 0;403}404ALLOW_ERROR_INJECTION(io_ctl_init, ERRNO);405 406static void io_ctl_free(struct btrfs_io_ctl *io_ctl)407{408 kfree(io_ctl->pages);409 io_ctl->pages = NULL;410}411 412static void io_ctl_unmap_page(struct btrfs_io_ctl *io_ctl)413{414 if (io_ctl->cur) {415 io_ctl->cur = NULL;416 io_ctl->orig = NULL;417 }418}419 420static void io_ctl_map_page(struct btrfs_io_ctl *io_ctl, int clear)421{422 ASSERT(io_ctl->index < io_ctl->num_pages);423 io_ctl->page = io_ctl->pages[io_ctl->index++];424 io_ctl->cur = page_address(io_ctl->page);425 io_ctl->orig = io_ctl->cur;426 io_ctl->size = PAGE_SIZE;427 if (clear)428 clear_page(io_ctl->cur);429}430 431static void io_ctl_drop_pages(struct btrfs_io_ctl *io_ctl)432{433 int i;434 435 io_ctl_unmap_page(io_ctl);436 437 for (i = 0; i < io_ctl->num_pages; i++) {438 if (io_ctl->pages[i]) {439 btrfs_folio_clear_checked(io_ctl->fs_info,440 page_folio(io_ctl->pages[i]),441 page_offset(io_ctl->pages[i]),442 PAGE_SIZE);443 unlock_page(io_ctl->pages[i]);444 put_page(io_ctl->pages[i]);445 }446 }447}448 449static int io_ctl_prepare_pages(struct btrfs_io_ctl *io_ctl, bool uptodate)450{451 struct page *page;452 struct inode *inode = io_ctl->inode;453 gfp_t mask = btrfs_alloc_write_mask(inode->i_mapping);454 int i;455 456 for (i = 0; i < io_ctl->num_pages; i++) {457 int ret;458 459 page = find_or_create_page(inode->i_mapping, i, mask);460 if (!page) {461 io_ctl_drop_pages(io_ctl);462 return -ENOMEM;463 }464 465 ret = set_page_extent_mapped(page);466 if (ret < 0) {467 unlock_page(page);468 put_page(page);469 io_ctl_drop_pages(io_ctl);470 return ret;471 }472 473 io_ctl->pages[i] = page;474 if (uptodate && !PageUptodate(page)) {475 btrfs_read_folio(NULL, page_folio(page));476 lock_page(page);477 if (page->mapping != inode->i_mapping) {478 btrfs_err(BTRFS_I(inode)->root->fs_info,479 "free space cache page truncated");480 io_ctl_drop_pages(io_ctl);481 return -EIO;482 }483 if (!PageUptodate(page)) {484 btrfs_err(BTRFS_I(inode)->root->fs_info,485 "error reading free space cache");486 io_ctl_drop_pages(io_ctl);487 return -EIO;488 }489 }490 }491 492 for (i = 0; i < io_ctl->num_pages; i++)493 clear_page_dirty_for_io(io_ctl->pages[i]);494 495 return 0;496}497 498static void io_ctl_set_generation(struct btrfs_io_ctl *io_ctl, u64 generation)499{500 io_ctl_map_page(io_ctl, 1);501 502 /*503 * Skip the csum areas. If we don't check crcs then we just have a504 * 64bit chunk at the front of the first page.505 */506 io_ctl->cur += (sizeof(u32) * io_ctl->num_pages);507 io_ctl->size -= sizeof(u64) + (sizeof(u32) * io_ctl->num_pages);508 509 put_unaligned_le64(generation, io_ctl->cur);510 io_ctl->cur += sizeof(u64);511}512 513static int io_ctl_check_generation(struct btrfs_io_ctl *io_ctl, u64 generation)514{515 u64 cache_gen;516 517 /*518 * Skip the crc area. If we don't check crcs then we just have a 64bit519 * chunk at the front of the first page.520 */521 io_ctl->cur += sizeof(u32) * io_ctl->num_pages;522 io_ctl->size -= sizeof(u64) + (sizeof(u32) * io_ctl->num_pages);523 524 cache_gen = get_unaligned_le64(io_ctl->cur);525 if (cache_gen != generation) {526 btrfs_err_rl(io_ctl->fs_info,527 "space cache generation (%llu) does not match inode (%llu)",528 cache_gen, generation);529 io_ctl_unmap_page(io_ctl);530 return -EIO;531 }532 io_ctl->cur += sizeof(u64);533 return 0;534}535 536static void io_ctl_set_crc(struct btrfs_io_ctl *io_ctl, int index)537{538 u32 *tmp;539 u32 crc = ~(u32)0;540 unsigned offset = 0;541 542 if (index == 0)543 offset = sizeof(u32) * io_ctl->num_pages;544 545 crc = crc32c(crc, io_ctl->orig + offset, PAGE_SIZE - offset);546 btrfs_crc32c_final(crc, (u8 *)&crc);547 io_ctl_unmap_page(io_ctl);548 tmp = page_address(io_ctl->pages[0]);549 tmp += index;550 *tmp = crc;551}552 553static int io_ctl_check_crc(struct btrfs_io_ctl *io_ctl, int index)554{555 u32 *tmp, val;556 u32 crc = ~(u32)0;557 unsigned offset = 0;558 559 if (index == 0)560 offset = sizeof(u32) * io_ctl->num_pages;561 562 tmp = page_address(io_ctl->pages[0]);563 tmp += index;564 val = *tmp;565 566 io_ctl_map_page(io_ctl, 0);567 crc = crc32c(crc, io_ctl->orig + offset, PAGE_SIZE - offset);568 btrfs_crc32c_final(crc, (u8 *)&crc);569 if (val != crc) {570 btrfs_err_rl(io_ctl->fs_info,571 "csum mismatch on free space cache");572 io_ctl_unmap_page(io_ctl);573 return -EIO;574 }575 576 return 0;577}578 579static int io_ctl_add_entry(struct btrfs_io_ctl *io_ctl, u64 offset, u64 bytes,580 void *bitmap)581{582 struct btrfs_free_space_entry *entry;583 584 if (!io_ctl->cur)585 return -ENOSPC;586 587 entry = io_ctl->cur;588 put_unaligned_le64(offset, &entry->offset);589 put_unaligned_le64(bytes, &entry->bytes);590 entry->type = (bitmap) ? BTRFS_FREE_SPACE_BITMAP :591 BTRFS_FREE_SPACE_EXTENT;592 io_ctl->cur += sizeof(struct btrfs_free_space_entry);593 io_ctl->size -= sizeof(struct btrfs_free_space_entry);594 595 if (io_ctl->size >= sizeof(struct btrfs_free_space_entry))596 return 0;597 598 io_ctl_set_crc(io_ctl, io_ctl->index - 1);599 600 /* No more pages to map */601 if (io_ctl->index >= io_ctl->num_pages)602 return 0;603 604 /* map the next page */605 io_ctl_map_page(io_ctl, 1);606 return 0;607}608 609static int io_ctl_add_bitmap(struct btrfs_io_ctl *io_ctl, void *bitmap)610{611 if (!io_ctl->cur)612 return -ENOSPC;613 614 /*615 * If we aren't at the start of the current page, unmap this one and616 * map the next one if there is any left.617 */618 if (io_ctl->cur != io_ctl->orig) {619 io_ctl_set_crc(io_ctl, io_ctl->index - 1);620 if (io_ctl->index >= io_ctl->num_pages)621 return -ENOSPC;622 io_ctl_map_page(io_ctl, 0);623 }624 625 copy_page(io_ctl->cur, bitmap);626 io_ctl_set_crc(io_ctl, io_ctl->index - 1);627 if (io_ctl->index < io_ctl->num_pages)628 io_ctl_map_page(io_ctl, 0);629 return 0;630}631 632static void io_ctl_zero_remaining_pages(struct btrfs_io_ctl *io_ctl)633{634 /*635 * If we're not on the boundary we know we've modified the page and we636 * need to crc the page.637 */638 if (io_ctl->cur != io_ctl->orig)639 io_ctl_set_crc(io_ctl, io_ctl->index - 1);640 else641 io_ctl_unmap_page(io_ctl);642 643 while (io_ctl->index < io_ctl->num_pages) {644 io_ctl_map_page(io_ctl, 1);645 io_ctl_set_crc(io_ctl, io_ctl->index - 1);646 }647}648 649static int io_ctl_read_entry(struct btrfs_io_ctl *io_ctl,650 struct btrfs_free_space *entry, u8 *type)651{652 struct btrfs_free_space_entry *e;653 int ret;654 655 if (!io_ctl->cur) {656 ret = io_ctl_check_crc(io_ctl, io_ctl->index);657 if (ret)658 return ret;659 }660 661 e = io_ctl->cur;662 entry->offset = get_unaligned_le64(&e->offset);663 entry->bytes = get_unaligned_le64(&e->bytes);664 *type = e->type;665 io_ctl->cur += sizeof(struct btrfs_free_space_entry);666 io_ctl->size -= sizeof(struct btrfs_free_space_entry);667 668 if (io_ctl->size >= sizeof(struct btrfs_free_space_entry))669 return 0;670 671 io_ctl_unmap_page(io_ctl);672 673 return 0;674}675 676static int io_ctl_read_bitmap(struct btrfs_io_ctl *io_ctl,677 struct btrfs_free_space *entry)678{679 int ret;680 681 ret = io_ctl_check_crc(io_ctl, io_ctl->index);682 if (ret)683 return ret;684 685 copy_page(entry->bitmap, io_ctl->cur);686 io_ctl_unmap_page(io_ctl);687 688 return 0;689}690 691static void recalculate_thresholds(struct btrfs_free_space_ctl *ctl)692{693 struct btrfs_block_group *block_group = ctl->block_group;694 u64 max_bytes;695 u64 bitmap_bytes;696 u64 extent_bytes;697 u64 size = block_group->length;698 u64 bytes_per_bg = BITS_PER_BITMAP * ctl->unit;699 u64 max_bitmaps = div64_u64(size + bytes_per_bg - 1, bytes_per_bg);700 701 max_bitmaps = max_t(u64, max_bitmaps, 1);702 703 if (ctl->total_bitmaps > max_bitmaps)704 btrfs_err(block_group->fs_info,705"invalid free space control: bg start=%llu len=%llu total_bitmaps=%u unit=%u max_bitmaps=%llu bytes_per_bg=%llu",706 block_group->start, block_group->length,707 ctl->total_bitmaps, ctl->unit, max_bitmaps,708 bytes_per_bg);709 ASSERT(ctl->total_bitmaps <= max_bitmaps);710 711 /*712 * We are trying to keep the total amount of memory used per 1GiB of713 * space to be MAX_CACHE_BYTES_PER_GIG. However, with a reclamation714 * mechanism of pulling extents >= FORCE_EXTENT_THRESHOLD out of715 * bitmaps, we may end up using more memory than this.716 */717 if (size < SZ_1G)718 max_bytes = MAX_CACHE_BYTES_PER_GIG;719 else720 max_bytes = MAX_CACHE_BYTES_PER_GIG * div_u64(size, SZ_1G);721 722 bitmap_bytes = ctl->total_bitmaps * ctl->unit;723 724 /*725 * we want the extent entry threshold to always be at most 1/2 the max726 * bytes we can have, or whatever is less than that.727 */728 extent_bytes = max_bytes - bitmap_bytes;729 extent_bytes = min_t(u64, extent_bytes, max_bytes >> 1);730 731 ctl->extents_thresh =732 div_u64(extent_bytes, sizeof(struct btrfs_free_space));733}734 735static int __load_free_space_cache(struct btrfs_root *root, struct inode *inode,736 struct btrfs_free_space_ctl *ctl,737 struct btrfs_path *path, u64 offset)738{739 struct btrfs_fs_info *fs_info = root->fs_info;740 struct btrfs_free_space_header *header;741 struct extent_buffer *leaf;742 struct btrfs_io_ctl io_ctl;743 struct btrfs_key key;744 struct btrfs_free_space *e, *n;745 LIST_HEAD(bitmaps);746 u64 num_entries;747 u64 num_bitmaps;748 u64 generation;749 u8 type;750 int ret = 0;751 752 /* Nothing in the space cache, goodbye */753 if (!i_size_read(inode))754 return 0;755 756 key.objectid = BTRFS_FREE_SPACE_OBJECTID;757 key.offset = offset;758 key.type = 0;759 760 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);761 if (ret < 0)762 return 0;763 else if (ret > 0) {764 btrfs_release_path(path);765 return 0;766 }767 768 ret = -1;769 770 leaf = path->nodes[0];771 header = btrfs_item_ptr(leaf, path->slots[0],772 struct btrfs_free_space_header);773 num_entries = btrfs_free_space_entries(leaf, header);774 num_bitmaps = btrfs_free_space_bitmaps(leaf, header);775 generation = btrfs_free_space_generation(leaf, header);776 btrfs_release_path(path);777 778 if (!BTRFS_I(inode)->generation) {779 btrfs_info(fs_info,780 "the free space cache file (%llu) is invalid, skip it",781 offset);782 return 0;783 }784 785 if (BTRFS_I(inode)->generation != generation) {786 btrfs_err(fs_info,787 "free space inode generation (%llu) did not match free space cache generation (%llu)",788 BTRFS_I(inode)->generation, generation);789 return 0;790 }791 792 if (!num_entries)793 return 0;794 795 ret = io_ctl_init(&io_ctl, inode, 0);796 if (ret)797 return ret;798 799 readahead_cache(inode);800 801 ret = io_ctl_prepare_pages(&io_ctl, true);802 if (ret)803 goto out;804 805 ret = io_ctl_check_crc(&io_ctl, 0);806 if (ret)807 goto free_cache;808 809 ret = io_ctl_check_generation(&io_ctl, generation);810 if (ret)811 goto free_cache;812 813 while (num_entries) {814 e = kmem_cache_zalloc(btrfs_free_space_cachep,815 GFP_NOFS);816 if (!e) {817 ret = -ENOMEM;818 goto free_cache;819 }820 821 ret = io_ctl_read_entry(&io_ctl, e, &type);822 if (ret) {823 kmem_cache_free(btrfs_free_space_cachep, e);824 goto free_cache;825 }826 827 if (!e->bytes) {828 ret = -1;829 kmem_cache_free(btrfs_free_space_cachep, e);830 goto free_cache;831 }832 833 if (type == BTRFS_FREE_SPACE_EXTENT) {834 spin_lock(&ctl->tree_lock);835 ret = link_free_space(ctl, e);836 spin_unlock(&ctl->tree_lock);837 if (ret) {838 btrfs_err(fs_info,839 "Duplicate entries in free space cache, dumping");840 kmem_cache_free(btrfs_free_space_cachep, e);841 goto free_cache;842 }843 } else {844 ASSERT(num_bitmaps);845 num_bitmaps--;846 e->bitmap = kmem_cache_zalloc(847 btrfs_free_space_bitmap_cachep, GFP_NOFS);848 if (!e->bitmap) {849 ret = -ENOMEM;850 kmem_cache_free(851 btrfs_free_space_cachep, e);852 goto free_cache;853 }854 spin_lock(&ctl->tree_lock);855 ret = link_free_space(ctl, e);856 if (ret) {857 spin_unlock(&ctl->tree_lock);858 btrfs_err(fs_info,859 "Duplicate entries in free space cache, dumping");860 kmem_cache_free(btrfs_free_space_bitmap_cachep, e->bitmap);861 kmem_cache_free(btrfs_free_space_cachep, e);862 goto free_cache;863 }864 ctl->total_bitmaps++;865 recalculate_thresholds(ctl);866 spin_unlock(&ctl->tree_lock);867 list_add_tail(&e->list, &bitmaps);868 }869 870 num_entries--;871 }872 873 io_ctl_unmap_page(&io_ctl);874 875 /*876 * We add the bitmaps at the end of the entries in order that877 * the bitmap entries are added to the cache.878 */879 list_for_each_entry_safe(e, n, &bitmaps, list) {880 list_del_init(&e->list);881 ret = io_ctl_read_bitmap(&io_ctl, e);882 if (ret)883 goto free_cache;884 }885 886 io_ctl_drop_pages(&io_ctl);887 ret = 1;888out:889 io_ctl_free(&io_ctl);890 return ret;891free_cache:892 io_ctl_drop_pages(&io_ctl);893 894 spin_lock(&ctl->tree_lock);895 __btrfs_remove_free_space_cache(ctl);896 spin_unlock(&ctl->tree_lock);897 goto out;898}899 900static int copy_free_space_cache(struct btrfs_block_group *block_group,901 struct btrfs_free_space_ctl *ctl)902{903 struct btrfs_free_space *info;904 struct rb_node *n;905 int ret = 0;906 907 while (!ret && (n = rb_first(&ctl->free_space_offset)) != NULL) {908 info = rb_entry(n, struct btrfs_free_space, offset_index);909 if (!info->bitmap) {910 const u64 offset = info->offset;911 const u64 bytes = info->bytes;912 913 unlink_free_space(ctl, info, true);914 spin_unlock(&ctl->tree_lock);915 kmem_cache_free(btrfs_free_space_cachep, info);916 ret = btrfs_add_free_space(block_group, offset, bytes);917 spin_lock(&ctl->tree_lock);918 } else {919 u64 offset = info->offset;920 u64 bytes = ctl->unit;921 922 ret = search_bitmap(ctl, info, &offset, &bytes, false);923 if (ret == 0) {924 bitmap_clear_bits(ctl, info, offset, bytes, true);925 spin_unlock(&ctl->tree_lock);926 ret = btrfs_add_free_space(block_group, offset,927 bytes);928 spin_lock(&ctl->tree_lock);929 } else {930 free_bitmap(ctl, info);931 ret = 0;932 }933 }934 cond_resched_lock(&ctl->tree_lock);935 }936 return ret;937}938 939static struct lock_class_key btrfs_free_space_inode_key;940 941int load_free_space_cache(struct btrfs_block_group *block_group)942{943 struct btrfs_fs_info *fs_info = block_group->fs_info;944 struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl;945 struct btrfs_free_space_ctl tmp_ctl = {};946 struct inode *inode;947 struct btrfs_path *path;948 int ret = 0;949 bool matched;950 u64 used = block_group->used;951 952 /*953 * Because we could potentially discard our loaded free space, we want954 * to load everything into a temporary structure first, and then if it's955 * valid copy it all into the actual free space ctl.956 */957 btrfs_init_free_space_ctl(block_group, &tmp_ctl);958 959 /*960 * If this block group has been marked to be cleared for one reason or961 * another then we can't trust the on disk cache, so just return.962 */963 spin_lock(&block_group->lock);964 if (block_group->disk_cache_state != BTRFS_DC_WRITTEN) {965 spin_unlock(&block_group->lock);966 return 0;967 }968 spin_unlock(&block_group->lock);969 970 path = btrfs_alloc_path();971 if (!path)972 return 0;973 path->search_commit_root = 1;974 path->skip_locking = 1;975 976 /*977 * We must pass a path with search_commit_root set to btrfs_iget in978 * order to avoid a deadlock when allocating extents for the tree root.979 *980 * When we are COWing an extent buffer from the tree root, when looking981 * for a free extent, at extent-tree.c:find_free_extent(), we can find982 * block group without its free space cache loaded. When we find one983 * we must load its space cache which requires reading its free space984 * cache's inode item from the root tree. If this inode item is located985 * in the same leaf that we started COWing before, then we end up in986 * deadlock on the extent buffer (trying to read lock it when we987 * previously write locked it).988 *989 * It's safe to read the inode item using the commit root because990 * block groups, once loaded, stay in memory forever (until they are991 * removed) as well as their space caches once loaded. New block groups992 * once created get their ->cached field set to BTRFS_CACHE_FINISHED so993 * we will never try to read their inode item while the fs is mounted.994 */995 inode = lookup_free_space_inode(block_group, path);996 if (IS_ERR(inode)) {997 btrfs_free_path(path);998 return 0;999 }1000 1001 /* We may have converted the inode and made the cache invalid. */1002 spin_lock(&block_group->lock);1003 if (block_group->disk_cache_state != BTRFS_DC_WRITTEN) {1004 spin_unlock(&block_group->lock);1005 btrfs_free_path(path);1006 goto out;1007 }1008 spin_unlock(&block_group->lock);1009 1010 /*1011 * Reinitialize the class of struct inode's mapping->invalidate_lock for1012 * free space inodes to prevent false positives related to locks for normal1013 * inodes.1014 */1015 lockdep_set_class(&(&inode->i_data)->invalidate_lock,1016 &btrfs_free_space_inode_key);1017 1018 ret = __load_free_space_cache(fs_info->tree_root, inode, &tmp_ctl,1019 path, block_group->start);1020 btrfs_free_path(path);1021 if (ret <= 0)1022 goto out;1023 1024 matched = (tmp_ctl.free_space == (block_group->length - used -1025 block_group->bytes_super));1026 1027 if (matched) {1028 spin_lock(&tmp_ctl.tree_lock);1029 ret = copy_free_space_cache(block_group, &tmp_ctl);1030 spin_unlock(&tmp_ctl.tree_lock);1031 /*1032 * ret == 1 means we successfully loaded the free space cache,1033 * so we need to re-set it here.1034 */1035 if (ret == 0)1036 ret = 1;1037 } else {1038 /*1039 * We need to call the _locked variant so we don't try to update1040 * the discard counters.1041 */1042 spin_lock(&tmp_ctl.tree_lock);1043 __btrfs_remove_free_space_cache(&tmp_ctl);1044 spin_unlock(&tmp_ctl.tree_lock);1045 btrfs_warn(fs_info,1046 "block group %llu has wrong amount of free space",1047 block_group->start);1048 ret = -1;1049 }1050out:1051 if (ret < 0) {1052 /* This cache is bogus, make sure it gets cleared */1053 spin_lock(&block_group->lock);1054 block_group->disk_cache_state = BTRFS_DC_CLEAR;1055 spin_unlock(&block_group->lock);1056 ret = 0;1057 1058 btrfs_warn(fs_info,1059 "failed to load free space cache for block group %llu, rebuilding it now",1060 block_group->start);1061 }1062 1063 spin_lock(&ctl->tree_lock);1064 btrfs_discard_update_discardable(block_group);1065 spin_unlock(&ctl->tree_lock);1066 iput(inode);1067 return ret;1068}1069 1070static noinline_for_stack1071int write_cache_extent_entries(struct btrfs_io_ctl *io_ctl,1072 struct btrfs_free_space_ctl *ctl,1073 struct btrfs_block_group *block_group,1074 int *entries, int *bitmaps,1075 struct list_head *bitmap_list)1076{1077 int ret;1078 struct btrfs_free_cluster *cluster = NULL;1079 struct btrfs_free_cluster *cluster_locked = NULL;1080 struct rb_node *node = rb_first(&ctl->free_space_offset);1081 struct btrfs_trim_range *trim_entry;1082 1083 /* Get the cluster for this block_group if it exists */1084 if (block_group && !list_empty(&block_group->cluster_list)) {1085 cluster = list_entry(block_group->cluster_list.next,1086 struct btrfs_free_cluster,1087 block_group_list);1088 }1089 1090 if (!node && cluster) {1091 cluster_locked = cluster;1092 spin_lock(&cluster_locked->lock);1093 node = rb_first(&cluster->root);1094 cluster = NULL;1095 }1096 1097 /* Write out the extent entries */1098 while (node) {1099 struct btrfs_free_space *e;1100 1101 e = rb_entry(node, struct btrfs_free_space, offset_index);1102 *entries += 1;1103 1104 ret = io_ctl_add_entry(io_ctl, e->offset, e->bytes,1105 e->bitmap);1106 if (ret)1107 goto fail;1108 1109 if (e->bitmap) {1110 list_add_tail(&e->list, bitmap_list);1111 *bitmaps += 1;1112 }1113 node = rb_next(node);1114 if (!node && cluster) {1115 node = rb_first(&cluster->root);1116 cluster_locked = cluster;1117 spin_lock(&cluster_locked->lock);1118 cluster = NULL;1119 }1120 }1121 if (cluster_locked) {1122 spin_unlock(&cluster_locked->lock);1123 cluster_locked = NULL;1124 }1125 1126 /*1127 * Make sure we don't miss any range that was removed from our rbtree1128 * because trimming is running. Otherwise after a umount+mount (or crash1129 * after committing the transaction) we would leak free space and get1130 * an inconsistent free space cache report from fsck.1131 */1132 list_for_each_entry(trim_entry, &ctl->trimming_ranges, list) {1133 ret = io_ctl_add_entry(io_ctl, trim_entry->start,1134 trim_entry->bytes, NULL);1135 if (ret)1136 goto fail;1137 *entries += 1;1138 }1139 1140 return 0;1141fail:1142 if (cluster_locked)1143 spin_unlock(&cluster_locked->lock);1144 return -ENOSPC;1145}1146 1147static noinline_for_stack int1148update_cache_item(struct btrfs_trans_handle *trans,1149 struct btrfs_root *root,1150 struct inode *inode,1151 struct btrfs_path *path, u64 offset,1152 int entries, int bitmaps)1153{1154 struct btrfs_key key;1155 struct btrfs_free_space_header *header;1156 struct extent_buffer *leaf;1157 int ret;1158 1159 key.objectid = BTRFS_FREE_SPACE_OBJECTID;1160 key.offset = offset;1161 key.type = 0;1162 1163 ret = btrfs_search_slot(trans, root, &key, path, 0, 1);1164 if (ret < 0) {1165 clear_extent_bit(&BTRFS_I(inode)->io_tree, 0, inode->i_size - 1,1166 EXTENT_DELALLOC, NULL);1167 goto fail;1168 }1169 leaf = path->nodes[0];1170 if (ret > 0) {1171 struct btrfs_key found_key;1172 ASSERT(path->slots[0]);1173 path->slots[0]--;1174 btrfs_item_key_to_cpu(leaf, &found_key, path->slots[0]);1175 if (found_key.objectid != BTRFS_FREE_SPACE_OBJECTID ||1176 found_key.offset != offset) {1177 clear_extent_bit(&BTRFS_I(inode)->io_tree, 0,1178 inode->i_size - 1, EXTENT_DELALLOC,1179 NULL);1180 btrfs_release_path(path);1181 goto fail;1182 }1183 }1184 1185 BTRFS_I(inode)->generation = trans->transid;1186 header = btrfs_item_ptr(leaf, path->slots[0],1187 struct btrfs_free_space_header);1188 btrfs_set_free_space_entries(leaf, header, entries);1189 btrfs_set_free_space_bitmaps(leaf, header, bitmaps);1190 btrfs_set_free_space_generation(leaf, header, trans->transid);1191 btrfs_mark_buffer_dirty(trans, leaf);1192 btrfs_release_path(path);1193 1194 return 0;1195 1196fail:1197 return -1;1198}1199 1200static noinline_for_stack int write_pinned_extent_entries(1201 struct btrfs_trans_handle *trans,1202 struct btrfs_block_group *block_group,1203 struct btrfs_io_ctl *io_ctl,1204 int *entries)1205{1206 u64 start, extent_start, extent_end, len;1207 struct extent_io_tree *unpin = NULL;1208 int ret;1209 1210 if (!block_group)1211 return 0;1212 1213 /*1214 * We want to add any pinned extents to our free space cache1215 * so we don't leak the space1216 *1217 * We shouldn't have switched the pinned extents yet so this is the1218 * right one1219 */1220 unpin = &trans->transaction->pinned_extents;1221 1222 start = block_group->start;1223 1224 while (start < block_group->start + block_group->length) {1225 if (!find_first_extent_bit(unpin, start,1226 &extent_start, &extent_end,1227 EXTENT_DIRTY, NULL))1228 return 0;1229 1230 /* This pinned extent is out of our range */1231 if (extent_start >= block_group->start + block_group->length)1232 return 0;1233 1234 extent_start = max(extent_start, start);1235 extent_end = min(block_group->start + block_group->length,1236 extent_end + 1);1237 len = extent_end - extent_start;1238 1239 *entries += 1;1240 ret = io_ctl_add_entry(io_ctl, extent_start, len, NULL);1241 if (ret)1242 return -ENOSPC;1243 1244 start = extent_end;1245 }1246 1247 return 0;1248}1249 1250static noinline_for_stack int1251write_bitmap_entries(struct btrfs_io_ctl *io_ctl, struct list_head *bitmap_list)1252{1253 struct btrfs_free_space *entry, *next;1254 int ret;1255 1256 /* Write out the bitmaps */1257 list_for_each_entry_safe(entry, next, bitmap_list, list) {1258 ret = io_ctl_add_bitmap(io_ctl, entry->bitmap);1259 if (ret)1260 return -ENOSPC;1261 list_del_init(&entry->list);1262 }1263 1264 return 0;1265}1266 1267static int flush_dirty_cache(struct inode *inode)1268{1269 int ret;1270 1271 ret = btrfs_wait_ordered_range(BTRFS_I(inode), 0, (u64)-1);1272 if (ret)1273 clear_extent_bit(&BTRFS_I(inode)->io_tree, 0, inode->i_size - 1,1274 EXTENT_DELALLOC, NULL);1275 1276 return ret;1277}1278 1279static void noinline_for_stack1280cleanup_bitmap_list(struct list_head *bitmap_list)1281{1282 struct btrfs_free_space *entry, *next;1283 1284 list_for_each_entry_safe(entry, next, bitmap_list, list)1285 list_del_init(&entry->list);1286}1287 1288static void noinline_for_stack1289cleanup_write_cache_enospc(struct inode *inode,1290 struct btrfs_io_ctl *io_ctl,1291 struct extent_state **cached_state)1292{1293 io_ctl_drop_pages(io_ctl);1294 unlock_extent(&BTRFS_I(inode)->io_tree, 0, i_size_read(inode) - 1,1295 cached_state);1296}1297 1298static int __btrfs_wait_cache_io(struct btrfs_root *root,1299 struct btrfs_trans_handle *trans,1300 struct btrfs_block_group *block_group,1301 struct btrfs_io_ctl *io_ctl,1302 struct btrfs_path *path, u64 offset)1303{1304 int ret;1305 struct inode *inode = io_ctl->inode;1306 1307 if (!inode)1308 return 0;1309 1310 /* Flush the dirty pages in the cache file. */1311 ret = flush_dirty_cache(inode);1312 if (ret)1313 goto out;1314 1315 /* Update the cache item to tell everyone this cache file is valid. */1316 ret = update_cache_item(trans, root, inode, path, offset,1317 io_ctl->entries, io_ctl->bitmaps);1318out:1319 if (ret) {1320 invalidate_inode_pages2(inode->i_mapping);1321 BTRFS_I(inode)->generation = 0;1322 if (block_group)1323 btrfs_debug(root->fs_info,1324 "failed to write free space cache for block group %llu error %d",1325 block_group->start, ret);1326 }1327 btrfs_update_inode(trans, BTRFS_I(inode));1328 1329 if (block_group) {1330 /* the dirty list is protected by the dirty_bgs_lock */1331 spin_lock(&trans->transaction->dirty_bgs_lock);1332 1333 /* the disk_cache_state is protected by the block group lock */1334 spin_lock(&block_group->lock);1335 1336 /*1337 * only mark this as written if we didn't get put back on1338 * the dirty list while waiting for IO. Otherwise our1339 * cache state won't be right, and we won't get written again1340 */1341 if (!ret && list_empty(&block_group->dirty_list))1342 block_group->disk_cache_state = BTRFS_DC_WRITTEN;1343 else if (ret)1344 block_group->disk_cache_state = BTRFS_DC_ERROR;1345 1346 spin_unlock(&block_group->lock);1347 spin_unlock(&trans->transaction->dirty_bgs_lock);1348 io_ctl->inode = NULL;1349 iput(inode);1350 }1351 1352 return ret;1353 1354}1355 1356int btrfs_wait_cache_io(struct btrfs_trans_handle *trans,1357 struct btrfs_block_group *block_group,1358 struct btrfs_path *path)1359{1360 return __btrfs_wait_cache_io(block_group->fs_info->tree_root, trans,1361 block_group, &block_group->io_ctl,1362 path, block_group->start);1363}1364 1365/*1366 * Write out cached info to an inode.1367 *1368 * @inode: freespace inode we are writing out1369 * @ctl: free space cache we are going to write out1370 * @block_group: block_group for this cache if it belongs to a block_group1371 * @io_ctl: holds context for the io1372 * @trans: the trans handle1373 *1374 * This function writes out a free space cache struct to disk for quick recovery1375 * on mount. This will return 0 if it was successful in writing the cache out,1376 * or an errno if it was not.1377 */1378static int __btrfs_write_out_cache(struct inode *inode,1379 struct btrfs_free_space_ctl *ctl,1380 struct btrfs_block_group *block_group,1381 struct btrfs_io_ctl *io_ctl,1382 struct btrfs_trans_handle *trans)1383{1384 struct extent_state *cached_state = NULL;1385 LIST_HEAD(bitmap_list);1386 int entries = 0;1387 int bitmaps = 0;1388 int ret;1389 int must_iput = 0;1390 1391 if (!i_size_read(inode))1392 return -EIO;1393 1394 WARN_ON(io_ctl->pages);1395 ret = io_ctl_init(io_ctl, inode, 1);1396 if (ret)1397 return ret;1398 1399 if (block_group && (block_group->flags & BTRFS_BLOCK_GROUP_DATA)) {1400 down_write(&block_group->data_rwsem);1401 spin_lock(&block_group->lock);1402 if (block_group->delalloc_bytes) {1403 block_group->disk_cache_state = BTRFS_DC_WRITTEN;1404 spin_unlock(&block_group->lock);1405 up_write(&block_group->data_rwsem);1406 BTRFS_I(inode)->generation = 0;1407 ret = 0;1408 must_iput = 1;1409 goto out;1410 }1411 spin_unlock(&block_group->lock);1412 }1413 1414 /* Lock all pages first so we can lock the extent safely. */1415 ret = io_ctl_prepare_pages(io_ctl, false);1416 if (ret)1417 goto out_unlock;1418 1419 lock_extent(&BTRFS_I(inode)->io_tree, 0, i_size_read(inode) - 1,1420 &cached_state);1421 1422 io_ctl_set_generation(io_ctl, trans->transid);1423 1424 mutex_lock(&ctl->cache_writeout_mutex);1425 /* Write out the extent entries in the free space cache */1426 spin_lock(&ctl->tree_lock);1427 ret = write_cache_extent_entries(io_ctl, ctl,1428 block_group, &entries, &bitmaps,1429 &bitmap_list);1430 if (ret)1431 goto out_nospc_locked;1432 1433 /*1434 * Some spaces that are freed in the current transaction are pinned,1435 * they will be added into free space cache after the transaction is1436 * committed, we shouldn't lose them.1437 *1438 * If this changes while we are working we'll get added back to1439 * the dirty list and redo it. No locking needed1440 */1441 ret = write_pinned_extent_entries(trans, block_group, io_ctl, &entries);1442 if (ret)1443 goto out_nospc_locked;1444 1445 /*1446 * At last, we write out all the bitmaps and keep cache_writeout_mutex1447 * locked while doing it because a concurrent trim can be manipulating1448 * or freeing the bitmap.1449 */1450 ret = write_bitmap_entries(io_ctl, &bitmap_list);1451 spin_unlock(&ctl->tree_lock);1452 mutex_unlock(&ctl->cache_writeout_mutex);1453 if (ret)1454 goto out_nospc;1455 1456 /* Zero out the rest of the pages just to make sure */1457 io_ctl_zero_remaining_pages(io_ctl);1458 1459 /* Everything is written out, now we dirty the pages in the file. */1460 ret = btrfs_dirty_pages(BTRFS_I(inode), io_ctl->pages,1461 io_ctl->num_pages, 0, i_size_read(inode),1462 &cached_state, false);1463 if (ret)1464 goto out_nospc;1465 1466 if (block_group && (block_group->flags & BTRFS_BLOCK_GROUP_DATA))1467 up_write(&block_group->data_rwsem);1468 /*1469 * Release the pages and unlock the extent, we will flush1470 * them out later1471 */1472 io_ctl_drop_pages(io_ctl);1473 io_ctl_free(io_ctl);1474 1475 unlock_extent(&BTRFS_I(inode)->io_tree, 0, i_size_read(inode) - 1,1476 &cached_state);1477 1478 /*1479 * at this point the pages are under IO and we're happy,1480 * The caller is responsible for waiting on them and updating1481 * the cache and the inode1482 */1483 io_ctl->entries = entries;1484 io_ctl->bitmaps = bitmaps;1485 1486 ret = btrfs_fdatawrite_range(BTRFS_I(inode), 0, (u64)-1);1487 if (ret)1488 goto out;1489 1490 return 0;1491 1492out_nospc_locked:1493 cleanup_bitmap_list(&bitmap_list);1494 spin_unlock(&ctl->tree_lock);1495 mutex_unlock(&ctl->cache_writeout_mutex);1496 1497out_nospc:1498 cleanup_write_cache_enospc(inode, io_ctl, &cached_state);1499 1500out_unlock:1501 if (block_group && (block_group->flags & BTRFS_BLOCK_GROUP_DATA))1502 up_write(&block_group->data_rwsem);1503 1504out:1505 io_ctl->inode = NULL;1506 io_ctl_free(io_ctl);1507 if (ret) {1508 invalidate_inode_pages2(inode->i_mapping);1509 BTRFS_I(inode)->generation = 0;1510 }1511 btrfs_update_inode(trans, BTRFS_I(inode));1512 if (must_iput)1513 iput(inode);1514 return ret;1515}1516 1517int btrfs_write_out_cache(struct btrfs_trans_handle *trans,1518 struct btrfs_block_group *block_group,1519 struct btrfs_path *path)1520{1521 struct btrfs_fs_info *fs_info = trans->fs_info;1522 struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl;1523 struct inode *inode;1524 int ret = 0;1525 1526 spin_lock(&block_group->lock);1527 if (block_group->disk_cache_state < BTRFS_DC_SETUP) {1528 spin_unlock(&block_group->lock);1529 return 0;1530 }1531 spin_unlock(&block_group->lock);1532 1533 inode = lookup_free_space_inode(block_group, path);1534 if (IS_ERR(inode))1535 return 0;1536 1537 ret = __btrfs_write_out_cache(inode, ctl, block_group,1538 &block_group->io_ctl, trans);1539 if (ret) {1540 btrfs_debug(fs_info,1541 "failed to write free space cache for block group %llu error %d",1542 block_group->start, ret);1543 spin_lock(&block_group->lock);1544 block_group->disk_cache_state = BTRFS_DC_ERROR;1545 spin_unlock(&block_group->lock);1546 1547 block_group->io_ctl.inode = NULL;1548 iput(inode);1549 }1550 1551 /*1552 * if ret == 0 the caller is expected to call btrfs_wait_cache_io1553 * to wait for IO and put the inode1554 */1555 1556 return ret;1557}1558 1559static inline unsigned long offset_to_bit(u64 bitmap_start, u32 unit,1560 u64 offset)1561{1562 ASSERT(offset >= bitmap_start);1563 offset -= bitmap_start;1564 return (unsigned long)(div_u64(offset, unit));1565}1566 1567static inline unsigned long bytes_to_bits(u64 bytes, u32 unit)1568{1569 return (unsigned long)(div_u64(bytes, unit));1570}1571 1572static inline u64 offset_to_bitmap(struct btrfs_free_space_ctl *ctl,1573 u64 offset)1574{1575 u64 bitmap_start;1576 u64 bytes_per_bitmap;1577 1578 bytes_per_bitmap = BITS_PER_BITMAP * ctl->unit;1579 bitmap_start = offset - ctl->start;1580 bitmap_start = div64_u64(bitmap_start, bytes_per_bitmap);1581 bitmap_start *= bytes_per_bitmap;1582 bitmap_start += ctl->start;1583 1584 return bitmap_start;1585}1586 1587static int tree_insert_offset(struct btrfs_free_space_ctl *ctl,1588 struct btrfs_free_cluster *cluster,1589 struct btrfs_free_space *new_entry)1590{1591 struct rb_root *root;1592 struct rb_node **p;1593 struct rb_node *parent = NULL;1594 1595 lockdep_assert_held(&ctl->tree_lock);1596 1597 if (cluster) {1598 lockdep_assert_held(&cluster->lock);1599 root = &cluster->root;1600 } else {1601 root = &ctl->free_space_offset;1602 }1603 1604 p = &root->rb_node;1605 1606 while (*p) {1607 struct btrfs_free_space *info;1608 1609 parent = *p;1610 info = rb_entry(parent, struct btrfs_free_space, offset_index);1611 1612 if (new_entry->offset < info->offset) {1613 p = &(*p)->rb_left;1614 } else if (new_entry->offset > info->offset) {1615 p = &(*p)->rb_right;1616 } else {1617 /*1618 * we could have a bitmap entry and an extent entry1619 * share the same offset. If this is the case, we want1620 * the extent entry to always be found first if we do a1621 * linear search through the tree, since we want to have1622 * the quickest allocation time, and allocating from an1623 * extent is faster than allocating from a bitmap. So1624 * if we're inserting a bitmap and we find an entry at1625 * this offset, we want to go right, or after this entry1626 * logically. If we are inserting an extent and we've1627 * found a bitmap, we want to go left, or before1628 * logically.1629 */1630 if (new_entry->bitmap) {1631 if (info->bitmap) {1632 WARN_ON_ONCE(1);1633 return -EEXIST;1634 }1635 p = &(*p)->rb_right;1636 } else {1637 if (!info->bitmap) {1638 WARN_ON_ONCE(1);1639 return -EEXIST;1640 }1641 p = &(*p)->rb_left;1642 }1643 }1644 }1645 1646 rb_link_node(&new_entry->offset_index, parent, p);1647 rb_insert_color(&new_entry->offset_index, root);1648 1649 return 0;1650}1651 1652/*1653 * This is a little subtle. We *only* have ->max_extent_size set if we actually1654 * searched through the bitmap and figured out the largest ->max_extent_size,1655 * otherwise it's 0. In the case that it's 0 we don't want to tell the1656 * allocator the wrong thing, we want to use the actual real max_extent_size1657 * we've found already if it's larger, or we want to use ->bytes.1658 *1659 * This matters because find_free_space() will skip entries who's ->bytes is1660 * less than the required bytes. So if we didn't search down this bitmap, we1661 * may pick some previous entry that has a smaller ->max_extent_size than we1662 * have. For example, assume we have two entries, one that has1663 * ->max_extent_size set to 4K and ->bytes set to 1M. A second entry hasn't set1664 * ->max_extent_size yet, has ->bytes set to 8K and it's contiguous. We will1665 * call into find_free_space(), and return with max_extent_size == 4K, because1666 * that first bitmap entry had ->max_extent_size set, but the second one did1667 * not. If instead we returned 8K we'd come in searching for 8K, and find the1668 * 8K contiguous range.1669 *1670 * Consider the other case, we have 2 8K chunks in that second entry and still1671 * don't have ->max_extent_size set. We'll return 16K, and the next time the1672 * allocator comes in it'll fully search our second bitmap, and this time it'll1673 * get an uptodate value of 8K as the maximum chunk size. Then we'll get the1674 * right allocation the next loop through.1675 */1676static inline u64 get_max_extent_size(const struct btrfs_free_space *entry)1677{1678 if (entry->bitmap && entry->max_extent_size)1679 return entry->max_extent_size;1680 return entry->bytes;1681}1682 1683/*1684 * We want the largest entry to be leftmost, so this is inverted from what you'd1685 * normally expect.1686 */1687static bool entry_less(struct rb_node *node, const struct rb_node *parent)1688{1689 const struct btrfs_free_space *entry, *exist;1690 1691 entry = rb_entry(node, struct btrfs_free_space, bytes_index);1692 exist = rb_entry(parent, struct btrfs_free_space, bytes_index);1693 return get_max_extent_size(exist) < get_max_extent_size(entry);1694}1695 1696/*1697 * searches the tree for the given offset.1698 *1699 * fuzzy - If this is set, then we are trying to make an allocation, and we just1700 * want a section that has at least bytes size and comes at or after the given1701 * offset.1702 */1703static struct btrfs_free_space *1704tree_search_offset(struct btrfs_free_space_ctl *ctl,1705 u64 offset, int bitmap_only, int fuzzy)1706{1707 struct rb_node *n = ctl->free_space_offset.rb_node;1708 struct btrfs_free_space *entry = NULL, *prev = NULL;1709 1710 lockdep_assert_held(&ctl->tree_lock);1711 1712 /* find entry that is closest to the 'offset' */1713 while (n) {1714 entry = rb_entry(n, struct btrfs_free_space, offset_index);1715 prev = entry;1716 1717 if (offset < entry->offset)1718 n = n->rb_left;1719 else if (offset > entry->offset)1720 n = n->rb_right;1721 else1722 break;1723 1724 entry = NULL;1725 }1726 1727 if (bitmap_only) {1728 if (!entry)1729 return NULL;1730 if (entry->bitmap)1731 return entry;1732 1733 /*1734 * bitmap entry and extent entry may share same offset,1735 * in that case, bitmap entry comes after extent entry.1736 */1737 n = rb_next(n);1738 if (!n)1739 return NULL;1740 entry = rb_entry(n, struct btrfs_free_space, offset_index);1741 if (entry->offset != offset)1742 return NULL;1743 1744 WARN_ON(!entry->bitmap);1745 return entry;1746 } else if (entry) {1747 if (entry->bitmap) {1748 /*1749 * if previous extent entry covers the offset,1750 * we should return it instead of the bitmap entry1751 */1752 n = rb_prev(&entry->offset_index);1753 if (n) {1754 prev = rb_entry(n, struct btrfs_free_space,1755 offset_index);1756 if (!prev->bitmap &&1757 prev->offset + prev->bytes > offset)1758 entry = prev;1759 }1760 }1761 return entry;1762 }1763 1764 if (!prev)1765 return NULL;1766 1767 /* find last entry before the 'offset' */1768 entry = prev;1769 if (entry->offset > offset) {1770 n = rb_prev(&entry->offset_index);1771 if (n) {1772 entry = rb_entry(n, struct btrfs_free_space,1773 offset_index);1774 ASSERT(entry->offset <= offset);1775 } else {1776 if (fuzzy)1777 return entry;1778 else1779 return NULL;1780 }1781 }1782 1783 if (entry->bitmap) {1784 n = rb_prev(&entry->offset_index);1785 if (n) {1786 prev = rb_entry(n, struct btrfs_free_space,1787 offset_index);1788 if (!prev->bitmap &&1789 prev->offset + prev->bytes > offset)1790 return prev;1791 }1792 if (entry->offset + BITS_PER_BITMAP * ctl->unit > offset)1793 return entry;1794 } else if (entry->offset + entry->bytes > offset)1795 return entry;1796 1797 if (!fuzzy)1798 return NULL;1799 1800 while (1) {1801 n = rb_next(&entry->offset_index);1802 if (!n)1803 return NULL;1804 entry = rb_entry(n, struct btrfs_free_space, offset_index);1805 if (entry->bitmap) {1806 if (entry->offset + BITS_PER_BITMAP *1807 ctl->unit > offset)1808 break;1809 } else {1810 if (entry->offset + entry->bytes > offset)1811 break;1812 }1813 }1814 return entry;1815}1816 1817static inline void unlink_free_space(struct btrfs_free_space_ctl *ctl,1818 struct btrfs_free_space *info,1819 bool update_stat)1820{1821 lockdep_assert_held(&ctl->tree_lock);1822 1823 rb_erase(&info->offset_index, &ctl->free_space_offset);1824 rb_erase_cached(&info->bytes_index, &ctl->free_space_bytes);1825 ctl->free_extents--;1826 1827 if (!info->bitmap && !btrfs_free_space_trimmed(info)) {1828 ctl->discardable_extents[BTRFS_STAT_CURR]--;1829 ctl->discardable_bytes[BTRFS_STAT_CURR] -= info->bytes;1830 }1831 1832 if (update_stat)1833 ctl->free_space -= info->bytes;1834}1835 1836static int link_free_space(struct btrfs_free_space_ctl *ctl,1837 struct btrfs_free_space *info)1838{1839 int ret = 0;1840 1841 lockdep_assert_held(&ctl->tree_lock);1842 1843 ASSERT(info->bytes || info->bitmap);1844 ret = tree_insert_offset(ctl, NULL, info);1845 if (ret)1846 return ret;1847 1848 rb_add_cached(&info->bytes_index, &ctl->free_space_bytes, entry_less);1849 1850 if (!info->bitmap && !btrfs_free_space_trimmed(info)) {1851 ctl->discardable_extents[BTRFS_STAT_CURR]++;1852 ctl->discardable_bytes[BTRFS_STAT_CURR] += info->bytes;1853 }1854 1855 ctl->free_space += info->bytes;1856 ctl->free_extents++;1857 return ret;1858}1859 1860static void relink_bitmap_entry(struct btrfs_free_space_ctl *ctl,1861 struct btrfs_free_space *info)1862{1863 ASSERT(info->bitmap);1864 1865 /*1866 * If our entry is empty it's because we're on a cluster and we don't1867 * want to re-link it into our ctl bytes index.1868 */1869 if (RB_EMPTY_NODE(&info->bytes_index))1870 return;1871 1872 lockdep_assert_held(&ctl->tree_lock);1873 1874 rb_erase_cached(&info->bytes_index, &ctl->free_space_bytes);1875 rb_add_cached(&info->bytes_index, &ctl->free_space_bytes, entry_less);1876}1877 1878static inline void bitmap_clear_bits(struct btrfs_free_space_ctl *ctl,1879 struct btrfs_free_space *info,1880 u64 offset, u64 bytes, bool update_stat)1881{1882 unsigned long start, count, end;1883 int extent_delta = -1;1884 1885 start = offset_to_bit(info->offset, ctl->unit, offset);1886 count = bytes_to_bits(bytes, ctl->unit);1887 end = start + count;1888 ASSERT(end <= BITS_PER_BITMAP);1889 1890 bitmap_clear(info->bitmap, start, count);1891 1892 info->bytes -= bytes;1893 if (info->max_extent_size > ctl->unit)1894 info->max_extent_size = 0;1895 1896 relink_bitmap_entry(ctl, info);1897 1898 if (start && test_bit(start - 1, info->bitmap))1899 extent_delta++;1900 1901 if (end < BITS_PER_BITMAP && test_bit(end, info->bitmap))1902 extent_delta++;1903 1904 info->bitmap_extents += extent_delta;1905 if (!btrfs_free_space_trimmed(info)) {1906 ctl->discardable_extents[BTRFS_STAT_CURR] += extent_delta;1907 ctl->discardable_bytes[BTRFS_STAT_CURR] -= bytes;1908 }1909 1910 if (update_stat)1911 ctl->free_space -= bytes;1912}1913 1914static void btrfs_bitmap_set_bits(struct btrfs_free_space_ctl *ctl,1915 struct btrfs_free_space *info, u64 offset,1916 u64 bytes)1917{1918 unsigned long start, count, end;1919 int extent_delta = 1;1920 1921 start = offset_to_bit(info->offset, ctl->unit, offset);1922 count = bytes_to_bits(bytes, ctl->unit);1923 end = start + count;1924 ASSERT(end <= BITS_PER_BITMAP);1925 1926 bitmap_set(info->bitmap, start, count);1927 1928 /*1929 * We set some bytes, we have no idea what the max extent size is1930 * anymore.1931 */1932 info->max_extent_size = 0;1933 info->bytes += bytes;1934 ctl->free_space += bytes;1935 1936 relink_bitmap_entry(ctl, info);1937 1938 if (start && test_bit(start - 1, info->bitmap))1939 extent_delta--;1940 1941 if (end < BITS_PER_BITMAP && test_bit(end, info->bitmap))1942 extent_delta--;1943 1944 info->bitmap_extents += extent_delta;1945 if (!btrfs_free_space_trimmed(info)) {1946 ctl->discardable_extents[BTRFS_STAT_CURR] += extent_delta;1947 ctl->discardable_bytes[BTRFS_STAT_CURR] += bytes;1948 }1949}1950 1951/*1952 * If we can not find suitable extent, we will use bytes to record1953 * the size of the max extent.1954 */1955static int search_bitmap(struct btrfs_free_space_ctl *ctl,1956 struct btrfs_free_space *bitmap_info, u64 *offset,1957 u64 *bytes, bool for_alloc)1958{1959 unsigned long found_bits = 0;1960 unsigned long max_bits = 0;1961 unsigned long bits, i;1962 unsigned long next_zero;1963 unsigned long extent_bits;1964 1965 /*1966 * Skip searching the bitmap if we don't have a contiguous section that1967 * is large enough for this allocation.1968 */1969 if (for_alloc &&1970 bitmap_info->max_extent_size &&1971 bitmap_info->max_extent_size < *bytes) {1972 *bytes = bitmap_info->max_extent_size;1973 return -1;1974 }1975 1976 i = offset_to_bit(bitmap_info->offset, ctl->unit,1977 max_t(u64, *offset, bitmap_info->offset));1978 bits = bytes_to_bits(*bytes, ctl->unit);1979 1980 for_each_set_bit_from(i, bitmap_info->bitmap, BITS_PER_BITMAP) {1981 if (for_alloc && bits == 1) {1982 found_bits = 1;1983 break;1984 }1985 next_zero = find_next_zero_bit(bitmap_info->bitmap,1986 BITS_PER_BITMAP, i);1987 extent_bits = next_zero - i;1988 if (extent_bits >= bits) {1989 found_bits = extent_bits;1990 break;1991 } else if (extent_bits > max_bits) {1992 max_bits = extent_bits;1993 }1994 i = next_zero;1995 }1996 1997 if (found_bits) {1998 *offset = (u64)(i * ctl->unit) + bitmap_info->offset;1999 *bytes = (u64)(found_bits) * ctl->unit;2000 return 0;2001 }2002 2003 *bytes = (u64)(max_bits) * ctl->unit;2004 bitmap_info->max_extent_size = *bytes;2005 relink_bitmap_entry(ctl, bitmap_info);2006 return -1;2007}2008 2009/* Cache the size of the max extent in bytes */2010static struct btrfs_free_space *2011find_free_space(struct btrfs_free_space_ctl *ctl, u64 *offset, u64 *bytes,2012 unsigned long align, u64 *max_extent_size, bool use_bytes_index)2013{2014 struct btrfs_free_space *entry;2015 struct rb_node *node;2016 u64 tmp;2017 u64 align_off;2018 int ret;2019 2020 if (!ctl->free_space_offset.rb_node)2021 goto out;2022again:2023 if (use_bytes_index) {2024 node = rb_first_cached(&ctl->free_space_bytes);2025 } else {2026 entry = tree_search_offset(ctl, offset_to_bitmap(ctl, *offset),2027 0, 1);2028 if (!entry)2029 goto out;2030 node = &entry->offset_index;2031 }2032 2033 for (; node; node = rb_next(node)) {2034 if (use_bytes_index)2035 entry = rb_entry(node, struct btrfs_free_space,2036 bytes_index);2037 else2038 entry = rb_entry(node, struct btrfs_free_space,2039 offset_index);2040 2041 /*2042 * If we are using the bytes index then all subsequent entries2043 * in this tree are going to be < bytes, so simply set the max2044 * extent size and exit the loop.2045 *2046 * If we're using the offset index then we need to keep going2047 * through the rest of the tree.2048 */2049 if (entry->bytes < *bytes) {2050 *max_extent_size = max(get_max_extent_size(entry),2051 *max_extent_size);2052 if (use_bytes_index)2053 break;2054 continue;2055 }2056 2057 /* make sure the space returned is big enough2058 * to match our requested alignment2059 */2060 if (*bytes >= align) {2061 tmp = entry->offset - ctl->start + align - 1;2062 tmp = div64_u64(tmp, align);2063 tmp = tmp * align + ctl->start;2064 align_off = tmp - entry->offset;2065 } else {2066 align_off = 0;2067 tmp = entry->offset;2068 }2069 2070 /*2071 * We don't break here if we're using the bytes index because we2072 * may have another entry that has the correct alignment that is2073 * the right size, so we don't want to miss that possibility.2074 * At worst this adds another loop through the logic, but if we2075 * broke here we could prematurely ENOSPC.2076 */2077 if (entry->bytes < *bytes + align_off) {2078 *max_extent_size = max(get_max_extent_size(entry),2079 *max_extent_size);2080 continue;2081 }2082 2083 if (entry->bitmap) {2084 struct rb_node *old_next = rb_next(node);2085 u64 size = *bytes;2086 2087 ret = search_bitmap(ctl, entry, &tmp, &size, true);2088 if (!ret) {2089 *offset = tmp;2090 *bytes = size;2091 return entry;2092 } else {2093 *max_extent_size =2094 max(get_max_extent_size(entry),2095 *max_extent_size);2096 }2097 2098 /*2099 * The bitmap may have gotten re-arranged in the space2100 * index here because the max_extent_size may have been2101 * updated. Start from the beginning again if this2102 * happened.2103 */2104 if (use_bytes_index && old_next != rb_next(node))2105 goto again;2106 continue;2107 }2108 2109 *offset = tmp;2110 *bytes = entry->bytes - align_off;2111 return entry;2112 }2113out:2114 return NULL;2115}2116 2117static void add_new_bitmap(struct btrfs_free_space_ctl *ctl,2118 struct btrfs_free_space *info, u64 offset)2119{2120 info->offset = offset_to_bitmap(ctl, offset);2121 info->bytes = 0;2122 info->bitmap_extents = 0;2123 INIT_LIST_HEAD(&info->list);2124 link_free_space(ctl, info);2125 ctl->total_bitmaps++;2126 recalculate_thresholds(ctl);2127}2128 2129static void free_bitmap(struct btrfs_free_space_ctl *ctl,2130 struct btrfs_free_space *bitmap_info)2131{2132 /*2133 * Normally when this is called, the bitmap is completely empty. However,2134 * if we are blowing up the free space cache for one reason or another2135 * via __btrfs_remove_free_space_cache(), then it may not be freed and2136 * we may leave stats on the table.2137 */2138 if (bitmap_info->bytes && !btrfs_free_space_trimmed(bitmap_info)) {2139 ctl->discardable_extents[BTRFS_STAT_CURR] -=2140 bitmap_info->bitmap_extents;2141 ctl->discardable_bytes[BTRFS_STAT_CURR] -= bitmap_info->bytes;2142 2143 }2144 unlink_free_space(ctl, bitmap_info, true);2145 kmem_cache_free(btrfs_free_space_bitmap_cachep, bitmap_info->bitmap);2146 kmem_cache_free(btrfs_free_space_cachep, bitmap_info);2147 ctl->total_bitmaps--;2148 recalculate_thresholds(ctl);2149}2150 2151static noinline int remove_from_bitmap(struct btrfs_free_space_ctl *ctl,2152 struct btrfs_free_space *bitmap_info,2153 u64 *offset, u64 *bytes)2154{2155 u64 end;2156 u64 search_start, search_bytes;2157 int ret;2158 2159again:2160 end = bitmap_info->offset + (u64)(BITS_PER_BITMAP * ctl->unit) - 1;2161 2162 /*2163 * We need to search for bits in this bitmap. We could only cover some2164 * of the extent in this bitmap thanks to how we add space, so we need2165 * to search for as much as it as we can and clear that amount, and then2166 * go searching for the next bit.2167 */2168 search_start = *offset;2169 search_bytes = ctl->unit;2170 search_bytes = min(search_bytes, end - search_start + 1);2171 ret = search_bitmap(ctl, bitmap_info, &search_start, &search_bytes,2172 false);2173 if (ret < 0 || search_start != *offset)2174 return -EINVAL;2175 2176 /* We may have found more bits than what we need */2177 search_bytes = min(search_bytes, *bytes);2178 2179 /* Cannot clear past the end of the bitmap */2180 search_bytes = min(search_bytes, end - search_start + 1);2181 2182 bitmap_clear_bits(ctl, bitmap_info, search_start, search_bytes, true);2183 *offset += search_bytes;2184 *bytes -= search_bytes;2185 2186 if (*bytes) {2187 struct rb_node *next = rb_next(&bitmap_info->offset_index);2188 if (!bitmap_info->bytes)2189 free_bitmap(ctl, bitmap_info);2190 2191 /*2192 * no entry after this bitmap, but we still have bytes to2193 * remove, so something has gone wrong.2194 */2195 if (!next)2196 return -EINVAL;2197 2198 bitmap_info = rb_entry(next, struct btrfs_free_space,2199 offset_index);2200 2201 /*2202 * if the next entry isn't a bitmap we need to return to let the2203 * extent stuff do its work.2204 */2205 if (!bitmap_info->bitmap)2206 return -EAGAIN;2207 2208 /*2209 * Ok the next item is a bitmap, but it may not actually hold2210 * the information for the rest of this free space stuff, so2211 * look for it, and if we don't find it return so we can try2212 * everything over again.2213 */2214 search_start = *offset;2215 search_bytes = ctl->unit;2216 ret = search_bitmap(ctl, bitmap_info, &search_start,2217 &search_bytes, false);2218 if (ret < 0 || search_start != *offset)2219 return -EAGAIN;2220 2221 goto again;2222 } else if (!bitmap_info->bytes)2223 free_bitmap(ctl, bitmap_info);2224 2225 return 0;2226}2227 2228static u64 add_bytes_to_bitmap(struct btrfs_free_space_ctl *ctl,2229 struct btrfs_free_space *info, u64 offset,2230 u64 bytes, enum btrfs_trim_state trim_state)2231{2232 u64 bytes_to_set = 0;2233 u64 end;2234 2235 /*2236 * This is a tradeoff to make bitmap trim state minimal. We mark the2237 * whole bitmap untrimmed if at any point we add untrimmed regions.2238 */2239 if (trim_state == BTRFS_TRIM_STATE_UNTRIMMED) {2240 if (btrfs_free_space_trimmed(info)) {2241 ctl->discardable_extents[BTRFS_STAT_CURR] +=2242 info->bitmap_extents;2243 ctl->discardable_bytes[BTRFS_STAT_CURR] += info->bytes;2244 }2245 info->trim_state = BTRFS_TRIM_STATE_UNTRIMMED;2246 }2247 2248 end = info->offset + (u64)(BITS_PER_BITMAP * ctl->unit);2249 2250 bytes_to_set = min(end - offset, bytes);2251 2252 btrfs_bitmap_set_bits(ctl, info, offset, bytes_to_set);2253 2254 return bytes_to_set;2255 2256}2257 2258static bool use_bitmap(struct btrfs_free_space_ctl *ctl,2259 struct btrfs_free_space *info)2260{2261 struct btrfs_block_group *block_group = ctl->block_group;2262 struct btrfs_fs_info *fs_info = block_group->fs_info;2263 bool forced = false;2264 2265#ifdef CONFIG_BTRFS_DEBUG2266 if (btrfs_should_fragment_free_space(block_group))2267 forced = true;2268#endif2269 2270 /* This is a way to reclaim large regions from the bitmaps. */2271 if (!forced && info->bytes >= FORCE_EXTENT_THRESHOLD)2272 return false;2273 2274 /*2275 * If we are below the extents threshold then we can add this as an2276 * extent, and don't have to deal with the bitmap2277 */2278 if (!forced && ctl->free_extents < ctl->extents_thresh) {2279 /*2280 * If this block group has some small extents we don't want to2281 * use up all of our free slots in the cache with them, we want2282 * to reserve them to larger extents, however if we have plenty2283 * of cache left then go ahead an dadd them, no sense in adding2284 * the overhead of a bitmap if we don't have to.2285 */2286 if (info->bytes <= fs_info->sectorsize * 8) {2287 if (ctl->free_extents * 3 <= ctl->extents_thresh)2288 return false;2289 } else {2290 return false;2291 }2292 }2293 2294 /*2295 * The original block groups from mkfs can be really small, like 82296 * megabytes, so don't bother with a bitmap for those entries. However2297 * some block groups can be smaller than what a bitmap would cover but2298 * are still large enough that they could overflow the 32k memory limit,2299 * so allow those block groups to still be allowed to have a bitmap2300 * entry.2301 */2302 if (((BITS_PER_BITMAP * ctl->unit) >> 1) > block_group->length)2303 return false;2304 2305 return true;2306}2307 2308static const struct btrfs_free_space_op free_space_op = {2309 .use_bitmap = use_bitmap,2310};2311 2312static int insert_into_bitmap(struct btrfs_free_space_ctl *ctl,2313 struct btrfs_free_space *info)2314{2315 struct btrfs_free_space *bitmap_info;2316 struct btrfs_block_group *block_group = NULL;2317 int added = 0;2318 u64 bytes, offset, bytes_added;2319 enum btrfs_trim_state trim_state;2320 int ret;2321 2322 bytes = info->bytes;2323 offset = info->offset;2324 trim_state = info->trim_state;2325 2326 if (!ctl->op->use_bitmap(ctl, info))2327 return 0;2328 2329 if (ctl->op == &free_space_op)2330 block_group = ctl->block_group;2331again:2332 /*2333 * Since we link bitmaps right into the cluster we need to see if we2334 * have a cluster here, and if so and it has our bitmap we need to add2335 * the free space to that bitmap.2336 */2337 if (block_group && !list_empty(&block_group->cluster_list)) {2338 struct btrfs_free_cluster *cluster;2339 struct rb_node *node;2340 struct btrfs_free_space *entry;2341 2342 cluster = list_entry(block_group->cluster_list.next,2343 struct btrfs_free_cluster,2344 block_group_list);2345 spin_lock(&cluster->lock);2346 node = rb_first(&cluster->root);2347 if (!node) {2348 spin_unlock(&cluster->lock);2349 goto no_cluster_bitmap;2350 }2351 2352 entry = rb_entry(node, struct btrfs_free_space, offset_index);2353 if (!entry->bitmap) {2354 spin_unlock(&cluster->lock);2355 goto no_cluster_bitmap;2356 }2357 2358 if (entry->offset == offset_to_bitmap(ctl, offset)) {2359 bytes_added = add_bytes_to_bitmap(ctl, entry, offset,2360 bytes, trim_state);2361 bytes -= bytes_added;2362 offset += bytes_added;2363 }2364 spin_unlock(&cluster->lock);2365 if (!bytes) {2366 ret = 1;2367 goto out;2368 }2369 }2370 2371no_cluster_bitmap:2372 bitmap_info = tree_search_offset(ctl, offset_to_bitmap(ctl, offset),2373 1, 0);2374 if (!bitmap_info) {2375 ASSERT(added == 0);2376 goto new_bitmap;2377 }2378 2379 bytes_added = add_bytes_to_bitmap(ctl, bitmap_info, offset, bytes,2380 trim_state);2381 bytes -= bytes_added;2382 offset += bytes_added;2383 added = 0;2384 2385 if (!bytes) {2386 ret = 1;2387 goto out;2388 } else2389 goto again;2390 2391new_bitmap:2392 if (info && info->bitmap) {2393 add_new_bitmap(ctl, info, offset);2394 added = 1;2395 info = NULL;2396 goto again;2397 } else {2398 spin_unlock(&ctl->tree_lock);2399 2400 /* no pre-allocated info, allocate a new one */2401 if (!info) {2402 info = kmem_cache_zalloc(btrfs_free_space_cachep,2403 GFP_NOFS);2404 if (!info) {2405 spin_lock(&ctl->tree_lock);2406 ret = -ENOMEM;2407 goto out;2408 }2409 }2410 2411 /* allocate the bitmap */2412 info->bitmap = kmem_cache_zalloc(btrfs_free_space_bitmap_cachep,2413 GFP_NOFS);2414 info->trim_state = BTRFS_TRIM_STATE_TRIMMED;2415 spin_lock(&ctl->tree_lock);2416 if (!info->bitmap) {2417 ret = -ENOMEM;2418 goto out;2419 }2420 goto again;2421 }2422 2423out:2424 if (info) {2425 if (info->bitmap)2426 kmem_cache_free(btrfs_free_space_bitmap_cachep,2427 info->bitmap);2428 kmem_cache_free(btrfs_free_space_cachep, info);2429 }2430 2431 return ret;2432}2433 2434/*2435 * Free space merging rules:2436 * 1) Merge trimmed areas together2437 * 2) Let untrimmed areas coalesce with trimmed areas2438 * 3) Always pull neighboring regions from bitmaps2439 *2440 * The above rules are for when we merge free space based on btrfs_trim_state.2441 * Rules 2 and 3 are subtle because they are suboptimal, but are done for the2442 * same reason: to promote larger extent regions which makes life easier for2443 * find_free_extent(). Rule 2 enables coalescing based on the common path2444 * being returning free space from btrfs_finish_extent_commit(). So when free2445 * space is trimmed, it will prevent aggregating trimmed new region and2446 * untrimmed regions in the rb_tree. Rule 3 is purely to obtain larger extents2447 * and provide find_free_extent() with the largest extents possible hoping for2448 * the reuse path.2449 */2450static bool try_merge_free_space(struct btrfs_free_space_ctl *ctl,2451 struct btrfs_free_space *info, bool update_stat)2452{2453 struct btrfs_free_space *left_info = NULL;2454 struct btrfs_free_space *right_info;2455 bool merged = false;2456 u64 offset = info->offset;2457 u64 bytes = info->bytes;2458 const bool is_trimmed = btrfs_free_space_trimmed(info);2459 struct rb_node *right_prev = NULL;2460 2461 /*2462 * first we want to see if there is free space adjacent to the range we2463 * are adding, if there is remove that struct and add a new one to2464 * cover the entire range2465 */2466 right_info = tree_search_offset(ctl, offset + bytes, 0, 0);2467 if (right_info)2468 right_prev = rb_prev(&right_info->offset_index);2469 2470 if (right_prev)2471 left_info = rb_entry(right_prev, struct btrfs_free_space, offset_index);2472 else if (!right_info)2473 left_info = tree_search_offset(ctl, offset - 1, 0, 0);2474 2475 /* See try_merge_free_space() comment. */2476 if (right_info && !right_info->bitmap &&2477 (!is_trimmed || btrfs_free_space_trimmed(right_info))) {2478 unlink_free_space(ctl, right_info, update_stat);2479 info->bytes += right_info->bytes;2480 kmem_cache_free(btrfs_free_space_cachep, right_info);2481 merged = true;2482 }2483 2484 /* See try_merge_free_space() comment. */2485 if (left_info && !left_info->bitmap &&2486 left_info->offset + left_info->bytes == offset &&2487 (!is_trimmed || btrfs_free_space_trimmed(left_info))) {2488 unlink_free_space(ctl, left_info, update_stat);2489 info->offset = left_info->offset;2490 info->bytes += left_info->bytes;2491 kmem_cache_free(btrfs_free_space_cachep, left_info);2492 merged = true;2493 }2494 2495 return merged;2496}2497 2498static bool steal_from_bitmap_to_end(struct btrfs_free_space_ctl *ctl,2499 struct btrfs_free_space *info,2500 bool update_stat)2501{2502 struct btrfs_free_space *bitmap;2503 unsigned long i;2504 unsigned long j;2505 const u64 end = info->offset + info->bytes;2506 const u64 bitmap_offset = offset_to_bitmap(ctl, end);2507 u64 bytes;2508 2509 bitmap = tree_search_offset(ctl, bitmap_offset, 1, 0);2510 if (!bitmap)2511 return false;2512 2513 i = offset_to_bit(bitmap->offset, ctl->unit, end);2514 j = find_next_zero_bit(bitmap->bitmap, BITS_PER_BITMAP, i);2515 if (j == i)2516 return false;2517 bytes = (j - i) * ctl->unit;2518 info->bytes += bytes;2519 2520 /* See try_merge_free_space() comment. */2521 if (!btrfs_free_space_trimmed(bitmap))2522 info->trim_state = BTRFS_TRIM_STATE_UNTRIMMED;2523 2524 bitmap_clear_bits(ctl, bitmap, end, bytes, update_stat);2525 2526 if (!bitmap->bytes)2527 free_bitmap(ctl, bitmap);2528 2529 return true;2530}2531 2532static bool steal_from_bitmap_to_front(struct btrfs_free_space_ctl *ctl,2533 struct btrfs_free_space *info,2534 bool update_stat)2535{2536 struct btrfs_free_space *bitmap;2537 u64 bitmap_offset;2538 unsigned long i;2539 unsigned long j;2540 unsigned long prev_j;2541 u64 bytes;2542 2543 bitmap_offset = offset_to_bitmap(ctl, info->offset);2544 /* If we're on a boundary, try the previous logical bitmap. */2545 if (bitmap_offset == info->offset) {2546 if (info->offset == 0)2547 return false;2548 bitmap_offset = offset_to_bitmap(ctl, info->offset - 1);2549 }2550 2551 bitmap = tree_search_offset(ctl, bitmap_offset, 1, 0);2552 if (!bitmap)2553 return false;2554 2555 i = offset_to_bit(bitmap->offset, ctl->unit, info->offset) - 1;2556 j = 0;2557 prev_j = (unsigned long)-1;2558 for_each_clear_bit_from(j, bitmap->bitmap, BITS_PER_BITMAP) {2559 if (j > i)2560 break;2561 prev_j = j;2562 }2563 if (prev_j == i)2564 return false;2565 2566 if (prev_j == (unsigned long)-1)2567 bytes = (i + 1) * ctl->unit;2568 else2569 bytes = (i - prev_j) * ctl->unit;2570 2571 info->offset -= bytes;2572 info->bytes += bytes;2573 2574 /* See try_merge_free_space() comment. */2575 if (!btrfs_free_space_trimmed(bitmap))2576 info->trim_state = BTRFS_TRIM_STATE_UNTRIMMED;2577 2578 bitmap_clear_bits(ctl, bitmap, info->offset, bytes, update_stat);2579 2580 if (!bitmap->bytes)2581 free_bitmap(ctl, bitmap);2582 2583 return true;2584}2585 2586/*2587 * We prefer always to allocate from extent entries, both for clustered and2588 * non-clustered allocation requests. So when attempting to add a new extent2589 * entry, try to see if there's adjacent free space in bitmap entries, and if2590 * there is, migrate that space from the bitmaps to the extent.2591 * Like this we get better chances of satisfying space allocation requests2592 * because we attempt to satisfy them based on a single cache entry, and never2593 * on 2 or more entries - even if the entries represent a contiguous free space2594 * region (e.g. 1 extent entry + 1 bitmap entry starting where the extent entry2595 * ends).2596 */2597static void steal_from_bitmap(struct btrfs_free_space_ctl *ctl,2598 struct btrfs_free_space *info,2599 bool update_stat)2600{2601 /*2602 * Only work with disconnected entries, as we can change their offset,2603 * and must be extent entries.2604 */2605 ASSERT(!info->bitmap);2606 ASSERT(RB_EMPTY_NODE(&info->offset_index));2607 2608 if (ctl->total_bitmaps > 0) {2609 bool stole_end;2610 bool stole_front = false;2611 2612 stole_end = steal_from_bitmap_to_end(ctl, info, update_stat);2613 if (ctl->total_bitmaps > 0)2614 stole_front = steal_from_bitmap_to_front(ctl, info,2615 update_stat);2616 2617 if (stole_end || stole_front)2618 try_merge_free_space(ctl, info, update_stat);2619 }2620}2621 2622static int __btrfs_add_free_space(struct btrfs_block_group *block_group,2623 u64 offset, u64 bytes,2624 enum btrfs_trim_state trim_state)2625{2626 struct btrfs_fs_info *fs_info = block_group->fs_info;2627 struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl;2628 struct btrfs_free_space *info;2629 int ret = 0;2630 u64 filter_bytes = bytes;2631 2632 ASSERT(!btrfs_is_zoned(fs_info));2633 2634 info = kmem_cache_zalloc(btrfs_free_space_cachep, GFP_NOFS);2635 if (!info)2636 return -ENOMEM;2637 2638 info->offset = offset;2639 info->bytes = bytes;2640 info->trim_state = trim_state;2641 RB_CLEAR_NODE(&info->offset_index);2642 RB_CLEAR_NODE(&info->bytes_index);2643 2644 spin_lock(&ctl->tree_lock);2645 2646 if (try_merge_free_space(ctl, info, true))2647 goto link;2648 2649 /*2650 * There was no extent directly to the left or right of this new2651 * extent then we know we're going to have to allocate a new extent, so2652 * before we do that see if we need to drop this into a bitmap2653 */2654 ret = insert_into_bitmap(ctl, info);2655 if (ret < 0) {2656 goto out;2657 } else if (ret) {2658 ret = 0;2659 goto out;2660 }2661link:2662 /*2663 * Only steal free space from adjacent bitmaps if we're sure we're not2664 * going to add the new free space to existing bitmap entries - because2665 * that would mean unnecessary work that would be reverted. Therefore2666 * attempt to steal space from bitmaps if we're adding an extent entry.2667 */2668 steal_from_bitmap(ctl, info, true);2669 2670 filter_bytes = max(filter_bytes, info->bytes);2671 2672 ret = link_free_space(ctl, info);2673 if (ret)2674 kmem_cache_free(btrfs_free_space_cachep, info);2675out:2676 btrfs_discard_update_discardable(block_group);2677 spin_unlock(&ctl->tree_lock);2678 2679 if (ret) {2680 btrfs_crit(fs_info, "unable to add free space :%d", ret);2681 ASSERT(ret != -EEXIST);2682 }2683 2684 if (trim_state != BTRFS_TRIM_STATE_TRIMMED) {2685 btrfs_discard_check_filter(block_group, filter_bytes);2686 btrfs_discard_queue_work(&fs_info->discard_ctl, block_group);2687 }2688 2689 return ret;2690}2691 2692static int __btrfs_add_free_space_zoned(struct btrfs_block_group *block_group,2693 u64 bytenr, u64 size, bool used)2694{2695 struct btrfs_space_info *sinfo = block_group->space_info;2696 struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl;2697 u64 offset = bytenr - block_group->start;2698 u64 to_free, to_unusable;2699 int bg_reclaim_threshold = 0;2700 bool initial;2701 u64 reclaimable_unusable;2702 2703 spin_lock(&block_group->lock);2704 2705 initial = ((size == block_group->length) && (block_group->alloc_offset == 0));2706 WARN_ON(!initial && offset + size > block_group->zone_capacity);2707 if (!initial)2708 bg_reclaim_threshold = READ_ONCE(sinfo->bg_reclaim_threshold);2709 2710 if (!used)2711 to_free = size;2712 else if (initial)2713 to_free = block_group->zone_capacity;2714 else if (offset >= block_group->alloc_offset)2715 to_free = size;2716 else if (offset + size <= block_group->alloc_offset)2717 to_free = 0;2718 else2719 to_free = offset + size - block_group->alloc_offset;2720 to_unusable = size - to_free;2721 2722 spin_lock(&ctl->tree_lock);2723 ctl->free_space += to_free;2724 spin_unlock(&ctl->tree_lock);2725 /*2726 * If the block group is read-only, we should account freed space into2727 * bytes_readonly.2728 */2729 if (!block_group->ro) {2730 block_group->zone_unusable += to_unusable;2731 WARN_ON(block_group->zone_unusable > block_group->length);2732 }2733 if (!used) {2734 block_group->alloc_offset -= size;2735 }2736 2737 reclaimable_unusable = block_group->zone_unusable -2738 (block_group->length - block_group->zone_capacity);2739 /* All the region is now unusable. Mark it as unused and reclaim */2740 if (block_group->zone_unusable == block_group->length) {2741 btrfs_mark_bg_unused(block_group);2742 } else if (bg_reclaim_threshold &&2743 reclaimable_unusable >=2744 mult_perc(block_group->zone_capacity, bg_reclaim_threshold)) {2745 btrfs_mark_bg_to_reclaim(block_group);2746 }2747 2748 spin_unlock(&block_group->lock);2749 2750 return 0;2751}2752 2753int btrfs_add_free_space(struct btrfs_block_group *block_group,2754 u64 bytenr, u64 size)2755{2756 enum btrfs_trim_state trim_state = BTRFS_TRIM_STATE_UNTRIMMED;2757 2758 if (btrfs_is_zoned(block_group->fs_info))2759 return __btrfs_add_free_space_zoned(block_group, bytenr, size,2760 true);2761 2762 if (btrfs_test_opt(block_group->fs_info, DISCARD_SYNC))2763 trim_state = BTRFS_TRIM_STATE_TRIMMED;2764 2765 return __btrfs_add_free_space(block_group, bytenr, size, trim_state);2766}2767 2768int btrfs_add_free_space_unused(struct btrfs_block_group *block_group,2769 u64 bytenr, u64 size)2770{2771 if (btrfs_is_zoned(block_group->fs_info))2772 return __btrfs_add_free_space_zoned(block_group, bytenr, size,2773 false);2774 2775 return btrfs_add_free_space(block_group, bytenr, size);2776}2777 2778/*2779 * This is a subtle distinction because when adding free space back in general,2780 * we want it to be added as untrimmed for async. But in the case where we add2781 * it on loading of a block group, we want to consider it trimmed.2782 */2783int btrfs_add_free_space_async_trimmed(struct btrfs_block_group *block_group,2784 u64 bytenr, u64 size)2785{2786 enum btrfs_trim_state trim_state = BTRFS_TRIM_STATE_UNTRIMMED;2787 2788 if (btrfs_is_zoned(block_group->fs_info))2789 return __btrfs_add_free_space_zoned(block_group, bytenr, size,2790 true);2791 2792 if (btrfs_test_opt(block_group->fs_info, DISCARD_SYNC) ||2793 btrfs_test_opt(block_group->fs_info, DISCARD_ASYNC))2794 trim_state = BTRFS_TRIM_STATE_TRIMMED;2795 2796 return __btrfs_add_free_space(block_group, bytenr, size, trim_state);2797}2798 2799int btrfs_remove_free_space(struct btrfs_block_group *block_group,2800 u64 offset, u64 bytes)2801{2802 struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl;2803 struct btrfs_free_space *info;2804 int ret;2805 bool re_search = false;2806 2807 if (btrfs_is_zoned(block_group->fs_info)) {2808 /*2809 * This can happen with conventional zones when replaying log.2810 * Since the allocation info of tree-log nodes are not recorded2811 * to the extent-tree, calculate_alloc_pointer() failed to2812 * advance the allocation pointer after last allocated tree log2813 * node blocks.2814 *2815 * This function is called from2816 * btrfs_pin_extent_for_log_replay() when replaying the log.2817 * Advance the pointer not to overwrite the tree-log nodes.2818 */2819 if (block_group->start + block_group->alloc_offset <2820 offset + bytes) {2821 block_group->alloc_offset =2822 offset + bytes - block_group->start;2823 }2824 return 0;2825 }2826 2827 spin_lock(&ctl->tree_lock);2828 2829again:2830 ret = 0;2831 if (!bytes)2832 goto out_lock;2833 2834 info = tree_search_offset(ctl, offset, 0, 0);2835 if (!info) {2836 /*2837 * oops didn't find an extent that matched the space we wanted2838 * to remove, look for a bitmap instead2839 */2840 info = tree_search_offset(ctl, offset_to_bitmap(ctl, offset),2841 1, 0);2842 if (!info) {2843 /*2844 * If we found a partial bit of our free space in a2845 * bitmap but then couldn't find the other part this may2846 * be a problem, so WARN about it.2847 */2848 WARN_ON(re_search);2849 goto out_lock;2850 }2851 }2852 2853 re_search = false;2854 if (!info->bitmap) {2855 unlink_free_space(ctl, info, true);2856 if (offset == info->offset) {2857 u64 to_free = min(bytes, info->bytes);2858 2859 info->bytes -= to_free;2860 info->offset += to_free;2861 if (info->bytes) {2862 ret = link_free_space(ctl, info);2863 WARN_ON(ret);2864 } else {2865 kmem_cache_free(btrfs_free_space_cachep, info);2866 }2867 2868 offset += to_free;2869 bytes -= to_free;2870 goto again;2871 } else {2872 u64 old_end = info->bytes + info->offset;2873 2874 info->bytes = offset - info->offset;2875 ret = link_free_space(ctl, info);2876 WARN_ON(ret);2877 if (ret)2878 goto out_lock;2879 2880 /* Not enough bytes in this entry to satisfy us */2881 if (old_end < offset + bytes) {2882 bytes -= old_end - offset;2883 offset = old_end;2884 goto again;2885 } else if (old_end == offset + bytes) {2886 /* all done */2887 goto out_lock;2888 }2889 spin_unlock(&ctl->tree_lock);2890 2891 ret = __btrfs_add_free_space(block_group,2892 offset + bytes,2893 old_end - (offset + bytes),2894 info->trim_state);2895 WARN_ON(ret);2896 goto out;2897 }2898 }2899 2900 ret = remove_from_bitmap(ctl, info, &offset, &bytes);2901 if (ret == -EAGAIN) {2902 re_search = true;2903 goto again;2904 }2905out_lock:2906 btrfs_discard_update_discardable(block_group);2907 spin_unlock(&ctl->tree_lock);2908out:2909 return ret;2910}2911 2912void btrfs_dump_free_space(struct btrfs_block_group *block_group,2913 u64 bytes)2914{2915 struct btrfs_fs_info *fs_info = block_group->fs_info;2916 struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl;2917 struct btrfs_free_space *info;2918 struct rb_node *n;2919 int count = 0;2920 2921 /*2922 * Zoned btrfs does not use free space tree and cluster. Just print2923 * out the free space after the allocation offset.2924 */2925 if (btrfs_is_zoned(fs_info)) {2926 btrfs_info(fs_info, "free space %llu active %d",2927 block_group->zone_capacity - block_group->alloc_offset,2928 test_bit(BLOCK_GROUP_FLAG_ZONE_IS_ACTIVE,2929 &block_group->runtime_flags));2930 return;2931 }2932 2933 spin_lock(&ctl->tree_lock);2934 for (n = rb_first(&ctl->free_space_offset); n; n = rb_next(n)) {2935 info = rb_entry(n, struct btrfs_free_space, offset_index);2936 if (info->bytes >= bytes && !block_group->ro)2937 count++;2938 btrfs_crit(fs_info, "entry offset %llu, bytes %llu, bitmap %s",2939 info->offset, info->bytes,2940 (info->bitmap) ? "yes" : "no");2941 }2942 spin_unlock(&ctl->tree_lock);2943 btrfs_info(fs_info, "block group has cluster?: %s",2944 list_empty(&block_group->cluster_list) ? "no" : "yes");2945 btrfs_info(fs_info,2946 "%d free space entries at or bigger than %llu bytes",2947 count, bytes);2948}2949 2950void btrfs_init_free_space_ctl(struct btrfs_block_group *block_group,2951 struct btrfs_free_space_ctl *ctl)2952{2953 struct btrfs_fs_info *fs_info = block_group->fs_info;2954 2955 spin_lock_init(&ctl->tree_lock);2956 ctl->unit = fs_info->sectorsize;2957 ctl->start = block_group->start;2958 ctl->block_group = block_group;2959 ctl->op = &free_space_op;2960 ctl->free_space_bytes = RB_ROOT_CACHED;2961 INIT_LIST_HEAD(&ctl->trimming_ranges);2962 mutex_init(&ctl->cache_writeout_mutex);2963 2964 /*2965 * we only want to have 32k of ram per block group for keeping2966 * track of free space, and if we pass 1/2 of that we want to2967 * start converting things over to using bitmaps2968 */2969 ctl->extents_thresh = (SZ_32K / 2) / sizeof(struct btrfs_free_space);2970}2971 2972/*2973 * for a given cluster, put all of its extents back into the free2974 * space cache. If the block group passed doesn't match the block group2975 * pointed to by the cluster, someone else raced in and freed the2976 * cluster already. In that case, we just return without changing anything2977 */2978static void __btrfs_return_cluster_to_free_space(2979 struct btrfs_block_group *block_group,2980 struct btrfs_free_cluster *cluster)2981{2982 struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl;2983 struct rb_node *node;2984 2985 lockdep_assert_held(&ctl->tree_lock);2986 2987 spin_lock(&cluster->lock);2988 if (cluster->block_group != block_group) {2989 spin_unlock(&cluster->lock);2990 return;2991 }2992 2993 cluster->block_group = NULL;2994 cluster->window_start = 0;2995 list_del_init(&cluster->block_group_list);2996 2997 node = rb_first(&cluster->root);2998 while (node) {2999 struct btrfs_free_space *entry;3000 3001 entry = rb_entry(node, struct btrfs_free_space, offset_index);3002 node = rb_next(&entry->offset_index);3003 rb_erase(&entry->offset_index, &cluster->root);3004 RB_CLEAR_NODE(&entry->offset_index);3005 3006 if (!entry->bitmap) {3007 /* Merging treats extents as if they were new */3008 if (!btrfs_free_space_trimmed(entry)) {3009 ctl->discardable_extents[BTRFS_STAT_CURR]--;3010 ctl->discardable_bytes[BTRFS_STAT_CURR] -=3011 entry->bytes;3012 }3013 3014 try_merge_free_space(ctl, entry, false);3015 steal_from_bitmap(ctl, entry, false);3016 3017 /* As we insert directly, update these statistics */3018 if (!btrfs_free_space_trimmed(entry)) {3019 ctl->discardable_extents[BTRFS_STAT_CURR]++;3020 ctl->discardable_bytes[BTRFS_STAT_CURR] +=3021 entry->bytes;3022 }3023 }3024 tree_insert_offset(ctl, NULL, entry);3025 rb_add_cached(&entry->bytes_index, &ctl->free_space_bytes,3026 entry_less);3027 }3028 cluster->root = RB_ROOT;3029 spin_unlock(&cluster->lock);3030 btrfs_put_block_group(block_group);3031}3032 3033void btrfs_remove_free_space_cache(struct btrfs_block_group *block_group)3034{3035 struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl;3036 struct btrfs_free_cluster *cluster;3037 struct list_head *head;3038 3039 spin_lock(&ctl->tree_lock);3040 while ((head = block_group->cluster_list.next) !=3041 &block_group->cluster_list) {3042 cluster = list_entry(head, struct btrfs_free_cluster,3043 block_group_list);3044 3045 WARN_ON(cluster->block_group != block_group);3046 __btrfs_return_cluster_to_free_space(block_group, cluster);3047 3048 cond_resched_lock(&ctl->tree_lock);3049 }3050 __btrfs_remove_free_space_cache(ctl);3051 btrfs_discard_update_discardable(block_group);3052 spin_unlock(&ctl->tree_lock);3053 3054}3055 3056/*3057 * Walk @block_group's free space rb_tree to determine if everything is trimmed.3058 */3059bool btrfs_is_free_space_trimmed(struct btrfs_block_group *block_group)3060{3061 struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl;3062 struct btrfs_free_space *info;3063 struct rb_node *node;3064 bool ret = true;3065 3066 spin_lock(&ctl->tree_lock);3067 node = rb_first(&ctl->free_space_offset);3068 3069 while (node) {3070 info = rb_entry(node, struct btrfs_free_space, offset_index);3071 3072 if (!btrfs_free_space_trimmed(info)) {3073 ret = false;3074 break;3075 }3076 3077 node = rb_next(node);3078 }3079 3080 spin_unlock(&ctl->tree_lock);3081 return ret;3082}3083 3084u64 btrfs_find_space_for_alloc(struct btrfs_block_group *block_group,3085 u64 offset, u64 bytes, u64 empty_size,3086 u64 *max_extent_size)3087{3088 struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl;3089 struct btrfs_discard_ctl *discard_ctl =3090 &block_group->fs_info->discard_ctl;3091 struct btrfs_free_space *entry = NULL;3092 u64 bytes_search = bytes + empty_size;3093 u64 ret = 0;3094 u64 align_gap = 0;3095 u64 align_gap_len = 0;3096 enum btrfs_trim_state align_gap_trim_state = BTRFS_TRIM_STATE_UNTRIMMED;3097 bool use_bytes_index = (offset == block_group->start);3098 3099 ASSERT(!btrfs_is_zoned(block_group->fs_info));3100 3101 spin_lock(&ctl->tree_lock);3102 entry = find_free_space(ctl, &offset, &bytes_search,3103 block_group->full_stripe_len, max_extent_size,3104 use_bytes_index);3105 if (!entry)3106 goto out;3107 3108 ret = offset;3109 if (entry->bitmap) {3110 bitmap_clear_bits(ctl, entry, offset, bytes, true);3111 3112 if (!btrfs_free_space_trimmed(entry))3113 atomic64_add(bytes, &discard_ctl->discard_bytes_saved);3114 3115 if (!entry->bytes)3116 free_bitmap(ctl, entry);3117 } else {3118 unlink_free_space(ctl, entry, true);3119 align_gap_len = offset - entry->offset;3120 align_gap = entry->offset;3121 align_gap_trim_state = entry->trim_state;3122 3123 if (!btrfs_free_space_trimmed(entry))3124 atomic64_add(bytes, &discard_ctl->discard_bytes_saved);3125 3126 entry->offset = offset + bytes;3127 WARN_ON(entry->bytes < bytes + align_gap_len);3128 3129 entry->bytes -= bytes + align_gap_len;3130 if (!entry->bytes)3131 kmem_cache_free(btrfs_free_space_cachep, entry);3132 else3133 link_free_space(ctl, entry);3134 }3135out:3136 btrfs_discard_update_discardable(block_group);3137 spin_unlock(&ctl->tree_lock);3138 3139 if (align_gap_len)3140 __btrfs_add_free_space(block_group, align_gap, align_gap_len,3141 align_gap_trim_state);3142 return ret;3143}3144 3145/*3146 * given a cluster, put all of its extents back into the free space3147 * cache. If a block group is passed, this function will only free3148 * a cluster that belongs to the passed block group.3149 *3150 * Otherwise, it'll get a reference on the block group pointed to by the3151 * cluster and remove the cluster from it.3152 */3153void btrfs_return_cluster_to_free_space(3154 struct btrfs_block_group *block_group,3155 struct btrfs_free_cluster *cluster)3156{3157 struct btrfs_free_space_ctl *ctl;3158 3159 /* first, get a safe pointer to the block group */3160 spin_lock(&cluster->lock);3161 if (!block_group) {3162 block_group = cluster->block_group;3163 if (!block_group) {3164 spin_unlock(&cluster->lock);3165 return;3166 }3167 } else if (cluster->block_group != block_group) {3168 /* someone else has already freed it don't redo their work */3169 spin_unlock(&cluster->lock);3170 return;3171 }3172 btrfs_get_block_group(block_group);3173 spin_unlock(&cluster->lock);3174 3175 ctl = block_group->free_space_ctl;3176 3177 /* now return any extents the cluster had on it */3178 spin_lock(&ctl->tree_lock);3179 __btrfs_return_cluster_to_free_space(block_group, cluster);3180 spin_unlock(&ctl->tree_lock);3181 3182 btrfs_discard_queue_work(&block_group->fs_info->discard_ctl, block_group);3183 3184 /* finally drop our ref */3185 btrfs_put_block_group(block_group);3186}3187 3188static u64 btrfs_alloc_from_bitmap(struct btrfs_block_group *block_group,3189 struct btrfs_free_cluster *cluster,3190 struct btrfs_free_space *entry,3191 u64 bytes, u64 min_start,3192 u64 *max_extent_size)3193{3194 struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl;3195 int err;3196 u64 search_start = cluster->window_start;3197 u64 search_bytes = bytes;3198 u64 ret = 0;3199 3200 search_start = min_start;3201 search_bytes = bytes;3202 3203 err = search_bitmap(ctl, entry, &search_start, &search_bytes, true);3204 if (err) {3205 *max_extent_size = max(get_max_extent_size(entry),3206 *max_extent_size);3207 return 0;3208 }3209 3210 ret = search_start;3211 bitmap_clear_bits(ctl, entry, ret, bytes, false);3212 3213 return ret;3214}3215 3216/*3217 * given a cluster, try to allocate 'bytes' from it, returns 03218 * if it couldn't find anything suitably large, or a logical disk offset3219 * if things worked out3220 */3221u64 btrfs_alloc_from_cluster(struct btrfs_block_group *block_group,3222 struct btrfs_free_cluster *cluster, u64 bytes,3223 u64 min_start, u64 *max_extent_size)3224{3225 struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl;3226 struct btrfs_discard_ctl *discard_ctl =3227 &block_group->fs_info->discard_ctl;3228 struct btrfs_free_space *entry = NULL;3229 struct rb_node *node;3230 u64 ret = 0;3231 3232 ASSERT(!btrfs_is_zoned(block_group->fs_info));3233 3234 spin_lock(&cluster->lock);3235 if (bytes > cluster->max_size)3236 goto out;3237 3238 if (cluster->block_group != block_group)3239 goto out;3240 3241 node = rb_first(&cluster->root);3242 if (!node)3243 goto out;3244 3245 entry = rb_entry(node, struct btrfs_free_space, offset_index);3246 while (1) {3247 if (entry->bytes < bytes)3248 *max_extent_size = max(get_max_extent_size(entry),3249 *max_extent_size);3250 3251 if (entry->bytes < bytes ||3252 (!entry->bitmap && entry->offset < min_start)) {3253 node = rb_next(&entry->offset_index);3254 if (!node)3255 break;3256 entry = rb_entry(node, struct btrfs_free_space,3257 offset_index);3258 continue;3259 }3260 3261 if (entry->bitmap) {3262 ret = btrfs_alloc_from_bitmap(block_group,3263 cluster, entry, bytes,3264 cluster->window_start,3265 max_extent_size);3266 if (ret == 0) {3267 node = rb_next(&entry->offset_index);3268 if (!node)3269 break;3270 entry = rb_entry(node, struct btrfs_free_space,3271 offset_index);3272 continue;3273 }3274 cluster->window_start += bytes;3275 } else {3276 ret = entry->offset;3277 3278 entry->offset += bytes;3279 entry->bytes -= bytes;3280 }3281 3282 break;3283 }3284out:3285 spin_unlock(&cluster->lock);3286 3287 if (!ret)3288 return 0;3289 3290 spin_lock(&ctl->tree_lock);3291 3292 if (!btrfs_free_space_trimmed(entry))3293 atomic64_add(bytes, &discard_ctl->discard_bytes_saved);3294 3295 ctl->free_space -= bytes;3296 if (!entry->bitmap && !btrfs_free_space_trimmed(entry))3297 ctl->discardable_bytes[BTRFS_STAT_CURR] -= bytes;3298 3299 spin_lock(&cluster->lock);3300 if (entry->bytes == 0) {3301 rb_erase(&entry->offset_index, &cluster->root);3302 ctl->free_extents--;3303 if (entry->bitmap) {3304 kmem_cache_free(btrfs_free_space_bitmap_cachep,3305 entry->bitmap);3306 ctl->total_bitmaps--;3307 recalculate_thresholds(ctl);3308 } else if (!btrfs_free_space_trimmed(entry)) {3309 ctl->discardable_extents[BTRFS_STAT_CURR]--;3310 }3311 kmem_cache_free(btrfs_free_space_cachep, entry);3312 }3313 3314 spin_unlock(&cluster->lock);3315 spin_unlock(&ctl->tree_lock);3316 3317 return ret;3318}3319 3320static int btrfs_bitmap_cluster(struct btrfs_block_group *block_group,3321 struct btrfs_free_space *entry,3322 struct btrfs_free_cluster *cluster,3323 u64 offset, u64 bytes,3324 u64 cont1_bytes, u64 min_bytes)3325{3326 struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl;3327 unsigned long next_zero;3328 unsigned long i;3329 unsigned long want_bits;3330 unsigned long min_bits;3331 unsigned long found_bits;3332 unsigned long max_bits = 0;3333 unsigned long start = 0;3334 unsigned long total_found = 0;3335 int ret;3336 3337 lockdep_assert_held(&ctl->tree_lock);3338 3339 i = offset_to_bit(entry->offset, ctl->unit,3340 max_t(u64, offset, entry->offset));3341 want_bits = bytes_to_bits(bytes, ctl->unit);3342 min_bits = bytes_to_bits(min_bytes, ctl->unit);3343 3344 /*3345 * Don't bother looking for a cluster in this bitmap if it's heavily3346 * fragmented.3347 */3348 if (entry->max_extent_size &&3349 entry->max_extent_size < cont1_bytes)3350 return -ENOSPC;3351again:3352 found_bits = 0;3353 for_each_set_bit_from(i, entry->bitmap, BITS_PER_BITMAP) {3354 next_zero = find_next_zero_bit(entry->bitmap,3355 BITS_PER_BITMAP, i);3356 if (next_zero - i >= min_bits) {3357 found_bits = next_zero - i;3358 if (found_bits > max_bits)3359 max_bits = found_bits;3360 break;3361 }3362 if (next_zero - i > max_bits)3363 max_bits = next_zero - i;3364 i = next_zero;3365 }3366 3367 if (!found_bits) {3368 entry->max_extent_size = (u64)max_bits * ctl->unit;3369 return -ENOSPC;3370 }3371 3372 if (!total_found) {3373 start = i;3374 cluster->max_size = 0;3375 }3376 3377 total_found += found_bits;3378 3379 if (cluster->max_size < found_bits * ctl->unit)3380 cluster->max_size = found_bits * ctl->unit;3381 3382 if (total_found < want_bits || cluster->max_size < cont1_bytes) {3383 i = next_zero + 1;3384 goto again;3385 }3386 3387 cluster->window_start = start * ctl->unit + entry->offset;3388 rb_erase(&entry->offset_index, &ctl->free_space_offset);3389 rb_erase_cached(&entry->bytes_index, &ctl->free_space_bytes);3390 3391 /*3392 * We need to know if we're currently on the normal space index when we3393 * manipulate the bitmap so that we know we need to remove and re-insert3394 * it into the space_index tree. Clear the bytes_index node here so the3395 * bitmap manipulation helpers know not to mess with the space_index3396 * until this bitmap entry is added back into the normal cache.3397 */3398 RB_CLEAR_NODE(&entry->bytes_index);3399 3400 ret = tree_insert_offset(ctl, cluster, entry);3401 ASSERT(!ret); /* -EEXIST; Logic error */3402 3403 trace_btrfs_setup_cluster(block_group, cluster,3404 total_found * ctl->unit, 1);3405 return 0;3406}3407 3408/*3409 * This searches the block group for just extents to fill the cluster with.3410 * Try to find a cluster with at least bytes total bytes, at least one3411 * extent of cont1_bytes, and other clusters of at least min_bytes.3412 */3413static noinline int3414setup_cluster_no_bitmap(struct btrfs_block_group *block_group,3415 struct btrfs_free_cluster *cluster,3416 struct list_head *bitmaps, u64 offset, u64 bytes,3417 u64 cont1_bytes, u64 min_bytes)3418{3419 struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl;3420 struct btrfs_free_space *first = NULL;3421 struct btrfs_free_space *entry = NULL;3422 struct btrfs_free_space *last;3423 struct rb_node *node;3424 u64 window_free;3425 u64 max_extent;3426 u64 total_size = 0;3427 3428 lockdep_assert_held(&ctl->tree_lock);3429 3430 entry = tree_search_offset(ctl, offset, 0, 1);3431 if (!entry)3432 return -ENOSPC;3433 3434 /*3435 * We don't want bitmaps, so just move along until we find a normal3436 * extent entry.3437 */3438 while (entry->bitmap || entry->bytes < min_bytes) {3439 if (entry->bitmap && list_empty(&entry->list))3440 list_add_tail(&entry->list, bitmaps);3441 node = rb_next(&entry->offset_index);3442 if (!node)3443 return -ENOSPC;3444 entry = rb_entry(node, struct btrfs_free_space, offset_index);3445 }3446 3447 window_free = entry->bytes;3448 max_extent = entry->bytes;3449 first = entry;3450 last = entry;3451 3452 for (node = rb_next(&entry->offset_index); node;3453 node = rb_next(&entry->offset_index)) {3454 entry = rb_entry(node, struct btrfs_free_space, offset_index);3455 3456 if (entry->bitmap) {3457 if (list_empty(&entry->list))3458 list_add_tail(&entry->list, bitmaps);3459 continue;3460 }3461 3462 if (entry->bytes < min_bytes)3463 continue;3464 3465 last = entry;3466 window_free += entry->bytes;3467 if (entry->bytes > max_extent)3468 max_extent = entry->bytes;3469 }3470 3471 if (window_free < bytes || max_extent < cont1_bytes)3472 return -ENOSPC;3473 3474 cluster->window_start = first->offset;3475 3476 node = &first->offset_index;3477 3478 /*3479 * now we've found our entries, pull them out of the free space3480 * cache and put them into the cluster rbtree3481 */3482 do {3483 int ret;3484 3485 entry = rb_entry(node, struct btrfs_free_space, offset_index);3486 node = rb_next(&entry->offset_index);3487 if (entry->bitmap || entry->bytes < min_bytes)3488 continue;3489 3490 rb_erase(&entry->offset_index, &ctl->free_space_offset);3491 rb_erase_cached(&entry->bytes_index, &ctl->free_space_bytes);3492 ret = tree_insert_offset(ctl, cluster, entry);3493 total_size += entry->bytes;3494 ASSERT(!ret); /* -EEXIST; Logic error */3495 } while (node && entry != last);3496 3497 cluster->max_size = max_extent;3498 trace_btrfs_setup_cluster(block_group, cluster, total_size, 0);3499 return 0;3500}3501 3502/*3503 * This specifically looks for bitmaps that may work in the cluster, we assume3504 * that we have already failed to find extents that will work.3505 */3506static noinline int3507setup_cluster_bitmap(struct btrfs_block_group *block_group,3508 struct btrfs_free_cluster *cluster,3509 struct list_head *bitmaps, u64 offset, u64 bytes,3510 u64 cont1_bytes, u64 min_bytes)3511{3512 struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl;3513 struct btrfs_free_space *entry = NULL;3514 int ret = -ENOSPC;3515 u64 bitmap_offset = offset_to_bitmap(ctl, offset);3516 3517 if (ctl->total_bitmaps == 0)3518 return -ENOSPC;3519 3520 /*3521 * The bitmap that covers offset won't be in the list unless offset3522 * is just its start offset.3523 */3524 if (!list_empty(bitmaps))3525 entry = list_first_entry(bitmaps, struct btrfs_free_space, list);3526 3527 if (!entry || entry->offset != bitmap_offset) {3528 entry = tree_search_offset(ctl, bitmap_offset, 1, 0);3529 if (entry && list_empty(&entry->list))3530 list_add(&entry->list, bitmaps);3531 }3532 3533 list_for_each_entry(entry, bitmaps, list) {3534 if (entry->bytes < bytes)3535 continue;3536 ret = btrfs_bitmap_cluster(block_group, entry, cluster, offset,3537 bytes, cont1_bytes, min_bytes);3538 if (!ret)3539 return 0;3540 }3541 3542 /*3543 * The bitmaps list has all the bitmaps that record free space3544 * starting after offset, so no more search is required.3545 */3546 return -ENOSPC;3547}3548 3549/*3550 * here we try to find a cluster of blocks in a block group. The goal3551 * is to find at least bytes+empty_size.3552 * We might not find them all in one contiguous area.3553 *3554 * returns zero and sets up cluster if things worked out, otherwise3555 * it returns -enospc3556 */3557int btrfs_find_space_cluster(struct btrfs_block_group *block_group,3558 struct btrfs_free_cluster *cluster,3559 u64 offset, u64 bytes, u64 empty_size)3560{3561 struct btrfs_fs_info *fs_info = block_group->fs_info;3562 struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl;3563 struct btrfs_free_space *entry, *tmp;3564 LIST_HEAD(bitmaps);3565 u64 min_bytes;3566 u64 cont1_bytes;3567 int ret;3568 3569 /*3570 * Choose the minimum extent size we'll require for this3571 * cluster. For SSD_SPREAD, don't allow any fragmentation.3572 * For metadata, allow allocates with smaller extents. For3573 * data, keep it dense.3574 */3575 if (btrfs_test_opt(fs_info, SSD_SPREAD)) {3576 cont1_bytes = bytes + empty_size;3577 min_bytes = cont1_bytes;3578 } else if (block_group->flags & BTRFS_BLOCK_GROUP_METADATA) {3579 cont1_bytes = bytes;3580 min_bytes = fs_info->sectorsize;3581 } else {3582 cont1_bytes = max(bytes, (bytes + empty_size) >> 2);3583 min_bytes = fs_info->sectorsize;3584 }3585 3586 spin_lock(&ctl->tree_lock);3587 3588 /*3589 * If we know we don't have enough space to make a cluster don't even3590 * bother doing all the work to try and find one.3591 */3592 if (ctl->free_space < bytes) {3593 spin_unlock(&ctl->tree_lock);3594 return -ENOSPC;3595 }3596 3597 spin_lock(&cluster->lock);3598 3599 /* someone already found a cluster, hooray */3600 if (cluster->block_group) {3601 ret = 0;3602 goto out;3603 }3604 3605 trace_btrfs_find_cluster(block_group, offset, bytes, empty_size,3606 min_bytes);3607 3608 ret = setup_cluster_no_bitmap(block_group, cluster, &bitmaps, offset,3609 bytes + empty_size,3610 cont1_bytes, min_bytes);3611 if (ret)3612 ret = setup_cluster_bitmap(block_group, cluster, &bitmaps,3613 offset, bytes + empty_size,3614 cont1_bytes, min_bytes);3615 3616 /* Clear our temporary list */3617 list_for_each_entry_safe(entry, tmp, &bitmaps, list)3618 list_del_init(&entry->list);3619 3620 if (!ret) {3621 btrfs_get_block_group(block_group);3622 list_add_tail(&cluster->block_group_list,3623 &block_group->cluster_list);3624 cluster->block_group = block_group;3625 } else {3626 trace_btrfs_failed_cluster_setup(block_group);3627 }3628out:3629 spin_unlock(&cluster->lock);3630 spin_unlock(&ctl->tree_lock);3631 3632 return ret;3633}3634 3635/*3636 * simple code to zero out a cluster3637 */3638void btrfs_init_free_cluster(struct btrfs_free_cluster *cluster)3639{3640 spin_lock_init(&cluster->lock);3641 spin_lock_init(&cluster->refill_lock);3642 cluster->root = RB_ROOT;3643 cluster->max_size = 0;3644 cluster->fragmented = false;3645 INIT_LIST_HEAD(&cluster->block_group_list);3646 cluster->block_group = NULL;3647}3648 3649static int do_trimming(struct btrfs_block_group *block_group,3650 u64 *total_trimmed, u64 start, u64 bytes,3651 u64 reserved_start, u64 reserved_bytes,3652 enum btrfs_trim_state reserved_trim_state,3653 struct btrfs_trim_range *trim_entry)3654{3655 struct btrfs_space_info *space_info = block_group->space_info;3656 struct btrfs_fs_info *fs_info = block_group->fs_info;3657 struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl;3658 int ret;3659 int update = 0;3660 const u64 end = start + bytes;3661 const u64 reserved_end = reserved_start + reserved_bytes;3662 enum btrfs_trim_state trim_state = BTRFS_TRIM_STATE_UNTRIMMED;3663 u64 trimmed = 0;3664 3665 spin_lock(&space_info->lock);3666 spin_lock(&block_group->lock);3667 if (!block_group->ro) {3668 block_group->reserved += reserved_bytes;3669 space_info->bytes_reserved += reserved_bytes;3670 update = 1;3671 }3672 spin_unlock(&block_group->lock);3673 spin_unlock(&space_info->lock);3674 3675 ret = btrfs_discard_extent(fs_info, start, bytes, &trimmed);3676 if (!ret) {3677 *total_trimmed += trimmed;3678 trim_state = BTRFS_TRIM_STATE_TRIMMED;3679 }3680 3681 mutex_lock(&ctl->cache_writeout_mutex);3682 if (reserved_start < start)3683 __btrfs_add_free_space(block_group, reserved_start,3684 start - reserved_start,3685 reserved_trim_state);3686 if (end < reserved_end)3687 __btrfs_add_free_space(block_group, end, reserved_end - end,3688 reserved_trim_state);3689 __btrfs_add_free_space(block_group, start, bytes, trim_state);3690 list_del(&trim_entry->list);3691 mutex_unlock(&ctl->cache_writeout_mutex);3692 3693 if (update) {3694 spin_lock(&space_info->lock);3695 spin_lock(&block_group->lock);3696 if (block_group->ro)3697 space_info->bytes_readonly += reserved_bytes;3698 block_group->reserved -= reserved_bytes;3699 space_info->bytes_reserved -= reserved_bytes;3700 spin_unlock(&block_group->lock);3701 spin_unlock(&space_info->lock);3702 }3703 3704 return ret;3705}3706 3707/*3708 * If @async is set, then we will trim 1 region and return.3709 */3710static int trim_no_bitmap(struct btrfs_block_group *block_group,3711 u64 *total_trimmed, u64 start, u64 end, u64 minlen,3712 bool async)3713{3714 struct btrfs_discard_ctl *discard_ctl =3715 &block_group->fs_info->discard_ctl;3716 struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl;3717 struct btrfs_free_space *entry;3718 struct rb_node *node;3719 int ret = 0;3720 u64 extent_start;3721 u64 extent_bytes;3722 enum btrfs_trim_state extent_trim_state;3723 u64 bytes;3724 const u64 max_discard_size = READ_ONCE(discard_ctl->max_discard_size);3725 3726 while (start < end) {3727 struct btrfs_trim_range trim_entry;3728 3729 mutex_lock(&ctl->cache_writeout_mutex);3730 spin_lock(&ctl->tree_lock);3731 3732 if (ctl->free_space < minlen)3733 goto out_unlock;3734 3735 entry = tree_search_offset(ctl, start, 0, 1);3736 if (!entry)3737 goto out_unlock;3738 3739 /* Skip bitmaps and if async, already trimmed entries */3740 while (entry->bitmap ||3741 (async && btrfs_free_space_trimmed(entry))) {3742 node = rb_next(&entry->offset_index);3743 if (!node)3744 goto out_unlock;3745 entry = rb_entry(node, struct btrfs_free_space,3746 offset_index);3747 }3748 3749 if (entry->offset >= end)3750 goto out_unlock;3751 3752 extent_start = entry->offset;3753 extent_bytes = entry->bytes;3754 extent_trim_state = entry->trim_state;3755 if (async) {3756 start = entry->offset;3757 bytes = entry->bytes;3758 if (bytes < minlen) {3759 spin_unlock(&ctl->tree_lock);3760 mutex_unlock(&ctl->cache_writeout_mutex);3761 goto next;3762 }3763 unlink_free_space(ctl, entry, true);3764 /*3765 * Let bytes = BTRFS_MAX_DISCARD_SIZE + X.3766 * If X < BTRFS_ASYNC_DISCARD_MIN_FILTER, we won't trim3767 * X when we come back around. So trim it now.3768 */3769 if (max_discard_size &&3770 bytes >= (max_discard_size +3771 BTRFS_ASYNC_DISCARD_MIN_FILTER)) {3772 bytes = max_discard_size;3773 extent_bytes = max_discard_size;3774 entry->offset += max_discard_size;3775 entry->bytes -= max_discard_size;3776 link_free_space(ctl, entry);3777 } else {3778 kmem_cache_free(btrfs_free_space_cachep, entry);3779 }3780 } else {3781 start = max(start, extent_start);3782 bytes = min(extent_start + extent_bytes, end) - start;3783 if (bytes < minlen) {3784 spin_unlock(&ctl->tree_lock);3785 mutex_unlock(&ctl->cache_writeout_mutex);3786 goto next;3787 }3788 3789 unlink_free_space(ctl, entry, true);3790 kmem_cache_free(btrfs_free_space_cachep, entry);3791 }3792 3793 spin_unlock(&ctl->tree_lock);3794 trim_entry.start = extent_start;3795 trim_entry.bytes = extent_bytes;3796 list_add_tail(&trim_entry.list, &ctl->trimming_ranges);3797 mutex_unlock(&ctl->cache_writeout_mutex);3798 3799 ret = do_trimming(block_group, total_trimmed, start, bytes,3800 extent_start, extent_bytes, extent_trim_state,3801 &trim_entry);3802 if (ret) {3803 block_group->discard_cursor = start + bytes;3804 break;3805 }3806next:3807 start += bytes;3808 block_group->discard_cursor = start;3809 if (async && *total_trimmed)3810 break;3811 3812 if (btrfs_trim_interrupted()) {3813 ret = -ERESTARTSYS;3814 break;3815 }3816 3817 cond_resched();3818 }3819 3820 return ret;3821 3822out_unlock:3823 block_group->discard_cursor = btrfs_block_group_end(block_group);3824 spin_unlock(&ctl->tree_lock);3825 mutex_unlock(&ctl->cache_writeout_mutex);3826 3827 return ret;3828}3829 3830/*3831 * If we break out of trimming a bitmap prematurely, we should reset the3832 * trimming bit. In a rather contrieved case, it's possible to race here so3833 * reset the state to BTRFS_TRIM_STATE_UNTRIMMED.3834 *3835 * start = start of bitmap3836 * end = near end of bitmap3837 *3838 * Thread 1: Thread 2:3839 * trim_bitmaps(start)3840 * trim_bitmaps(end)3841 * end_trimming_bitmap()3842 * reset_trimming_bitmap()3843 */3844static void reset_trimming_bitmap(struct btrfs_free_space_ctl *ctl, u64 offset)3845{3846 struct btrfs_free_space *entry;3847 3848 spin_lock(&ctl->tree_lock);3849 entry = tree_search_offset(ctl, offset, 1, 0);3850 if (entry) {3851 if (btrfs_free_space_trimmed(entry)) {3852 ctl->discardable_extents[BTRFS_STAT_CURR] +=3853 entry->bitmap_extents;3854 ctl->discardable_bytes[BTRFS_STAT_CURR] += entry->bytes;3855 }3856 entry->trim_state = BTRFS_TRIM_STATE_UNTRIMMED;3857 }3858 3859 spin_unlock(&ctl->tree_lock);3860}3861 3862static void end_trimming_bitmap(struct btrfs_free_space_ctl *ctl,3863 struct btrfs_free_space *entry)3864{3865 if (btrfs_free_space_trimming_bitmap(entry)) {3866 entry->trim_state = BTRFS_TRIM_STATE_TRIMMED;3867 ctl->discardable_extents[BTRFS_STAT_CURR] -=3868 entry->bitmap_extents;3869 ctl->discardable_bytes[BTRFS_STAT_CURR] -= entry->bytes;3870 }3871}3872 3873/*3874 * If @async is set, then we will trim 1 region and return.3875 */3876static int trim_bitmaps(struct btrfs_block_group *block_group,3877 u64 *total_trimmed, u64 start, u64 end, u64 minlen,3878 u64 maxlen, bool async)3879{3880 struct btrfs_discard_ctl *discard_ctl =3881 &block_group->fs_info->discard_ctl;3882 struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl;3883 struct btrfs_free_space *entry;3884 int ret = 0;3885 int ret2;3886 u64 bytes;3887 u64 offset = offset_to_bitmap(ctl, start);3888 const u64 max_discard_size = READ_ONCE(discard_ctl->max_discard_size);3889 3890 while (offset < end) {3891 bool next_bitmap = false;3892 struct btrfs_trim_range trim_entry;3893 3894 mutex_lock(&ctl->cache_writeout_mutex);3895 spin_lock(&ctl->tree_lock);3896 3897 if (ctl->free_space < minlen) {3898 block_group->discard_cursor =3899 btrfs_block_group_end(block_group);3900 spin_unlock(&ctl->tree_lock);3901 mutex_unlock(&ctl->cache_writeout_mutex);3902 break;3903 }3904 3905 entry = tree_search_offset(ctl, offset, 1, 0);3906 /*3907 * Bitmaps are marked trimmed lossily now to prevent constant3908 * discarding of the same bitmap (the reason why we are bound3909 * by the filters). So, retrim the block group bitmaps when we3910 * are preparing to punt to the unused_bgs list. This uses3911 * @minlen to determine if we are in BTRFS_DISCARD_INDEX_UNUSED3912 * which is the only discard index which sets minlen to 0.3913 */3914 if (!entry || (async && minlen && start == offset &&3915 btrfs_free_space_trimmed(entry))) {3916 spin_unlock(&ctl->tree_lock);3917 mutex_unlock(&ctl->cache_writeout_mutex);3918 next_bitmap = true;3919 goto next;3920 }3921 3922 /*3923 * Async discard bitmap trimming begins at by setting the start3924 * to be key.objectid and the offset_to_bitmap() aligns to the3925 * start of the bitmap. This lets us know we are fully3926 * scanning the bitmap rather than only some portion of it.3927 */3928 if (start == offset)3929 entry->trim_state = BTRFS_TRIM_STATE_TRIMMING;3930 3931 bytes = minlen;3932 ret2 = search_bitmap(ctl, entry, &start, &bytes, false);3933 if (ret2 || start >= end) {3934 /*3935 * We lossily consider a bitmap trimmed if we only skip3936 * over regions <= BTRFS_ASYNC_DISCARD_MIN_FILTER.3937 */3938 if (ret2 && minlen <= BTRFS_ASYNC_DISCARD_MIN_FILTER)3939 end_trimming_bitmap(ctl, entry);3940 else3941 entry->trim_state = BTRFS_TRIM_STATE_UNTRIMMED;3942 spin_unlock(&ctl->tree_lock);3943 mutex_unlock(&ctl->cache_writeout_mutex);3944 next_bitmap = true;3945 goto next;3946 }3947 3948 /*3949 * We already trimmed a region, but are using the locking above3950 * to reset the trim_state.3951 */3952 if (async && *total_trimmed) {3953 spin_unlock(&ctl->tree_lock);3954 mutex_unlock(&ctl->cache_writeout_mutex);3955 goto out;3956 }3957 3958 bytes = min(bytes, end - start);3959 if (bytes < minlen || (async && maxlen && bytes > maxlen)) {3960 spin_unlock(&ctl->tree_lock);3961 mutex_unlock(&ctl->cache_writeout_mutex);3962 goto next;3963 }3964 3965 /*3966 * Let bytes = BTRFS_MAX_DISCARD_SIZE + X.3967 * If X < @minlen, we won't trim X when we come back around.3968 * So trim it now. We differ here from trimming extents as we3969 * don't keep individual state per bit.3970 */3971 if (async &&3972 max_discard_size &&3973 bytes > (max_discard_size + minlen))3974 bytes = max_discard_size;3975 3976 bitmap_clear_bits(ctl, entry, start, bytes, true);3977 if (entry->bytes == 0)3978 free_bitmap(ctl, entry);3979 3980 spin_unlock(&ctl->tree_lock);3981 trim_entry.start = start;3982 trim_entry.bytes = bytes;3983 list_add_tail(&trim_entry.list, &ctl->trimming_ranges);3984 mutex_unlock(&ctl->cache_writeout_mutex);3985 3986 ret = do_trimming(block_group, total_trimmed, start, bytes,3987 start, bytes, 0, &trim_entry);3988 if (ret) {3989 reset_trimming_bitmap(ctl, offset);3990 block_group->discard_cursor =3991 btrfs_block_group_end(block_group);3992 break;3993 }3994next:3995 if (next_bitmap) {3996 offset += BITS_PER_BITMAP * ctl->unit;3997 start = offset;3998 } else {3999 start += bytes;4000 }4001 block_group->discard_cursor = start;4002 4003 if (btrfs_trim_interrupted()) {4004 if (start != offset)4005 reset_trimming_bitmap(ctl, offset);4006 ret = -ERESTARTSYS;4007 break;4008 }4009 4010 cond_resched();4011 }4012 4013 if (offset >= end)4014 block_group->discard_cursor = end;4015 4016out:4017 return ret;4018}4019 4020int btrfs_trim_block_group(struct btrfs_block_group *block_group,4021 u64 *trimmed, u64 start, u64 end, u64 minlen)4022{4023 struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl;4024 int ret;4025 u64 rem = 0;4026 4027 ASSERT(!btrfs_is_zoned(block_group->fs_info));4028 4029 *trimmed = 0;4030 4031 spin_lock(&block_group->lock);4032 if (test_bit(BLOCK_GROUP_FLAG_REMOVED, &block_group->runtime_flags)) {4033 spin_unlock(&block_group->lock);4034 return 0;4035 }4036 btrfs_freeze_block_group(block_group);4037 spin_unlock(&block_group->lock);4038 4039 ret = trim_no_bitmap(block_group, trimmed, start, end, minlen, false);4040 if (ret)4041 goto out;4042 4043 ret = trim_bitmaps(block_group, trimmed, start, end, minlen, 0, false);4044 div64_u64_rem(end, BITS_PER_BITMAP * ctl->unit, &rem);4045 /* If we ended in the middle of a bitmap, reset the trimming flag */4046 if (rem)4047 reset_trimming_bitmap(ctl, offset_to_bitmap(ctl, end));4048out:4049 btrfs_unfreeze_block_group(block_group);4050 return ret;4051}4052 4053int btrfs_trim_block_group_extents(struct btrfs_block_group *block_group,4054 u64 *trimmed, u64 start, u64 end, u64 minlen,4055 bool async)4056{4057 int ret;4058 4059 *trimmed = 0;4060 4061 spin_lock(&block_group->lock);4062 if (test_bit(BLOCK_GROUP_FLAG_REMOVED, &block_group->runtime_flags)) {4063 spin_unlock(&block_group->lock);4064 return 0;4065 }4066 btrfs_freeze_block_group(block_group);4067 spin_unlock(&block_group->lock);4068 4069 ret = trim_no_bitmap(block_group, trimmed, start, end, minlen, async);4070 btrfs_unfreeze_block_group(block_group);4071 4072 return ret;4073}4074 4075int btrfs_trim_block_group_bitmaps(struct btrfs_block_group *block_group,4076 u64 *trimmed, u64 start, u64 end, u64 minlen,4077 u64 maxlen, bool async)4078{4079 int ret;4080 4081 *trimmed = 0;4082 4083 spin_lock(&block_group->lock);4084 if (test_bit(BLOCK_GROUP_FLAG_REMOVED, &block_group->runtime_flags)) {4085 spin_unlock(&block_group->lock);4086 return 0;4087 }4088 btrfs_freeze_block_group(block_group);4089 spin_unlock(&block_group->lock);4090 4091 ret = trim_bitmaps(block_group, trimmed, start, end, minlen, maxlen,4092 async);4093 4094 btrfs_unfreeze_block_group(block_group);4095 4096 return ret;4097}4098 4099bool btrfs_free_space_cache_v1_active(struct btrfs_fs_info *fs_info)4100{4101 return btrfs_super_cache_generation(fs_info->super_copy);4102}4103 4104static int cleanup_free_space_cache_v1(struct btrfs_fs_info *fs_info,4105 struct btrfs_trans_handle *trans)4106{4107 struct btrfs_block_group *block_group;4108 struct rb_node *node;4109 int ret = 0;4110 4111 btrfs_info(fs_info, "cleaning free space cache v1");4112 4113 node = rb_first_cached(&fs_info->block_group_cache_tree);4114 while (node) {4115 block_group = rb_entry(node, struct btrfs_block_group, cache_node);4116 ret = btrfs_remove_free_space_inode(trans, NULL, block_group);4117 if (ret)4118 goto out;4119 node = rb_next(node);4120 }4121out:4122 return ret;4123}4124 4125int btrfs_set_free_space_cache_v1_active(struct btrfs_fs_info *fs_info, bool active)4126{4127 struct btrfs_trans_handle *trans;4128 int ret;4129 4130 /*4131 * update_super_roots will appropriately set or unset4132 * super_copy->cache_generation based on SPACE_CACHE and4133 * BTRFS_FS_CLEANUP_SPACE_CACHE_V1. For this reason, we need a4134 * transaction commit whether we are enabling space cache v1 and don't4135 * have any other work to do, or are disabling it and removing free4136 * space inodes.4137 */4138 trans = btrfs_start_transaction(fs_info->tree_root, 0);4139 if (IS_ERR(trans))4140 return PTR_ERR(trans);4141 4142 if (!active) {4143 set_bit(BTRFS_FS_CLEANUP_SPACE_CACHE_V1, &fs_info->flags);4144 ret = cleanup_free_space_cache_v1(fs_info, trans);4145 if (ret) {4146 btrfs_abort_transaction(trans, ret);4147 btrfs_end_transaction(trans);4148 goto out;4149 }4150 }4151 4152 ret = btrfs_commit_transaction(trans);4153out:4154 clear_bit(BTRFS_FS_CLEANUP_SPACE_CACHE_V1, &fs_info->flags);4155 4156 return ret;4157}4158 4159int __init btrfs_free_space_init(void)4160{4161 btrfs_free_space_cachep = KMEM_CACHE(btrfs_free_space, 0);4162 if (!btrfs_free_space_cachep)4163 return -ENOMEM;4164 4165 btrfs_free_space_bitmap_cachep = kmem_cache_create("btrfs_free_space_bitmap",4166 PAGE_SIZE, PAGE_SIZE,4167 0, NULL);4168 if (!btrfs_free_space_bitmap_cachep) {4169 kmem_cache_destroy(btrfs_free_space_cachep);4170 return -ENOMEM;4171 }4172 4173 return 0;4174}4175 4176void __cold btrfs_free_space_exit(void)4177{4178 kmem_cache_destroy(btrfs_free_space_cachep);4179 kmem_cache_destroy(btrfs_free_space_bitmap_cachep);4180}4181 4182#ifdef CONFIG_BTRFS_FS_RUN_SANITY_TESTS4183/*4184 * Use this if you need to make a bitmap or extent entry specifically, it4185 * doesn't do any of the merging that add_free_space does, this acts a lot like4186 * how the free space cache loading stuff works, so you can get really weird4187 * configurations.4188 */4189int test_add_free_space_entry(struct btrfs_block_group *cache,4190 u64 offset, u64 bytes, bool bitmap)4191{4192 struct btrfs_free_space_ctl *ctl = cache->free_space_ctl;4193 struct btrfs_free_space *info = NULL, *bitmap_info;4194 void *map = NULL;4195 enum btrfs_trim_state trim_state = BTRFS_TRIM_STATE_TRIMMED;4196 u64 bytes_added;4197 int ret;4198 4199again:4200 if (!info) {4201 info = kmem_cache_zalloc(btrfs_free_space_cachep, GFP_NOFS);4202 if (!info)4203 return -ENOMEM;4204 }4205 4206 if (!bitmap) {4207 spin_lock(&ctl->tree_lock);4208 info->offset = offset;4209 info->bytes = bytes;4210 info->max_extent_size = 0;4211 ret = link_free_space(ctl, info);4212 spin_unlock(&ctl->tree_lock);4213 if (ret)4214 kmem_cache_free(btrfs_free_space_cachep, info);4215 return ret;4216 }4217 4218 if (!map) {4219 map = kmem_cache_zalloc(btrfs_free_space_bitmap_cachep, GFP_NOFS);4220 if (!map) {4221 kmem_cache_free(btrfs_free_space_cachep, info);4222 return -ENOMEM;4223 }4224 }4225 4226 spin_lock(&ctl->tree_lock);4227 bitmap_info = tree_search_offset(ctl, offset_to_bitmap(ctl, offset),4228 1, 0);4229 if (!bitmap_info) {4230 info->bitmap = map;4231 map = NULL;4232 add_new_bitmap(ctl, info, offset);4233 bitmap_info = info;4234 info = NULL;4235 }4236 4237 bytes_added = add_bytes_to_bitmap(ctl, bitmap_info, offset, bytes,4238 trim_state);4239 4240 bytes -= bytes_added;4241 offset += bytes_added;4242 spin_unlock(&ctl->tree_lock);4243 4244 if (bytes)4245 goto again;4246 4247 if (info)4248 kmem_cache_free(btrfs_free_space_cachep, info);4249 if (map)4250 kmem_cache_free(btrfs_free_space_bitmap_cachep, map);4251 return 0;4252}4253 4254/*4255 * Checks to see if the given range is in the free space cache. This is really4256 * just used to check the absence of space, so if there is free space in the4257 * range at all we will return 1.4258 */4259int test_check_exists(struct btrfs_block_group *cache,4260 u64 offset, u64 bytes)4261{4262 struct btrfs_free_space_ctl *ctl = cache->free_space_ctl;4263 struct btrfs_free_space *info;4264 int ret = 0;4265 4266 spin_lock(&ctl->tree_lock);4267 info = tree_search_offset(ctl, offset, 0, 0);4268 if (!info) {4269 info = tree_search_offset(ctl, offset_to_bitmap(ctl, offset),4270 1, 0);4271 if (!info)4272 goto out;4273 }4274 4275have_info:4276 if (info->bitmap) {4277 u64 bit_off, bit_bytes;4278 struct rb_node *n;4279 struct btrfs_free_space *tmp;4280 4281 bit_off = offset;4282 bit_bytes = ctl->unit;4283 ret = search_bitmap(ctl, info, &bit_off, &bit_bytes, false);4284 if (!ret) {4285 if (bit_off == offset) {4286 ret = 1;4287 goto out;4288 } else if (bit_off > offset &&4289 offset + bytes > bit_off) {4290 ret = 1;4291 goto out;4292 }4293 }4294 4295 n = rb_prev(&info->offset_index);4296 while (n) {4297 tmp = rb_entry(n, struct btrfs_free_space,4298 offset_index);4299 if (tmp->offset + tmp->bytes < offset)4300 break;4301 if (offset + bytes < tmp->offset) {4302 n = rb_prev(&tmp->offset_index);4303 continue;4304 }4305 info = tmp;4306 goto have_info;4307 }4308 4309 n = rb_next(&info->offset_index);4310 while (n) {4311 tmp = rb_entry(n, struct btrfs_free_space,4312 offset_index);4313 if (offset + bytes < tmp->offset)4314 break;4315 if (tmp->offset + tmp->bytes < offset) {4316 n = rb_next(&tmp->offset_index);4317 continue;4318 }4319 info = tmp;4320 goto have_info;4321 }4322 4323 ret = 0;4324 goto out;4325 }4326 4327 if (info->offset == offset) {4328 ret = 1;4329 goto out;4330 }4331 4332 if (offset > info->offset && offset < info->offset + info->bytes)4333 ret = 1;4334out:4335 spin_unlock(&ctl->tree_lock);4336 return ret;4337}4338#endif /* CONFIG_BTRFS_FS_RUN_SANITY_TESTS */4339