linux/fs/btrfs/free-space-cache.c
<<
>>
Prefs
   1/*
   2 * Copyright (C) 2008 Red Hat.  All rights reserved.
   3 *
   4 * This program is free software; you can redistribute it and/or
   5 * modify it under the terms of the GNU General Public
   6 * License v2 as published by the Free Software Foundation.
   7 *
   8 * This program is distributed in the hope that it will be useful,
   9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  11 * General Public License for more details.
  12 *
  13 * You should have received a copy of the GNU General Public
  14 * License along with this program; if not, write to the
  15 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  16 * Boston, MA 021110-1307, USA.
  17 */
  18
  19#include <linux/pagemap.h>
  20#include <linux/sched.h>
  21#include <linux/slab.h>
  22#include <linux/math64.h>
  23#include <linux/ratelimit.h>
  24#include "ctree.h"
  25#include "free-space-cache.h"
  26#include "transaction.h"
  27#include "disk-io.h"
  28#include "extent_io.h"
  29#include "inode-map.h"
  30
  31#define BITS_PER_BITMAP         (PAGE_CACHE_SIZE * 8)
  32#define MAX_CACHE_BYTES_PER_GIG (32 * 1024)
  33
  34static int link_free_space(struct btrfs_free_space_ctl *ctl,
  35                           struct btrfs_free_space *info);
  36static void unlink_free_space(struct btrfs_free_space_ctl *ctl,
  37                              struct btrfs_free_space *info);
  38
  39static struct inode *__lookup_free_space_inode(struct btrfs_root *root,
  40                                               struct btrfs_path *path,
  41                                               u64 offset)
  42{
  43        struct btrfs_key key;
  44        struct btrfs_key location;
  45        struct btrfs_disk_key disk_key;
  46        struct btrfs_free_space_header *header;
  47        struct extent_buffer *leaf;
  48        struct inode *inode = NULL;
  49        int ret;
  50
  51        key.objectid = BTRFS_FREE_SPACE_OBJECTID;
  52        key.offset = offset;
  53        key.type = 0;
  54
  55        ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
  56        if (ret < 0)
  57                return ERR_PTR(ret);
  58        if (ret > 0) {
  59                btrfs_release_path(path);
  60                return ERR_PTR(-ENOENT);
  61        }
  62
  63        leaf = path->nodes[0];
  64        header = btrfs_item_ptr(leaf, path->slots[0],
  65                                struct btrfs_free_space_header);
  66        btrfs_free_space_key(leaf, header, &disk_key);
  67        btrfs_disk_key_to_cpu(&location, &disk_key);
  68        btrfs_release_path(path);
  69
  70        inode = btrfs_iget(root->fs_info->sb, &location, root, NULL);
  71        if (!inode)
  72                return ERR_PTR(-ENOENT);
  73        if (IS_ERR(inode))
  74                return inode;
  75        if (is_bad_inode(inode)) {
  76                iput(inode);
  77                return ERR_PTR(-ENOENT);
  78        }
  79
  80        mapping_set_gfp_mask(inode->i_mapping,
  81                        mapping_gfp_mask(inode->i_mapping) & ~__GFP_FS);
  82
  83        return inode;
  84}
  85
  86struct inode *lookup_free_space_inode(struct btrfs_root *root,
  87                                      struct btrfs_block_group_cache
  88                                      *block_group, struct btrfs_path *path)
  89{
  90        struct inode *inode = NULL;
  91        u32 flags = BTRFS_INODE_NODATASUM | BTRFS_INODE_NODATACOW;
  92
  93        spin_lock(&block_group->lock);
  94        if (block_group->inode)
  95                inode = igrab(block_group->inode);
  96        spin_unlock(&block_group->lock);
  97        if (inode)
  98                return inode;
  99
 100        inode = __lookup_free_space_inode(root, path,
 101                                          block_group->key.objectid);
 102        if (IS_ERR(inode))
 103                return inode;
 104
 105        spin_lock(&block_group->lock);
 106        if (!((BTRFS_I(inode)->flags & flags) == flags)) {
 107                btrfs_info(root->fs_info,
 108                        "Old style space inode found, converting.");
 109                BTRFS_I(inode)->flags |= BTRFS_INODE_NODATASUM |
 110                        BTRFS_INODE_NODATACOW;
 111                block_group->disk_cache_state = BTRFS_DC_CLEAR;
 112        }
 113
 114        if (!block_group->iref) {
 115                block_group->inode = igrab(inode);
 116                block_group->iref = 1;
 117        }
 118        spin_unlock(&block_group->lock);
 119
 120        return inode;
 121}
 122
 123static int __create_free_space_inode(struct btrfs_root *root,
 124                                     struct btrfs_trans_handle *trans,
 125                                     struct btrfs_path *path,
 126                                     u64 ino, u64 offset)
 127{
 128        struct btrfs_key key;
 129        struct btrfs_disk_key disk_key;
 130        struct btrfs_free_space_header *header;
 131        struct btrfs_inode_item *inode_item;
 132        struct extent_buffer *leaf;
 133        u64 flags = BTRFS_INODE_NOCOMPRESS | BTRFS_INODE_PREALLOC;
 134        int ret;
 135
 136        ret = btrfs_insert_empty_inode(trans, root, path, ino);
 137        if (ret)
 138                return ret;
 139
 140        /* We inline crc's for the free disk space cache */
 141        if (ino != BTRFS_FREE_INO_OBJECTID)
 142                flags |= BTRFS_INODE_NODATASUM | BTRFS_INODE_NODATACOW;
 143
 144        leaf = path->nodes[0];
 145        inode_item = btrfs_item_ptr(leaf, path->slots[0],
 146                                    struct btrfs_inode_item);
 147        btrfs_item_key(leaf, &disk_key, path->slots[0]);
 148        memset_extent_buffer(leaf, 0, (unsigned long)inode_item,
 149                             sizeof(*inode_item));
 150        btrfs_set_inode_generation(leaf, inode_item, trans->transid);
 151        btrfs_set_inode_size(leaf, inode_item, 0);
 152        btrfs_set_inode_nbytes(leaf, inode_item, 0);
 153        btrfs_set_inode_uid(leaf, inode_item, 0);
 154        btrfs_set_inode_gid(leaf, inode_item, 0);
 155        btrfs_set_inode_mode(leaf, inode_item, S_IFREG | 0600);
 156        btrfs_set_inode_flags(leaf, inode_item, flags);
 157        btrfs_set_inode_nlink(leaf, inode_item, 1);
 158        btrfs_set_inode_transid(leaf, inode_item, trans->transid);
 159        btrfs_set_inode_block_group(leaf, inode_item, offset);
 160        btrfs_mark_buffer_dirty(leaf);
 161        btrfs_release_path(path);
 162
 163        key.objectid = BTRFS_FREE_SPACE_OBJECTID;
 164        key.offset = offset;
 165        key.type = 0;
 166
 167        ret = btrfs_insert_empty_item(trans, root, path, &key,
 168                                      sizeof(struct btrfs_free_space_header));
 169        if (ret < 0) {
 170                btrfs_release_path(path);
 171                return ret;
 172        }
 173        leaf = path->nodes[0];
 174        header = btrfs_item_ptr(leaf, path->slots[0],
 175                                struct btrfs_free_space_header);
 176        memset_extent_buffer(leaf, 0, (unsigned long)header, sizeof(*header));
 177        btrfs_set_free_space_key(leaf, header, &disk_key);
 178        btrfs_mark_buffer_dirty(leaf);
 179        btrfs_release_path(path);
 180
 181        return 0;
 182}
 183
 184int create_free_space_inode(struct btrfs_root *root,
 185                            struct btrfs_trans_handle *trans,
 186                            struct btrfs_block_group_cache *block_group,
 187                            struct btrfs_path *path)
 188{
 189        int ret;
 190        u64 ino;
 191
 192        ret = btrfs_find_free_objectid(root, &ino);
 193        if (ret < 0)
 194                return ret;
 195
 196        return __create_free_space_inode(root, trans, path, ino,
 197                                         block_group->key.objectid);
 198}
 199
 200int btrfs_check_trunc_cache_free_space(struct btrfs_root *root,
 201                                       struct btrfs_block_rsv *rsv)
 202{
 203        u64 needed_bytes;
 204        int ret;
 205
 206        /* 1 for slack space, 1 for updating the inode */
 207        needed_bytes = btrfs_calc_trunc_metadata_size(root, 1) +
 208                btrfs_calc_trans_metadata_size(root, 1);
 209
 210        spin_lock(&rsv->lock);
 211        if (rsv->reserved < needed_bytes)
 212                ret = -ENOSPC;
 213        else
 214                ret = 0;
 215        spin_unlock(&rsv->lock);
 216        return ret;
 217}
 218
 219int btrfs_truncate_free_space_cache(struct btrfs_root *root,
 220                                    struct btrfs_trans_handle *trans,
 221                                    struct btrfs_path *path,
 222                                    struct inode *inode)
 223{
 224        loff_t oldsize;
 225        int ret = 0;
 226
 227        oldsize = i_size_read(inode);
 228        btrfs_i_size_write(inode, 0);
 229        truncate_pagecache(inode, oldsize, 0);
 230
 231        /*
 232         * We don't need an orphan item because truncating the free space cache
 233         * will never be split across transactions.
 234         */
 235        ret = btrfs_truncate_inode_items(trans, root, inode,
 236                                         0, BTRFS_EXTENT_DATA_KEY);
 237        if (ret) {
 238                btrfs_abort_transaction(trans, root, ret);
 239                return ret;
 240        }
 241
 242        ret = btrfs_update_inode(trans, root, inode);
 243        if (ret)
 244                btrfs_abort_transaction(trans, root, ret);
 245
 246        return ret;
 247}
 248
 249static int readahead_cache(struct inode *inode)
 250{
 251        struct file_ra_state *ra;
 252        unsigned long last_index;
 253
 254        ra = kzalloc(sizeof(*ra), GFP_NOFS);
 255        if (!ra)
 256                return -ENOMEM;
 257
 258        file_ra_state_init(ra, inode->i_mapping);
 259        last_index = (i_size_read(inode) - 1) >> PAGE_CACHE_SHIFT;
 260
 261        page_cache_sync_readahead(inode->i_mapping, ra, NULL, 0, last_index);
 262
 263        kfree(ra);
 264
 265        return 0;
 266}
 267
 268struct io_ctl {
 269        void *cur, *orig;
 270        struct page *page;
 271        struct page **pages;
 272        struct btrfs_root *root;
 273        unsigned long size;
 274        int index;
 275        int num_pages;
 276        unsigned check_crcs:1;
 277};
 278
 279static int io_ctl_init(struct io_ctl *io_ctl, struct inode *inode,
 280                       struct btrfs_root *root)
 281{
 282        memset(io_ctl, 0, sizeof(struct io_ctl));
 283        io_ctl->num_pages = (i_size_read(inode) + PAGE_CACHE_SIZE - 1) >>
 284                PAGE_CACHE_SHIFT;
 285        io_ctl->pages = kzalloc(sizeof(struct page *) * io_ctl->num_pages,
 286                                GFP_NOFS);
 287        if (!io_ctl->pages)
 288                return -ENOMEM;
 289        io_ctl->root = root;
 290        if (btrfs_ino(inode) != BTRFS_FREE_INO_OBJECTID)
 291                io_ctl->check_crcs = 1;
 292        return 0;
 293}
 294
 295static void io_ctl_free(struct io_ctl *io_ctl)
 296{
 297        kfree(io_ctl->pages);
 298}
 299
 300static void io_ctl_unmap_page(struct io_ctl *io_ctl)
 301{
 302        if (io_ctl->cur) {
 303                kunmap(io_ctl->page);
 304                io_ctl->cur = NULL;
 305                io_ctl->orig = NULL;
 306        }
 307}
 308
 309static void io_ctl_map_page(struct io_ctl *io_ctl, int clear)
 310{
 311        BUG_ON(io_ctl->index >= io_ctl->num_pages);
 312        io_ctl->page = io_ctl->pages[io_ctl->index++];
 313        io_ctl->cur = kmap(io_ctl->page);
 314        io_ctl->orig = io_ctl->cur;
 315        io_ctl->size = PAGE_CACHE_SIZE;
 316        if (clear)
 317                memset(io_ctl->cur, 0, PAGE_CACHE_SIZE);
 318}
 319
 320static void io_ctl_drop_pages(struct io_ctl *io_ctl)
 321{
 322        int i;
 323
 324        io_ctl_unmap_page(io_ctl);
 325
 326        for (i = 0; i < io_ctl->num_pages; i++) {
 327                if (io_ctl->pages[i]) {
 328                        ClearPageChecked(io_ctl->pages[i]);
 329                        unlock_page(io_ctl->pages[i]);
 330                        page_cache_release(io_ctl->pages[i]);
 331                }
 332        }
 333}
 334
 335static int io_ctl_prepare_pages(struct io_ctl *io_ctl, struct inode *inode,
 336                                int uptodate)
 337{
 338        struct page *page;
 339        gfp_t mask = btrfs_alloc_write_mask(inode->i_mapping);
 340        int i;
 341
 342        for (i = 0; i < io_ctl->num_pages; i++) {
 343                page = find_or_create_page(inode->i_mapping, i, mask);
 344                if (!page) {
 345                        io_ctl_drop_pages(io_ctl);
 346                        return -ENOMEM;
 347                }
 348                io_ctl->pages[i] = page;
 349                if (uptodate && !PageUptodate(page)) {
 350                        btrfs_readpage(NULL, page);
 351                        lock_page(page);
 352                        if (!PageUptodate(page)) {
 353                                printk(KERN_ERR "btrfs: error reading free "
 354                                       "space cache\n");
 355                                io_ctl_drop_pages(io_ctl);
 356                                return -EIO;
 357                        }
 358                }
 359        }
 360
 361        for (i = 0; i < io_ctl->num_pages; i++) {
 362                clear_page_dirty_for_io(io_ctl->pages[i]);
 363                set_page_extent_mapped(io_ctl->pages[i]);
 364        }
 365
 366        return 0;
 367}
 368
 369static void io_ctl_set_generation(struct io_ctl *io_ctl, u64 generation)
 370{
 371        __le64 *val;
 372
 373        io_ctl_map_page(io_ctl, 1);
 374
 375        /*
 376         * Skip the csum areas.  If we don't check crcs then we just have a
 377         * 64bit chunk at the front of the first page.
 378         */
 379        if (io_ctl->check_crcs) {
 380                io_ctl->cur += (sizeof(u32) * io_ctl->num_pages);
 381                io_ctl->size -= sizeof(u64) + (sizeof(u32) * io_ctl->num_pages);
 382        } else {
 383                io_ctl->cur += sizeof(u64);
 384                io_ctl->size -= sizeof(u64) * 2;
 385        }
 386
 387        val = io_ctl->cur;
 388        *val = cpu_to_le64(generation);
 389        io_ctl->cur += sizeof(u64);
 390}
 391
 392static int io_ctl_check_generation(struct io_ctl *io_ctl, u64 generation)
 393{
 394        __le64 *gen;
 395
 396        /*
 397         * Skip the crc area.  If we don't check crcs then we just have a 64bit
 398         * chunk at the front of the first page.
 399         */
 400        if (io_ctl->check_crcs) {
 401                io_ctl->cur += sizeof(u32) * io_ctl->num_pages;
 402                io_ctl->size -= sizeof(u64) +
 403                        (sizeof(u32) * io_ctl->num_pages);
 404        } else {
 405                io_ctl->cur += sizeof(u64);
 406                io_ctl->size -= sizeof(u64) * 2;
 407        }
 408
 409        gen = io_ctl->cur;
 410        if (le64_to_cpu(*gen) != generation) {
 411                printk_ratelimited(KERN_ERR "btrfs: space cache generation "
 412                                   "(%Lu) does not match inode (%Lu)\n", *gen,
 413                                   generation);
 414                io_ctl_unmap_page(io_ctl);
 415                return -EIO;
 416        }
 417        io_ctl->cur += sizeof(u64);
 418        return 0;
 419}
 420
 421static void io_ctl_set_crc(struct io_ctl *io_ctl, int index)
 422{
 423        u32 *tmp;
 424        u32 crc = ~(u32)0;
 425        unsigned offset = 0;
 426
 427        if (!io_ctl->check_crcs) {
 428                io_ctl_unmap_page(io_ctl);
 429                return;
 430        }
 431
 432        if (index == 0)
 433                offset = sizeof(u32) * io_ctl->num_pages;
 434
 435        crc = btrfs_csum_data(io_ctl->orig + offset, crc,
 436                              PAGE_CACHE_SIZE - offset);
 437        btrfs_csum_final(crc, (char *)&crc);
 438        io_ctl_unmap_page(io_ctl);
 439        tmp = kmap(io_ctl->pages[0]);
 440        tmp += index;
 441        *tmp = crc;
 442        kunmap(io_ctl->pages[0]);
 443}
 444
 445static int io_ctl_check_crc(struct io_ctl *io_ctl, int index)
 446{
 447        u32 *tmp, val;
 448        u32 crc = ~(u32)0;
 449        unsigned offset = 0;
 450
 451        if (!io_ctl->check_crcs) {
 452                io_ctl_map_page(io_ctl, 0);
 453                return 0;
 454        }
 455
 456        if (index == 0)
 457                offset = sizeof(u32) * io_ctl->num_pages;
 458
 459        tmp = kmap(io_ctl->pages[0]);
 460        tmp += index;
 461        val = *tmp;
 462        kunmap(io_ctl->pages[0]);
 463
 464        io_ctl_map_page(io_ctl, 0);
 465        crc = btrfs_csum_data(io_ctl->orig + offset, crc,
 466                              PAGE_CACHE_SIZE - offset);
 467        btrfs_csum_final(crc, (char *)&crc);
 468        if (val != crc) {
 469                printk_ratelimited(KERN_ERR "btrfs: csum mismatch on free "
 470                                   "space cache\n");
 471                io_ctl_unmap_page(io_ctl);
 472                return -EIO;
 473        }
 474
 475        return 0;
 476}
 477
 478static int io_ctl_add_entry(struct io_ctl *io_ctl, u64 offset, u64 bytes,
 479                            void *bitmap)
 480{
 481        struct btrfs_free_space_entry *entry;
 482
 483        if (!io_ctl->cur)
 484                return -ENOSPC;
 485
 486        entry = io_ctl->cur;
 487        entry->offset = cpu_to_le64(offset);
 488        entry->bytes = cpu_to_le64(bytes);
 489        entry->type = (bitmap) ? BTRFS_FREE_SPACE_BITMAP :
 490                BTRFS_FREE_SPACE_EXTENT;
 491        io_ctl->cur += sizeof(struct btrfs_free_space_entry);
 492        io_ctl->size -= sizeof(struct btrfs_free_space_entry);
 493
 494        if (io_ctl->size >= sizeof(struct btrfs_free_space_entry))
 495                return 0;
 496
 497        io_ctl_set_crc(io_ctl, io_ctl->index - 1);
 498
 499        /* No more pages to map */
 500        if (io_ctl->index >= io_ctl->num_pages)
 501                return 0;
 502
 503        /* map the next page */
 504        io_ctl_map_page(io_ctl, 1);
 505        return 0;
 506}
 507
 508static int io_ctl_add_bitmap(struct io_ctl *io_ctl, void *bitmap)
 509{
 510        if (!io_ctl->cur)
 511                return -ENOSPC;
 512
 513        /*
 514         * If we aren't at the start of the current page, unmap this one and
 515         * map the next one if there is any left.
 516         */
 517        if (io_ctl->cur != io_ctl->orig) {
 518                io_ctl_set_crc(io_ctl, io_ctl->index - 1);
 519                if (io_ctl->index >= io_ctl->num_pages)
 520                        return -ENOSPC;
 521                io_ctl_map_page(io_ctl, 0);
 522        }
 523
 524        memcpy(io_ctl->cur, bitmap, PAGE_CACHE_SIZE);
 525        io_ctl_set_crc(io_ctl, io_ctl->index - 1);
 526        if (io_ctl->index < io_ctl->num_pages)
 527                io_ctl_map_page(io_ctl, 0);
 528        return 0;
 529}
 530
 531static void io_ctl_zero_remaining_pages(struct io_ctl *io_ctl)
 532{
 533        /*
 534         * If we're not on the boundary we know we've modified the page and we
 535         * need to crc the page.
 536         */
 537        if (io_ctl->cur != io_ctl->orig)
 538                io_ctl_set_crc(io_ctl, io_ctl->index - 1);
 539        else
 540                io_ctl_unmap_page(io_ctl);
 541
 542        while (io_ctl->index < io_ctl->num_pages) {
 543                io_ctl_map_page(io_ctl, 1);
 544                io_ctl_set_crc(io_ctl, io_ctl->index - 1);
 545        }
 546}
 547
 548static int io_ctl_read_entry(struct io_ctl *io_ctl,
 549                            struct btrfs_free_space *entry, u8 *type)
 550{
 551        struct btrfs_free_space_entry *e;
 552        int ret;
 553
 554        if (!io_ctl->cur) {
 555                ret = io_ctl_check_crc(io_ctl, io_ctl->index);
 556                if (ret)
 557                        return ret;
 558        }
 559
 560        e = io_ctl->cur;
 561        entry->offset = le64_to_cpu(e->offset);
 562        entry->bytes = le64_to_cpu(e->bytes);
 563        *type = e->type;
 564        io_ctl->cur += sizeof(struct btrfs_free_space_entry);
 565        io_ctl->size -= sizeof(struct btrfs_free_space_entry);
 566
 567        if (io_ctl->size >= sizeof(struct btrfs_free_space_entry))
 568                return 0;
 569
 570        io_ctl_unmap_page(io_ctl);
 571
 572        return 0;
 573}
 574
 575static int io_ctl_read_bitmap(struct io_ctl *io_ctl,
 576                              struct btrfs_free_space *entry)
 577{
 578        int ret;
 579
 580        ret = io_ctl_check_crc(io_ctl, io_ctl->index);
 581        if (ret)
 582                return ret;
 583
 584        memcpy(entry->bitmap, io_ctl->cur, PAGE_CACHE_SIZE);
 585        io_ctl_unmap_page(io_ctl);
 586
 587        return 0;
 588}
 589
 590/*
 591 * Since we attach pinned extents after the fact we can have contiguous sections
 592 * of free space that are split up in entries.  This poses a problem with the
 593 * tree logging stuff since it could have allocated across what appears to be 2
 594 * entries since we would have merged the entries when adding the pinned extents
 595 * back to the free space cache.  So run through the space cache that we just
 596 * loaded and merge contiguous entries.  This will make the log replay stuff not
 597 * blow up and it will make for nicer allocator behavior.
 598 */
 599static void merge_space_tree(struct btrfs_free_space_ctl *ctl)
 600{
 601        struct btrfs_free_space *e, *prev = NULL;
 602        struct rb_node *n;
 603
 604again:
 605        spin_lock(&ctl->tree_lock);
 606        for (n = rb_first(&ctl->free_space_offset); n; n = rb_next(n)) {
 607                e = rb_entry(n, struct btrfs_free_space, offset_index);
 608                if (!prev)
 609                        goto next;
 610                if (e->bitmap || prev->bitmap)
 611                        goto next;
 612                if (prev->offset + prev->bytes == e->offset) {
 613                        unlink_free_space(ctl, prev);
 614                        unlink_free_space(ctl, e);
 615                        prev->bytes += e->bytes;
 616                        kmem_cache_free(btrfs_free_space_cachep, e);
 617                        link_free_space(ctl, prev);
 618                        prev = NULL;
 619                        spin_unlock(&ctl->tree_lock);
 620                        goto again;
 621                }
 622next:
 623                prev = e;
 624        }
 625        spin_unlock(&ctl->tree_lock);
 626}
 627
 628static int __load_free_space_cache(struct btrfs_root *root, struct inode *inode,
 629                                   struct btrfs_free_space_ctl *ctl,
 630                                   struct btrfs_path *path, u64 offset)
 631{
 632        struct btrfs_free_space_header *header;
 633        struct extent_buffer *leaf;
 634        struct io_ctl io_ctl;
 635        struct btrfs_key key;
 636        struct btrfs_free_space *e, *n;
 637        struct list_head bitmaps;
 638        u64 num_entries;
 639        u64 num_bitmaps;
 640        u64 generation;
 641        u8 type;
 642        int ret = 0;
 643
 644        INIT_LIST_HEAD(&bitmaps);
 645
 646        /* Nothing in the space cache, goodbye */
 647        if (!i_size_read(inode))
 648                return 0;
 649
 650        key.objectid = BTRFS_FREE_SPACE_OBJECTID;
 651        key.offset = offset;
 652        key.type = 0;
 653
 654        ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
 655        if (ret < 0)
 656                return 0;
 657        else if (ret > 0) {
 658                btrfs_release_path(path);
 659                return 0;
 660        }
 661
 662        ret = -1;
 663
 664        leaf = path->nodes[0];
 665        header = btrfs_item_ptr(leaf, path->slots[0],
 666                                struct btrfs_free_space_header);
 667        num_entries = btrfs_free_space_entries(leaf, header);
 668        num_bitmaps = btrfs_free_space_bitmaps(leaf, header);
 669        generation = btrfs_free_space_generation(leaf, header);
 670        btrfs_release_path(path);
 671
 672        if (BTRFS_I(inode)->generation != generation) {
 673                btrfs_err(root->fs_info,
 674                        "free space inode generation (%llu) "
 675                        "did not match free space cache generation (%llu)",
 676                        (unsigned long long)BTRFS_I(inode)->generation,
 677                        (unsigned long long)generation);
 678                return 0;
 679        }
 680
 681        if (!num_entries)
 682                return 0;
 683
 684        ret = io_ctl_init(&io_ctl, inode, root);
 685        if (ret)
 686                return ret;
 687
 688        ret = readahead_cache(inode);
 689        if (ret)
 690                goto out;
 691
 692        ret = io_ctl_prepare_pages(&io_ctl, inode, 1);
 693        if (ret)
 694                goto out;
 695
 696        ret = io_ctl_check_crc(&io_ctl, 0);
 697        if (ret)
 698                goto free_cache;
 699
 700        ret = io_ctl_check_generation(&io_ctl, generation);
 701        if (ret)
 702                goto free_cache;
 703
 704        while (num_entries) {
 705                e = kmem_cache_zalloc(btrfs_free_space_cachep,
 706                                      GFP_NOFS);
 707                if (!e)
 708                        goto free_cache;
 709
 710                ret = io_ctl_read_entry(&io_ctl, e, &type);
 711                if (ret) {
 712                        kmem_cache_free(btrfs_free_space_cachep, e);
 713                        goto free_cache;
 714                }
 715
 716                if (!e->bytes) {
 717                        kmem_cache_free(btrfs_free_space_cachep, e);
 718                        goto free_cache;
 719                }
 720
 721                if (type == BTRFS_FREE_SPACE_EXTENT) {
 722                        spin_lock(&ctl->tree_lock);
 723                        ret = link_free_space(ctl, e);
 724                        spin_unlock(&ctl->tree_lock);
 725                        if (ret) {
 726                                btrfs_err(root->fs_info,
 727                                        "Duplicate entries in free space cache, dumping");
 728                                kmem_cache_free(btrfs_free_space_cachep, e);
 729                                goto free_cache;
 730                        }
 731                } else {
 732                        BUG_ON(!num_bitmaps);
 733                        num_bitmaps--;
 734                        e->bitmap = kzalloc(PAGE_CACHE_SIZE, GFP_NOFS);
 735                        if (!e->bitmap) {
 736                                kmem_cache_free(
 737                                        btrfs_free_space_cachep, e);
 738                                goto free_cache;
 739                        }
 740                        spin_lock(&ctl->tree_lock);
 741                        ret = link_free_space(ctl, e);
 742                        ctl->total_bitmaps++;
 743                        ctl->op->recalc_thresholds(ctl);
 744                        spin_unlock(&ctl->tree_lock);
 745                        if (ret) {
 746                                btrfs_err(root->fs_info,
 747                                        "Duplicate entries in free space cache, dumping");
 748                                kmem_cache_free(btrfs_free_space_cachep, e);
 749                                goto free_cache;
 750                        }
 751                        list_add_tail(&e->list, &bitmaps);
 752                }
 753
 754                num_entries--;
 755        }
 756
 757        io_ctl_unmap_page(&io_ctl);
 758
 759        /*
 760         * We add the bitmaps at the end of the entries in order that
 761         * the bitmap entries are added to the cache.
 762         */
 763        list_for_each_entry_safe(e, n, &bitmaps, list) {
 764                list_del_init(&e->list);
 765                ret = io_ctl_read_bitmap(&io_ctl, e);
 766                if (ret)
 767                        goto free_cache;
 768        }
 769
 770        io_ctl_drop_pages(&io_ctl);
 771        merge_space_tree(ctl);
 772        ret = 1;
 773out:
 774        io_ctl_free(&io_ctl);
 775        return ret;
 776free_cache:
 777        io_ctl_drop_pages(&io_ctl);
 778        __btrfs_remove_free_space_cache(ctl);
 779        goto out;
 780}
 781
 782int load_free_space_cache(struct btrfs_fs_info *fs_info,
 783                          struct btrfs_block_group_cache *block_group)
 784{
 785        struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl;
 786        struct btrfs_root *root = fs_info->tree_root;
 787        struct inode *inode;
 788        struct btrfs_path *path;
 789        int ret = 0;
 790        bool matched;
 791        u64 used = btrfs_block_group_used(&block_group->item);
 792
 793        /*
 794         * If this block group has been marked to be cleared for one reason or
 795         * another then we can't trust the on disk cache, so just return.
 796         */
 797        spin_lock(&block_group->lock);
 798        if (block_group->disk_cache_state != BTRFS_DC_WRITTEN) {
 799                spin_unlock(&block_group->lock);
 800                return 0;
 801        }
 802        spin_unlock(&block_group->lock);
 803
 804        path = btrfs_alloc_path();
 805        if (!path)
 806                return 0;
 807        path->search_commit_root = 1;
 808        path->skip_locking = 1;
 809
 810        inode = lookup_free_space_inode(root, block_group, path);
 811        if (IS_ERR(inode)) {
 812                btrfs_free_path(path);
 813                return 0;
 814        }
 815
 816        /* We may have converted the inode and made the cache invalid. */
 817        spin_lock(&block_group->lock);
 818        if (block_group->disk_cache_state != BTRFS_DC_WRITTEN) {
 819                spin_unlock(&block_group->lock);
 820                btrfs_free_path(path);
 821                goto out;
 822        }
 823        spin_unlock(&block_group->lock);
 824
 825        ret = __load_free_space_cache(fs_info->tree_root, inode, ctl,
 826                                      path, block_group->key.objectid);
 827        btrfs_free_path(path);
 828        if (ret <= 0)
 829                goto out;
 830
 831        spin_lock(&ctl->tree_lock);
 832        matched = (ctl->free_space == (block_group->key.offset - used -
 833                                       block_group->bytes_super));
 834        spin_unlock(&ctl->tree_lock);
 835
 836        if (!matched) {
 837                __btrfs_remove_free_space_cache(ctl);
 838                btrfs_err(fs_info, "block group %llu has wrong amount of free space",
 839                        block_group->key.objectid);
 840                ret = -1;
 841        }
 842out:
 843        if (ret < 0) {
 844                /* This cache is bogus, make sure it gets cleared */
 845                spin_lock(&block_group->lock);
 846                block_group->disk_cache_state = BTRFS_DC_CLEAR;
 847                spin_unlock(&block_group->lock);
 848                ret = 0;
 849
 850                btrfs_err(fs_info, "failed to load free space cache for block group %llu",
 851                        block_group->key.objectid);
 852        }
 853
 854        iput(inode);
 855        return ret;
 856}
 857
 858/**
 859 * __btrfs_write_out_cache - write out cached info to an inode
 860 * @root - the root the inode belongs to
 861 * @ctl - the free space cache we are going to write out
 862 * @block_group - the block_group for this cache if it belongs to a block_group
 863 * @trans - the trans handle
 864 * @path - the path to use
 865 * @offset - the offset for the key we'll insert
 866 *
 867 * This function writes out a free space cache struct to disk for quick recovery
 868 * on mount.  This will return 0 if it was successfull in writing the cache out,
 869 * and -1 if it was not.
 870 */
 871static int __btrfs_write_out_cache(struct btrfs_root *root, struct inode *inode,
 872                                   struct btrfs_free_space_ctl *ctl,
 873                                   struct btrfs_block_group_cache *block_group,
 874                                   struct btrfs_trans_handle *trans,
 875                                   struct btrfs_path *path, u64 offset)
 876{
 877        struct btrfs_free_space_header *header;
 878        struct extent_buffer *leaf;
 879        struct rb_node *node;
 880        struct list_head *pos, *n;
 881        struct extent_state *cached_state = NULL;
 882        struct btrfs_free_cluster *cluster = NULL;
 883        struct extent_io_tree *unpin = NULL;
 884        struct io_ctl io_ctl;
 885        struct list_head bitmap_list;
 886        struct btrfs_key key;
 887        u64 start, extent_start, extent_end, len;
 888        int entries = 0;
 889        int bitmaps = 0;
 890        int ret;
 891        int err = -1;
 892
 893        INIT_LIST_HEAD(&bitmap_list);
 894
 895        if (!i_size_read(inode))
 896                return -1;
 897
 898        ret = io_ctl_init(&io_ctl, inode, root);
 899        if (ret)
 900                return -1;
 901
 902        /* Get the cluster for this block_group if it exists */
 903        if (block_group && !list_empty(&block_group->cluster_list))
 904                cluster = list_entry(block_group->cluster_list.next,
 905                                     struct btrfs_free_cluster,
 906                                     block_group_list);
 907
 908        /* Lock all pages first so we can lock the extent safely. */
 909        io_ctl_prepare_pages(&io_ctl, inode, 0);
 910
 911        lock_extent_bits(&BTRFS_I(inode)->io_tree, 0, i_size_read(inode) - 1,
 912                         0, &cached_state);
 913
 914        node = rb_first(&ctl->free_space_offset);
 915        if (!node && cluster) {
 916                node = rb_first(&cluster->root);
 917                cluster = NULL;
 918        }
 919
 920        /* Make sure we can fit our crcs into the first page */
 921        if (io_ctl.check_crcs &&
 922            (io_ctl.num_pages * sizeof(u32)) >= PAGE_CACHE_SIZE)
 923                goto out_nospc;
 924
 925        io_ctl_set_generation(&io_ctl, trans->transid);
 926
 927        /* Write out the extent entries */
 928        while (node) {
 929                struct btrfs_free_space *e;
 930
 931                e = rb_entry(node, struct btrfs_free_space, offset_index);
 932                entries++;
 933
 934                ret = io_ctl_add_entry(&io_ctl, e->offset, e->bytes,
 935                                       e->bitmap);
 936                if (ret)
 937                        goto out_nospc;
 938
 939                if (e->bitmap) {
 940                        list_add_tail(&e->list, &bitmap_list);
 941                        bitmaps++;
 942                }
 943                node = rb_next(node);
 944                if (!node && cluster) {
 945                        node = rb_first(&cluster->root);
 946                        cluster = NULL;
 947                }
 948        }
 949
 950        /*
 951         * We want to add any pinned extents to our free space cache
 952         * so we don't leak the space
 953         */
 954
 955        /*
 956         * We shouldn't have switched the pinned extents yet so this is the
 957         * right one
 958         */
 959        unpin = root->fs_info->pinned_extents;
 960
 961        if (block_group)
 962                start = block_group->key.objectid;
 963
 964        while (block_group && (start < block_group->key.objectid +
 965                               block_group->key.offset)) {
 966                ret = find_first_extent_bit(unpin, start,
 967                                            &extent_start, &extent_end,
 968                                            EXTENT_DIRTY, NULL);
 969                if (ret) {
 970                        ret = 0;
 971                        break;
 972                }
 973
 974                /* This pinned extent is out of our range */
 975                if (extent_start >= block_group->key.objectid +
 976                    block_group->key.offset)
 977                        break;
 978
 979                extent_start = max(extent_start, start);
 980                extent_end = min(block_group->key.objectid +
 981                                 block_group->key.offset, extent_end + 1);
 982                len = extent_end - extent_start;
 983
 984                entries++;
 985                ret = io_ctl_add_entry(&io_ctl, extent_start, len, NULL);
 986                if (ret)
 987                        goto out_nospc;
 988
 989                start = extent_end;
 990        }
 991
 992        /* Write out the bitmaps */
 993        list_for_each_safe(pos, n, &bitmap_list) {
 994                struct btrfs_free_space *entry =
 995                        list_entry(pos, struct btrfs_free_space, list);
 996
 997                ret = io_ctl_add_bitmap(&io_ctl, entry->bitmap);
 998                if (ret)
 999                        goto out_nospc;
1000                list_del_init(&entry->list);
1001        }
1002
1003        /* Zero out the rest of the pages just to make sure */
1004        io_ctl_zero_remaining_pages(&io_ctl);
1005
1006        ret = btrfs_dirty_pages(root, inode, io_ctl.pages, io_ctl.num_pages,
1007                                0, i_size_read(inode), &cached_state);
1008        io_ctl_drop_pages(&io_ctl);
1009        unlock_extent_cached(&BTRFS_I(inode)->io_tree, 0,
1010                             i_size_read(inode) - 1, &cached_state, GFP_NOFS);
1011
1012        if (ret)
1013                goto out;
1014
1015
1016        btrfs_wait_ordered_range(inode, 0, (u64)-1);
1017
1018        key.objectid = BTRFS_FREE_SPACE_OBJECTID;
1019        key.offset = offset;
1020        key.type = 0;
1021
1022        ret = btrfs_search_slot(trans, root, &key, path, 0, 1);
1023        if (ret < 0) {
1024                clear_extent_bit(&BTRFS_I(inode)->io_tree, 0, inode->i_size - 1,
1025                                 EXTENT_DIRTY | EXTENT_DELALLOC, 0, 0, NULL,
1026                                 GFP_NOFS);
1027                goto out;
1028        }
1029        leaf = path->nodes[0];
1030        if (ret > 0) {
1031                struct btrfs_key found_key;
1032                BUG_ON(!path->slots[0]);
1033                path->slots[0]--;
1034                btrfs_item_key_to_cpu(leaf, &found_key, path->slots[0]);
1035                if (found_key.objectid != BTRFS_FREE_SPACE_OBJECTID ||
1036                    found_key.offset != offset) {
1037                        clear_extent_bit(&BTRFS_I(inode)->io_tree, 0,
1038                                         inode->i_size - 1,
1039                                         EXTENT_DIRTY | EXTENT_DELALLOC, 0, 0,
1040                                         NULL, GFP_NOFS);
1041                        btrfs_release_path(path);
1042                        goto out;
1043                }
1044        }
1045
1046        BTRFS_I(inode)->generation = trans->transid;
1047        header = btrfs_item_ptr(leaf, path->slots[0],
1048                                struct btrfs_free_space_header);
1049        btrfs_set_free_space_entries(leaf, header, entries);
1050        btrfs_set_free_space_bitmaps(leaf, header, bitmaps);
1051        btrfs_set_free_space_generation(leaf, header, trans->transid);
1052        btrfs_mark_buffer_dirty(leaf);
1053        btrfs_release_path(path);
1054
1055        err = 0;
1056out:
1057        io_ctl_free(&io_ctl);
1058        if (err) {
1059                invalidate_inode_pages2(inode->i_mapping);
1060                BTRFS_I(inode)->generation = 0;
1061        }
1062        btrfs_update_inode(trans, root, inode);
1063        return err;
1064
1065out_nospc:
1066        list_for_each_safe(pos, n, &bitmap_list) {
1067                struct btrfs_free_space *entry =
1068                        list_entry(pos, struct btrfs_free_space, list);
1069                list_del_init(&entry->list);
1070        }
1071        io_ctl_drop_pages(&io_ctl);
1072        unlock_extent_cached(&BTRFS_I(inode)->io_tree, 0,
1073                             i_size_read(inode) - 1, &cached_state, GFP_NOFS);
1074        goto out;
1075}
1076
1077int btrfs_write_out_cache(struct btrfs_root *root,
1078                          struct btrfs_trans_handle *trans,
1079                          struct btrfs_block_group_cache *block_group,
1080                          struct btrfs_path *path)
1081{
1082        struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl;
1083        struct inode *inode;
1084        int ret = 0;
1085
1086        root = root->fs_info->tree_root;
1087
1088        spin_lock(&block_group->lock);
1089        if (block_group->disk_cache_state < BTRFS_DC_SETUP) {
1090                spin_unlock(&block_group->lock);
1091                return 0;
1092        }
1093        spin_unlock(&block_group->lock);
1094
1095        inode = lookup_free_space_inode(root, block_group, path);
1096        if (IS_ERR(inode))
1097                return 0;
1098
1099        ret = __btrfs_write_out_cache(root, inode, ctl, block_group, trans,
1100                                      path, block_group->key.objectid);
1101        if (ret) {
1102                spin_lock(&block_group->lock);
1103                block_group->disk_cache_state = BTRFS_DC_ERROR;
1104                spin_unlock(&block_group->lock);
1105                ret = 0;
1106#ifdef DEBUG
1107                btrfs_err(root->fs_info,
1108                        "failed to write free space cache for block group %llu",
1109                        block_group->key.objectid);
1110#endif
1111        }
1112
1113        iput(inode);
1114        return ret;
1115}
1116
1117static inline unsigned long offset_to_bit(u64 bitmap_start, u32 unit,
1118                                          u64 offset)
1119{
1120        BUG_ON(offset < bitmap_start);
1121        offset -= bitmap_start;
1122        return (unsigned long)(div_u64(offset, unit));
1123}
1124
1125static inline unsigned long bytes_to_bits(u64 bytes, u32 unit)
1126{
1127        return (unsigned long)(div_u64(bytes, unit));
1128}
1129
1130static inline u64 offset_to_bitmap(struct btrfs_free_space_ctl *ctl,
1131                                   u64 offset)
1132{
1133        u64 bitmap_start;
1134        u64 bytes_per_bitmap;
1135
1136        bytes_per_bitmap = BITS_PER_BITMAP * ctl->unit;
1137        bitmap_start = offset - ctl->start;
1138        bitmap_start = div64_u64(bitmap_start, bytes_per_bitmap);
1139        bitmap_start *= bytes_per_bitmap;
1140        bitmap_start += ctl->start;
1141
1142        return bitmap_start;
1143}
1144
1145static int tree_insert_offset(struct rb_root *root, u64 offset,
1146                              struct rb_node *node, int bitmap)
1147{
1148        struct rb_node **p = &root->rb_node;
1149        struct rb_node *parent = NULL;
1150        struct btrfs_free_space *info;
1151
1152        while (*p) {
1153                parent = *p;
1154                info = rb_entry(parent, struct btrfs_free_space, offset_index);
1155
1156                if (offset < info->offset) {
1157                        p = &(*p)->rb_left;
1158                } else if (offset > info->offset) {
1159                        p = &(*p)->rb_right;
1160                } else {
1161                        /*
1162                         * we could have a bitmap entry and an extent entry
1163                         * share the same offset.  If this is the case, we want
1164                         * the extent entry to always be found first if we do a
1165                         * linear search through the tree, since we want to have
1166                         * the quickest allocation time, and allocating from an
1167                         * extent is faster than allocating from a bitmap.  So
1168                         * if we're inserting a bitmap and we find an entry at
1169                         * this offset, we want to go right, or after this entry
1170                         * logically.  If we are inserting an extent and we've
1171                         * found a bitmap, we want to go left, or before
1172                         * logically.
1173                         */
1174                        if (bitmap) {
1175                                if (info->bitmap) {
1176                                        WARN_ON_ONCE(1);
1177                                        return -EEXIST;
1178                                }
1179                                p = &(*p)->rb_right;
1180                        } else {
1181                                if (!info->bitmap) {
1182                                        WARN_ON_ONCE(1);
1183                                        return -EEXIST;
1184                                }
1185                                p = &(*p)->rb_left;
1186                        }
1187                }
1188        }
1189
1190        rb_link_node(node, parent, p);
1191        rb_insert_color(node, root);
1192
1193        return 0;
1194}
1195
1196/*
1197 * searches the tree for the given offset.
1198 *
1199 * fuzzy - If this is set, then we are trying to make an allocation, and we just
1200 * want a section that has at least bytes size and comes at or after the given
1201 * offset.
1202 */
1203static struct btrfs_free_space *
1204tree_search_offset(struct btrfs_free_space_ctl *ctl,
1205                   u64 offset, int bitmap_only, int fuzzy)
1206{
1207        struct rb_node *n = ctl->free_space_offset.rb_node;
1208        struct btrfs_free_space *entry, *prev = NULL;
1209
1210        /* find entry that is closest to the 'offset' */
1211        while (1) {
1212                if (!n) {
1213                        entry = NULL;
1214                        break;
1215                }
1216
1217                entry = rb_entry(n, struct btrfs_free_space, offset_index);
1218                prev = entry;
1219
1220                if (offset < entry->offset)
1221                        n = n->rb_left;
1222                else if (offset > entry->offset)
1223                        n = n->rb_right;
1224                else
1225                        break;
1226        }
1227
1228        if (bitmap_only) {
1229                if (!entry)
1230                        return NULL;
1231                if (entry->bitmap)
1232                        return entry;
1233
1234                /*
1235                 * bitmap entry and extent entry may share same offset,
1236                 * in that case, bitmap entry comes after extent entry.
1237                 */
1238                n = rb_next(n);
1239                if (!n)
1240                        return NULL;
1241                entry = rb_entry(n, struct btrfs_free_space, offset_index);
1242                if (entry->offset != offset)
1243                        return NULL;
1244
1245                WARN_ON(!entry->bitmap);
1246                return entry;
1247        } else if (entry) {
1248                if (entry->bitmap) {
1249                        /*
1250                         * if previous extent entry covers the offset,
1251                         * we should return it instead of the bitmap entry
1252                         */
1253                        n = rb_prev(&entry->offset_index);
1254                        if (n) {
1255                                prev = rb_entry(n, struct btrfs_free_space,
1256                                                offset_index);
1257                                if (!prev->bitmap &&
1258                                    prev->offset + prev->bytes > offset)
1259                                        entry = prev;
1260                        }
1261                }
1262                return entry;
1263        }
1264
1265        if (!prev)
1266                return NULL;
1267
1268        /* find last entry before the 'offset' */
1269        entry = prev;
1270        if (entry->offset > offset) {
1271                n = rb_prev(&entry->offset_index);
1272                if (n) {
1273                        entry = rb_entry(n, struct btrfs_free_space,
1274                                        offset_index);
1275                        BUG_ON(entry->offset > offset);
1276                } else {
1277                        if (fuzzy)
1278                                return entry;
1279                        else
1280                                return NULL;
1281                }
1282        }
1283
1284        if (entry->bitmap) {
1285                n = rb_prev(&entry->offset_index);
1286                if (n) {
1287                        prev = rb_entry(n, struct btrfs_free_space,
1288                                        offset_index);
1289                        if (!prev->bitmap &&
1290                            prev->offset + prev->bytes > offset)
1291                                return prev;
1292                }
1293                if (entry->offset + BITS_PER_BITMAP * ctl->unit > offset)
1294                        return entry;
1295        } else if (entry->offset + entry->bytes > offset)
1296                return entry;
1297
1298        if (!fuzzy)
1299                return NULL;
1300
1301        while (1) {
1302                if (entry->bitmap) {
1303                        if (entry->offset + BITS_PER_BITMAP *
1304                            ctl->unit > offset)
1305                                break;
1306                } else {
1307                        if (entry->offset + entry->bytes > offset)
1308                                break;
1309                }
1310
1311                n = rb_next(&entry->offset_index);
1312                if (!n)
1313                        return NULL;
1314                entry = rb_entry(n, struct btrfs_free_space, offset_index);
1315        }
1316        return entry;
1317}
1318
1319static inline void
1320__unlink_free_space(struct btrfs_free_space_ctl *ctl,
1321                    struct btrfs_free_space *info)
1322{
1323        rb_erase(&info->offset_index, &ctl->free_space_offset);
1324        ctl->free_extents--;
1325}
1326
1327static void unlink_free_space(struct btrfs_free_space_ctl *ctl,
1328                              struct btrfs_free_space *info)
1329{
1330        __unlink_free_space(ctl, info);
1331        ctl->free_space -= info->bytes;
1332}
1333
1334static int link_free_space(struct btrfs_free_space_ctl *ctl,
1335                           struct btrfs_free_space *info)
1336{
1337        int ret = 0;
1338
1339        BUG_ON(!info->bitmap && !info->bytes);
1340        ret = tree_insert_offset(&ctl->free_space_offset, info->offset,
1341                                 &info->offset_index, (info->bitmap != NULL));
1342        if (ret)
1343                return ret;
1344
1345        ctl->free_space += info->bytes;
1346        ctl->free_extents++;
1347        return ret;
1348}
1349
1350static void recalculate_thresholds(struct btrfs_free_space_ctl *ctl)
1351{
1352        struct btrfs_block_group_cache *block_group = ctl->private;
1353        u64 max_bytes;
1354        u64 bitmap_bytes;
1355        u64 extent_bytes;
1356        u64 size = block_group->key.offset;
1357        u64 bytes_per_bg = BITS_PER_BITMAP * ctl->unit;
1358        int max_bitmaps = div64_u64(size + bytes_per_bg - 1, bytes_per_bg);
1359
1360        max_bitmaps = max(max_bitmaps, 1);
1361
1362        BUG_ON(ctl->total_bitmaps > max_bitmaps);
1363
1364        /*
1365         * The goal is to keep the total amount of memory used per 1gb of space
1366         * at or below 32k, so we need to adjust how much memory we allow to be
1367         * used by extent based free space tracking
1368         */
1369        if (size < 1024 * 1024 * 1024)
1370                max_bytes = MAX_CACHE_BYTES_PER_GIG;
1371        else
1372                max_bytes = MAX_CACHE_BYTES_PER_GIG *
1373                        div64_u64(size, 1024 * 1024 * 1024);
1374
1375        /*
1376         * we want to account for 1 more bitmap than what we have so we can make
1377         * sure we don't go over our overall goal of MAX_CACHE_BYTES_PER_GIG as
1378         * we add more bitmaps.
1379         */
1380        bitmap_bytes = (ctl->total_bitmaps + 1) * PAGE_CACHE_SIZE;
1381
1382        if (bitmap_bytes >= max_bytes) {
1383                ctl->extents_thresh = 0;
1384                return;
1385        }
1386
1387        /*
1388         * we want the extent entry threshold to always be at most 1/2 the maxw
1389         * bytes we can have, or whatever is less than that.
1390         */
1391        extent_bytes = max_bytes - bitmap_bytes;
1392        extent_bytes = min_t(u64, extent_bytes, div64_u64(max_bytes, 2));
1393
1394        ctl->extents_thresh =
1395                div64_u64(extent_bytes, (sizeof(struct btrfs_free_space)));
1396}
1397
1398static inline void __bitmap_clear_bits(struct btrfs_free_space_ctl *ctl,
1399                                       struct btrfs_free_space *info,
1400                                       u64 offset, u64 bytes)
1401{
1402        unsigned long start, count;
1403
1404        start = offset_to_bit(info->offset, ctl->unit, offset);
1405        count = bytes_to_bits(bytes, ctl->unit);
1406        BUG_ON(start + count > BITS_PER_BITMAP);
1407
1408        bitmap_clear(info->bitmap, start, count);
1409
1410        info->bytes -= bytes;
1411}
1412
1413static void bitmap_clear_bits(struct btrfs_free_space_ctl *ctl,
1414                              struct btrfs_free_space *info, u64 offset,
1415                              u64 bytes)
1416{
1417        __bitmap_clear_bits(ctl, info, offset, bytes);
1418        ctl->free_space -= bytes;
1419}
1420
1421static void bitmap_set_bits(struct btrfs_free_space_ctl *ctl,
1422                            struct btrfs_free_space *info, u64 offset,
1423                            u64 bytes)
1424{
1425        unsigned long start, count;
1426
1427        start = offset_to_bit(info->offset, ctl->unit, offset);
1428        count = bytes_to_bits(bytes, ctl->unit);
1429        BUG_ON(start + count > BITS_PER_BITMAP);
1430
1431        bitmap_set(info->bitmap, start, count);
1432
1433        info->bytes += bytes;
1434        ctl->free_space += bytes;
1435}
1436
1437static int search_bitmap(struct btrfs_free_space_ctl *ctl,
1438                         struct btrfs_free_space *bitmap_info, u64 *offset,
1439                         u64 *bytes)
1440{
1441        unsigned long found_bits = 0;
1442        unsigned long bits, i;
1443        unsigned long next_zero;
1444
1445        i = offset_to_bit(bitmap_info->offset, ctl->unit,
1446                          max_t(u64, *offset, bitmap_info->offset));
1447        bits = bytes_to_bits(*bytes, ctl->unit);
1448
1449        for_each_set_bit_from(i, bitmap_info->bitmap, BITS_PER_BITMAP) {
1450                next_zero = find_next_zero_bit(bitmap_info->bitmap,
1451                                               BITS_PER_BITMAP, i);
1452                if ((next_zero - i) >= bits) {
1453                        found_bits = next_zero - i;
1454                        break;
1455                }
1456                i = next_zero;
1457        }
1458
1459        if (found_bits) {
1460                *offset = (u64)(i * ctl->unit) + bitmap_info->offset;
1461                *bytes = (u64)(found_bits) * ctl->unit;
1462                return 0;
1463        }
1464
1465        return -1;
1466}
1467
1468static struct btrfs_free_space *
1469find_free_space(struct btrfs_free_space_ctl *ctl, u64 *offset, u64 *bytes,
1470                unsigned long align)
1471{
1472        struct btrfs_free_space *entry;
1473        struct rb_node *node;
1474        u64 ctl_off;
1475        u64 tmp;
1476        u64 align_off;
1477        int ret;
1478
1479        if (!ctl->free_space_offset.rb_node)
1480                return NULL;
1481
1482        entry = tree_search_offset(ctl, offset_to_bitmap(ctl, *offset), 0, 1);
1483        if (!entry)
1484                return NULL;
1485
1486        for (node = &entry->offset_index; node; node = rb_next(node)) {
1487                entry = rb_entry(node, struct btrfs_free_space, offset_index);
1488                if (entry->bytes < *bytes)
1489                        continue;
1490
1491                /* make sure the space returned is big enough
1492                 * to match our requested alignment
1493                 */
1494                if (*bytes >= align) {
1495                        ctl_off = entry->offset - ctl->start;
1496                        tmp = ctl_off + align - 1;;
1497                        do_div(tmp, align);
1498                        tmp = tmp * align + ctl->start;
1499                        align_off = tmp - entry->offset;
1500                } else {
1501                        align_off = 0;
1502                        tmp = entry->offset;
1503                }
1504
1505                if (entry->bytes < *bytes + align_off)
1506                        continue;
1507
1508                if (entry->bitmap) {
1509                        ret = search_bitmap(ctl, entry, &tmp, bytes);
1510                        if (!ret) {
1511                                *offset = tmp;
1512                                return entry;
1513                        }
1514                        continue;
1515                }
1516
1517                *offset = tmp;
1518                *bytes = entry->bytes - align_off;
1519                return entry;
1520        }
1521
1522        return NULL;
1523}
1524
1525static void add_new_bitmap(struct btrfs_free_space_ctl *ctl,
1526                           struct btrfs_free_space *info, u64 offset)
1527{
1528        info->offset = offset_to_bitmap(ctl, offset);
1529        info->bytes = 0;
1530        INIT_LIST_HEAD(&info->list);
1531        link_free_space(ctl, info);
1532        ctl->total_bitmaps++;
1533
1534        ctl->op->recalc_thresholds(ctl);
1535}
1536
1537static void free_bitmap(struct btrfs_free_space_ctl *ctl,
1538                        struct btrfs_free_space *bitmap_info)
1539{
1540        unlink_free_space(ctl, bitmap_info);
1541        kfree(bitmap_info->bitmap);
1542        kmem_cache_free(btrfs_free_space_cachep, bitmap_info);
1543        ctl->total_bitmaps--;
1544        ctl->op->recalc_thresholds(ctl);
1545}
1546
1547static noinline int remove_from_bitmap(struct btrfs_free_space_ctl *ctl,
1548                              struct btrfs_free_space *bitmap_info,
1549                              u64 *offset, u64 *bytes)
1550{
1551        u64 end;
1552        u64 search_start, search_bytes;
1553        int ret;
1554
1555again:
1556        end = bitmap_info->offset + (u64)(BITS_PER_BITMAP * ctl->unit) - 1;
1557
1558        /*
1559         * We need to search for bits in this bitmap.  We could only cover some
1560         * of the extent in this bitmap thanks to how we add space, so we need
1561         * to search for as much as it as we can and clear that amount, and then
1562         * go searching for the next bit.
1563         */
1564        search_start = *offset;
1565        search_bytes = ctl->unit;
1566        search_bytes = min(search_bytes, end - search_start + 1);
1567        ret = search_bitmap(ctl, bitmap_info, &search_start, &search_bytes);
1568        if (ret < 0 || search_start != *offset)
1569                return -EINVAL;
1570
1571        /* We may have found more bits than what we need */
1572        search_bytes = min(search_bytes, *bytes);
1573
1574        /* Cannot clear past the end of the bitmap */
1575        search_bytes = min(search_bytes, end - search_start + 1);
1576
1577        bitmap_clear_bits(ctl, bitmap_info, search_start, search_bytes);
1578        *offset += search_bytes;
1579        *bytes -= search_bytes;
1580
1581        if (*bytes) {
1582                struct rb_node *next = rb_next(&bitmap_info->offset_index);
1583                if (!bitmap_info->bytes)
1584                        free_bitmap(ctl, bitmap_info);
1585
1586                /*
1587                 * no entry after this bitmap, but we still have bytes to
1588                 * remove, so something has gone wrong.
1589                 */
1590                if (!next)
1591                        return -EINVAL;
1592
1593                bitmap_info = rb_entry(next, struct btrfs_free_space,
1594                                       offset_index);
1595
1596                /*
1597                 * if the next entry isn't a bitmap we need to return to let the
1598                 * extent stuff do its work.
1599                 */
1600                if (!bitmap_info->bitmap)
1601                        return -EAGAIN;
1602
1603                /*
1604                 * Ok the next item is a bitmap, but it may not actually hold
1605                 * the information for the rest of this free space stuff, so
1606                 * look for it, and if we don't find it return so we can try
1607                 * everything over again.
1608                 */
1609                search_start = *offset;
1610                search_bytes = ctl->unit;
1611                ret = search_bitmap(ctl, bitmap_info, &search_start,
1612                                    &search_bytes);
1613                if (ret < 0 || search_start != *offset)
1614                        return -EAGAIN;
1615
1616                goto again;
1617        } else if (!bitmap_info->bytes)
1618                free_bitmap(ctl, bitmap_info);
1619
1620        return 0;
1621}
1622
1623static u64 add_bytes_to_bitmap(struct btrfs_free_space_ctl *ctl,
1624                               struct btrfs_free_space *info, u64 offset,
1625                               u64 bytes)
1626{
1627        u64 bytes_to_set = 0;
1628        u64 end;
1629
1630        end = info->offset + (u64)(BITS_PER_BITMAP * ctl->unit);
1631
1632        bytes_to_set = min(end - offset, bytes);
1633
1634        bitmap_set_bits(ctl, info, offset, bytes_to_set);
1635
1636        return bytes_to_set;
1637
1638}
1639
1640static bool use_bitmap(struct btrfs_free_space_ctl *ctl,
1641                      struct btrfs_free_space *info)
1642{
1643        struct btrfs_block_group_cache *block_group = ctl->private;
1644
1645        /*
1646         * If we are below the extents threshold then we can add this as an
1647         * extent, and don't have to deal with the bitmap
1648         */
1649        if (ctl->free_extents < ctl->extents_thresh) {
1650                /*
1651                 * If this block group has some small extents we don't want to
1652                 * use up all of our free slots in the cache with them, we want
1653                 * to reserve them to larger extents, however if we have plent
1654                 * of cache left then go ahead an dadd them, no sense in adding
1655                 * the overhead of a bitmap if we don't have to.
1656                 */
1657                if (info->bytes <= block_group->sectorsize * 4) {
1658                        if (ctl->free_extents * 2 <= ctl->extents_thresh)
1659                                return false;
1660                } else {
1661                        return false;
1662                }
1663        }
1664
1665        /*
1666         * The original block groups from mkfs can be really small, like 8
1667         * megabytes, so don't bother with a bitmap for those entries.  However
1668         * some block groups can be smaller than what a bitmap would cover but
1669         * are still large enough that they could overflow the 32k memory limit,
1670         * so allow those block groups to still be allowed to have a bitmap
1671         * entry.
1672         */
1673        if (((BITS_PER_BITMAP * ctl->unit) >> 1) > block_group->key.offset)
1674                return false;
1675
1676        return true;
1677}
1678
1679static struct btrfs_free_space_op free_space_op = {
1680        .recalc_thresholds      = recalculate_thresholds,
1681        .use_bitmap             = use_bitmap,
1682};
1683
1684static int insert_into_bitmap(struct btrfs_free_space_ctl *ctl,
1685                              struct btrfs_free_space *info)
1686{
1687        struct btrfs_free_space *bitmap_info;
1688        struct btrfs_block_group_cache *block_group = NULL;
1689        int added = 0;
1690        u64 bytes, offset, bytes_added;
1691        int ret;
1692
1693        bytes = info->bytes;
1694        offset = info->offset;
1695
1696        if (!ctl->op->use_bitmap(ctl, info))
1697                return 0;
1698
1699        if (ctl->op == &free_space_op)
1700                block_group = ctl->private;
1701again:
1702        /*
1703         * Since we link bitmaps right into the cluster we need to see if we
1704         * have a cluster here, and if so and it has our bitmap we need to add
1705         * the free space to that bitmap.
1706         */
1707        if (block_group && !list_empty(&block_group->cluster_list)) {
1708                struct btrfs_free_cluster *cluster;
1709                struct rb_node *node;
1710                struct btrfs_free_space *entry;
1711
1712                cluster = list_entry(block_group->cluster_list.next,
1713                                     struct btrfs_free_cluster,
1714                                     block_group_list);
1715                spin_lock(&cluster->lock);
1716                node = rb_first(&cluster->root);
1717                if (!node) {
1718                        spin_unlock(&cluster->lock);
1719                        goto no_cluster_bitmap;
1720                }
1721
1722                entry = rb_entry(node, struct btrfs_free_space, offset_index);
1723                if (!entry->bitmap) {
1724                        spin_unlock(&cluster->lock);
1725                        goto no_cluster_bitmap;
1726                }
1727
1728                if (entry->offset == offset_to_bitmap(ctl, offset)) {
1729                        bytes_added = add_bytes_to_bitmap(ctl, entry,
1730                                                          offset, bytes);
1731                        bytes -= bytes_added;
1732                        offset += bytes_added;
1733                }
1734                spin_unlock(&cluster->lock);
1735                if (!bytes) {
1736                        ret = 1;
1737                        goto out;
1738                }
1739        }
1740
1741no_cluster_bitmap:
1742        bitmap_info = tree_search_offset(ctl, offset_to_bitmap(ctl, offset),
1743                                         1, 0);
1744        if (!bitmap_info) {
1745                BUG_ON(added);
1746                goto new_bitmap;
1747        }
1748
1749        bytes_added = add_bytes_to_bitmap(ctl, bitmap_info, offset, bytes);
1750        bytes -= bytes_added;
1751        offset += bytes_added;
1752        added = 0;
1753
1754        if (!bytes) {
1755                ret = 1;
1756                goto out;
1757        } else
1758                goto again;
1759
1760new_bitmap:
1761        if (info && info->bitmap) {
1762                add_new_bitmap(ctl, info, offset);
1763                added = 1;
1764                info = NULL;
1765                goto again;
1766        } else {
1767                spin_unlock(&ctl->tree_lock);
1768
1769                /* no pre-allocated info, allocate a new one */
1770                if (!info) {
1771                        info = kmem_cache_zalloc(btrfs_free_space_cachep,
1772                                                 GFP_NOFS);
1773                        if (!info) {
1774                                spin_lock(&ctl->tree_lock);
1775                                ret = -ENOMEM;
1776                                goto out;
1777                        }
1778                }
1779
1780                /* allocate the bitmap */
1781                info->bitmap = kzalloc(PAGE_CACHE_SIZE, GFP_NOFS);
1782                spin_lock(&ctl->tree_lock);
1783                if (!info->bitmap) {
1784                        ret = -ENOMEM;
1785                        goto out;
1786                }
1787                goto again;
1788        }
1789
1790out:
1791        if (info) {
1792                if (info->bitmap)
1793                        kfree(info->bitmap);
1794                kmem_cache_free(btrfs_free_space_cachep, info);
1795        }
1796
1797        return ret;
1798}
1799
1800static bool try_merge_free_space(struct btrfs_free_space_ctl *ctl,
1801                          struct btrfs_free_space *info, bool update_stat)
1802{
1803        struct btrfs_free_space *left_info;
1804        struct btrfs_free_space *right_info;
1805        bool merged = false;
1806        u64 offset = info->offset;
1807        u64 bytes = info->bytes;
1808
1809        /*
1810         * first we want to see if there is free space adjacent to the range we
1811         * are adding, if there is remove that struct and add a new one to
1812         * cover the entire range
1813         */
1814        right_info = tree_search_offset(ctl, offset + bytes, 0, 0);
1815        if (right_info && rb_prev(&right_info->offset_index))
1816                left_info = rb_entry(rb_prev(&right_info->offset_index),
1817                                     struct btrfs_free_space, offset_index);
1818        else
1819                left_info = tree_search_offset(ctl, offset - 1, 0, 0);
1820
1821        if (right_info && !right_info->bitmap) {
1822                if (update_stat)
1823                        unlink_free_space(ctl, right_info);
1824                else
1825                        __unlink_free_space(ctl, right_info);
1826                info->bytes += right_info->bytes;
1827                kmem_cache_free(btrfs_free_space_cachep, right_info);
1828                merged = true;
1829        }
1830
1831        if (left_info && !left_info->bitmap &&
1832            left_info->offset + left_info->bytes == offset) {
1833                if (update_stat)
1834                        unlink_free_space(ctl, left_info);
1835                else
1836                        __unlink_free_space(ctl, left_info);
1837                info->offset = left_info->offset;
1838                info->bytes += left_info->bytes;
1839                kmem_cache_free(btrfs_free_space_cachep, left_info);
1840                merged = true;
1841        }
1842
1843        return merged;
1844}
1845
1846int __btrfs_add_free_space(struct btrfs_free_space_ctl *ctl,
1847                           u64 offset, u64 bytes)
1848{
1849        struct btrfs_free_space *info;
1850        int ret = 0;
1851
1852        info = kmem_cache_zalloc(btrfs_free_space_cachep, GFP_NOFS);
1853        if (!info)
1854                return -ENOMEM;
1855
1856        info->offset = offset;
1857        info->bytes = bytes;
1858
1859        spin_lock(&ctl->tree_lock);
1860
1861        if (try_merge_free_space(ctl, info, true))
1862                goto link;
1863
1864        /*
1865         * There was no extent directly to the left or right of this new
1866         * extent then we know we're going to have to allocate a new extent, so
1867         * before we do that see if we need to drop this into a bitmap
1868         */
1869        ret = insert_into_bitmap(ctl, info);
1870        if (ret < 0) {
1871                goto out;
1872        } else if (ret) {
1873                ret = 0;
1874                goto out;
1875        }
1876link:
1877        ret = link_free_space(ctl, info);
1878        if (ret)
1879                kmem_cache_free(btrfs_free_space_cachep, info);
1880out:
1881        spin_unlock(&ctl->tree_lock);
1882
1883        if (ret) {
1884                printk(KERN_CRIT "btrfs: unable to add free space :%d\n", ret);
1885                BUG_ON(ret == -EEXIST);
1886        }
1887
1888        return ret;
1889}
1890
1891int btrfs_remove_free_space(struct btrfs_block_group_cache *block_group,
1892                            u64 offset, u64 bytes)
1893{
1894        struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl;
1895        struct btrfs_free_space *info;
1896        int ret;
1897        bool re_search = false;
1898
1899        spin_lock(&ctl->tree_lock);
1900
1901again:
1902        ret = 0;
1903        if (!bytes)
1904                goto out_lock;
1905
1906        info = tree_search_offset(ctl, offset, 0, 0);
1907        if (!info) {
1908                /*
1909                 * oops didn't find an extent that matched the space we wanted
1910                 * to remove, look for a bitmap instead
1911                 */
1912                info = tree_search_offset(ctl, offset_to_bitmap(ctl, offset),
1913                                          1, 0);
1914                if (!info) {
1915                        /*
1916                         * If we found a partial bit of our free space in a
1917                         * bitmap but then couldn't find the other part this may
1918                         * be a problem, so WARN about it.
1919                         */
1920                        WARN_ON(re_search);
1921                        goto out_lock;
1922                }
1923        }
1924
1925        re_search = false;
1926        if (!info->bitmap) {
1927                unlink_free_space(ctl, info);
1928                if (offset == info->offset) {
1929                        u64 to_free = min(bytes, info->bytes);
1930
1931                        info->bytes -= to_free;
1932                        info->offset += to_free;
1933                        if (info->bytes) {
1934                                ret = link_free_space(ctl, info);
1935                                WARN_ON(ret);
1936                        } else {
1937                                kmem_cache_free(btrfs_free_space_cachep, info);
1938                        }
1939
1940                        offset += to_free;
1941                        bytes -= to_free;
1942                        goto again;
1943                } else {
1944                        u64 old_end = info->bytes + info->offset;
1945
1946                        info->bytes = offset - info->offset;
1947                        ret = link_free_space(ctl, info);
1948                        WARN_ON(ret);
1949                        if (ret)
1950                                goto out_lock;
1951
1952                        /* Not enough bytes in this entry to satisfy us */
1953                        if (old_end < offset + bytes) {
1954                                bytes -= old_end - offset;
1955                                offset = old_end;
1956                                goto again;
1957                        } else if (old_end == offset + bytes) {
1958                                /* all done */
1959                                goto out_lock;
1960                        }
1961                        spin_unlock(&ctl->tree_lock);
1962
1963                        ret = btrfs_add_free_space(block_group, offset + bytes,
1964                                                   old_end - (offset + bytes));
1965                        WARN_ON(ret);
1966                        goto out;
1967                }
1968        }
1969
1970        ret = remove_from_bitmap(ctl, info, &offset, &bytes);
1971        if (ret == -EAGAIN) {
1972                re_search = true;
1973                goto again;
1974        }
1975out_lock:
1976        spin_unlock(&ctl->tree_lock);
1977out:
1978        return ret;
1979}
1980
1981void btrfs_dump_free_space(struct btrfs_block_group_cache *block_group,
1982                           u64 bytes)
1983{
1984        struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl;
1985        struct btrfs_free_space *info;
1986        struct rb_node *n;
1987        int count = 0;
1988
1989        for (n = rb_first(&ctl->free_space_offset); n; n = rb_next(n)) {
1990                info = rb_entry(n, struct btrfs_free_space, offset_index);
1991                if (info->bytes >= bytes && !block_group->ro)
1992                        count++;
1993                printk(KERN_CRIT "entry offset %llu, bytes %llu, bitmap %s\n",
1994                       (unsigned long long)info->offset,
1995                       (unsigned long long)info->bytes,
1996                       (info->bitmap) ? "yes" : "no");
1997        }
1998        printk(KERN_INFO "block group has cluster?: %s\n",
1999               list_empty(&block_group->cluster_list) ? "no" : "yes");
2000        printk(KERN_INFO "%d blocks of free space at or bigger than bytes is"
2001               "\n", count);
2002}
2003
2004void btrfs_init_free_space_ctl(struct btrfs_block_group_cache *block_group)
2005{
2006        struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl;
2007
2008        spin_lock_init(&ctl->tree_lock);
2009        ctl->unit = block_group->sectorsize;
2010        ctl->start = block_group->key.objectid;
2011        ctl->private = block_group;
2012        ctl->op = &free_space_op;
2013
2014        /*
2015         * we only want to have 32k of ram per block group for keeping
2016         * track of free space, and if we pass 1/2 of that we want to
2017         * start converting things over to using bitmaps
2018         */
2019        ctl->extents_thresh = ((1024 * 32) / 2) /
2020                                sizeof(struct btrfs_free_space);
2021}
2022
2023/*
2024 * for a given cluster, put all of its extents back into the free
2025 * space cache.  If the block group passed doesn't match the block group
2026 * pointed to by the cluster, someone else raced in and freed the
2027 * cluster already.  In that case, we just return without changing anything
2028 */
2029static int
2030__btrfs_return_cluster_to_free_space(
2031                             struct btrfs_block_group_cache *block_group,
2032                             struct btrfs_free_cluster *cluster)
2033{
2034        struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl;
2035        struct btrfs_free_space *entry;
2036        struct rb_node *node;
2037
2038        spin_lock(&cluster->lock);
2039        if (cluster->block_group != block_group)
2040                goto out;
2041
2042        cluster->block_group = NULL;
2043        cluster->window_start = 0;
2044        list_del_init(&cluster->block_group_list);
2045
2046        node = rb_first(&cluster->root);
2047        while (node) {
2048                bool bitmap;
2049
2050                entry = rb_entry(node, struct btrfs_free_space, offset_index);
2051                node = rb_next(&entry->offset_index);
2052                rb_erase(&entry->offset_index, &cluster->root);
2053
2054                bitmap = (entry->bitmap != NULL);
2055                if (!bitmap)
2056                        try_merge_free_space(ctl, entry, false);
2057                tree_insert_offset(&ctl->free_space_offset,
2058                                   entry->offset, &entry->offset_index, bitmap);
2059        }
2060        cluster->root = RB_ROOT;
2061
2062out:
2063        spin_unlock(&cluster->lock);
2064        btrfs_put_block_group(block_group);
2065        return 0;
2066}
2067
2068static void __btrfs_remove_free_space_cache_locked(
2069                                struct btrfs_free_space_ctl *ctl)
2070{
2071        struct btrfs_free_space *info;
2072        struct rb_node *node;
2073
2074        while ((node = rb_last(&ctl->free_space_offset)) != NULL) {
2075                info = rb_entry(node, struct btrfs_free_space, offset_index);
2076                if (!info->bitmap) {
2077                        unlink_free_space(ctl, info);
2078                        kmem_cache_free(btrfs_free_space_cachep, info);
2079                } else {
2080                        free_bitmap(ctl, info);
2081                }
2082                if (need_resched()) {
2083                        spin_unlock(&ctl->tree_lock);
2084                        cond_resched();
2085                        spin_lock(&ctl->tree_lock);
2086                }
2087        }
2088}
2089
2090void __btrfs_remove_free_space_cache(struct btrfs_free_space_ctl *ctl)
2091{
2092        spin_lock(&ctl->tree_lock);
2093        __btrfs_remove_free_space_cache_locked(ctl);
2094        spin_unlock(&ctl->tree_lock);
2095}
2096
2097void btrfs_remove_free_space_cache(struct btrfs_block_group_cache *block_group)
2098{
2099        struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl;
2100        struct btrfs_free_cluster *cluster;
2101        struct list_head *head;
2102
2103        spin_lock(&ctl->tree_lock);
2104        while ((head = block_group->cluster_list.next) !=
2105               &block_group->cluster_list) {
2106                cluster = list_entry(head, struct btrfs_free_cluster,
2107                                     block_group_list);
2108
2109                WARN_ON(cluster->block_group != block_group);
2110                __btrfs_return_cluster_to_free_space(block_group, cluster);
2111                if (need_resched()) {
2112                        spin_unlock(&ctl->tree_lock);
2113                        cond_resched();
2114                        spin_lock(&ctl->tree_lock);
2115                }
2116        }
2117        __btrfs_remove_free_space_cache_locked(ctl);
2118        spin_unlock(&ctl->tree_lock);
2119
2120}
2121
2122u64 btrfs_find_space_for_alloc(struct btrfs_block_group_cache *block_group,
2123                               u64 offset, u64 bytes, u64 empty_size)
2124{
2125        struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl;
2126        struct btrfs_free_space *entry = NULL;
2127        u64 bytes_search = bytes + empty_size;
2128        u64 ret = 0;
2129        u64 align_gap = 0;
2130        u64 align_gap_len = 0;
2131
2132        spin_lock(&ctl->tree_lock);
2133        entry = find_free_space(ctl, &offset, &bytes_search,
2134                                block_group->full_stripe_len);
2135        if (!entry)
2136                goto out;
2137
2138        ret = offset;
2139        if (entry->bitmap) {
2140                bitmap_clear_bits(ctl, entry, offset, bytes);
2141                if (!entry->bytes)
2142                        free_bitmap(ctl, entry);
2143        } else {
2144
2145                unlink_free_space(ctl, entry);
2146                align_gap_len = offset - entry->offset;
2147                align_gap = entry->offset;
2148
2149                entry->offset = offset + bytes;
2150                WARN_ON(entry->bytes < bytes + align_gap_len);
2151
2152                entry->bytes -= bytes + align_gap_len;
2153                if (!entry->bytes)
2154                        kmem_cache_free(btrfs_free_space_cachep, entry);
2155                else
2156                        link_free_space(ctl, entry);
2157        }
2158
2159out:
2160        spin_unlock(&ctl->tree_lock);
2161
2162        if (align_gap_len)
2163                __btrfs_add_free_space(ctl, align_gap, align_gap_len);
2164        return ret;
2165}
2166
2167/*
2168 * given a cluster, put all of its extents back into the free space
2169 * cache.  If a block group is passed, this function will only free
2170 * a cluster that belongs to the passed block group.
2171 *
2172 * Otherwise, it'll get a reference on the block group pointed to by the
2173 * cluster and remove the cluster from it.
2174 */
2175int btrfs_return_cluster_to_free_space(
2176                               struct btrfs_block_group_cache *block_group,
2177                               struct btrfs_free_cluster *cluster)
2178{
2179        struct btrfs_free_space_ctl *ctl;
2180        int ret;
2181
2182        /* first, get a safe pointer to the block group */
2183        spin_lock(&cluster->lock);
2184        if (!block_group) {
2185                block_group = cluster->block_group;
2186                if (!block_group) {
2187                        spin_unlock(&cluster->lock);
2188                        return 0;
2189                }
2190        } else if (cluster->block_group != block_group) {
2191                /* someone else has already freed it don't redo their work */
2192                spin_unlock(&cluster->lock);
2193                return 0;
2194        }
2195        atomic_inc(&block_group->count);
2196        spin_unlock(&cluster->lock);
2197
2198        ctl = block_group->free_space_ctl;
2199
2200        /* now return any extents the cluster had on it */
2201        spin_lock(&ctl->tree_lock);
2202        ret = __btrfs_return_cluster_to_free_space(block_group, cluster);
2203        spin_unlock(&ctl->tree_lock);
2204
2205        /* finally drop our ref */
2206        btrfs_put_block_group(block_group);
2207        return ret;
2208}
2209
2210static u64 btrfs_alloc_from_bitmap(struct btrfs_block_group_cache *block_group,
2211                                   struct btrfs_free_cluster *cluster,
2212                                   struct btrfs_free_space *entry,
2213                                   u64 bytes, u64 min_start)
2214{
2215        struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl;
2216        int err;
2217        u64 search_start = cluster->window_start;
2218        u64 search_bytes = bytes;
2219        u64 ret = 0;
2220
2221        search_start = min_start;
2222        search_bytes = bytes;
2223
2224        err = search_bitmap(ctl, entry, &search_start, &search_bytes);
2225        if (err)
2226                return 0;
2227
2228        ret = search_start;
2229        __bitmap_clear_bits(ctl, entry, ret, bytes);
2230
2231        return ret;
2232}
2233
2234/*
2235 * given a cluster, try to allocate 'bytes' from it, returns 0
2236 * if it couldn't find anything suitably large, or a logical disk offset
2237 * if things worked out
2238 */
2239u64 btrfs_alloc_from_cluster(struct btrfs_block_group_cache *block_group,
2240                             struct btrfs_free_cluster *cluster, u64 bytes,
2241                             u64 min_start)
2242{
2243        struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl;
2244        struct btrfs_free_space *entry = NULL;
2245        struct rb_node *node;
2246        u64 ret = 0;
2247
2248        spin_lock(&cluster->lock);
2249        if (bytes > cluster->max_size)
2250                goto out;
2251
2252        if (cluster->block_group != block_group)
2253                goto out;
2254
2255        node = rb_first(&cluster->root);
2256        if (!node)
2257                goto out;
2258
2259        entry = rb_entry(node, struct btrfs_free_space, offset_index);
2260        while(1) {
2261                if (entry->bytes < bytes ||
2262                    (!entry->bitmap && entry->offset < min_start)) {
2263                        node = rb_next(&entry->offset_index);
2264                        if (!node)
2265                                break;
2266                        entry = rb_entry(node, struct btrfs_free_space,
2267                                         offset_index);
2268                        continue;
2269                }
2270
2271                if (entry->bitmap) {
2272                        ret = btrfs_alloc_from_bitmap(block_group,
2273                                                      cluster, entry, bytes,
2274                                                      cluster->window_start);
2275                        if (ret == 0) {
2276                                node = rb_next(&entry->offset_index);
2277                                if (!node)
2278                                        break;
2279                                entry = rb_entry(node, struct btrfs_free_space,
2280                                                 offset_index);
2281                                continue;
2282                        }
2283                        cluster->window_start += bytes;
2284                } else {
2285                        ret = entry->offset;
2286
2287                        entry->offset += bytes;
2288                        entry->bytes -= bytes;
2289                }
2290
2291                if (entry->bytes == 0)
2292                        rb_erase(&entry->offset_index, &cluster->root);
2293                break;
2294        }
2295out:
2296        spin_unlock(&cluster->lock);
2297
2298        if (!ret)
2299                return 0;
2300
2301        spin_lock(&ctl->tree_lock);
2302
2303        ctl->free_space -= bytes;
2304        if (entry->bytes == 0) {
2305                ctl->free_extents--;
2306                if (entry->bitmap) {
2307                        kfree(entry->bitmap);
2308                        ctl->total_bitmaps--;
2309                        ctl->op->recalc_thresholds(ctl);
2310                }
2311                kmem_cache_free(btrfs_free_space_cachep, entry);
2312        }
2313
2314        spin_unlock(&ctl->tree_lock);
2315
2316        return ret;
2317}
2318
2319static int btrfs_bitmap_cluster(struct btrfs_block_group_cache *block_group,
2320                                struct btrfs_free_space *entry,
2321                                struct btrfs_free_cluster *cluster,
2322                                u64 offset, u64 bytes,
2323                                u64 cont1_bytes, u64 min_bytes)
2324{
2325        struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl;
2326        unsigned long next_zero;
2327        unsigned long i;
2328        unsigned long want_bits;
2329        unsigned long min_bits;
2330        unsigned long found_bits;
2331        unsigned long start = 0;
2332        unsigned long total_found = 0;
2333        int ret;
2334
2335        i = offset_to_bit(entry->offset, ctl->unit,
2336                          max_t(u64, offset, entry->offset));
2337        want_bits = bytes_to_bits(bytes, ctl->unit);
2338        min_bits = bytes_to_bits(min_bytes, ctl->unit);
2339
2340again:
2341        found_bits = 0;
2342        for_each_set_bit_from(i, entry->bitmap, BITS_PER_BITMAP) {
2343                next_zero = find_next_zero_bit(entry->bitmap,
2344                                               BITS_PER_BITMAP, i);
2345                if (next_zero - i >= min_bits) {
2346                        found_bits = next_zero - i;
2347                        break;
2348                }
2349                i = next_zero;
2350        }
2351
2352        if (!found_bits)
2353                return -ENOSPC;
2354
2355        if (!total_found) {
2356                start = i;
2357                cluster->max_size = 0;
2358        }
2359
2360        total_found += found_bits;
2361
2362        if (cluster->max_size < found_bits * ctl->unit)
2363                cluster->max_size = found_bits * ctl->unit;
2364
2365        if (total_found < want_bits || cluster->max_size < cont1_bytes) {
2366                i = next_zero + 1;
2367                goto again;
2368        }
2369
2370        cluster->window_start = start * ctl->unit + entry->offset;
2371        rb_erase(&entry->offset_index, &ctl->free_space_offset);
2372        ret = tree_insert_offset(&cluster->root, entry->offset,
2373                                 &entry->offset_index, 1);
2374        BUG_ON(ret); /* -EEXIST; Logic error */
2375
2376        trace_btrfs_setup_cluster(block_group, cluster,
2377                                  total_found * ctl->unit, 1);
2378        return 0;
2379}
2380
2381/*
2382 * This searches the block group for just extents to fill the cluster with.
2383 * Try to find a cluster with at least bytes total bytes, at least one
2384 * extent of cont1_bytes, and other clusters of at least min_bytes.
2385 */
2386static noinline int
2387setup_cluster_no_bitmap(struct btrfs_block_group_cache *block_group,
2388                        struct btrfs_free_cluster *cluster,
2389                        struct list_head *bitmaps, u64 offset, u64 bytes,
2390                        u64 cont1_bytes, u64 min_bytes)
2391{
2392        struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl;
2393        struct btrfs_free_space *first = NULL;
2394        struct btrfs_free_space *entry = NULL;
2395        struct btrfs_free_space *last;
2396        struct rb_node *node;
2397        u64 window_start;
2398        u64 window_free;
2399        u64 max_extent;
2400        u64 total_size = 0;
2401
2402        entry = tree_search_offset(ctl, offset, 0, 1);
2403        if (!entry)
2404                return -ENOSPC;
2405
2406        /*
2407         * We don't want bitmaps, so just move along until we find a normal
2408         * extent entry.
2409         */
2410        while (entry->bitmap || entry->bytes < min_bytes) {
2411                if (entry->bitmap && list_empty(&entry->list))
2412                        list_add_tail(&entry->list, bitmaps);
2413                node = rb_next(&entry->offset_index);
2414                if (!node)
2415                        return -ENOSPC;
2416                entry = rb_entry(node, struct btrfs_free_space, offset_index);
2417        }
2418
2419        window_start = entry->offset;
2420        window_free = entry->bytes;
2421        max_extent = entry->bytes;
2422        first = entry;
2423        last = entry;
2424
2425        for (node = rb_next(&entry->offset_index); node;
2426             node = rb_next(&entry->offset_index)) {
2427                entry = rb_entry(node, struct btrfs_free_space, offset_index);
2428
2429                if (entry->bitmap) {
2430                        if (list_empty(&entry->list))
2431                                list_add_tail(&entry->list, bitmaps);
2432                        continue;
2433                }
2434
2435                if (entry->bytes < min_bytes)
2436                        continue;
2437
2438                last = entry;
2439                window_free += entry->bytes;
2440                if (entry->bytes > max_extent)
2441                        max_extent = entry->bytes;
2442        }
2443
2444        if (window_free < bytes || max_extent < cont1_bytes)
2445                return -ENOSPC;
2446
2447        cluster->window_start = first->offset;
2448
2449        node = &first->offset_index;
2450
2451        /*
2452         * now we've found our entries, pull them out of the free space
2453         * cache and put them into the cluster rbtree
2454         */
2455        do {
2456                int ret;
2457
2458                entry = rb_entry(node, struct btrfs_free_space, offset_index);
2459                node = rb_next(&entry->offset_index);
2460                if (entry->bitmap || entry->bytes < min_bytes)
2461                        continue;
2462
2463                rb_erase(&entry->offset_index, &ctl->free_space_offset);
2464                ret = tree_insert_offset(&cluster->root, entry->offset,
2465                                         &entry->offset_index, 0);
2466                total_size += entry->bytes;
2467                BUG_ON(ret); /* -EEXIST; Logic error */
2468        } while (node && entry != last);
2469
2470        cluster->max_size = max_extent;
2471        trace_btrfs_setup_cluster(block_group, cluster, total_size, 0);
2472        return 0;
2473}
2474
2475/*
2476 * This specifically looks for bitmaps that may work in the cluster, we assume
2477 * that we have already failed to find extents that will work.
2478 */
2479static noinline int
2480setup_cluster_bitmap(struct btrfs_block_group_cache *block_group,
2481                     struct btrfs_free_cluster *cluster,
2482                     struct list_head *bitmaps, u64 offset, u64 bytes,
2483                     u64 cont1_bytes, u64 min_bytes)
2484{
2485        struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl;
2486        struct btrfs_free_space *entry;
2487        int ret = -ENOSPC;
2488        u64 bitmap_offset = offset_to_bitmap(ctl, offset);
2489
2490        if (ctl->total_bitmaps == 0)
2491                return -ENOSPC;
2492
2493        /*
2494         * The bitmap that covers offset won't be in the list unless offset
2495         * is just its start offset.
2496         */
2497        entry = list_first_entry(bitmaps, struct btrfs_free_space, list);
2498        if (entry->offset != bitmap_offset) {
2499                entry = tree_search_offset(ctl, bitmap_offset, 1, 0);
2500                if (entry && list_empty(&entry->list))
2501                        list_add(&entry->list, bitmaps);
2502        }
2503
2504        list_for_each_entry(entry, bitmaps, list) {
2505                if (entry->bytes < bytes)
2506                        continue;
2507                ret = btrfs_bitmap_cluster(block_group, entry, cluster, offset,
2508                                           bytes, cont1_bytes, min_bytes);
2509                if (!ret)
2510                        return 0;
2511        }
2512
2513        /*
2514         * The bitmaps list has all the bitmaps that record free space
2515         * starting after offset, so no more search is required.
2516         */
2517        return -ENOSPC;
2518}
2519
2520/*
2521 * here we try to find a cluster of blocks in a block group.  The goal
2522 * is to find at least bytes+empty_size.
2523 * We might not find them all in one contiguous area.
2524 *
2525 * returns zero and sets up cluster if things worked out, otherwise
2526 * it returns -enospc
2527 */
2528int btrfs_find_space_cluster(struct btrfs_trans_handle *trans,
2529                             struct btrfs_root *root,
2530                             struct btrfs_block_group_cache *block_group,
2531                             struct btrfs_free_cluster *cluster,
2532                             u64 offset, u64 bytes, u64 empty_size)
2533{
2534        struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl;
2535        struct btrfs_free_space *entry, *tmp;
2536        LIST_HEAD(bitmaps);
2537        u64 min_bytes;
2538        u64 cont1_bytes;
2539        int ret;
2540
2541        /*
2542         * Choose the minimum extent size we'll require for this
2543         * cluster.  For SSD_SPREAD, don't allow any fragmentation.
2544         * For metadata, allow allocates with smaller extents.  For
2545         * data, keep it dense.
2546         */
2547        if (btrfs_test_opt(root, SSD_SPREAD)) {
2548                cont1_bytes = min_bytes = bytes + empty_size;
2549        } else if (block_group->flags & BTRFS_BLOCK_GROUP_METADATA) {
2550                cont1_bytes = bytes;
2551                min_bytes = block_group->sectorsize;
2552        } else {
2553                cont1_bytes = max(bytes, (bytes + empty_size) >> 2);
2554                min_bytes = block_group->sectorsize;
2555        }
2556
2557        spin_lock(&ctl->tree_lock);
2558
2559        /*
2560         * If we know we don't have enough space to make a cluster don't even
2561         * bother doing all the work to try and find one.
2562         */
2563        if (ctl->free_space < bytes) {
2564                spin_unlock(&ctl->tree_lock);
2565                return -ENOSPC;
2566        }
2567
2568        spin_lock(&cluster->lock);
2569
2570        /* someone already found a cluster, hooray */
2571        if (cluster->block_group) {
2572                ret = 0;
2573                goto out;
2574        }
2575
2576        trace_btrfs_find_cluster(block_group, offset, bytes, empty_size,
2577                                 min_bytes);
2578
2579        INIT_LIST_HEAD(&bitmaps);
2580        ret = setup_cluster_no_bitmap(block_group, cluster, &bitmaps, offset,
2581                                      bytes + empty_size,
2582                                      cont1_bytes, min_bytes);
2583        if (ret)
2584                ret = setup_cluster_bitmap(block_group, cluster, &bitmaps,
2585                                           offset, bytes + empty_size,
2586                                           cont1_bytes, min_bytes);
2587
2588        /* Clear our temporary list */
2589        list_for_each_entry_safe(entry, tmp, &bitmaps, list)
2590                list_del_init(&entry->list);
2591
2592        if (!ret) {
2593                atomic_inc(&block_group->count);
2594                list_add_tail(&cluster->block_group_list,
2595                              &block_group->cluster_list);
2596                cluster->block_group = block_group;
2597        } else {
2598                trace_btrfs_failed_cluster_setup(block_group);
2599        }
2600out:
2601        spin_unlock(&cluster->lock);
2602        spin_unlock(&ctl->tree_lock);
2603
2604        return ret;
2605}
2606
2607/*
2608 * simple code to zero out a cluster
2609 */
2610void btrfs_init_free_cluster(struct btrfs_free_cluster *cluster)
2611{
2612        spin_lock_init(&cluster->lock);
2613        spin_lock_init(&cluster->refill_lock);
2614        cluster->root = RB_ROOT;
2615        cluster->max_size = 0;
2616        INIT_LIST_HEAD(&cluster->block_group_list);
2617        cluster->block_group = NULL;
2618}
2619
2620static int do_trimming(struct btrfs_block_group_cache *block_group,
2621                       u64 *total_trimmed, u64 start, u64 bytes,
2622                       u64 reserved_start, u64 reserved_bytes)
2623{
2624        struct btrfs_space_info *space_info = block_group->space_info;
2625        struct btrfs_fs_info *fs_info = block_group->fs_info;
2626        int ret;
2627        int update = 0;
2628        u64 trimmed = 0;
2629
2630        spin_lock(&space_info->lock);
2631        spin_lock(&block_group->lock);
2632        if (!block_group->ro) {
2633                block_group->reserved += reserved_bytes;
2634                space_info->bytes_reserved += reserved_bytes;
2635                update = 1;
2636        }
2637        spin_unlock(&block_group->lock);
2638        spin_unlock(&space_info->lock);
2639
2640        ret = btrfs_error_discard_extent(fs_info->extent_root,
2641                                         start, bytes, &trimmed);
2642        if (!ret)
2643                *total_trimmed += trimmed;
2644
2645        btrfs_add_free_space(block_group, reserved_start, reserved_bytes);
2646
2647        if (update) {
2648                spin_lock(&space_info->lock);
2649                spin_lock(&block_group->lock);
2650                if (block_group->ro)
2651                        space_info->bytes_readonly += reserved_bytes;
2652                block_group->reserved -= reserved_bytes;
2653                space_info->bytes_reserved -= reserved_bytes;
2654                spin_unlock(&space_info->lock);
2655                spin_unlock(&block_group->lock);
2656        }
2657
2658        return ret;
2659}
2660
2661static int trim_no_bitmap(struct btrfs_block_group_cache *block_group,
2662                          u64 *total_trimmed, u64 start, u64 end, u64 minlen)
2663{
2664        struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl;
2665        struct btrfs_free_space *entry;
2666        struct rb_node *node;
2667        int ret = 0;
2668        u64 extent_start;
2669        u64 extent_bytes;
2670        u64 bytes;
2671
2672        while (start < end) {
2673                spin_lock(&ctl->tree_lock);
2674
2675                if (ctl->free_space < minlen) {
2676                        spin_unlock(&ctl->tree_lock);
2677                        break;
2678                }
2679
2680                entry = tree_search_offset(ctl, start, 0, 1);
2681                if (!entry) {
2682                        spin_unlock(&ctl->tree_lock);
2683                        break;
2684                }
2685
2686                /* skip bitmaps */
2687                while (entry->bitmap) {
2688                        node = rb_next(&entry->offset_index);
2689                        if (!node) {
2690                                spin_unlock(&ctl->tree_lock);
2691                                goto out;
2692                        }
2693                        entry = rb_entry(node, struct btrfs_free_space,
2694                                         offset_index);
2695                }
2696
2697                if (entry->offset >= end) {
2698                        spin_unlock(&ctl->tree_lock);
2699                        break;
2700                }
2701
2702                extent_start = entry->offset;
2703                extent_bytes = entry->bytes;
2704                start = max(start, extent_start);
2705                bytes = min(extent_start + extent_bytes, end) - start;
2706                if (bytes < minlen) {
2707                        spin_unlock(&ctl->tree_lock);
2708                        goto next;
2709                }
2710
2711                unlink_free_space(ctl, entry);
2712                kmem_cache_free(btrfs_free_space_cachep, entry);
2713
2714                spin_unlock(&ctl->tree_lock);
2715
2716                ret = do_trimming(block_group, total_trimmed, start, bytes,
2717                                  extent_start, extent_bytes);
2718                if (ret)
2719                        break;
2720next:
2721                start += bytes;
2722
2723                if (fatal_signal_pending(current)) {
2724                        ret = -ERESTARTSYS;
2725                        break;
2726                }
2727
2728                cond_resched();
2729        }
2730out:
2731        return ret;
2732}
2733
2734static int trim_bitmaps(struct btrfs_block_group_cache *block_group,
2735                        u64 *total_trimmed, u64 start, u64 end, u64 minlen)
2736{
2737        struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl;
2738        struct btrfs_free_space *entry;
2739        int ret = 0;
2740        int ret2;
2741        u64 bytes;
2742        u64 offset = offset_to_bitmap(ctl, start);
2743
2744        while (offset < end) {
2745                bool next_bitmap = false;
2746
2747                spin_lock(&ctl->tree_lock);
2748
2749                if (ctl->free_space < minlen) {
2750                        spin_unlock(&ctl->tree_lock);
2751                        break;
2752                }
2753
2754                entry = tree_search_offset(ctl, offset, 1, 0);
2755                if (!entry) {
2756                        spin_unlock(&ctl->tree_lock);
2757                        next_bitmap = true;
2758                        goto next;
2759                }
2760
2761                bytes = minlen;
2762                ret2 = search_bitmap(ctl, entry, &start, &bytes);
2763                if (ret2 || start >= end) {
2764                        spin_unlock(&ctl->tree_lock);
2765                        next_bitmap = true;
2766                        goto next;
2767                }
2768
2769                bytes = min(bytes, end - start);
2770                if (bytes < minlen) {
2771                        spin_unlock(&ctl->tree_lock);
2772                        goto next;
2773                }
2774
2775                bitmap_clear_bits(ctl, entry, start, bytes);
2776                if (entry->bytes == 0)
2777                        free_bitmap(ctl, entry);
2778
2779                spin_unlock(&ctl->tree_lock);
2780
2781                ret = do_trimming(block_group, total_trimmed, start, bytes,
2782                                  start, bytes);
2783                if (ret)
2784                        break;
2785next:
2786                if (next_bitmap) {
2787                        offset += BITS_PER_BITMAP * ctl->unit;
2788                } else {
2789                        start += bytes;
2790                        if (start >= offset + BITS_PER_BITMAP * ctl->unit)
2791                                offset += BITS_PER_BITMAP * ctl->unit;
2792                }
2793
2794                if (fatal_signal_pending(current)) {
2795                        ret = -ERESTARTSYS;
2796                        break;
2797                }
2798
2799                cond_resched();
2800        }
2801
2802        return ret;
2803}
2804
2805int btrfs_trim_block_group(struct btrfs_block_group_cache *block_group,
2806                           u64 *trimmed, u64 start, u64 end, u64 minlen)
2807{
2808        int ret;
2809
2810        *trimmed = 0;
2811
2812        ret = trim_no_bitmap(block_group, trimmed, start, end, minlen);
2813        if (ret)
2814                return ret;
2815
2816        ret = trim_bitmaps(block_group, trimmed, start, end, minlen);
2817
2818        return ret;
2819}
2820
2821/*
2822 * Find the left-most item in the cache tree, and then return the
2823 * smallest inode number in the item.
2824 *
2825 * Note: the returned inode number may not be the smallest one in
2826 * the tree, if the left-most item is a bitmap.
2827 */
2828u64 btrfs_find_ino_for_alloc(struct btrfs_root *fs_root)
2829{
2830        struct btrfs_free_space_ctl *ctl = fs_root->free_ino_ctl;
2831        struct btrfs_free_space *entry = NULL;
2832        u64 ino = 0;
2833
2834        spin_lock(&ctl->tree_lock);
2835
2836        if (RB_EMPTY_ROOT(&ctl->free_space_offset))
2837                goto out;
2838
2839        entry = rb_entry(rb_first(&ctl->free_space_offset),
2840                         struct btrfs_free_space, offset_index);
2841
2842        if (!entry->bitmap) {
2843                ino = entry->offset;
2844
2845                unlink_free_space(ctl, entry);
2846                entry->offset++;
2847                entry->bytes--;
2848                if (!entry->bytes)
2849                        kmem_cache_free(btrfs_free_space_cachep, entry);
2850                else
2851                        link_free_space(ctl, entry);
2852        } else {
2853                u64 offset = 0;
2854                u64 count = 1;
2855                int ret;
2856
2857                ret = search_bitmap(ctl, entry, &offset, &count);
2858                /* Logic error; Should be empty if it can't find anything */
2859                BUG_ON(ret);
2860
2861                ino = offset;
2862                bitmap_clear_bits(ctl, entry, offset, 1);
2863                if (entry->bytes == 0)
2864                        free_bitmap(ctl, entry);
2865        }
2866out:
2867        spin_unlock(&ctl->tree_lock);
2868
2869        return ino;
2870}
2871
2872struct inode *lookup_free_ino_inode(struct btrfs_root *root,
2873                                    struct btrfs_path *path)
2874{
2875        struct inode *inode = NULL;
2876
2877        spin_lock(&root->cache_lock);
2878        if (root->cache_inode)
2879                inode = igrab(root->cache_inode);
2880        spin_unlock(&root->cache_lock);
2881        if (inode)
2882                return inode;
2883
2884        inode = __lookup_free_space_inode(root, path, 0);
2885        if (IS_ERR(inode))
2886                return inode;
2887
2888        spin_lock(&root->cache_lock);
2889        if (!btrfs_fs_closing(root->fs_info))
2890                root->cache_inode = igrab(inode);
2891        spin_unlock(&root->cache_lock);
2892
2893        return inode;
2894}
2895
2896int create_free_ino_inode(struct btrfs_root *root,
2897                          struct btrfs_trans_handle *trans,
2898                          struct btrfs_path *path)
2899{
2900        return __create_free_space_inode(root, trans, path,
2901                                         BTRFS_FREE_INO_OBJECTID, 0);
2902}
2903
2904int load_free_ino_cache(struct btrfs_fs_info *fs_info, struct btrfs_root *root)
2905{
2906        struct btrfs_free_space_ctl *ctl = root->free_ino_ctl;
2907        struct btrfs_path *path;
2908        struct inode *inode;
2909        int ret = 0;
2910        u64 root_gen = btrfs_root_generation(&root->root_item);
2911
2912        if (!btrfs_test_opt(root, INODE_MAP_CACHE))
2913                return 0;
2914
2915        /*
2916         * If we're unmounting then just return, since this does a search on the
2917         * normal root and not the commit root and we could deadlock.
2918         */
2919        if (btrfs_fs_closing(fs_info))
2920                return 0;
2921
2922        path = btrfs_alloc_path();
2923        if (!path)
2924                return 0;
2925
2926        inode = lookup_free_ino_inode(root, path);
2927        if (IS_ERR(inode))
2928                goto out;
2929
2930        if (root_gen != BTRFS_I(inode)->generation)
2931                goto out_put;
2932
2933        ret = __load_free_space_cache(root, inode, ctl, path, 0);
2934
2935        if (ret < 0)
2936                btrfs_err(fs_info,
2937                        "failed to load free ino cache for root %llu",
2938                        root->root_key.objectid);
2939out_put:
2940        iput(inode);
2941out:
2942        btrfs_free_path(path);
2943        return ret;
2944}
2945
2946int btrfs_write_out_ino_cache(struct btrfs_root *root,
2947                              struct btrfs_trans_handle *trans,
2948                              struct btrfs_path *path)
2949{
2950        struct btrfs_free_space_ctl *ctl = root->free_ino_ctl;
2951        struct inode *inode;
2952        int ret;
2953
2954        if (!btrfs_test_opt(root, INODE_MAP_CACHE))
2955                return 0;
2956
2957        inode = lookup_free_ino_inode(root, path);
2958        if (IS_ERR(inode))
2959                return 0;
2960
2961        ret = __btrfs_write_out_cache(root, inode, ctl, NULL, trans, path, 0);
2962        if (ret) {
2963                btrfs_delalloc_release_metadata(inode, inode->i_size);
2964#ifdef DEBUG
2965                btrfs_err(root->fs_info,
2966                        "failed to write free ino cache for root %llu",
2967                        root->root_key.objectid);
2968#endif
2969        }
2970
2971        iput(inode);
2972        return ret;
2973}
2974
2975#ifdef CONFIG_BTRFS_FS_RUN_SANITY_TESTS
2976static struct btrfs_block_group_cache *init_test_block_group(void)
2977{
2978        struct btrfs_block_group_cache *cache;
2979
2980        cache = kzalloc(sizeof(*cache), GFP_NOFS);
2981        if (!cache)
2982                return NULL;
2983        cache->free_space_ctl = kzalloc(sizeof(*cache->free_space_ctl),
2984                                        GFP_NOFS);
2985        if (!cache->free_space_ctl) {
2986                kfree(cache);
2987                return NULL;
2988        }
2989
2990        cache->key.objectid = 0;
2991        cache->key.offset = 1024 * 1024 * 1024;
2992        cache->key.type = BTRFS_BLOCK_GROUP_ITEM_KEY;
2993        cache->sectorsize = 4096;
2994
2995        spin_lock_init(&cache->lock);
2996        INIT_LIST_HEAD(&cache->list);
2997        INIT_LIST_HEAD(&cache->cluster_list);
2998        INIT_LIST_HEAD(&cache->new_bg_list);
2999
3000        btrfs_init_free_space_ctl(cache);
3001
3002        return cache;
3003}
3004
3005/*
3006 * Checks to see if the given range is in the free space cache.  This is really
3007 * just used to check the absence of space, so if there is free space in the
3008 * range at all we will return 1.
3009 */
3010static int check_exists(struct btrfs_block_group_cache *cache, u64 offset,
3011                        u64 bytes)
3012{
3013        struct btrfs_free_space_ctl *ctl = cache->free_space_ctl;
3014        struct btrfs_free_space *info;
3015        int ret = 0;
3016
3017        spin_lock(&ctl->tree_lock);
3018        info = tree_search_offset(ctl, offset, 0, 0);
3019        if (!info) {
3020                info = tree_search_offset(ctl, offset_to_bitmap(ctl, offset),
3021                                          1, 0);
3022                if (!info)
3023                        goto out;
3024        }
3025
3026have_info:
3027        if (info->bitmap) {
3028                u64 bit_off, bit_bytes;
3029                struct rb_node *n;
3030                struct btrfs_free_space *tmp;
3031
3032                bit_off = offset;
3033                bit_bytes = ctl->unit;
3034                ret = search_bitmap(ctl, info, &bit_off, &bit_bytes);
3035                if (!ret) {
3036                        if (bit_off == offset) {
3037                                ret = 1;
3038                                goto out;
3039                        } else if (bit_off > offset &&
3040                                   offset + bytes > bit_off) {
3041                                ret = 1;
3042                                goto out;
3043                        }
3044                }
3045
3046                n = rb_prev(&info->offset_index);
3047                while (n) {
3048                        tmp = rb_entry(n, struct btrfs_free_space,
3049                                       offset_index);
3050                        if (tmp->offset + tmp->bytes < offset)
3051                                break;
3052                        if (offset + bytes < tmp->offset) {
3053                                n = rb_prev(&info->offset_index);
3054                                continue;
3055                        }
3056                        info = tmp;
3057                        goto have_info;
3058                }
3059
3060                n = rb_next(&info->offset_index);
3061                while (n) {
3062                        tmp = rb_entry(n, struct btrfs_free_space,
3063                                       offset_index);
3064                        if (offset + bytes < tmp->offset)
3065                                break;
3066                        if (tmp->offset + tmp->bytes < offset) {
3067                                n = rb_next(&info->offset_index);
3068                                continue;
3069                        }
3070                        info = tmp;
3071                        goto have_info;
3072                }
3073
3074                goto out;
3075        }
3076
3077        if (info->offset == offset) {
3078                ret = 1;
3079                goto out;
3080        }
3081
3082        if (offset > info->offset && offset < info->offset + info->bytes)
3083                ret = 1;
3084out:
3085        spin_unlock(&ctl->tree_lock);
3086        return ret;
3087}
3088
3089/*
3090 * Use this if you need to make a bitmap or extent entry specifically, it
3091 * doesn't do any of the merging that add_free_space does, this acts a lot like
3092 * how the free space cache loading stuff works, so you can get really weird
3093 * configurations.
3094 */
3095static int add_free_space_entry(struct btrfs_block_group_cache *cache,
3096                                u64 offset, u64 bytes, bool bitmap)
3097{
3098        struct btrfs_free_space_ctl *ctl = cache->free_space_ctl;
3099        struct btrfs_free_space *info = NULL, *bitmap_info;
3100        void *map = NULL;
3101        u64 bytes_added;
3102        int ret;
3103
3104again:
3105        if (!info) {
3106                info = kmem_cache_zalloc(btrfs_free_space_cachep, GFP_NOFS);
3107                if (!info)
3108                        return -ENOMEM;
3109        }
3110
3111        if (!bitmap) {
3112                spin_lock(&ctl->tree_lock);
3113                info->offset = offset;
3114                info->bytes = bytes;
3115                ret = link_free_space(ctl, info);
3116                spin_unlock(&ctl->tree_lock);
3117                if (ret)
3118                        kmem_cache_free(btrfs_free_space_cachep, info);
3119                return ret;
3120        }
3121
3122        if (!map) {
3123                map = kzalloc(PAGE_CACHE_SIZE, GFP_NOFS);
3124                if (!map) {
3125                        kmem_cache_free(btrfs_free_space_cachep, info);
3126                        return -ENOMEM;
3127                }
3128        }
3129
3130        spin_lock(&ctl->tree_lock);
3131        bitmap_info = tree_search_offset(ctl, offset_to_bitmap(ctl, offset),
3132                                         1, 0);
3133        if (!bitmap_info) {
3134                info->bitmap = map;
3135                map = NULL;
3136                add_new_bitmap(ctl, info, offset);
3137                bitmap_info = info;
3138        }
3139
3140        bytes_added = add_bytes_to_bitmap(ctl, bitmap_info, offset, bytes);
3141        bytes -= bytes_added;
3142        offset += bytes_added;
3143        spin_unlock(&ctl->tree_lock);
3144
3145        if (bytes)
3146                goto again;
3147
3148        if (map)
3149                kfree(map);
3150        return 0;
3151}
3152
3153#define test_msg(fmt, ...) printk(KERN_INFO "btrfs: selftest: " fmt, ##__VA_ARGS__)
3154
3155/*
3156 * This test just does basic sanity checking, making sure we can add an exten
3157 * entry and remove space from either end and the middle, and make sure we can
3158 * remove space that covers adjacent extent entries.
3159 */
3160static int test_extents(struct btrfs_block_group_cache *cache)
3161{
3162        int ret = 0;
3163
3164        test_msg("Running extent only tests\n");
3165
3166        /* First just make sure we can remove an entire entry */
3167        ret = btrfs_add_free_space(cache, 0, 4 * 1024 * 1024);
3168        if (ret) {
3169                test_msg("Error adding initial extents %d\n", ret);
3170                return ret;
3171        }
3172
3173        ret = btrfs_remove_free_space(cache, 0, 4 * 1024 * 1024);
3174        if (ret) {
3175                test_msg("Error removing extent %d\n", ret);
3176                return ret;
3177        }
3178
3179        if (check_exists(cache, 0, 4 * 1024 * 1024)) {
3180                test_msg("Full remove left some lingering space\n");
3181                return -1;
3182        }
3183
3184        /* Ok edge and middle cases now */
3185        ret = btrfs_add_free_space(cache, 0, 4 * 1024 * 1024);
3186        if (ret) {
3187                test_msg("Error adding half extent %d\n", ret);
3188                return ret;
3189        }
3190
3191        ret = btrfs_remove_free_space(cache, 3 * 1024 * 1024, 1 * 1024 * 1024);
3192        if (ret) {
3193                test_msg("Error removing tail end %d\n", ret);
3194                return ret;
3195        }
3196
3197        ret = btrfs_remove_free_space(cache, 0, 1 * 1024 * 1024);
3198        if (ret) {
3199                test_msg("Error removing front end %d\n", ret);
3200                return ret;
3201        }
3202
3203        ret = btrfs_remove_free_space(cache, 2 * 1024 * 1024, 4096);
3204        if (ret) {
3205                test_msg("Error removing middle piece %d\n", ret);
3206                return ret;
3207        }
3208
3209        if (check_exists(cache, 0, 1 * 1024 * 1024)) {
3210                test_msg("Still have space at the front\n");
3211                return -1;
3212        }
3213
3214        if (check_exists(cache, 2 * 1024 * 1024, 4096)) {
3215                test_msg("Still have space in the middle\n");
3216                return -1;
3217        }
3218
3219        if (check_exists(cache, 3 * 1024 * 1024, 1 * 1024 * 1024)) {
3220                test_msg("Still have space at the end\n");
3221                return -1;
3222        }
3223
3224        /* Cleanup */
3225        __btrfs_remove_free_space_cache(cache->free_space_ctl);
3226
3227        return 0;
3228}
3229
3230static int test_bitmaps(struct btrfs_block_group_cache *cache)
3231{
3232        u64 next_bitmap_offset;
3233        int ret;
3234
3235        test_msg("Running bitmap only tests\n");
3236
3237        ret = add_free_space_entry(cache, 0, 4 * 1024 * 1024, 1);
3238        if (ret) {
3239                test_msg("Couldn't create a bitmap entry %d\n", ret);
3240                return ret;
3241        }
3242
3243        ret = btrfs_remove_free_space(cache, 0, 4 * 1024 * 1024);
3244        if (ret) {
3245                test_msg("Error removing bitmap full range %d\n", ret);
3246                return ret;
3247        }
3248
3249        if (check_exists(cache, 0, 4 * 1024 * 1024)) {
3250                test_msg("Left some space in bitmap\n");
3251                return -1;
3252        }
3253
3254        ret = add_free_space_entry(cache, 0, 4 * 1024 * 1024, 1);
3255        if (ret) {
3256                test_msg("Couldn't add to our bitmap entry %d\n", ret);
3257                return ret;
3258        }
3259
3260        ret = btrfs_remove_free_space(cache, 1 * 1024 * 1024, 2 * 1024 * 1024);
3261        if (ret) {
3262                test_msg("Couldn't remove middle chunk %d\n", ret);
3263                return ret;
3264        }
3265
3266        /*
3267         * The first bitmap we have starts at offset 0 so the next one is just
3268         * at the end of the first bitmap.
3269         */
3270        next_bitmap_offset = (u64)(BITS_PER_BITMAP * 4096);
3271
3272        /* Test a bit straddling two bitmaps */
3273        ret = add_free_space_entry(cache, next_bitmap_offset -
3274                                   (2 * 1024 * 1024), 4 * 1024 * 1024, 1);
3275        if (ret) {
3276                test_msg("Couldn't add space that straddles two bitmaps %d\n",
3277                                ret);
3278                return ret;
3279        }
3280
3281        ret = btrfs_remove_free_space(cache, next_bitmap_offset -
3282                                      (1 * 1024 * 1024), 2 * 1024 * 1024);
3283        if (ret) {
3284                test_msg("Couldn't remove overlapping space %d\n", ret);
3285                return ret;
3286        }
3287
3288        if (check_exists(cache, next_bitmap_offset - (1 * 1024 * 1024),
3289                         2 * 1024 * 1024)) {
3290                test_msg("Left some space when removing overlapping\n");
3291                return -1;
3292        }
3293
3294        __btrfs_remove_free_space_cache(cache->free_space_ctl);
3295
3296        return 0;
3297}
3298
3299/* This is the high grade jackassery */
3300static int test_bitmaps_and_extents(struct btrfs_block_group_cache *cache)
3301{
3302        u64 bitmap_offset = (u64)(BITS_PER_BITMAP * 4096);
3303        int ret;
3304
3305        test_msg("Running bitmap and extent tests\n");
3306
3307        /*
3308         * First let's do something simple, an extent at the same offset as the
3309         * bitmap, but the free space completely in the extent and then
3310         * completely in the bitmap.
3311         */
3312        ret = add_free_space_entry(cache, 4 * 1024 * 1024, 1 * 1024 * 1024, 1);
3313        if (ret) {
3314                test_msg("Couldn't create bitmap entry %d\n", ret);
3315                return ret;
3316        }
3317
3318        ret = add_free_space_entry(cache, 0, 1 * 1024 * 1024, 0);
3319        if (ret) {
3320                test_msg("Couldn't add extent entry %d\n", ret);
3321                return ret;
3322        }
3323
3324        ret = btrfs_remove_free_space(cache, 0, 1 * 1024 * 1024);
3325        if (ret) {
3326                test_msg("Couldn't remove extent entry %d\n", ret);
3327                return ret;
3328        }
3329
3330        if (check_exists(cache, 0, 1 * 1024 * 1024)) {
3331                test_msg("Left remnants after our remove\n");
3332                return -1;
3333        }
3334
3335        /* Now to add back the extent entry and remove from the bitmap */
3336        ret = add_free_space_entry(cache, 0, 1 * 1024 * 1024, 0);
3337        if (ret) {
3338                test_msg("Couldn't re-add extent entry %d\n", ret);
3339                return ret;
3340        }
3341
3342        ret = btrfs_remove_free_space(cache, 4 * 1024 * 1024, 1 * 1024 * 1024);
3343        if (ret) {
3344                test_msg("Couldn't remove from bitmap %d\n", ret);
3345                return ret;
3346        }
3347
3348        if (check_exists(cache, 4 * 1024 * 1024, 1 * 1024 * 1024)) {
3349                test_msg("Left remnants in the bitmap\n");
3350                return -1;
3351        }
3352
3353        /*
3354         * Ok so a little more evil, extent entry and bitmap at the same offset,
3355         * removing an overlapping chunk.
3356         */
3357        ret = add_free_space_entry(cache, 1 * 1024 * 1024, 4 * 1024 * 1024, 1);
3358        if (ret) {
3359                test_msg("Couldn't add to a bitmap %d\n", ret);
3360                return ret;
3361        }
3362
3363        ret = btrfs_remove_free_space(cache, 512 * 1024, 3 * 1024 * 1024);
3364        if (ret) {
3365                test_msg("Couldn't remove overlapping space %d\n", ret);
3366                return ret;
3367        }
3368
3369        if (check_exists(cache, 512 * 1024, 3 * 1024 * 1024)) {
3370                test_msg("Left over peices after removing overlapping\n");
3371                return -1;
3372        }
3373
3374        __btrfs_remove_free_space_cache(cache->free_space_ctl);
3375
3376        /* Now with the extent entry offset into the bitmap */
3377        ret = add_free_space_entry(cache, 4 * 1024 * 1024, 4 * 1024 * 1024, 1);
3378        if (ret) {
3379                test_msg("Couldn't add space to the bitmap %d\n", ret);
3380                return ret;
3381        }
3382
3383        ret = add_free_space_entry(cache, 2 * 1024 * 1024, 2 * 1024 * 1024, 0);
3384        if (ret) {
3385                test_msg("Couldn't add extent to the cache %d\n", ret);
3386                return ret;
3387        }
3388
3389        ret = btrfs_remove_free_space(cache, 3 * 1024 * 1024, 4 * 1024 * 1024);
3390        if (ret) {
3391                test_msg("Problem removing overlapping space %d\n", ret);
3392                return ret;
3393        }
3394
3395        if (check_exists(cache, 3 * 1024 * 1024, 4 * 1024 * 1024)) {
3396                test_msg("Left something behind when removing space");
3397                return -1;
3398        }
3399
3400        /*
3401         * This has blown up in the past, the extent entry starts before the
3402         * bitmap entry, but we're trying to remove an offset that falls
3403         * completely within the bitmap range and is in both the extent entry
3404         * and the bitmap entry, looks like this
3405         *
3406         *   [ extent ]
3407         *      [ bitmap ]
3408         *        [ del ]
3409         */
3410        __btrfs_remove_free_space_cache(cache->free_space_ctl);
3411        ret = add_free_space_entry(cache, bitmap_offset + 4 * 1024 * 1024,
3412                                   4 * 1024 * 1024, 1);
3413        if (ret) {
3414                test_msg("Couldn't add bitmap %d\n", ret);
3415                return ret;
3416        }
3417
3418        ret = add_free_space_entry(cache, bitmap_offset - 1 * 1024 * 1024,
3419                                   5 * 1024 * 1024, 0);
3420        if (ret) {
3421                test_msg("Couldn't add extent entry %d\n", ret);
3422                return ret;
3423        }
3424
3425        ret = btrfs_remove_free_space(cache, bitmap_offset + 1 * 1024 * 1024,
3426                                      5 * 1024 * 1024);
3427        if (ret) {
3428                test_msg("Failed to free our space %d\n", ret);
3429                return ret;
3430        }
3431
3432        if (check_exists(cache, bitmap_offset + 1 * 1024 * 1024,
3433                         5 * 1024 * 1024)) {
3434                test_msg("Left stuff over\n");
3435                return -1;
3436        }
3437
3438        __btrfs_remove_free_space_cache(cache->free_space_ctl);
3439
3440        /*
3441         * This blew up before, we have part of the free space in a bitmap and
3442         * then the entirety of the rest of the space in an extent.  This used
3443         * to return -EAGAIN back from btrfs_remove_extent, make sure this
3444         * doesn't happen.
3445         */
3446        ret = add_free_space_entry(cache, 1 * 1024 * 1024, 2 * 1024 * 1024, 1);
3447        if (ret) {
3448                test_msg("Couldn't add bitmap entry %d\n", ret);
3449                return ret;
3450        }
3451
3452        ret = add_free_space_entry(cache, 3 * 1024 * 1024, 1 * 1024 * 1024, 0);
3453        if (ret) {
3454                test_msg("Couldn't add extent entry %d\n", ret);
3455                return ret;
3456        }
3457
3458        ret = btrfs_remove_free_space(cache, 1 * 1024 * 1024, 3 * 1024 * 1024);
3459        if (ret) {
3460                test_msg("Error removing bitmap and extent overlapping %d\n", ret);
3461                return ret;
3462        }
3463
3464        __btrfs_remove_free_space_cache(cache->free_space_ctl);
3465        return 0;
3466}
3467
3468void btrfs_test_free_space_cache(void)
3469{
3470        struct btrfs_block_group_cache *cache;
3471
3472        test_msg("Running btrfs free space cache tests\n");
3473
3474        cache = init_test_block_group();
3475        if (!cache) {
3476                test_msg("Couldn't run the tests\n");
3477                return;
3478        }
3479
3480        if (test_extents(cache))
3481                goto out;
3482        if (test_bitmaps(cache))
3483                goto out;
3484        if (test_bitmaps_and_extents(cache))
3485                goto out;
3486out:
3487        __btrfs_remove_free_space_cache(cache->free_space_ctl);
3488        kfree(cache->free_space_ctl);
3489        kfree(cache);
3490        test_msg("Free space cache tests finished\n");
3491}
3492#undef test_msg
3493#else /* !CONFIG_BTRFS_FS_RUN_SANITY_TESTS */
3494void btrfs_test_free_space_cache(void) {}
3495#endif /* !CONFIG_BTRFS_FS_RUN_SANITY_TESTS */
3496