Merge commit 'ed30f24e8d07d30aa3e69d1f508f4d7bd2e8ea14' of git://git.linaro.org/landi...
[firefly-linux-kernel-4.4.55.git] / fs / btrfs / free-space-cache.c
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
34 static int link_free_space(struct btrfs_free_space_ctl *ctl,
35                            struct btrfs_free_space *info);
36 static void unlink_free_space(struct btrfs_free_space_ctl *ctl,
37                               struct btrfs_free_space *info);
38
39 static 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
86 struct 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
123 static 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
184 int 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
200 int 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 0;
217 }
218
219 int 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
249 static 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
268 struct 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
279 static 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
295 static void io_ctl_free(struct io_ctl *io_ctl)
296 {
297         kfree(io_ctl->pages);
298 }
299
300 static 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
309 static 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
320 static 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
335 static 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
369 static 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
392 static 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
421 static 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
445 static 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
478 static 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
508 static 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
531 static 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
548 static 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
575 static 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  */
599 static 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
604 again:
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                 }
622 next:
623                 prev = e;
624         }
625         spin_unlock(&ctl->tree_lock);
626 }
627
628 static 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;
773 out:
774         io_ctl_free(&io_ctl);
775         return ret;
776 free_cache:
777         io_ctl_drop_pages(&io_ctl);
778         __btrfs_remove_free_space_cache(ctl);
779         goto out;
780 }
781
782 int 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         }
842 out:
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  */
871 static 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;
1056 out:
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
1065 out_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
1077 int 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
1117 static 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
1125 static inline unsigned long bytes_to_bits(u64 bytes, u32 unit)
1126 {
1127         return (unsigned long)(div_u64(bytes, unit));
1128 }
1129
1130 static 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
1145 static 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  */
1203 static struct btrfs_free_space *
1204 tree_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
1319 static 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
1327 static 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
1334 static 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
1350 static 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
1398 static 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
1413 static 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
1421 static 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
1437 static 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
1468 static struct btrfs_free_space *
1469 find_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
1525 static 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
1537 static 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
1547 static 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
1555 again:
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
1623 static 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
1640 static 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
1679 static struct btrfs_free_space_op free_space_op = {
1680         .recalc_thresholds      = recalculate_thresholds,
1681         .use_bitmap             = use_bitmap,
1682 };
1683
1684 static 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;
1701 again:
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
1741 no_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
1760 new_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
1790 out:
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
1800 static 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
1846 int __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         }
1876 link:
1877         ret = link_free_space(ctl, info);
1878         if (ret)
1879                 kmem_cache_free(btrfs_free_space_cachep, info);
1880 out:
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
1891 int 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
1901 again:
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         }
1975 out_lock:
1976         spin_unlock(&ctl->tree_lock);
1977 out:
1978         return ret;
1979 }
1980
1981 void 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
2004 void 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  */
2029 static 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
2062 out:
2063         spin_unlock(&cluster->lock);
2064         btrfs_put_block_group(block_group);
2065         return 0;
2066 }
2067
2068 static 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
2090 void __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
2097 void 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
2122 u64 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
2159 out:
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  */
2175 int 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
2210 static 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  */
2239 u64 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         }
2295 out:
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
2319 static 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
2340 again:
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  */
2386 static noinline int
2387 setup_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  */
2479 static noinline int
2480 setup_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  */
2528 int 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         }
2600 out:
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  */
2610 void 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
2620 static 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
2661 static 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;
2720 next:
2721                 start += bytes;
2722
2723                 if (fatal_signal_pending(current)) {
2724                         ret = -ERESTARTSYS;
2725                         break;
2726                 }
2727
2728                 cond_resched();
2729         }
2730 out:
2731         return ret;
2732 }
2733
2734 static 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;
2785 next:
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
2805 int 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  */
2828 u64 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         }
2866 out:
2867         spin_unlock(&ctl->tree_lock);
2868
2869         return ino;
2870 }
2871
2872 struct 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
2896 int 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
2904 int 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);
2939 out_put:
2940         iput(inode);
2941 out:
2942         btrfs_free_path(path);
2943         return ret;
2944 }
2945
2946 int 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
2976 static 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  */
3010 static 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
3026 have_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;
3084 out:
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  */
3095 static 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
3104 again:
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 /*
3154  * This test just does basic sanity checking, making sure we can add an exten
3155  * entry and remove space from either end and the middle, and make sure we can
3156  * remove space that covers adjacent extent entries.
3157  */
3158 static int test_extents(struct btrfs_block_group_cache *cache)
3159 {
3160         int ret = 0;
3161
3162         printk(KERN_ERR "Running extent only tests\n");
3163
3164         /* First just make sure we can remove an entire entry */
3165         ret = btrfs_add_free_space(cache, 0, 4 * 1024 * 1024);
3166         if (ret) {
3167                 printk(KERN_ERR "Error adding initial extents %d\n", ret);
3168                 return ret;
3169         }
3170
3171         ret = btrfs_remove_free_space(cache, 0, 4 * 1024 * 1024);
3172         if (ret) {
3173                 printk(KERN_ERR "Error removing extent %d\n", ret);
3174                 return ret;
3175         }
3176
3177         if (check_exists(cache, 0, 4 * 1024 * 1024)) {
3178                 printk(KERN_ERR "Full remove left some lingering space\n");
3179                 return -1;
3180         }
3181
3182         /* Ok edge and middle cases now */
3183         ret = btrfs_add_free_space(cache, 0, 4 * 1024 * 1024);
3184         if (ret) {
3185                 printk(KERN_ERR "Error adding half extent %d\n", ret);
3186                 return ret;
3187         }
3188
3189         ret = btrfs_remove_free_space(cache, 3 * 1024 * 1024, 1 * 1024 * 1024);
3190         if (ret) {
3191                 printk(KERN_ERR "Error removing tail end %d\n", ret);
3192                 return ret;
3193         }
3194
3195         ret = btrfs_remove_free_space(cache, 0, 1 * 1024 * 1024);
3196         if (ret) {
3197                 printk(KERN_ERR "Error removing front end %d\n", ret);
3198                 return ret;
3199         }
3200
3201         ret = btrfs_remove_free_space(cache, 2 * 1024 * 1024, 4096);
3202         if (ret) {
3203                 printk(KERN_ERR "Error removing middle peice %d\n", ret);
3204                 return ret;
3205         }
3206
3207         if (check_exists(cache, 0, 1 * 1024 * 1024)) {
3208                 printk(KERN_ERR "Still have space at the front\n");
3209                 return -1;
3210         }
3211
3212         if (check_exists(cache, 2 * 1024 * 1024, 4096)) {
3213                 printk(KERN_ERR "Still have space in the middle\n");
3214                 return -1;
3215         }
3216
3217         if (check_exists(cache, 3 * 1024 * 1024, 1 * 1024 * 1024)) {
3218                 printk(KERN_ERR "Still have space at the end\n");
3219                 return -1;
3220         }
3221
3222         /* Cleanup */
3223         __btrfs_remove_free_space_cache(cache->free_space_ctl);
3224
3225         return 0;
3226 }
3227
3228 static int test_bitmaps(struct btrfs_block_group_cache *cache)
3229 {
3230         u64 next_bitmap_offset;
3231         int ret;
3232
3233         printk(KERN_ERR "Running bitmap only tests\n");
3234
3235         ret = add_free_space_entry(cache, 0, 4 * 1024 * 1024, 1);
3236         if (ret) {
3237                 printk(KERN_ERR "Couldn't create a bitmap entry %d\n", ret);
3238                 return ret;
3239         }
3240
3241         ret = btrfs_remove_free_space(cache, 0, 4 * 1024 * 1024);
3242         if (ret) {
3243                 printk(KERN_ERR "Error removing bitmap full range %d\n", ret);
3244                 return ret;
3245         }
3246
3247         if (check_exists(cache, 0, 4 * 1024 * 1024)) {
3248                 printk(KERN_ERR "Left some space in bitmap\n");
3249                 return -1;
3250         }
3251
3252         ret = add_free_space_entry(cache, 0, 4 * 1024 * 1024, 1);
3253         if (ret) {
3254                 printk(KERN_ERR "Couldn't add to our bitmap entry %d\n", ret);
3255                 return ret;
3256         }
3257
3258         ret = btrfs_remove_free_space(cache, 1 * 1024 * 1024, 2 * 1024 * 1024);
3259         if (ret) {
3260                 printk(KERN_ERR "Couldn't remove middle chunk %d\n", ret);
3261                 return ret;
3262         }
3263
3264         /*
3265          * The first bitmap we have starts at offset 0 so the next one is just
3266          * at the end of the first bitmap.
3267          */
3268         next_bitmap_offset = (u64)(BITS_PER_BITMAP * 4096);
3269
3270         /* Test a bit straddling two bitmaps */
3271         ret = add_free_space_entry(cache, next_bitmap_offset -
3272                                    (2 * 1024 * 1024), 4 * 1024 * 1024, 1);
3273         if (ret) {
3274                 printk(KERN_ERR "Couldn't add space that straddles two bitmaps"
3275                        " %d\n", ret);
3276                 return ret;
3277         }
3278
3279         ret = btrfs_remove_free_space(cache, next_bitmap_offset -
3280                                       (1 * 1024 * 1024), 2 * 1024 * 1024);
3281         if (ret) {
3282                 printk(KERN_ERR "Couldn't remove overlapping space %d\n", ret);
3283                 return ret;
3284         }
3285
3286         if (check_exists(cache, next_bitmap_offset - (1 * 1024 * 1024),
3287                          2 * 1024 * 1024)) {
3288                 printk(KERN_ERR "Left some space when removing overlapping\n");
3289                 return -1;
3290         }
3291
3292         __btrfs_remove_free_space_cache(cache->free_space_ctl);
3293
3294         return 0;
3295 }
3296
3297 /* This is the high grade jackassery */
3298 static int test_bitmaps_and_extents(struct btrfs_block_group_cache *cache)
3299 {
3300         u64 bitmap_offset = (u64)(BITS_PER_BITMAP * 4096);
3301         int ret;
3302
3303         printk(KERN_ERR "Running bitmap and extent tests\n");
3304
3305         /*
3306          * First let's do something simple, an extent at the same offset as the
3307          * bitmap, but the free space completely in the extent and then
3308          * completely in the bitmap.
3309          */
3310         ret = add_free_space_entry(cache, 4 * 1024 * 1024, 1 * 1024 * 1024, 1);
3311         if (ret) {
3312                 printk(KERN_ERR "Couldn't create bitmap entry %d\n", ret);
3313                 return ret;
3314         }
3315
3316         ret = add_free_space_entry(cache, 0, 1 * 1024 * 1024, 0);
3317         if (ret) {
3318                 printk(KERN_ERR "Couldn't add extent entry %d\n", ret);
3319                 return ret;
3320         }
3321
3322         ret = btrfs_remove_free_space(cache, 0, 1 * 1024 * 1024);
3323         if (ret) {
3324                 printk(KERN_ERR "Couldn't remove extent entry %d\n", ret);
3325                 return ret;
3326         }
3327
3328         if (check_exists(cache, 0, 1 * 1024 * 1024)) {
3329                 printk(KERN_ERR "Left remnants after our remove\n");
3330                 return -1;
3331         }
3332
3333         /* Now to add back the extent entry and remove from the bitmap */
3334         ret = add_free_space_entry(cache, 0, 1 * 1024 * 1024, 0);
3335         if (ret) {
3336                 printk(KERN_ERR "Couldn't re-add extent entry %d\n", ret);
3337                 return ret;
3338         }
3339
3340         ret = btrfs_remove_free_space(cache, 4 * 1024 * 1024, 1 * 1024 * 1024);
3341         if (ret) {
3342                 printk(KERN_ERR "Couldn't remove from bitmap %d\n", ret);
3343                 return ret;
3344         }
3345
3346         if (check_exists(cache, 4 * 1024 * 1024, 1 * 1024 * 1024)) {
3347                 printk(KERN_ERR "Left remnants in the bitmap\n");
3348                 return -1;
3349         }
3350
3351         /*
3352          * Ok so a little more evil, extent entry and bitmap at the same offset,
3353          * removing an overlapping chunk.
3354          */
3355         ret = add_free_space_entry(cache, 1 * 1024 * 1024, 4 * 1024 * 1024, 1);
3356         if (ret) {
3357                 printk(KERN_ERR "Couldn't add to a bitmap %d\n", ret);
3358                 return ret;
3359         }
3360
3361         ret = btrfs_remove_free_space(cache, 512 * 1024, 3 * 1024 * 1024);
3362         if (ret) {
3363                 printk(KERN_ERR "Couldn't remove overlapping space %d\n", ret);
3364                 return ret;
3365         }
3366
3367         if (check_exists(cache, 512 * 1024, 3 * 1024 * 1024)) {
3368                 printk(KERN_ERR "Left over peices after removing "
3369                        "overlapping\n");
3370                 return -1;
3371         }
3372
3373         __btrfs_remove_free_space_cache(cache->free_space_ctl);
3374
3375         /* Now with the extent entry offset into the bitmap */
3376         ret = add_free_space_entry(cache, 4 * 1024 * 1024, 4 * 1024 * 1024, 1);
3377         if (ret) {
3378                 printk(KERN_ERR "Couldn't add space to the bitmap %d\n", ret);
3379                 return ret;
3380         }
3381
3382         ret = add_free_space_entry(cache, 2 * 1024 * 1024, 2 * 1024 * 1024, 0);
3383         if (ret) {
3384                 printk(KERN_ERR "Couldn't add extent to the cache %d\n", ret);
3385                 return ret;
3386         }
3387
3388         ret = btrfs_remove_free_space(cache, 3 * 1024 * 1024, 4 * 1024 * 1024);
3389         if (ret) {
3390                 printk(KERN_ERR "Problem removing overlapping space %d\n", ret);
3391                 return ret;
3392         }
3393
3394         if (check_exists(cache, 3 * 1024 * 1024, 4 * 1024 * 1024)) {
3395                 printk(KERN_ERR "Left something behind when removing space");
3396                 return -1;
3397         }
3398
3399         /*
3400          * This has blown up in the past, the extent entry starts before the
3401          * bitmap entry, but we're trying to remove an offset that falls
3402          * completely within the bitmap range and is in both the extent entry
3403          * and the bitmap entry, looks like this
3404          *
3405          *   [ extent ]
3406          *      [ bitmap ]
3407          *        [ del ]
3408          */
3409         __btrfs_remove_free_space_cache(cache->free_space_ctl);
3410         ret = add_free_space_entry(cache, bitmap_offset + 4 * 1024 * 1024,
3411                                    4 * 1024 * 1024, 1);
3412         if (ret) {
3413                 printk(KERN_ERR "Couldn't add bitmap %d\n", ret);
3414                 return ret;
3415         }
3416
3417         ret = add_free_space_entry(cache, bitmap_offset - 1 * 1024 * 1024,
3418                                    5 * 1024 * 1024, 0);
3419         if (ret) {
3420                 printk(KERN_ERR "Couldn't add extent entry %d\n", ret);
3421                 return ret;
3422         }
3423
3424         ret = btrfs_remove_free_space(cache, bitmap_offset + 1 * 1024 * 1024,
3425                                       5 * 1024 * 1024);
3426         if (ret) {
3427                 printk(KERN_ERR "Failed to free our space %d\n", ret);
3428                 return ret;
3429         }
3430
3431         if (check_exists(cache, bitmap_offset + 1 * 1024 * 1024,
3432                          5 * 1024 * 1024)) {
3433                 printk(KERN_ERR "Left stuff over\n");
3434                 return -1;
3435         }
3436
3437         __btrfs_remove_free_space_cache(cache->free_space_ctl);
3438
3439         /*
3440          * This blew up before, we have part of the free space in a bitmap and
3441          * then the entirety of the rest of the space in an extent.  This used
3442          * to return -EAGAIN back from btrfs_remove_extent, make sure this
3443          * doesn't happen.
3444          */
3445         ret = add_free_space_entry(cache, 1 * 1024 * 1024, 2 * 1024 * 1024, 1);
3446         if (ret) {
3447                 printk(KERN_ERR "Couldn't add bitmap entry %d\n", ret);
3448                 return ret;
3449         }
3450
3451         ret = add_free_space_entry(cache, 3 * 1024 * 1024, 1 * 1024 * 1024, 0);
3452         if (ret) {
3453                 printk(KERN_ERR "Couldn't add extent entry %d\n", ret);
3454                 return ret;
3455         }
3456
3457         ret = btrfs_remove_free_space(cache, 1 * 1024 * 1024, 3 * 1024 * 1024);
3458         if (ret) {
3459                 printk(KERN_ERR "Error removing bitmap and extent "
3460                        "overlapping %d\n", ret);
3461                 return ret;
3462         }
3463
3464         __btrfs_remove_free_space_cache(cache->free_space_ctl);
3465         return 0;
3466 }
3467
3468 void btrfs_test_free_space_cache(void)
3469 {
3470         struct btrfs_block_group_cache *cache;
3471
3472         printk(KERN_ERR "Running btrfs free space cache tests\n");
3473
3474         cache = init_test_block_group();
3475         if (!cache) {
3476                 printk(KERN_ERR "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;
3486 out:
3487         __btrfs_remove_free_space_cache(cache->free_space_ctl);
3488         kfree(cache->free_space_ctl);
3489         kfree(cache);
3490         printk(KERN_ERR "Free space cache tests finished\n");
3491 }
3492 #endif /* CONFIG_BTRFS_FS_RUN_SANITY_TESTS */