1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18#include <linux/sched.h>
19#include <linux/pagemap.h>
20#include <linux/writeback.h>
21#include <linux/blkdev.h>
22#include <linux/sort.h>
23#include <linux/rcupdate.h>
24#include <linux/kthread.h>
25#include <linux/slab.h>
26#include <linux/ratelimit.h>
27#include "compat.h"
28#include "hash.h"
29#include "ctree.h"
30#include "disk-io.h"
31#include "print-tree.h"
32#include "transaction.h"
33#include "volumes.h"
34#include "locking.h"
35#include "free-space-cache.h"
36
37#undef SCRAMBLE_DELAYED_REFS
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53enum {
54 CHUNK_ALLOC_NO_FORCE = 0,
55 CHUNK_ALLOC_LIMITED = 1,
56 CHUNK_ALLOC_FORCE = 2,
57};
58
59
60
61
62
63
64
65
66
67
68enum {
69 RESERVE_FREE = 0,
70 RESERVE_ALLOC = 1,
71 RESERVE_ALLOC_NO_ACCOUNT = 2,
72};
73
74static int update_block_group(struct btrfs_trans_handle *trans,
75 struct btrfs_root *root,
76 u64 bytenr, u64 num_bytes, int alloc);
77static int __btrfs_free_extent(struct btrfs_trans_handle *trans,
78 struct btrfs_root *root,
79 u64 bytenr, u64 num_bytes, u64 parent,
80 u64 root_objectid, u64 owner_objectid,
81 u64 owner_offset, int refs_to_drop,
82 struct btrfs_delayed_extent_op *extra_op);
83static void __run_delayed_extent_op(struct btrfs_delayed_extent_op *extent_op,
84 struct extent_buffer *leaf,
85 struct btrfs_extent_item *ei);
86static int alloc_reserved_file_extent(struct btrfs_trans_handle *trans,
87 struct btrfs_root *root,
88 u64 parent, u64 root_objectid,
89 u64 flags, u64 owner, u64 offset,
90 struct btrfs_key *ins, int ref_mod);
91static int alloc_reserved_tree_block(struct btrfs_trans_handle *trans,
92 struct btrfs_root *root,
93 u64 parent, u64 root_objectid,
94 u64 flags, struct btrfs_disk_key *key,
95 int level, struct btrfs_key *ins);
96static int do_chunk_alloc(struct btrfs_trans_handle *trans,
97 struct btrfs_root *extent_root, u64 alloc_bytes,
98 u64 flags, int force);
99static int find_next_key(struct btrfs_path *path, int level,
100 struct btrfs_key *key);
101static void dump_space_info(struct btrfs_space_info *info, u64 bytes,
102 int dump_block_groups);
103static int btrfs_update_reserved_bytes(struct btrfs_block_group_cache *cache,
104 u64 num_bytes, int reserve);
105
106static noinline int
107block_group_cache_done(struct btrfs_block_group_cache *cache)
108{
109 smp_mb();
110 return cache->cached == BTRFS_CACHE_FINISHED;
111}
112
113static int block_group_bits(struct btrfs_block_group_cache *cache, u64 bits)
114{
115 return (cache->flags & bits) == bits;
116}
117
118static void btrfs_get_block_group(struct btrfs_block_group_cache *cache)
119{
120 atomic_inc(&cache->count);
121}
122
123void btrfs_put_block_group(struct btrfs_block_group_cache *cache)
124{
125 if (atomic_dec_and_test(&cache->count)) {
126 WARN_ON(cache->pinned > 0);
127 WARN_ON(cache->reserved > 0);
128 kfree(cache->free_space_ctl);
129 kfree(cache);
130 }
131}
132
133
134
135
136
137static int btrfs_add_block_group_cache(struct btrfs_fs_info *info,
138 struct btrfs_block_group_cache *block_group)
139{
140 struct rb_node **p;
141 struct rb_node *parent = NULL;
142 struct btrfs_block_group_cache *cache;
143
144 spin_lock(&info->block_group_cache_lock);
145 p = &info->block_group_cache_tree.rb_node;
146
147 while (*p) {
148 parent = *p;
149 cache = rb_entry(parent, struct btrfs_block_group_cache,
150 cache_node);
151 if (block_group->key.objectid < cache->key.objectid) {
152 p = &(*p)->rb_left;
153 } else if (block_group->key.objectid > cache->key.objectid) {
154 p = &(*p)->rb_right;
155 } else {
156 spin_unlock(&info->block_group_cache_lock);
157 return -EEXIST;
158 }
159 }
160
161 rb_link_node(&block_group->cache_node, parent, p);
162 rb_insert_color(&block_group->cache_node,
163 &info->block_group_cache_tree);
164 spin_unlock(&info->block_group_cache_lock);
165
166 return 0;
167}
168
169
170
171
172
173static struct btrfs_block_group_cache *
174block_group_cache_tree_search(struct btrfs_fs_info *info, u64 bytenr,
175 int contains)
176{
177 struct btrfs_block_group_cache *cache, *ret = NULL;
178 struct rb_node *n;
179 u64 end, start;
180
181 spin_lock(&info->block_group_cache_lock);
182 n = info->block_group_cache_tree.rb_node;
183
184 while (n) {
185 cache = rb_entry(n, struct btrfs_block_group_cache,
186 cache_node);
187 end = cache->key.objectid + cache->key.offset - 1;
188 start = cache->key.objectid;
189
190 if (bytenr < start) {
191 if (!contains && (!ret || start < ret->key.objectid))
192 ret = cache;
193 n = n->rb_left;
194 } else if (bytenr > start) {
195 if (contains && bytenr <= end) {
196 ret = cache;
197 break;
198 }
199 n = n->rb_right;
200 } else {
201 ret = cache;
202 break;
203 }
204 }
205 if (ret)
206 btrfs_get_block_group(ret);
207 spin_unlock(&info->block_group_cache_lock);
208
209 return ret;
210}
211
212static int add_excluded_extent(struct btrfs_root *root,
213 u64 start, u64 num_bytes)
214{
215 u64 end = start + num_bytes - 1;
216 set_extent_bits(&root->fs_info->freed_extents[0],
217 start, end, EXTENT_UPTODATE, GFP_NOFS);
218 set_extent_bits(&root->fs_info->freed_extents[1],
219 start, end, EXTENT_UPTODATE, GFP_NOFS);
220 return 0;
221}
222
223static void free_excluded_extents(struct btrfs_root *root,
224 struct btrfs_block_group_cache *cache)
225{
226 u64 start, end;
227
228 start = cache->key.objectid;
229 end = start + cache->key.offset - 1;
230
231 clear_extent_bits(&root->fs_info->freed_extents[0],
232 start, end, EXTENT_UPTODATE, GFP_NOFS);
233 clear_extent_bits(&root->fs_info->freed_extents[1],
234 start, end, EXTENT_UPTODATE, GFP_NOFS);
235}
236
237static int exclude_super_stripes(struct btrfs_root *root,
238 struct btrfs_block_group_cache *cache)
239{
240 u64 bytenr;
241 u64 *logical;
242 int stripe_len;
243 int i, nr, ret;
244
245 if (cache->key.objectid < BTRFS_SUPER_INFO_OFFSET) {
246 stripe_len = BTRFS_SUPER_INFO_OFFSET - cache->key.objectid;
247 cache->bytes_super += stripe_len;
248 ret = add_excluded_extent(root, cache->key.objectid,
249 stripe_len);
250 BUG_ON(ret);
251 }
252
253 for (i = 0; i < BTRFS_SUPER_MIRROR_MAX; i++) {
254 bytenr = btrfs_sb_offset(i);
255 ret = btrfs_rmap_block(&root->fs_info->mapping_tree,
256 cache->key.objectid, bytenr,
257 0, &logical, &nr, &stripe_len);
258 BUG_ON(ret);
259
260 while (nr--) {
261 cache->bytes_super += stripe_len;
262 ret = add_excluded_extent(root, logical[nr],
263 stripe_len);
264 BUG_ON(ret);
265 }
266
267 kfree(logical);
268 }
269 return 0;
270}
271
272static struct btrfs_caching_control *
273get_caching_control(struct btrfs_block_group_cache *cache)
274{
275 struct btrfs_caching_control *ctl;
276
277 spin_lock(&cache->lock);
278 if (cache->cached != BTRFS_CACHE_STARTED) {
279 spin_unlock(&cache->lock);
280 return NULL;
281 }
282
283
284 if (!cache->caching_ctl) {
285 spin_unlock(&cache->lock);
286 return NULL;
287 }
288
289 ctl = cache->caching_ctl;
290 atomic_inc(&ctl->count);
291 spin_unlock(&cache->lock);
292 return ctl;
293}
294
295static void put_caching_control(struct btrfs_caching_control *ctl)
296{
297 if (atomic_dec_and_test(&ctl->count))
298 kfree(ctl);
299}
300
301
302
303
304
305
306static u64 add_new_free_space(struct btrfs_block_group_cache *block_group,
307 struct btrfs_fs_info *info, u64 start, u64 end)
308{
309 u64 extent_start, extent_end, size, total_added = 0;
310 int ret;
311
312 while (start < end) {
313 ret = find_first_extent_bit(info->pinned_extents, start,
314 &extent_start, &extent_end,
315 EXTENT_DIRTY | EXTENT_UPTODATE);
316 if (ret)
317 break;
318
319 if (extent_start <= start) {
320 start = extent_end + 1;
321 } else if (extent_start > start && extent_start < end) {
322 size = extent_start - start;
323 total_added += size;
324 ret = btrfs_add_free_space(block_group, start,
325 size);
326 BUG_ON(ret);
327 start = extent_end + 1;
328 } else {
329 break;
330 }
331 }
332
333 if (start < end) {
334 size = end - start;
335 total_added += size;
336 ret = btrfs_add_free_space(block_group, start, size);
337 BUG_ON(ret);
338 }
339
340 return total_added;
341}
342
343static noinline void caching_thread(struct btrfs_work *work)
344{
345 struct btrfs_block_group_cache *block_group;
346 struct btrfs_fs_info *fs_info;
347 struct btrfs_caching_control *caching_ctl;
348 struct btrfs_root *extent_root;
349 struct btrfs_path *path;
350 struct extent_buffer *leaf;
351 struct btrfs_key key;
352 u64 total_found = 0;
353 u64 last = 0;
354 u32 nritems;
355 int ret = 0;
356
357 caching_ctl = container_of(work, struct btrfs_caching_control, work);
358 block_group = caching_ctl->block_group;
359 fs_info = block_group->fs_info;
360 extent_root = fs_info->extent_root;
361
362 path = btrfs_alloc_path();
363 if (!path)
364 goto out;
365
366 last = max_t(u64, block_group->key.objectid, BTRFS_SUPER_INFO_OFFSET);
367
368
369
370
371
372
373
374 path->skip_locking = 1;
375 path->search_commit_root = 1;
376 path->reada = 1;
377
378 key.objectid = last;
379 key.offset = 0;
380 key.type = BTRFS_EXTENT_ITEM_KEY;
381again:
382 mutex_lock(&caching_ctl->mutex);
383
384 down_read(&fs_info->extent_commit_sem);
385
386 ret = btrfs_search_slot(NULL, extent_root, &key, path, 0, 0);
387 if (ret < 0)
388 goto err;
389
390 leaf = path->nodes[0];
391 nritems = btrfs_header_nritems(leaf);
392
393 while (1) {
394 if (btrfs_fs_closing(fs_info) > 1) {
395 last = (u64)-1;
396 break;
397 }
398
399 if (path->slots[0] < nritems) {
400 btrfs_item_key_to_cpu(leaf, &key, path->slots[0]);
401 } else {
402 ret = find_next_key(path, 0, &key);
403 if (ret)
404 break;
405
406 if (need_resched() ||
407 btrfs_next_leaf(extent_root, path)) {
408 caching_ctl->progress = last;
409 btrfs_release_path(path);
410 up_read(&fs_info->extent_commit_sem);
411 mutex_unlock(&caching_ctl->mutex);
412 cond_resched();
413 goto again;
414 }
415 leaf = path->nodes[0];
416 nritems = btrfs_header_nritems(leaf);
417 continue;
418 }
419
420 if (key.objectid < block_group->key.objectid) {
421 path->slots[0]++;
422 continue;
423 }
424
425 if (key.objectid >= block_group->key.objectid +
426 block_group->key.offset)
427 break;
428
429 if (key.type == BTRFS_EXTENT_ITEM_KEY) {
430 total_found += add_new_free_space(block_group,
431 fs_info, last,
432 key.objectid);
433 last = key.objectid + key.offset;
434
435 if (total_found > (1024 * 1024 * 2)) {
436 total_found = 0;
437 wake_up(&caching_ctl->wait);
438 }
439 }
440 path->slots[0]++;
441 }
442 ret = 0;
443
444 total_found += add_new_free_space(block_group, fs_info, last,
445 block_group->key.objectid +
446 block_group->key.offset);
447 caching_ctl->progress = (u64)-1;
448
449 spin_lock(&block_group->lock);
450 block_group->caching_ctl = NULL;
451 block_group->cached = BTRFS_CACHE_FINISHED;
452 spin_unlock(&block_group->lock);
453
454err:
455 btrfs_free_path(path);
456 up_read(&fs_info->extent_commit_sem);
457
458 free_excluded_extents(extent_root, block_group);
459
460 mutex_unlock(&caching_ctl->mutex);
461out:
462 wake_up(&caching_ctl->wait);
463
464 put_caching_control(caching_ctl);
465 btrfs_put_block_group(block_group);
466}
467
468static int cache_block_group(struct btrfs_block_group_cache *cache,
469 struct btrfs_trans_handle *trans,
470 struct btrfs_root *root,
471 int load_cache_only)
472{
473 DEFINE_WAIT(wait);
474 struct btrfs_fs_info *fs_info = cache->fs_info;
475 struct btrfs_caching_control *caching_ctl;
476 int ret = 0;
477
478 caching_ctl = kzalloc(sizeof(*caching_ctl), GFP_NOFS);
479 if (!caching_ctl)
480 return -ENOMEM;
481
482 INIT_LIST_HEAD(&caching_ctl->list);
483 mutex_init(&caching_ctl->mutex);
484 init_waitqueue_head(&caching_ctl->wait);
485 caching_ctl->block_group = cache;
486 caching_ctl->progress = cache->key.objectid;
487 atomic_set(&caching_ctl->count, 1);
488 caching_ctl->work.func = caching_thread;
489
490 spin_lock(&cache->lock);
491
492
493
494
495
496
497
498
499
500
501
502
503 while (cache->cached == BTRFS_CACHE_FAST) {
504 struct btrfs_caching_control *ctl;
505
506 ctl = cache->caching_ctl;
507 atomic_inc(&ctl->count);
508 prepare_to_wait(&ctl->wait, &wait, TASK_UNINTERRUPTIBLE);
509 spin_unlock(&cache->lock);
510
511 schedule();
512
513 finish_wait(&ctl->wait, &wait);
514 put_caching_control(ctl);
515 spin_lock(&cache->lock);
516 }
517
518 if (cache->cached != BTRFS_CACHE_NO) {
519 spin_unlock(&cache->lock);
520 kfree(caching_ctl);
521 return 0;
522 }
523 WARN_ON(cache->caching_ctl);
524 cache->caching_ctl = caching_ctl;
525 cache->cached = BTRFS_CACHE_FAST;
526 spin_unlock(&cache->lock);
527
528
529
530
531
532
533
534 if (fs_info->mount_opt & BTRFS_MOUNT_SPACE_CACHE) {
535 ret = load_free_space_cache(fs_info, cache);
536
537 spin_lock(&cache->lock);
538 if (ret == 1) {
539 cache->caching_ctl = NULL;
540 cache->cached = BTRFS_CACHE_FINISHED;
541 cache->last_byte_to_unpin = (u64)-1;
542 } else {
543 if (load_cache_only) {
544 cache->caching_ctl = NULL;
545 cache->cached = BTRFS_CACHE_NO;
546 } else {
547 cache->cached = BTRFS_CACHE_STARTED;
548 }
549 }
550 spin_unlock(&cache->lock);
551 wake_up(&caching_ctl->wait);
552 if (ret == 1) {
553 put_caching_control(caching_ctl);
554 free_excluded_extents(fs_info->extent_root, cache);
555 return 0;
556 }
557 } else {
558
559
560
561
562 spin_lock(&cache->lock);
563 if (load_cache_only) {
564 cache->caching_ctl = NULL;
565 cache->cached = BTRFS_CACHE_NO;
566 } else {
567 cache->cached = BTRFS_CACHE_STARTED;
568 }
569 spin_unlock(&cache->lock);
570 wake_up(&caching_ctl->wait);
571 }
572
573 if (load_cache_only) {
574 put_caching_control(caching_ctl);
575 return 0;
576 }
577
578 down_write(&fs_info->extent_commit_sem);
579 atomic_inc(&caching_ctl->count);
580 list_add_tail(&caching_ctl->list, &fs_info->caching_block_groups);
581 up_write(&fs_info->extent_commit_sem);
582
583 btrfs_get_block_group(cache);
584
585 btrfs_queue_worker(&fs_info->caching_workers, &caching_ctl->work);
586
587 return ret;
588}
589
590
591
592
593static struct btrfs_block_group_cache *
594btrfs_lookup_first_block_group(struct btrfs_fs_info *info, u64 bytenr)
595{
596 struct btrfs_block_group_cache *cache;
597
598 cache = block_group_cache_tree_search(info, bytenr, 0);
599
600 return cache;
601}
602
603
604
605
606struct btrfs_block_group_cache *btrfs_lookup_block_group(
607 struct btrfs_fs_info *info,
608 u64 bytenr)
609{
610 struct btrfs_block_group_cache *cache;
611
612 cache = block_group_cache_tree_search(info, bytenr, 1);
613
614 return cache;
615}
616
617static struct btrfs_space_info *__find_space_info(struct btrfs_fs_info *info,
618 u64 flags)
619{
620 struct list_head *head = &info->space_info;
621 struct btrfs_space_info *found;
622
623 flags &= BTRFS_BLOCK_GROUP_TYPE_MASK;
624
625 rcu_read_lock();
626 list_for_each_entry_rcu(found, head, list) {
627 if (found->flags & flags) {
628 rcu_read_unlock();
629 return found;
630 }
631 }
632 rcu_read_unlock();
633 return NULL;
634}
635
636
637
638
639
640void btrfs_clear_space_info_full(struct btrfs_fs_info *info)
641{
642 struct list_head *head = &info->space_info;
643 struct btrfs_space_info *found;
644
645 rcu_read_lock();
646 list_for_each_entry_rcu(found, head, list)
647 found->full = 0;
648 rcu_read_unlock();
649}
650
651static u64 div_factor(u64 num, int factor)
652{
653 if (factor == 10)
654 return num;
655 num *= factor;
656 do_div(num, 10);
657 return num;
658}
659
660static u64 div_factor_fine(u64 num, int factor)
661{
662 if (factor == 100)
663 return num;
664 num *= factor;
665 do_div(num, 100);
666 return num;
667}
668
669u64 btrfs_find_block_group(struct btrfs_root *root,
670 u64 search_start, u64 search_hint, int owner)
671{
672 struct btrfs_block_group_cache *cache;
673 u64 used;
674 u64 last = max(search_hint, search_start);
675 u64 group_start = 0;
676 int full_search = 0;
677 int factor = 9;
678 int wrapped = 0;
679again:
680 while (1) {
681 cache = btrfs_lookup_first_block_group(root->fs_info, last);
682 if (!cache)
683 break;
684
685 spin_lock(&cache->lock);
686 last = cache->key.objectid + cache->key.offset;
687 used = btrfs_block_group_used(&cache->item);
688
689 if ((full_search || !cache->ro) &&
690 block_group_bits(cache, BTRFS_BLOCK_GROUP_METADATA)) {
691 if (used + cache->pinned + cache->reserved <
692 div_factor(cache->key.offset, factor)) {
693 group_start = cache->key.objectid;
694 spin_unlock(&cache->lock);
695 btrfs_put_block_group(cache);
696 goto found;
697 }
698 }
699 spin_unlock(&cache->lock);
700 btrfs_put_block_group(cache);
701 cond_resched();
702 }
703 if (!wrapped) {
704 last = search_start;
705 wrapped = 1;
706 goto again;
707 }
708 if (!full_search && factor < 10) {
709 last = search_start;
710 full_search = 1;
711 factor = 10;
712 goto again;
713 }
714found:
715 return group_start;
716}
717
718
719int btrfs_lookup_extent(struct btrfs_root *root, u64 start, u64 len)
720{
721 int ret;
722 struct btrfs_key key;
723 struct btrfs_path *path;
724
725 path = btrfs_alloc_path();
726 if (!path)
727 return -ENOMEM;
728
729 key.objectid = start;
730 key.offset = len;
731 btrfs_set_key_type(&key, BTRFS_EXTENT_ITEM_KEY);
732 ret = btrfs_search_slot(NULL, root->fs_info->extent_root, &key, path,
733 0, 0);
734 btrfs_free_path(path);
735 return ret;
736}
737
738
739
740
741
742
743
744
745
746
747int btrfs_lookup_extent_info(struct btrfs_trans_handle *trans,
748 struct btrfs_root *root, u64 bytenr,
749 u64 num_bytes, u64 *refs, u64 *flags)
750{
751 struct btrfs_delayed_ref_head *head;
752 struct btrfs_delayed_ref_root *delayed_refs;
753 struct btrfs_path *path;
754 struct btrfs_extent_item *ei;
755 struct extent_buffer *leaf;
756 struct btrfs_key key;
757 u32 item_size;
758 u64 num_refs;
759 u64 extent_flags;
760 int ret;
761
762 path = btrfs_alloc_path();
763 if (!path)
764 return -ENOMEM;
765
766 key.objectid = bytenr;
767 key.type = BTRFS_EXTENT_ITEM_KEY;
768 key.offset = num_bytes;
769 if (!trans) {
770 path->skip_locking = 1;
771 path->search_commit_root = 1;
772 }
773again:
774 ret = btrfs_search_slot(trans, root->fs_info->extent_root,
775 &key, path, 0, 0);
776 if (ret < 0)
777 goto out_free;
778
779 if (ret == 0) {
780 leaf = path->nodes[0];
781 item_size = btrfs_item_size_nr(leaf, path->slots[0]);
782 if (item_size >= sizeof(*ei)) {
783 ei = btrfs_item_ptr(leaf, path->slots[0],
784 struct btrfs_extent_item);
785 num_refs = btrfs_extent_refs(leaf, ei);
786 extent_flags = btrfs_extent_flags(leaf, ei);
787 } else {
788#ifdef BTRFS_COMPAT_EXTENT_TREE_V0
789 struct btrfs_extent_item_v0 *ei0;
790 BUG_ON(item_size != sizeof(*ei0));
791 ei0 = btrfs_item_ptr(leaf, path->slots[0],
792 struct btrfs_extent_item_v0);
793 num_refs = btrfs_extent_refs_v0(leaf, ei0);
794
795 extent_flags = BTRFS_BLOCK_FLAG_FULL_BACKREF;
796#else
797 BUG();
798#endif
799 }
800 BUG_ON(num_refs == 0);
801 } else {
802 num_refs = 0;
803 extent_flags = 0;
804 ret = 0;
805 }
806
807 if (!trans)
808 goto out;
809
810 delayed_refs = &trans->transaction->delayed_refs;
811 spin_lock(&delayed_refs->lock);
812 head = btrfs_find_delayed_ref_head(trans, bytenr);
813 if (head) {
814 if (!mutex_trylock(&head->mutex)) {
815 atomic_inc(&head->node.refs);
816 spin_unlock(&delayed_refs->lock);
817
818 btrfs_release_path(path);
819
820
821
822
823
824 mutex_lock(&head->mutex);
825 mutex_unlock(&head->mutex);
826 btrfs_put_delayed_ref(&head->node);
827 goto again;
828 }
829 if (head->extent_op && head->extent_op->update_flags)
830 extent_flags |= head->extent_op->flags_to_set;
831 else
832 BUG_ON(num_refs == 0);
833
834 num_refs += head->node.ref_mod;
835 mutex_unlock(&head->mutex);
836 }
837 spin_unlock(&delayed_refs->lock);
838out:
839 WARN_ON(num_refs == 0);
840 if (refs)
841 *refs = num_refs;
842 if (flags)
843 *flags = extent_flags;
844out_free:
845 btrfs_free_path(path);
846 return ret;
847}
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955#ifdef BTRFS_COMPAT_EXTENT_TREE_V0
956static int convert_extent_item_v0(struct btrfs_trans_handle *trans,
957 struct btrfs_root *root,
958 struct btrfs_path *path,
959 u64 owner, u32 extra_size)
960{
961 struct btrfs_extent_item *item;
962 struct btrfs_extent_item_v0 *ei0;
963 struct btrfs_extent_ref_v0 *ref0;
964 struct btrfs_tree_block_info *bi;
965 struct extent_buffer *leaf;
966 struct btrfs_key key;
967 struct btrfs_key found_key;
968 u32 new_size = sizeof(*item);
969 u64 refs;
970 int ret;
971
972 leaf = path->nodes[0];
973 BUG_ON(btrfs_item_size_nr(leaf, path->slots[0]) != sizeof(*ei0));
974
975 btrfs_item_key_to_cpu(leaf, &key, path->slots[0]);
976 ei0 = btrfs_item_ptr(leaf, path->slots[0],
977 struct btrfs_extent_item_v0);
978 refs = btrfs_extent_refs_v0(leaf, ei0);
979
980 if (owner == (u64)-1) {
981 while (1) {
982 if (path->slots[0] >= btrfs_header_nritems(leaf)) {
983 ret = btrfs_next_leaf(root, path);
984 if (ret < 0)
985 return ret;
986 BUG_ON(ret > 0);
987 leaf = path->nodes[0];
988 }
989 btrfs_item_key_to_cpu(leaf, &found_key,
990 path->slots[0]);
991 BUG_ON(key.objectid != found_key.objectid);
992 if (found_key.type != BTRFS_EXTENT_REF_V0_KEY) {
993 path->slots[0]++;
994 continue;
995 }
996 ref0 = btrfs_item_ptr(leaf, path->slots[0],
997 struct btrfs_extent_ref_v0);
998 owner = btrfs_ref_objectid_v0(leaf, ref0);
999 break;
1000 }
1001 }
1002 btrfs_release_path(path);
1003
1004 if (owner < BTRFS_FIRST_FREE_OBJECTID)
1005 new_size += sizeof(*bi);
1006
1007 new_size -= sizeof(*ei0);
1008 ret = btrfs_search_slot(trans, root, &key, path,
1009 new_size + extra_size, 1);
1010 if (ret < 0)
1011 return ret;
1012 BUG_ON(ret);
1013
1014 btrfs_extend_item(trans, root, path, new_size);
1015
1016 leaf = path->nodes[0];
1017 item = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item);
1018 btrfs_set_extent_refs(leaf, item, refs);
1019
1020 btrfs_set_extent_generation(leaf, item, 0);
1021 if (owner < BTRFS_FIRST_FREE_OBJECTID) {
1022 btrfs_set_extent_flags(leaf, item,
1023 BTRFS_EXTENT_FLAG_TREE_BLOCK |
1024 BTRFS_BLOCK_FLAG_FULL_BACKREF);
1025 bi = (struct btrfs_tree_block_info *)(item + 1);
1026
1027 memset_extent_buffer(leaf, 0, (unsigned long)bi, sizeof(*bi));
1028 btrfs_set_tree_block_level(leaf, bi, (int)owner);
1029 } else {
1030 btrfs_set_extent_flags(leaf, item, BTRFS_EXTENT_FLAG_DATA);
1031 }
1032 btrfs_mark_buffer_dirty(leaf);
1033 return 0;
1034}
1035#endif
1036
1037static u64 hash_extent_data_ref(u64 root_objectid, u64 owner, u64 offset)
1038{
1039 u32 high_crc = ~(u32)0;
1040 u32 low_crc = ~(u32)0;
1041 __le64 lenum;
1042
1043 lenum = cpu_to_le64(root_objectid);
1044 high_crc = crc32c(high_crc, &lenum, sizeof(lenum));
1045 lenum = cpu_to_le64(owner);
1046 low_crc = crc32c(low_crc, &lenum, sizeof(lenum));
1047 lenum = cpu_to_le64(offset);
1048 low_crc = crc32c(low_crc, &lenum, sizeof(lenum));
1049
1050 return ((u64)high_crc << 31) ^ (u64)low_crc;
1051}
1052
1053static u64 hash_extent_data_ref_item(struct extent_buffer *leaf,
1054 struct btrfs_extent_data_ref *ref)
1055{
1056 return hash_extent_data_ref(btrfs_extent_data_ref_root(leaf, ref),
1057 btrfs_extent_data_ref_objectid(leaf, ref),
1058 btrfs_extent_data_ref_offset(leaf, ref));
1059}
1060
1061static int match_extent_data_ref(struct extent_buffer *leaf,
1062 struct btrfs_extent_data_ref *ref,
1063 u64 root_objectid, u64 owner, u64 offset)
1064{
1065 if (btrfs_extent_data_ref_root(leaf, ref) != root_objectid ||
1066 btrfs_extent_data_ref_objectid(leaf, ref) != owner ||
1067 btrfs_extent_data_ref_offset(leaf, ref) != offset)
1068 return 0;
1069 return 1;
1070}
1071
1072static noinline int lookup_extent_data_ref(struct btrfs_trans_handle *trans,
1073 struct btrfs_root *root,
1074 struct btrfs_path *path,
1075 u64 bytenr, u64 parent,
1076 u64 root_objectid,
1077 u64 owner, u64 offset)
1078{
1079 struct btrfs_key key;
1080 struct btrfs_extent_data_ref *ref;
1081 struct extent_buffer *leaf;
1082 u32 nritems;
1083 int ret;
1084 int recow;
1085 int err = -ENOENT;
1086
1087 key.objectid = bytenr;
1088 if (parent) {
1089 key.type = BTRFS_SHARED_DATA_REF_KEY;
1090 key.offset = parent;
1091 } else {
1092 key.type = BTRFS_EXTENT_DATA_REF_KEY;
1093 key.offset = hash_extent_data_ref(root_objectid,
1094 owner, offset);
1095 }
1096again:
1097 recow = 0;
1098 ret = btrfs_search_slot(trans, root, &key, path, -1, 1);
1099 if (ret < 0) {
1100 err = ret;
1101 goto fail;
1102 }
1103
1104 if (parent) {
1105 if (!ret)
1106 return 0;
1107#ifdef BTRFS_COMPAT_EXTENT_TREE_V0
1108 key.type = BTRFS_EXTENT_REF_V0_KEY;
1109 btrfs_release_path(path);
1110 ret = btrfs_search_slot(trans, root, &key, path, -1, 1);
1111 if (ret < 0) {
1112 err = ret;
1113 goto fail;
1114 }
1115 if (!ret)
1116 return 0;
1117#endif
1118 goto fail;
1119 }
1120
1121 leaf = path->nodes[0];
1122 nritems = btrfs_header_nritems(leaf);
1123 while (1) {
1124 if (path->slots[0] >= nritems) {
1125 ret = btrfs_next_leaf(root, path);
1126 if (ret < 0)
1127 err = ret;
1128 if (ret)
1129 goto fail;
1130
1131 leaf = path->nodes[0];
1132 nritems = btrfs_header_nritems(leaf);
1133 recow = 1;
1134 }
1135
1136 btrfs_item_key_to_cpu(leaf, &key, path->slots[0]);
1137 if (key.objectid != bytenr ||
1138 key.type != BTRFS_EXTENT_DATA_REF_KEY)
1139 goto fail;
1140
1141 ref = btrfs_item_ptr(leaf, path->slots[0],
1142 struct btrfs_extent_data_ref);
1143
1144 if (match_extent_data_ref(leaf, ref, root_objectid,
1145 owner, offset)) {
1146 if (recow) {
1147 btrfs_release_path(path);
1148 goto again;
1149 }
1150 err = 0;
1151 break;
1152 }
1153 path->slots[0]++;
1154 }
1155fail:
1156 return err;
1157}
1158
1159static noinline int insert_extent_data_ref(struct btrfs_trans_handle *trans,
1160 struct btrfs_root *root,
1161 struct btrfs_path *path,
1162 u64 bytenr, u64 parent,
1163 u64 root_objectid, u64 owner,
1164 u64 offset, int refs_to_add)
1165{
1166 struct btrfs_key key;
1167 struct extent_buffer *leaf;
1168 u32 size;
1169 u32 num_refs;
1170 int ret;
1171
1172 key.objectid = bytenr;
1173 if (parent) {
1174 key.type = BTRFS_SHARED_DATA_REF_KEY;
1175 key.offset = parent;
1176 size = sizeof(struct btrfs_shared_data_ref);
1177 } else {
1178 key.type = BTRFS_EXTENT_DATA_REF_KEY;
1179 key.offset = hash_extent_data_ref(root_objectid,
1180 owner, offset);
1181 size = sizeof(struct btrfs_extent_data_ref);
1182 }
1183
1184 ret = btrfs_insert_empty_item(trans, root, path, &key, size);
1185 if (ret && ret != -EEXIST)
1186 goto fail;
1187
1188 leaf = path->nodes[0];
1189 if (parent) {
1190 struct btrfs_shared_data_ref *ref;
1191 ref = btrfs_item_ptr(leaf, path->slots[0],
1192 struct btrfs_shared_data_ref);
1193 if (ret == 0) {
1194 btrfs_set_shared_data_ref_count(leaf, ref, refs_to_add);
1195 } else {
1196 num_refs = btrfs_shared_data_ref_count(leaf, ref);
1197 num_refs += refs_to_add;
1198 btrfs_set_shared_data_ref_count(leaf, ref, num_refs);
1199 }
1200 } else {
1201 struct btrfs_extent_data_ref *ref;
1202 while (ret == -EEXIST) {
1203 ref = btrfs_item_ptr(leaf, path->slots[0],
1204 struct btrfs_extent_data_ref);
1205 if (match_extent_data_ref(leaf, ref, root_objectid,
1206 owner, offset))
1207 break;
1208 btrfs_release_path(path);
1209 key.offset++;
1210 ret = btrfs_insert_empty_item(trans, root, path, &key,
1211 size);
1212 if (ret && ret != -EEXIST)
1213 goto fail;
1214
1215 leaf = path->nodes[0];
1216 }
1217 ref = btrfs_item_ptr(leaf, path->slots[0],
1218 struct btrfs_extent_data_ref);
1219 if (ret == 0) {
1220 btrfs_set_extent_data_ref_root(leaf, ref,
1221 root_objectid);
1222 btrfs_set_extent_data_ref_objectid(leaf, ref, owner);
1223 btrfs_set_extent_data_ref_offset(leaf, ref, offset);
1224 btrfs_set_extent_data_ref_count(leaf, ref, refs_to_add);
1225 } else {
1226 num_refs = btrfs_extent_data_ref_count(leaf, ref);
1227 num_refs += refs_to_add;
1228 btrfs_set_extent_data_ref_count(leaf, ref, num_refs);
1229 }
1230 }
1231 btrfs_mark_buffer_dirty(leaf);
1232 ret = 0;
1233fail:
1234 btrfs_release_path(path);
1235 return ret;
1236}
1237
1238static noinline int remove_extent_data_ref(struct btrfs_trans_handle *trans,
1239 struct btrfs_root *root,
1240 struct btrfs_path *path,
1241 int refs_to_drop)
1242{
1243 struct btrfs_key key;
1244 struct btrfs_extent_data_ref *ref1 = NULL;
1245 struct btrfs_shared_data_ref *ref2 = NULL;
1246 struct extent_buffer *leaf;
1247 u32 num_refs = 0;
1248 int ret = 0;
1249
1250 leaf = path->nodes[0];
1251 btrfs_item_key_to_cpu(leaf, &key, path->slots[0]);
1252
1253 if (key.type == BTRFS_EXTENT_DATA_REF_KEY) {
1254 ref1 = btrfs_item_ptr(leaf, path->slots[0],
1255 struct btrfs_extent_data_ref);
1256 num_refs = btrfs_extent_data_ref_count(leaf, ref1);
1257 } else if (key.type == BTRFS_SHARED_DATA_REF_KEY) {
1258 ref2 = btrfs_item_ptr(leaf, path->slots[0],
1259 struct btrfs_shared_data_ref);
1260 num_refs = btrfs_shared_data_ref_count(leaf, ref2);
1261#ifdef BTRFS_COMPAT_EXTENT_TREE_V0
1262 } else if (key.type == BTRFS_EXTENT_REF_V0_KEY) {
1263 struct btrfs_extent_ref_v0 *ref0;
1264 ref0 = btrfs_item_ptr(leaf, path->slots[0],
1265 struct btrfs_extent_ref_v0);
1266 num_refs = btrfs_ref_count_v0(leaf, ref0);
1267#endif
1268 } else {
1269 BUG();
1270 }
1271
1272 BUG_ON(num_refs < refs_to_drop);
1273 num_refs -= refs_to_drop;
1274
1275 if (num_refs == 0) {
1276 ret = btrfs_del_item(trans, root, path);
1277 } else {
1278 if (key.type == BTRFS_EXTENT_DATA_REF_KEY)
1279 btrfs_set_extent_data_ref_count(leaf, ref1, num_refs);
1280 else if (key.type == BTRFS_SHARED_DATA_REF_KEY)
1281 btrfs_set_shared_data_ref_count(leaf, ref2, num_refs);
1282#ifdef BTRFS_COMPAT_EXTENT_TREE_V0
1283 else {
1284 struct btrfs_extent_ref_v0 *ref0;
1285 ref0 = btrfs_item_ptr(leaf, path->slots[0],
1286 struct btrfs_extent_ref_v0);
1287 btrfs_set_ref_count_v0(leaf, ref0, num_refs);
1288 }
1289#endif
1290 btrfs_mark_buffer_dirty(leaf);
1291 }
1292 return ret;
1293}
1294
1295static noinline u32 extent_data_ref_count(struct btrfs_root *root,
1296 struct btrfs_path *path,
1297 struct btrfs_extent_inline_ref *iref)
1298{
1299 struct btrfs_key key;
1300 struct extent_buffer *leaf;
1301 struct btrfs_extent_data_ref *ref1;
1302 struct btrfs_shared_data_ref *ref2;
1303 u32 num_refs = 0;
1304
1305 leaf = path->nodes[0];
1306 btrfs_item_key_to_cpu(leaf, &key, path->slots[0]);
1307 if (iref) {
1308 if (btrfs_extent_inline_ref_type(leaf, iref) ==
1309 BTRFS_EXTENT_DATA_REF_KEY) {
1310 ref1 = (struct btrfs_extent_data_ref *)(&iref->offset);
1311 num_refs = btrfs_extent_data_ref_count(leaf, ref1);
1312 } else {
1313 ref2 = (struct btrfs_shared_data_ref *)(iref + 1);
1314 num_refs = btrfs_shared_data_ref_count(leaf, ref2);
1315 }
1316 } else if (key.type == BTRFS_EXTENT_DATA_REF_KEY) {
1317 ref1 = btrfs_item_ptr(leaf, path->slots[0],
1318 struct btrfs_extent_data_ref);
1319 num_refs = btrfs_extent_data_ref_count(leaf, ref1);
1320 } else if (key.type == BTRFS_SHARED_DATA_REF_KEY) {
1321 ref2 = btrfs_item_ptr(leaf, path->slots[0],
1322 struct btrfs_shared_data_ref);
1323 num_refs = btrfs_shared_data_ref_count(leaf, ref2);
1324#ifdef BTRFS_COMPAT_EXTENT_TREE_V0
1325 } else if (key.type == BTRFS_EXTENT_REF_V0_KEY) {
1326 struct btrfs_extent_ref_v0 *ref0;
1327 ref0 = btrfs_item_ptr(leaf, path->slots[0],
1328 struct btrfs_extent_ref_v0);
1329 num_refs = btrfs_ref_count_v0(leaf, ref0);
1330#endif
1331 } else {
1332 WARN_ON(1);
1333 }
1334 return num_refs;
1335}
1336
1337static noinline int lookup_tree_block_ref(struct btrfs_trans_handle *trans,
1338 struct btrfs_root *root,
1339 struct btrfs_path *path,
1340 u64 bytenr, u64 parent,
1341 u64 root_objectid)
1342{
1343 struct btrfs_key key;
1344 int ret;
1345
1346 key.objectid = bytenr;
1347 if (parent) {
1348 key.type = BTRFS_SHARED_BLOCK_REF_KEY;
1349 key.offset = parent;
1350 } else {
1351 key.type = BTRFS_TREE_BLOCK_REF_KEY;
1352 key.offset = root_objectid;
1353 }
1354
1355 ret = btrfs_search_slot(trans, root, &key, path, -1, 1);
1356 if (ret > 0)
1357 ret = -ENOENT;
1358#ifdef BTRFS_COMPAT_EXTENT_TREE_V0
1359 if (ret == -ENOENT && parent) {
1360 btrfs_release_path(path);
1361 key.type = BTRFS_EXTENT_REF_V0_KEY;
1362 ret = btrfs_search_slot(trans, root, &key, path, -1, 1);
1363 if (ret > 0)
1364 ret = -ENOENT;
1365 }
1366#endif
1367 return ret;
1368}
1369
1370static noinline int insert_tree_block_ref(struct btrfs_trans_handle *trans,
1371 struct btrfs_root *root,
1372 struct btrfs_path *path,
1373 u64 bytenr, u64 parent,
1374 u64 root_objectid)
1375{
1376 struct btrfs_key key;
1377 int ret;
1378
1379 key.objectid = bytenr;
1380 if (parent) {
1381 key.type = BTRFS_SHARED_BLOCK_REF_KEY;
1382 key.offset = parent;
1383 } else {
1384 key.type = BTRFS_TREE_BLOCK_REF_KEY;
1385 key.offset = root_objectid;
1386 }
1387
1388 ret = btrfs_insert_empty_item(trans, root, path, &key, 0);
1389 btrfs_release_path(path);
1390 return ret;
1391}
1392
1393static inline int extent_ref_type(u64 parent, u64 owner)
1394{
1395 int type;
1396 if (owner < BTRFS_FIRST_FREE_OBJECTID) {
1397 if (parent > 0)
1398 type = BTRFS_SHARED_BLOCK_REF_KEY;
1399 else
1400 type = BTRFS_TREE_BLOCK_REF_KEY;
1401 } else {
1402 if (parent > 0)
1403 type = BTRFS_SHARED_DATA_REF_KEY;
1404 else
1405 type = BTRFS_EXTENT_DATA_REF_KEY;
1406 }
1407 return type;
1408}
1409
1410static int find_next_key(struct btrfs_path *path, int level,
1411 struct btrfs_key *key)
1412
1413{
1414 for (; level < BTRFS_MAX_LEVEL; level++) {
1415 if (!path->nodes[level])
1416 break;
1417 if (path->slots[level] + 1 >=
1418 btrfs_header_nritems(path->nodes[level]))
1419 continue;
1420 if (level == 0)
1421 btrfs_item_key_to_cpu(path->nodes[level], key,
1422 path->slots[level] + 1);
1423 else
1424 btrfs_node_key_to_cpu(path->nodes[level], key,
1425 path->slots[level] + 1);
1426 return 0;
1427 }
1428 return 1;
1429}
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444static noinline_for_stack
1445int lookup_inline_extent_backref(struct btrfs_trans_handle *trans,
1446 struct btrfs_root *root,
1447 struct btrfs_path *path,
1448 struct btrfs_extent_inline_ref **ref_ret,
1449 u64 bytenr, u64 num_bytes,
1450 u64 parent, u64 root_objectid,
1451 u64 owner, u64 offset, int insert)
1452{
1453 struct btrfs_key key;
1454 struct extent_buffer *leaf;
1455 struct btrfs_extent_item *ei;
1456 struct btrfs_extent_inline_ref *iref;
1457 u64 flags;
1458 u64 item_size;
1459 unsigned long ptr;
1460 unsigned long end;
1461 int extra_size;
1462 int type;
1463 int want;
1464 int ret;
1465 int err = 0;
1466
1467 key.objectid = bytenr;
1468 key.type = BTRFS_EXTENT_ITEM_KEY;
1469 key.offset = num_bytes;
1470
1471 want = extent_ref_type(parent, owner);
1472 if (insert) {
1473 extra_size = btrfs_extent_inline_ref_size(want);
1474 path->keep_locks = 1;
1475 } else
1476 extra_size = -1;
1477 ret = btrfs_search_slot(trans, root, &key, path, extra_size, 1);
1478 if (ret < 0) {
1479 err = ret;
1480 goto out;
1481 }
1482 if (ret && !insert) {
1483 err = -ENOENT;
1484 goto out;
1485 }
1486 BUG_ON(ret);
1487
1488 leaf = path->nodes[0];
1489 item_size = btrfs_item_size_nr(leaf, path->slots[0]);
1490#ifdef BTRFS_COMPAT_EXTENT_TREE_V0
1491 if (item_size < sizeof(*ei)) {
1492 if (!insert) {
1493 err = -ENOENT;
1494 goto out;
1495 }
1496 ret = convert_extent_item_v0(trans, root, path, owner,
1497 extra_size);
1498 if (ret < 0) {
1499 err = ret;
1500 goto out;
1501 }
1502 leaf = path->nodes[0];
1503 item_size = btrfs_item_size_nr(leaf, path->slots[0]);
1504 }
1505#endif
1506 BUG_ON(item_size < sizeof(*ei));
1507
1508 ei = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item);
1509 flags = btrfs_extent_flags(leaf, ei);
1510
1511 ptr = (unsigned long)(ei + 1);
1512 end = (unsigned long)ei + item_size;
1513
1514 if (flags & BTRFS_EXTENT_FLAG_TREE_BLOCK) {
1515 ptr += sizeof(struct btrfs_tree_block_info);
1516 BUG_ON(ptr > end);
1517 } else {
1518 BUG_ON(!(flags & BTRFS_EXTENT_FLAG_DATA));
1519 }
1520
1521 err = -ENOENT;
1522 while (1) {
1523 if (ptr >= end) {
1524 WARN_ON(ptr > end);
1525 break;
1526 }
1527 iref = (struct btrfs_extent_inline_ref *)ptr;
1528 type = btrfs_extent_inline_ref_type(leaf, iref);
1529 if (want < type)
1530 break;
1531 if (want > type) {
1532 ptr += btrfs_extent_inline_ref_size(type);
1533 continue;
1534 }
1535
1536 if (type == BTRFS_EXTENT_DATA_REF_KEY) {
1537 struct btrfs_extent_data_ref *dref;
1538 dref = (struct btrfs_extent_data_ref *)(&iref->offset);
1539 if (match_extent_data_ref(leaf, dref, root_objectid,
1540 owner, offset)) {
1541 err = 0;
1542 break;
1543 }
1544 if (hash_extent_data_ref_item(leaf, dref) <
1545 hash_extent_data_ref(root_objectid, owner, offset))
1546 break;
1547 } else {
1548 u64 ref_offset;
1549 ref_offset = btrfs_extent_inline_ref_offset(leaf, iref);
1550 if (parent > 0) {
1551 if (parent == ref_offset) {
1552 err = 0;
1553 break;
1554 }
1555 if (ref_offset < parent)
1556 break;
1557 } else {
1558 if (root_objectid == ref_offset) {
1559 err = 0;
1560 break;
1561 }
1562 if (ref_offset < root_objectid)
1563 break;
1564 }
1565 }
1566 ptr += btrfs_extent_inline_ref_size(type);
1567 }
1568 if (err == -ENOENT && insert) {
1569 if (item_size + extra_size >=
1570 BTRFS_MAX_EXTENT_ITEM_SIZE(root)) {
1571 err = -EAGAIN;
1572 goto out;
1573 }
1574
1575
1576
1577
1578
1579
1580 if (find_next_key(path, 0, &key) == 0 &&
1581 key.objectid == bytenr &&
1582 key.type < BTRFS_BLOCK_GROUP_ITEM_KEY) {
1583 err = -EAGAIN;
1584 goto out;
1585 }
1586 }
1587 *ref_ret = (struct btrfs_extent_inline_ref *)ptr;
1588out:
1589 if (insert) {
1590 path->keep_locks = 0;
1591 btrfs_unlock_up_safe(path, 1);
1592 }
1593 return err;
1594}
1595
1596
1597
1598
1599static noinline_for_stack
1600void setup_inline_extent_backref(struct btrfs_trans_handle *trans,
1601 struct btrfs_root *root,
1602 struct btrfs_path *path,
1603 struct btrfs_extent_inline_ref *iref,
1604 u64 parent, u64 root_objectid,
1605 u64 owner, u64 offset, int refs_to_add,
1606 struct btrfs_delayed_extent_op *extent_op)
1607{
1608 struct extent_buffer *leaf;
1609 struct btrfs_extent_item *ei;
1610 unsigned long ptr;
1611 unsigned long end;
1612 unsigned long item_offset;
1613 u64 refs;
1614 int size;
1615 int type;
1616
1617 leaf = path->nodes[0];
1618 ei = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item);
1619 item_offset = (unsigned long)iref - (unsigned long)ei;
1620
1621 type = extent_ref_type(parent, owner);
1622 size = btrfs_extent_inline_ref_size(type);
1623
1624 btrfs_extend_item(trans, root, path, size);
1625
1626 ei = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item);
1627 refs = btrfs_extent_refs(leaf, ei);
1628 refs += refs_to_add;
1629 btrfs_set_extent_refs(leaf, ei, refs);
1630 if (extent_op)
1631 __run_delayed_extent_op(extent_op, leaf, ei);
1632
1633 ptr = (unsigned long)ei + item_offset;
1634 end = (unsigned long)ei + btrfs_item_size_nr(leaf, path->slots[0]);
1635 if (ptr < end - size)
1636 memmove_extent_buffer(leaf, ptr + size, ptr,
1637 end - size - ptr);
1638
1639 iref = (struct btrfs_extent_inline_ref *)ptr;
1640 btrfs_set_extent_inline_ref_type(leaf, iref, type);
1641 if (type == BTRFS_EXTENT_DATA_REF_KEY) {
1642 struct btrfs_extent_data_ref *dref;
1643 dref = (struct btrfs_extent_data_ref *)(&iref->offset);
1644 btrfs_set_extent_data_ref_root(leaf, dref, root_objectid);
1645 btrfs_set_extent_data_ref_objectid(leaf, dref, owner);
1646 btrfs_set_extent_data_ref_offset(leaf, dref, offset);
1647 btrfs_set_extent_data_ref_count(leaf, dref, refs_to_add);
1648 } else if (type == BTRFS_SHARED_DATA_REF_KEY) {
1649 struct btrfs_shared_data_ref *sref;
1650 sref = (struct btrfs_shared_data_ref *)(iref + 1);
1651 btrfs_set_shared_data_ref_count(leaf, sref, refs_to_add);
1652 btrfs_set_extent_inline_ref_offset(leaf, iref, parent);
1653 } else if (type == BTRFS_SHARED_BLOCK_REF_KEY) {
1654 btrfs_set_extent_inline_ref_offset(leaf, iref, parent);
1655 } else {
1656 btrfs_set_extent_inline_ref_offset(leaf, iref, root_objectid);
1657 }
1658 btrfs_mark_buffer_dirty(leaf);
1659}
1660
1661static int lookup_extent_backref(struct btrfs_trans_handle *trans,
1662 struct btrfs_root *root,
1663 struct btrfs_path *path,
1664 struct btrfs_extent_inline_ref **ref_ret,
1665 u64 bytenr, u64 num_bytes, u64 parent,
1666 u64 root_objectid, u64 owner, u64 offset)
1667{
1668 int ret;
1669
1670 ret = lookup_inline_extent_backref(trans, root, path, ref_ret,
1671 bytenr, num_bytes, parent,
1672 root_objectid, owner, offset, 0);
1673 if (ret != -ENOENT)
1674 return ret;
1675
1676 btrfs_release_path(path);
1677 *ref_ret = NULL;
1678
1679 if (owner < BTRFS_FIRST_FREE_OBJECTID) {
1680 ret = lookup_tree_block_ref(trans, root, path, bytenr, parent,
1681 root_objectid);
1682 } else {
1683 ret = lookup_extent_data_ref(trans, root, path, bytenr, parent,
1684 root_objectid, owner, offset);
1685 }
1686 return ret;
1687}
1688
1689
1690
1691
1692static noinline_for_stack
1693void update_inline_extent_backref(struct btrfs_trans_handle *trans,
1694 struct btrfs_root *root,
1695 struct btrfs_path *path,
1696 struct btrfs_extent_inline_ref *iref,
1697 int refs_to_mod,
1698 struct btrfs_delayed_extent_op *extent_op)
1699{
1700 struct extent_buffer *leaf;
1701 struct btrfs_extent_item *ei;
1702 struct btrfs_extent_data_ref *dref = NULL;
1703 struct btrfs_shared_data_ref *sref = NULL;
1704 unsigned long ptr;
1705 unsigned long end;
1706 u32 item_size;
1707 int size;
1708 int type;
1709 u64 refs;
1710
1711 leaf = path->nodes[0];
1712 ei = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item);
1713 refs = btrfs_extent_refs(leaf, ei);
1714 WARN_ON(refs_to_mod < 0 && refs + refs_to_mod <= 0);
1715 refs += refs_to_mod;
1716 btrfs_set_extent_refs(leaf, ei, refs);
1717 if (extent_op)
1718 __run_delayed_extent_op(extent_op, leaf, ei);
1719
1720 type = btrfs_extent_inline_ref_type(leaf, iref);
1721
1722 if (type == BTRFS_EXTENT_DATA_REF_KEY) {
1723 dref = (struct btrfs_extent_data_ref *)(&iref->offset);
1724 refs = btrfs_extent_data_ref_count(leaf, dref);
1725 } else if (type == BTRFS_SHARED_DATA_REF_KEY) {
1726 sref = (struct btrfs_shared_data_ref *)(iref + 1);
1727 refs = btrfs_shared_data_ref_count(leaf, sref);
1728 } else {
1729 refs = 1;
1730 BUG_ON(refs_to_mod != -1);
1731 }
1732
1733 BUG_ON(refs_to_mod < 0 && refs < -refs_to_mod);
1734 refs += refs_to_mod;
1735
1736 if (refs > 0) {
1737 if (type == BTRFS_EXTENT_DATA_REF_KEY)
1738 btrfs_set_extent_data_ref_count(leaf, dref, refs);
1739 else
1740 btrfs_set_shared_data_ref_count(leaf, sref, refs);
1741 } else {
1742 size = btrfs_extent_inline_ref_size(type);
1743 item_size = btrfs_item_size_nr(leaf, path->slots[0]);
1744 ptr = (unsigned long)iref;
1745 end = (unsigned long)ei + item_size;
1746 if (ptr + size < end)
1747 memmove_extent_buffer(leaf, ptr, ptr + size,
1748 end - ptr - size);
1749 item_size -= size;
1750 btrfs_truncate_item(trans, root, path, item_size, 1);
1751 }
1752 btrfs_mark_buffer_dirty(leaf);
1753}
1754
1755static noinline_for_stack
1756int insert_inline_extent_backref(struct btrfs_trans_handle *trans,
1757 struct btrfs_root *root,
1758 struct btrfs_path *path,
1759 u64 bytenr, u64 num_bytes, u64 parent,
1760 u64 root_objectid, u64 owner,
1761 u64 offset, int refs_to_add,
1762 struct btrfs_delayed_extent_op *extent_op)
1763{
1764 struct btrfs_extent_inline_ref *iref;
1765 int ret;
1766
1767 ret = lookup_inline_extent_backref(trans, root, path, &iref,
1768 bytenr, num_bytes, parent,
1769 root_objectid, owner, offset, 1);
1770 if (ret == 0) {
1771 BUG_ON(owner < BTRFS_FIRST_FREE_OBJECTID);
1772 update_inline_extent_backref(trans, root, path, iref,
1773 refs_to_add, extent_op);
1774 } else if (ret == -ENOENT) {
1775 setup_inline_extent_backref(trans, root, path, iref, parent,
1776 root_objectid, owner, offset,
1777 refs_to_add, extent_op);
1778 ret = 0;
1779 }
1780 return ret;
1781}
1782
1783static int insert_extent_backref(struct btrfs_trans_handle *trans,
1784 struct btrfs_root *root,
1785 struct btrfs_path *path,
1786 u64 bytenr, u64 parent, u64 root_objectid,
1787 u64 owner, u64 offset, int refs_to_add)
1788{
1789 int ret;
1790 if (owner < BTRFS_FIRST_FREE_OBJECTID) {
1791 BUG_ON(refs_to_add != 1);
1792 ret = insert_tree_block_ref(trans, root, path, bytenr,
1793 parent, root_objectid);
1794 } else {
1795 ret = insert_extent_data_ref(trans, root, path, bytenr,
1796 parent, root_objectid,
1797 owner, offset, refs_to_add);
1798 }
1799 return ret;
1800}
1801
1802static int remove_extent_backref(struct btrfs_trans_handle *trans,
1803 struct btrfs_root *root,
1804 struct btrfs_path *path,
1805 struct btrfs_extent_inline_ref *iref,
1806 int refs_to_drop, int is_data)
1807{
1808 int ret = 0;
1809
1810 BUG_ON(!is_data && refs_to_drop != 1);
1811 if (iref) {
1812 update_inline_extent_backref(trans, root, path, iref,
1813 -refs_to_drop, NULL);
1814 } else if (is_data) {
1815 ret = remove_extent_data_ref(trans, root, path, refs_to_drop);
1816 } else {
1817 ret = btrfs_del_item(trans, root, path);
1818 }
1819 return ret;
1820}
1821
1822static int btrfs_issue_discard(struct block_device *bdev,
1823 u64 start, u64 len)
1824{
1825 return blkdev_issue_discard(bdev, start >> 9, len >> 9, GFP_NOFS, 0);
1826}
1827
1828static int btrfs_discard_extent(struct btrfs_root *root, u64 bytenr,
1829 u64 num_bytes, u64 *actual_bytes)
1830{
1831 int ret;
1832 u64 discarded_bytes = 0;
1833 struct btrfs_bio *bbio = NULL;
1834
1835
1836
1837 ret = btrfs_map_block(&root->fs_info->mapping_tree, REQ_DISCARD,
1838 bytenr, &num_bytes, &bbio, 0);
1839
1840 if (!ret) {
1841 struct btrfs_bio_stripe *stripe = bbio->stripes;
1842 int i;
1843
1844
1845 for (i = 0; i < bbio->num_stripes; i++, stripe++) {
1846 if (!stripe->dev->can_discard)
1847 continue;
1848
1849 ret = btrfs_issue_discard(stripe->dev->bdev,
1850 stripe->physical,
1851 stripe->length);
1852 if (!ret)
1853 discarded_bytes += stripe->length;
1854 else if (ret != -EOPNOTSUPP)
1855 break;
1856
1857
1858
1859
1860
1861
1862 ret = 0;
1863 }
1864 kfree(bbio);
1865 }
1866
1867 if (actual_bytes)
1868 *actual_bytes = discarded_bytes;
1869
1870
1871 return ret;
1872}
1873
1874
1875int btrfs_inc_extent_ref(struct btrfs_trans_handle *trans,
1876 struct btrfs_root *root,
1877 u64 bytenr, u64 num_bytes, u64 parent,
1878 u64 root_objectid, u64 owner, u64 offset, int for_cow)
1879{
1880 int ret;
1881 struct btrfs_fs_info *fs_info = root->fs_info;
1882
1883 BUG_ON(owner < BTRFS_FIRST_FREE_OBJECTID &&
1884 root_objectid == BTRFS_TREE_LOG_OBJECTID);
1885
1886 if (owner < BTRFS_FIRST_FREE_OBJECTID) {
1887 ret = btrfs_add_delayed_tree_ref(fs_info, trans, bytenr,
1888 num_bytes,
1889 parent, root_objectid, (int)owner,
1890 BTRFS_ADD_DELAYED_REF, NULL, for_cow);
1891 } else {
1892 ret = btrfs_add_delayed_data_ref(fs_info, trans, bytenr,
1893 num_bytes,
1894 parent, root_objectid, owner, offset,
1895 BTRFS_ADD_DELAYED_REF, NULL, for_cow);
1896 }
1897 return ret;
1898}
1899
1900static int __btrfs_inc_extent_ref(struct btrfs_trans_handle *trans,
1901 struct btrfs_root *root,
1902 u64 bytenr, u64 num_bytes,
1903 u64 parent, u64 root_objectid,
1904 u64 owner, u64 offset, int refs_to_add,
1905 struct btrfs_delayed_extent_op *extent_op)
1906{
1907 struct btrfs_path *path;
1908 struct extent_buffer *leaf;
1909 struct btrfs_extent_item *item;
1910 u64 refs;
1911 int ret;
1912 int err = 0;
1913
1914 path = btrfs_alloc_path();
1915 if (!path)
1916 return -ENOMEM;
1917
1918 path->reada = 1;
1919 path->leave_spinning = 1;
1920
1921 ret = insert_inline_extent_backref(trans, root->fs_info->extent_root,
1922 path, bytenr, num_bytes, parent,
1923 root_objectid, owner, offset,
1924 refs_to_add, extent_op);
1925 if (ret == 0)
1926 goto out;
1927
1928 if (ret != -EAGAIN) {
1929 err = ret;
1930 goto out;
1931 }
1932
1933 leaf = path->nodes[0];
1934 item = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item);
1935 refs = btrfs_extent_refs(leaf, item);
1936 btrfs_set_extent_refs(leaf, item, refs + refs_to_add);
1937 if (extent_op)
1938 __run_delayed_extent_op(extent_op, leaf, item);
1939
1940 btrfs_mark_buffer_dirty(leaf);
1941 btrfs_release_path(path);
1942
1943 path->reada = 1;
1944 path->leave_spinning = 1;
1945
1946
1947 ret = insert_extent_backref(trans, root->fs_info->extent_root,
1948 path, bytenr, parent, root_objectid,
1949 owner, offset, refs_to_add);
1950 if (ret)
1951 btrfs_abort_transaction(trans, root, ret);
1952out:
1953 btrfs_free_path(path);
1954 return err;
1955}
1956
1957static int run_delayed_data_ref(struct btrfs_trans_handle *trans,
1958 struct btrfs_root *root,
1959 struct btrfs_delayed_ref_node *node,
1960 struct btrfs_delayed_extent_op *extent_op,
1961 int insert_reserved)
1962{
1963 int ret = 0;
1964 struct btrfs_delayed_data_ref *ref;
1965 struct btrfs_key ins;
1966 u64 parent = 0;
1967 u64 ref_root = 0;
1968 u64 flags = 0;
1969
1970 ins.objectid = node->bytenr;
1971 ins.offset = node->num_bytes;
1972 ins.type = BTRFS_EXTENT_ITEM_KEY;
1973
1974 ref = btrfs_delayed_node_to_data_ref(node);
1975 if (node->type == BTRFS_SHARED_DATA_REF_KEY)
1976 parent = ref->parent;
1977 else
1978 ref_root = ref->root;
1979
1980 if (node->action == BTRFS_ADD_DELAYED_REF && insert_reserved) {
1981 if (extent_op) {
1982 BUG_ON(extent_op->update_key);
1983 flags |= extent_op->flags_to_set;
1984 }
1985 ret = alloc_reserved_file_extent(trans, root,
1986 parent, ref_root, flags,
1987 ref->objectid, ref->offset,
1988 &ins, node->ref_mod);
1989 } else if (node->action == BTRFS_ADD_DELAYED_REF) {
1990 ret = __btrfs_inc_extent_ref(trans, root, node->bytenr,
1991 node->num_bytes, parent,
1992 ref_root, ref->objectid,
1993 ref->offset, node->ref_mod,
1994 extent_op);
1995 } else if (node->action == BTRFS_DROP_DELAYED_REF) {
1996 ret = __btrfs_free_extent(trans, root, node->bytenr,
1997 node->num_bytes, parent,
1998 ref_root, ref->objectid,
1999 ref->offset, node->ref_mod,
2000 extent_op);
2001 } else {
2002 BUG();
2003 }
2004 return ret;
2005}
2006
2007static void __run_delayed_extent_op(struct btrfs_delayed_extent_op *extent_op,
2008 struct extent_buffer *leaf,
2009 struct btrfs_extent_item *ei)
2010{
2011 u64 flags = btrfs_extent_flags(leaf, ei);
2012 if (extent_op->update_flags) {
2013 flags |= extent_op->flags_to_set;
2014 btrfs_set_extent_flags(leaf, ei, flags);
2015 }
2016
2017 if (extent_op->update_key) {
2018 struct btrfs_tree_block_info *bi;
2019 BUG_ON(!(flags & BTRFS_EXTENT_FLAG_TREE_BLOCK));
2020 bi = (struct btrfs_tree_block_info *)(ei + 1);
2021 btrfs_set_tree_block_key(leaf, bi, &extent_op->key);
2022 }
2023}
2024
2025static int run_delayed_extent_op(struct btrfs_trans_handle *trans,
2026 struct btrfs_root *root,
2027 struct btrfs_delayed_ref_node *node,
2028 struct btrfs_delayed_extent_op *extent_op)
2029{
2030 struct btrfs_key key;
2031 struct btrfs_path *path;
2032 struct btrfs_extent_item *ei;
2033 struct extent_buffer *leaf;
2034 u32 item_size;
2035 int ret;
2036 int err = 0;
2037
2038 if (trans->aborted)
2039 return 0;
2040
2041 path = btrfs_alloc_path();
2042 if (!path)
2043 return -ENOMEM;
2044
2045 key.objectid = node->bytenr;
2046 key.type = BTRFS_EXTENT_ITEM_KEY;
2047 key.offset = node->num_bytes;
2048
2049 path->reada = 1;
2050 path->leave_spinning = 1;
2051 ret = btrfs_search_slot(trans, root->fs_info->extent_root, &key,
2052 path, 0, 1);
2053 if (ret < 0) {
2054 err = ret;
2055 goto out;
2056 }
2057 if (ret > 0) {
2058 err = -EIO;
2059 goto out;
2060 }
2061
2062 leaf = path->nodes[0];
2063 item_size = btrfs_item_size_nr(leaf, path->slots[0]);
2064#ifdef BTRFS_COMPAT_EXTENT_TREE_V0
2065 if (item_size < sizeof(*ei)) {
2066 ret = convert_extent_item_v0(trans, root->fs_info->extent_root,
2067 path, (u64)-1, 0);
2068 if (ret < 0) {
2069 err = ret;
2070 goto out;
2071 }
2072 leaf = path->nodes[0];
2073 item_size = btrfs_item_size_nr(leaf, path->slots[0]);
2074 }
2075#endif
2076 BUG_ON(item_size < sizeof(*ei));
2077 ei = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item);
2078 __run_delayed_extent_op(extent_op, leaf, ei);
2079
2080 btrfs_mark_buffer_dirty(leaf);
2081out:
2082 btrfs_free_path(path);
2083 return err;
2084}
2085
2086static int run_delayed_tree_ref(struct btrfs_trans_handle *trans,
2087 struct btrfs_root *root,
2088 struct btrfs_delayed_ref_node *node,
2089 struct btrfs_delayed_extent_op *extent_op,
2090 int insert_reserved)
2091{
2092 int ret = 0;
2093 struct btrfs_delayed_tree_ref *ref;
2094 struct btrfs_key ins;
2095 u64 parent = 0;
2096 u64 ref_root = 0;
2097
2098 ins.objectid = node->bytenr;
2099 ins.offset = node->num_bytes;
2100 ins.type = BTRFS_EXTENT_ITEM_KEY;
2101
2102 ref = btrfs_delayed_node_to_tree_ref(node);
2103 if (node->type == BTRFS_SHARED_BLOCK_REF_KEY)
2104 parent = ref->parent;
2105 else
2106 ref_root = ref->root;
2107
2108 BUG_ON(node->ref_mod != 1);
2109 if (node->action == BTRFS_ADD_DELAYED_REF && insert_reserved) {
2110 BUG_ON(!extent_op || !extent_op->update_flags ||
2111 !extent_op->update_key);
2112 ret = alloc_reserved_tree_block(trans, root,
2113 parent, ref_root,
2114 extent_op->flags_to_set,
2115 &extent_op->key,
2116 ref->level, &ins);
2117 } else if (node->action == BTRFS_ADD_DELAYED_REF) {
2118 ret = __btrfs_inc_extent_ref(trans, root, node->bytenr,
2119 node->num_bytes, parent, ref_root,
2120 ref->level, 0, 1, extent_op);
2121 } else if (node->action == BTRFS_DROP_DELAYED_REF) {
2122 ret = __btrfs_free_extent(trans, root, node->bytenr,
2123 node->num_bytes, parent, ref_root,
2124 ref->level, 0, 1, extent_op);
2125 } else {
2126 BUG();
2127 }
2128 return ret;
2129}
2130
2131
2132static int run_one_delayed_ref(struct btrfs_trans_handle *trans,
2133 struct btrfs_root *root,
2134 struct btrfs_delayed_ref_node *node,
2135 struct btrfs_delayed_extent_op *extent_op,
2136 int insert_reserved)
2137{
2138 int ret = 0;
2139
2140 if (trans->aborted)
2141 return 0;
2142
2143 if (btrfs_delayed_ref_is_head(node)) {
2144 struct btrfs_delayed_ref_head *head;
2145
2146
2147
2148
2149
2150
2151 BUG_ON(extent_op);
2152 head = btrfs_delayed_node_to_head(node);
2153 if (insert_reserved) {
2154 btrfs_pin_extent(root, node->bytenr,
2155 node->num_bytes, 1);
2156 if (head->is_data) {
2157 ret = btrfs_del_csums(trans, root,
2158 node->bytenr,
2159 node->num_bytes);
2160 }
2161 }
2162 mutex_unlock(&head->mutex);
2163 return ret;
2164 }
2165
2166 if (node->type == BTRFS_TREE_BLOCK_REF_KEY ||
2167 node->type == BTRFS_SHARED_BLOCK_REF_KEY)
2168 ret = run_delayed_tree_ref(trans, root, node, extent_op,
2169 insert_reserved);
2170 else if (node->type == BTRFS_EXTENT_DATA_REF_KEY ||
2171 node->type == BTRFS_SHARED_DATA_REF_KEY)
2172 ret = run_delayed_data_ref(trans, root, node, extent_op,
2173 insert_reserved);
2174 else
2175 BUG();
2176 return ret;
2177}
2178
2179static noinline struct btrfs_delayed_ref_node *
2180select_delayed_ref(struct btrfs_delayed_ref_head *head)
2181{
2182 struct rb_node *node;
2183 struct btrfs_delayed_ref_node *ref;
2184 int action = BTRFS_ADD_DELAYED_REF;
2185again:
2186
2187
2188
2189
2190
2191 node = rb_prev(&head->node.rb_node);
2192 while (1) {
2193 if (!node)
2194 break;
2195 ref = rb_entry(node, struct btrfs_delayed_ref_node,
2196 rb_node);
2197 if (ref->bytenr != head->node.bytenr)
2198 break;
2199 if (ref->action == action)
2200 return ref;
2201 node = rb_prev(node);
2202 }
2203 if (action == BTRFS_ADD_DELAYED_REF) {
2204 action = BTRFS_DROP_DELAYED_REF;
2205 goto again;
2206 }
2207 return NULL;
2208}
2209
2210
2211
2212
2213
2214static noinline int run_clustered_refs(struct btrfs_trans_handle *trans,
2215 struct btrfs_root *root,
2216 struct list_head *cluster)
2217{
2218 struct btrfs_delayed_ref_root *delayed_refs;
2219 struct btrfs_delayed_ref_node *ref;
2220 struct btrfs_delayed_ref_head *locked_ref = NULL;
2221 struct btrfs_delayed_extent_op *extent_op;
2222 struct btrfs_fs_info *fs_info = root->fs_info;
2223 int ret;
2224 int count = 0;
2225 int must_insert_reserved = 0;
2226
2227 delayed_refs = &trans->transaction->delayed_refs;
2228 while (1) {
2229 if (!locked_ref) {
2230
2231 if (list_empty(cluster))
2232 break;
2233
2234 locked_ref = list_entry(cluster->next,
2235 struct btrfs_delayed_ref_head, cluster);
2236
2237
2238
2239 ret = btrfs_delayed_ref_lock(trans, locked_ref);
2240
2241
2242
2243
2244
2245
2246
2247 if (ret == -EAGAIN) {
2248 locked_ref = NULL;
2249 count++;
2250 continue;
2251 }
2252 }
2253
2254
2255
2256
2257
2258
2259
2260
2261 btrfs_merge_delayed_refs(trans, fs_info, delayed_refs,
2262 locked_ref);
2263
2264
2265
2266
2267
2268 ref = select_delayed_ref(locked_ref);
2269
2270 if (ref && ref->seq &&
2271 btrfs_check_delayed_seq(fs_info, delayed_refs, ref->seq)) {
2272
2273
2274
2275
2276 list_del_init(&locked_ref->cluster);
2277 mutex_unlock(&locked_ref->mutex);
2278 locked_ref = NULL;
2279 delayed_refs->num_heads_ready++;
2280 spin_unlock(&delayed_refs->lock);
2281 cond_resched();
2282 spin_lock(&delayed_refs->lock);
2283 continue;
2284 }
2285
2286
2287
2288
2289
2290 must_insert_reserved = locked_ref->must_insert_reserved;
2291 locked_ref->must_insert_reserved = 0;
2292
2293 extent_op = locked_ref->extent_op;
2294 locked_ref->extent_op = NULL;
2295
2296 if (!ref) {
2297
2298
2299
2300
2301 ref = &locked_ref->node;
2302
2303 if (extent_op && must_insert_reserved) {
2304 kfree(extent_op);
2305 extent_op = NULL;
2306 }
2307
2308 if (extent_op) {
2309 spin_unlock(&delayed_refs->lock);
2310
2311 ret = run_delayed_extent_op(trans, root,
2312 ref, extent_op);
2313 kfree(extent_op);
2314
2315 if (ret) {
2316 printk(KERN_DEBUG "btrfs: run_delayed_extent_op returned %d\n", ret);
2317 spin_lock(&delayed_refs->lock);
2318 return ret;
2319 }
2320
2321 goto next;
2322 }
2323
2324 list_del_init(&locked_ref->cluster);
2325 locked_ref = NULL;
2326 }
2327
2328 ref->in_tree = 0;
2329 rb_erase(&ref->rb_node, &delayed_refs->root);
2330 delayed_refs->num_entries--;
2331 if (locked_ref) {
2332
2333
2334
2335
2336 switch (ref->action) {
2337 case BTRFS_ADD_DELAYED_REF:
2338 case BTRFS_ADD_DELAYED_EXTENT:
2339 locked_ref->node.ref_mod -= ref->ref_mod;
2340 break;
2341 case BTRFS_DROP_DELAYED_REF:
2342 locked_ref->node.ref_mod += ref->ref_mod;
2343 break;
2344 default:
2345 WARN_ON(1);
2346 }
2347 }
2348 spin_unlock(&delayed_refs->lock);
2349
2350 ret = run_one_delayed_ref(trans, root, ref, extent_op,
2351 must_insert_reserved);
2352
2353 btrfs_put_delayed_ref(ref);
2354 kfree(extent_op);
2355 count++;
2356
2357 if (ret) {
2358 printk(KERN_DEBUG "btrfs: run_one_delayed_ref returned %d\n", ret);
2359 spin_lock(&delayed_refs->lock);
2360 return ret;
2361 }
2362
2363next:
2364 do_chunk_alloc(trans, fs_info->extent_root,
2365 2 * 1024 * 1024,
2366 btrfs_get_alloc_profile(root, 0),
2367 CHUNK_ALLOC_NO_FORCE);
2368 cond_resched();
2369 spin_lock(&delayed_refs->lock);
2370 }
2371 return count;
2372}
2373
2374#ifdef SCRAMBLE_DELAYED_REFS
2375
2376
2377
2378
2379
2380static u64 find_middle(struct rb_root *root)
2381{
2382 struct rb_node *n = root->rb_node;
2383 struct btrfs_delayed_ref_node *entry;
2384 int alt = 1;
2385 u64 middle;
2386 u64 first = 0, last = 0;
2387
2388 n = rb_first(root);
2389 if (n) {
2390 entry = rb_entry(n, struct btrfs_delayed_ref_node, rb_node);
2391 first = entry->bytenr;
2392 }
2393 n = rb_last(root);
2394 if (n) {
2395 entry = rb_entry(n, struct btrfs_delayed_ref_node, rb_node);
2396 last = entry->bytenr;
2397 }
2398 n = root->rb_node;
2399
2400 while (n) {
2401 entry = rb_entry(n, struct btrfs_delayed_ref_node, rb_node);
2402 WARN_ON(!entry->in_tree);
2403
2404 middle = entry->bytenr;
2405
2406 if (alt)
2407 n = n->rb_left;
2408 else
2409 n = n->rb_right;
2410
2411 alt = 1 - alt;
2412 }
2413 return middle;
2414}
2415#endif
2416
2417int btrfs_delayed_refs_qgroup_accounting(struct btrfs_trans_handle *trans,
2418 struct btrfs_fs_info *fs_info)
2419{
2420 struct qgroup_update *qgroup_update;
2421 int ret = 0;
2422
2423 if (list_empty(&trans->qgroup_ref_list) !=
2424 !trans->delayed_ref_elem.seq) {
2425
2426 printk(KERN_ERR "btrfs: qgroup accounting update error, list is%s empty, seq is %llu\n",
2427 list_empty(&trans->qgroup_ref_list) ? "" : " not",
2428 trans->delayed_ref_elem.seq);
2429 BUG();
2430 }
2431
2432 if (!trans->delayed_ref_elem.seq)
2433 return 0;
2434
2435 while (!list_empty(&trans->qgroup_ref_list)) {
2436 qgroup_update = list_first_entry(&trans->qgroup_ref_list,
2437 struct qgroup_update, list);
2438 list_del(&qgroup_update->list);
2439 if (!ret)
2440 ret = btrfs_qgroup_account_ref(
2441 trans, fs_info, qgroup_update->node,
2442 qgroup_update->extent_op);
2443 kfree(qgroup_update);
2444 }
2445
2446 btrfs_put_tree_mod_seq(fs_info, &trans->delayed_ref_elem);
2447
2448 return ret;
2449}
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461int btrfs_run_delayed_refs(struct btrfs_trans_handle *trans,
2462 struct btrfs_root *root, unsigned long count)
2463{
2464 struct rb_node *node;
2465 struct btrfs_delayed_ref_root *delayed_refs;
2466 struct btrfs_delayed_ref_node *ref;
2467 struct list_head cluster;
2468 int ret;
2469 u64 delayed_start;
2470 int run_all = count == (unsigned long)-1;
2471 int run_most = 0;
2472 int loops;
2473
2474
2475 if (trans->aborted)
2476 return 0;
2477
2478 if (root == root->fs_info->extent_root)
2479 root = root->fs_info->tree_root;
2480
2481 do_chunk_alloc(trans, root->fs_info->extent_root,
2482 2 * 1024 * 1024, btrfs_get_alloc_profile(root, 0),
2483 CHUNK_ALLOC_NO_FORCE);
2484
2485 btrfs_delayed_refs_qgroup_accounting(trans, root->fs_info);
2486
2487 delayed_refs = &trans->transaction->delayed_refs;
2488 INIT_LIST_HEAD(&cluster);
2489again:
2490 loops = 0;
2491 spin_lock(&delayed_refs->lock);
2492
2493#ifdef SCRAMBLE_DELAYED_REFS
2494 delayed_refs->run_delayed_start = find_middle(&delayed_refs->root);
2495#endif
2496
2497 if (count == 0) {
2498 count = delayed_refs->num_entries * 2;
2499 run_most = 1;
2500 }
2501 while (1) {
2502 if (!(run_all || run_most) &&
2503 delayed_refs->num_heads_ready < 64)
2504 break;
2505
2506
2507
2508
2509
2510
2511
2512 delayed_start = delayed_refs->run_delayed_start;
2513 ret = btrfs_find_ref_cluster(trans, &cluster,
2514 delayed_refs->run_delayed_start);
2515 if (ret)
2516 break;
2517
2518 ret = run_clustered_refs(trans, root, &cluster);
2519 if (ret < 0) {
2520 spin_unlock(&delayed_refs->lock);
2521 btrfs_abort_transaction(trans, root, ret);
2522 return ret;
2523 }
2524
2525 count -= min_t(unsigned long, ret, count);
2526
2527 if (count == 0)
2528 break;
2529
2530 if (delayed_start >= delayed_refs->run_delayed_start) {
2531 if (loops == 0) {
2532
2533
2534
2535
2536
2537
2538 loops = 1;
2539 } else {
2540
2541
2542
2543 BUG_ON(run_all);
2544 break;
2545 }
2546 }
2547 if (ret) {
2548
2549 loops = 0;
2550 }
2551 }
2552
2553 if (run_all) {
2554 node = rb_first(&delayed_refs->root);
2555 if (!node)
2556 goto out;
2557 count = (unsigned long)-1;
2558
2559 while (node) {
2560 ref = rb_entry(node, struct btrfs_delayed_ref_node,
2561 rb_node);
2562 if (btrfs_delayed_ref_is_head(ref)) {
2563 struct btrfs_delayed_ref_head *head;
2564
2565 head = btrfs_delayed_node_to_head(ref);
2566 atomic_inc(&ref->refs);
2567
2568 spin_unlock(&delayed_refs->lock);
2569
2570
2571
2572
2573 mutex_lock(&head->mutex);
2574 mutex_unlock(&head->mutex);
2575
2576 btrfs_put_delayed_ref(ref);
2577 cond_resched();
2578 goto again;
2579 }
2580 node = rb_next(node);
2581 }
2582 spin_unlock(&delayed_refs->lock);
2583 schedule_timeout(1);
2584 goto again;
2585 }
2586out:
2587 spin_unlock(&delayed_refs->lock);
2588 assert_qgroups_uptodate(trans);
2589 return 0;
2590}
2591
2592int btrfs_set_disk_extent_flags(struct btrfs_trans_handle *trans,
2593 struct btrfs_root *root,
2594 u64 bytenr, u64 num_bytes, u64 flags,
2595 int is_data)
2596{
2597 struct btrfs_delayed_extent_op *extent_op;
2598 int ret;
2599
2600 extent_op = kmalloc(sizeof(*extent_op), GFP_NOFS);
2601 if (!extent_op)
2602 return -ENOMEM;
2603
2604 extent_op->flags_to_set = flags;
2605 extent_op->update_flags = 1;
2606 extent_op->update_key = 0;
2607 extent_op->is_data = is_data ? 1 : 0;
2608
2609 ret = btrfs_add_delayed_extent_op(root->fs_info, trans, bytenr,
2610 num_bytes, extent_op);
2611 if (ret)
2612 kfree(extent_op);
2613 return ret;
2614}
2615
2616static noinline int check_delayed_ref(struct btrfs_trans_handle *trans,
2617 struct btrfs_root *root,
2618 struct btrfs_path *path,
2619 u64 objectid, u64 offset, u64 bytenr)
2620{
2621 struct btrfs_delayed_ref_head *head;
2622 struct btrfs_delayed_ref_node *ref;
2623 struct btrfs_delayed_data_ref *data_ref;
2624 struct btrfs_delayed_ref_root *delayed_refs;
2625 struct rb_node *node;
2626 int ret = 0;
2627
2628 ret = -ENOENT;
2629 delayed_refs = &trans->transaction->delayed_refs;
2630 spin_lock(&delayed_refs->lock);
2631 head = btrfs_find_delayed_ref_head(trans, bytenr);
2632 if (!head)
2633 goto out;
2634
2635 if (!mutex_trylock(&head->mutex)) {
2636 atomic_inc(&head->node.refs);
2637 spin_unlock(&delayed_refs->lock);
2638
2639 btrfs_release_path(path);
2640
2641
2642
2643
2644
2645 mutex_lock(&head->mutex);
2646 mutex_unlock(&head->mutex);
2647 btrfs_put_delayed_ref(&head->node);
2648 return -EAGAIN;
2649 }
2650
2651 node = rb_prev(&head->node.rb_node);
2652 if (!node)
2653 goto out_unlock;
2654
2655 ref = rb_entry(node, struct btrfs_delayed_ref_node, rb_node);
2656
2657 if (ref->bytenr != bytenr)
2658 goto out_unlock;
2659
2660 ret = 1;
2661 if (ref->type != BTRFS_EXTENT_DATA_REF_KEY)
2662 goto out_unlock;
2663
2664 data_ref = btrfs_delayed_node_to_data_ref(ref);
2665
2666 node = rb_prev(node);
2667 if (node) {
2668 int seq = ref->seq;
2669
2670 ref = rb_entry(node, struct btrfs_delayed_ref_node, rb_node);
2671 if (ref->bytenr == bytenr && ref->seq == seq)
2672 goto out_unlock;
2673 }
2674
2675 if (data_ref->root != root->root_key.objectid ||
2676 data_ref->objectid != objectid || data_ref->offset != offset)
2677 goto out_unlock;
2678
2679 ret = 0;
2680out_unlock:
2681 mutex_unlock(&head->mutex);
2682out:
2683 spin_unlock(&delayed_refs->lock);
2684 return ret;
2685}
2686
2687static noinline int check_committed_ref(struct btrfs_trans_handle *trans,
2688 struct btrfs_root *root,
2689 struct btrfs_path *path,
2690 u64 objectid, u64 offset, u64 bytenr)
2691{
2692 struct btrfs_root *extent_root = root->fs_info->extent_root;
2693 struct extent_buffer *leaf;
2694 struct btrfs_extent_data_ref *ref;
2695 struct btrfs_extent_inline_ref *iref;
2696 struct btrfs_extent_item *ei;
2697 struct btrfs_key key;
2698 u32 item_size;
2699 int ret;
2700
2701 key.objectid = bytenr;
2702 key.offset = (u64)-1;
2703 key.type = BTRFS_EXTENT_ITEM_KEY;
2704
2705 ret = btrfs_search_slot(NULL, extent_root, &key, path, 0, 0);
2706 if (ret < 0)
2707 goto out;
2708 BUG_ON(ret == 0);
2709
2710 ret = -ENOENT;
2711 if (path->slots[0] == 0)
2712 goto out;
2713
2714 path->slots[0]--;
2715 leaf = path->nodes[0];
2716 btrfs_item_key_to_cpu(leaf, &key, path->slots[0]);
2717
2718 if (key.objectid != bytenr || key.type != BTRFS_EXTENT_ITEM_KEY)
2719 goto out;
2720
2721 ret = 1;
2722 item_size = btrfs_item_size_nr(leaf, path->slots[0]);
2723#ifdef BTRFS_COMPAT_EXTENT_TREE_V0
2724 if (item_size < sizeof(*ei)) {
2725 WARN_ON(item_size != sizeof(struct btrfs_extent_item_v0));
2726 goto out;
2727 }
2728#endif
2729 ei = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item);
2730
2731 if (item_size != sizeof(*ei) +
2732 btrfs_extent_inline_ref_size(BTRFS_EXTENT_DATA_REF_KEY))
2733 goto out;
2734
2735 if (btrfs_extent_generation(leaf, ei) <=
2736 btrfs_root_last_snapshot(&root->root_item))
2737 goto out;
2738
2739 iref = (struct btrfs_extent_inline_ref *)(ei + 1);
2740 if (btrfs_extent_inline_ref_type(leaf, iref) !=
2741 BTRFS_EXTENT_DATA_REF_KEY)
2742 goto out;
2743
2744 ref = (struct btrfs_extent_data_ref *)(&iref->offset);
2745 if (btrfs_extent_refs(leaf, ei) !=
2746 btrfs_extent_data_ref_count(leaf, ref) ||
2747 btrfs_extent_data_ref_root(leaf, ref) !=
2748 root->root_key.objectid ||
2749 btrfs_extent_data_ref_objectid(leaf, ref) != objectid ||
2750 btrfs_extent_data_ref_offset(leaf, ref) != offset)
2751 goto out;
2752
2753 ret = 0;
2754out:
2755 return ret;
2756}
2757
2758int btrfs_cross_ref_exist(struct btrfs_trans_handle *trans,
2759 struct btrfs_root *root,
2760 u64 objectid, u64 offset, u64 bytenr)
2761{
2762 struct btrfs_path *path;
2763 int ret;
2764 int ret2;
2765
2766 path = btrfs_alloc_path();
2767 if (!path)
2768 return -ENOENT;
2769
2770 do {
2771 ret = check_committed_ref(trans, root, path, objectid,
2772 offset, bytenr);
2773 if (ret && ret != -ENOENT)
2774 goto out;
2775
2776 ret2 = check_delayed_ref(trans, root, path, objectid,
2777 offset, bytenr);
2778 } while (ret2 == -EAGAIN);
2779
2780 if (ret2 && ret2 != -ENOENT) {
2781 ret = ret2;
2782 goto out;
2783 }
2784
2785 if (ret != -ENOENT || ret2 != -ENOENT)
2786 ret = 0;
2787out:
2788 btrfs_free_path(path);
2789 if (root->root_key.objectid == BTRFS_DATA_RELOC_TREE_OBJECTID)
2790 WARN_ON(ret > 0);
2791 return ret;
2792}
2793
2794static int __btrfs_mod_ref(struct btrfs_trans_handle *trans,
2795 struct btrfs_root *root,
2796 struct extent_buffer *buf,
2797 int full_backref, int inc, int for_cow)
2798{
2799 u64 bytenr;
2800 u64 num_bytes;
2801 u64 parent;
2802 u64 ref_root;
2803 u32 nritems;
2804 struct btrfs_key key;
2805 struct btrfs_file_extent_item *fi;
2806 int i;
2807 int level;
2808 int ret = 0;
2809 int (*process_func)(struct btrfs_trans_handle *, struct btrfs_root *,
2810 u64, u64, u64, u64, u64, u64, int);
2811
2812 ref_root = btrfs_header_owner(buf);
2813 nritems = btrfs_header_nritems(buf);
2814 level = btrfs_header_level(buf);
2815
2816 if (!root->ref_cows && level == 0)
2817 return 0;
2818
2819 if (inc)
2820 process_func = btrfs_inc_extent_ref;
2821 else
2822 process_func = btrfs_free_extent;
2823
2824 if (full_backref)
2825 parent = buf->start;
2826 else
2827 parent = 0;
2828
2829 for (i = 0; i < nritems; i++) {
2830 if (level == 0) {
2831 btrfs_item_key_to_cpu(buf, &key, i);
2832 if (btrfs_key_type(&key) != BTRFS_EXTENT_DATA_KEY)
2833 continue;
2834 fi = btrfs_item_ptr(buf, i,
2835 struct btrfs_file_extent_item);
2836 if (btrfs_file_extent_type(buf, fi) ==
2837 BTRFS_FILE_EXTENT_INLINE)
2838 continue;
2839 bytenr = btrfs_file_extent_disk_bytenr(buf, fi);
2840 if (bytenr == 0)
2841 continue;
2842
2843 num_bytes = btrfs_file_extent_disk_num_bytes(buf, fi);
2844 key.offset -= btrfs_file_extent_offset(buf, fi);
2845 ret = process_func(trans, root, bytenr, num_bytes,
2846 parent, ref_root, key.objectid,
2847 key.offset, for_cow);
2848 if (ret)
2849 goto fail;
2850 } else {
2851 bytenr = btrfs_node_blockptr(buf, i);
2852 num_bytes = btrfs_level_size(root, level - 1);
2853 ret = process_func(trans, root, bytenr, num_bytes,
2854 parent, ref_root, level - 1, 0,
2855 for_cow);
2856 if (ret)
2857 goto fail;
2858 }
2859 }
2860 return 0;
2861fail:
2862 return ret;
2863}
2864
2865int btrfs_inc_ref(struct btrfs_trans_handle *trans, struct btrfs_root *root,
2866 struct extent_buffer *buf, int full_backref, int for_cow)
2867{
2868 return __btrfs_mod_ref(trans, root, buf, full_backref, 1, for_cow);
2869}
2870
2871int btrfs_dec_ref(struct btrfs_trans_handle *trans, struct btrfs_root *root,
2872 struct extent_buffer *buf, int full_backref, int for_cow)
2873{
2874 return __btrfs_mod_ref(trans, root, buf, full_backref, 0, for_cow);
2875}
2876
2877static int write_one_cache_group(struct btrfs_trans_handle *trans,
2878 struct btrfs_root *root,
2879 struct btrfs_path *path,
2880 struct btrfs_block_group_cache *cache)
2881{
2882 int ret;
2883 struct btrfs_root *extent_root = root->fs_info->extent_root;
2884 unsigned long bi;
2885 struct extent_buffer *leaf;
2886
2887 ret = btrfs_search_slot(trans, extent_root, &cache->key, path, 0, 1);
2888 if (ret < 0)
2889 goto fail;
2890 BUG_ON(ret);
2891
2892 leaf = path->nodes[0];
2893 bi = btrfs_item_ptr_offset(leaf, path->slots[0]);
2894 write_extent_buffer(leaf, &cache->item, bi, sizeof(cache->item));
2895 btrfs_mark_buffer_dirty(leaf);
2896 btrfs_release_path(path);
2897fail:
2898 if (ret) {
2899 btrfs_abort_transaction(trans, root, ret);
2900 return ret;
2901 }
2902 return 0;
2903
2904}
2905
2906static struct btrfs_block_group_cache *
2907next_block_group(struct btrfs_root *root,
2908 struct btrfs_block_group_cache *cache)
2909{
2910 struct rb_node *node;
2911 spin_lock(&root->fs_info->block_group_cache_lock);
2912 node = rb_next(&cache->cache_node);
2913 btrfs_put_block_group(cache);
2914 if (node) {
2915 cache = rb_entry(node, struct btrfs_block_group_cache,
2916 cache_node);
2917 btrfs_get_block_group(cache);
2918 } else
2919 cache = NULL;
2920 spin_unlock(&root->fs_info->block_group_cache_lock);
2921 return cache;
2922}
2923
2924static int cache_save_setup(struct btrfs_block_group_cache *block_group,
2925 struct btrfs_trans_handle *trans,
2926 struct btrfs_path *path)
2927{
2928 struct btrfs_root *root = block_group->fs_info->tree_root;
2929 struct inode *inode = NULL;
2930 u64 alloc_hint = 0;
2931 int dcs = BTRFS_DC_ERROR;
2932 int num_pages = 0;
2933 int retries = 0;
2934 int ret = 0;
2935
2936
2937
2938
2939
2940 if (block_group->key.offset < (100 * 1024 * 1024)) {
2941 spin_lock(&block_group->lock);
2942 block_group->disk_cache_state = BTRFS_DC_WRITTEN;
2943 spin_unlock(&block_group->lock);
2944 return 0;
2945 }
2946
2947again:
2948 inode = lookup_free_space_inode(root, block_group, path);
2949 if (IS_ERR(inode) && PTR_ERR(inode) != -ENOENT) {
2950 ret = PTR_ERR(inode);
2951 btrfs_release_path(path);
2952 goto out;
2953 }
2954
2955 if (IS_ERR(inode)) {
2956 BUG_ON(retries);
2957 retries++;
2958
2959 if (block_group->ro)
2960 goto out_free;
2961
2962 ret = create_free_space_inode(root, trans, block_group, path);
2963 if (ret)
2964 goto out_free;
2965 goto again;
2966 }
2967
2968
2969 if (block_group->cache_generation == trans->transid &&
2970 i_size_read(inode)) {
2971 dcs = BTRFS_DC_SETUP;
2972 goto out_put;
2973 }
2974
2975
2976
2977
2978
2979
2980 BTRFS_I(inode)->generation = 0;
2981 ret = btrfs_update_inode(trans, root, inode);
2982 WARN_ON(ret);
2983
2984 if (i_size_read(inode) > 0) {
2985 ret = btrfs_truncate_free_space_cache(root, trans, path,
2986 inode);
2987 if (ret)
2988 goto out_put;
2989 }
2990
2991 spin_lock(&block_group->lock);
2992 if (block_group->cached != BTRFS_CACHE_FINISHED ||
2993 !btrfs_test_opt(root, SPACE_CACHE)) {
2994
2995
2996
2997
2998
2999 dcs = BTRFS_DC_WRITTEN;
3000 spin_unlock(&block_group->lock);
3001 goto out_put;
3002 }
3003 spin_unlock(&block_group->lock);
3004
3005
3006
3007
3008
3009
3010
3011 num_pages = (int)div64_u64(block_group->key.offset, 256 * 1024 * 1024);
3012 if (!num_pages)
3013 num_pages = 1;
3014
3015 num_pages *= 16;
3016 num_pages *= PAGE_CACHE_SIZE;
3017
3018 ret = btrfs_check_data_free_space(inode, num_pages);
3019 if (ret)
3020 goto out_put;
3021
3022 ret = btrfs_prealloc_file_range_trans(inode, trans, 0, 0, num_pages,
3023 num_pages, num_pages,
3024 &alloc_hint);
3025 if (!ret)
3026 dcs = BTRFS_DC_SETUP;
3027 btrfs_free_reserved_data_space(inode, num_pages);
3028
3029out_put:
3030 iput(inode);
3031out_free:
3032 btrfs_release_path(path);
3033out:
3034 spin_lock(&block_group->lock);
3035 if (!ret && dcs == BTRFS_DC_SETUP)
3036 block_group->cache_generation = trans->transid;
3037 block_group->disk_cache_state = dcs;
3038 spin_unlock(&block_group->lock);
3039
3040 return ret;
3041}
3042
3043int btrfs_write_dirty_block_groups(struct btrfs_trans_handle *trans,
3044 struct btrfs_root *root)
3045{
3046 struct btrfs_block_group_cache *cache;
3047 int err = 0;
3048 struct btrfs_path *path;
3049 u64 last = 0;
3050
3051 path = btrfs_alloc_path();
3052 if (!path)
3053 return -ENOMEM;
3054
3055again:
3056 while (1) {
3057 cache = btrfs_lookup_first_block_group(root->fs_info, last);
3058 while (cache) {
3059 if (cache->disk_cache_state == BTRFS_DC_CLEAR)
3060 break;
3061 cache = next_block_group(root, cache);
3062 }
3063 if (!cache) {
3064 if (last == 0)
3065 break;
3066 last = 0;
3067 continue;
3068 }
3069 err = cache_save_setup(cache, trans, path);
3070 last = cache->key.objectid + cache->key.offset;
3071 btrfs_put_block_group(cache);
3072 }
3073
3074 while (1) {
3075 if (last == 0) {
3076 err = btrfs_run_delayed_refs(trans, root,
3077 (unsigned long)-1);
3078 if (err)
3079 goto out;
3080 }
3081
3082 cache = btrfs_lookup_first_block_group(root->fs_info, last);
3083 while (cache) {
3084 if (cache->disk_cache_state == BTRFS_DC_CLEAR) {
3085 btrfs_put_block_group(cache);
3086 goto again;
3087 }
3088
3089 if (cache->dirty)
3090 break;
3091 cache = next_block_group(root, cache);
3092 }
3093 if (!cache) {
3094 if (last == 0)
3095 break;
3096 last = 0;
3097 continue;
3098 }
3099
3100 if (cache->disk_cache_state == BTRFS_DC_SETUP)
3101 cache->disk_cache_state = BTRFS_DC_NEED_WRITE;
3102 cache->dirty = 0;
3103 last = cache->key.objectid + cache->key.offset;
3104
3105 err = write_one_cache_group(trans, root, path, cache);
3106 if (err)
3107 goto out;
3108
3109 btrfs_put_block_group(cache);
3110 }
3111
3112 while (1) {
3113
3114
3115
3116
3117
3118 if (last == 0) {
3119 err = btrfs_run_delayed_refs(trans, root,
3120 (unsigned long)-1);
3121 if (err)
3122 goto out;
3123 }
3124
3125 cache = btrfs_lookup_first_block_group(root->fs_info, last);
3126 while (cache) {
3127
3128
3129
3130
3131
3132 if (cache->dirty) {
3133 btrfs_put_block_group(cache);
3134 goto again;
3135 }
3136 if (cache->disk_cache_state == BTRFS_DC_NEED_WRITE)
3137 break;
3138 cache = next_block_group(root, cache);
3139 }
3140 if (!cache) {
3141 if (last == 0)
3142 break;
3143 last = 0;
3144 continue;
3145 }
3146
3147 err = btrfs_write_out_cache(root, trans, cache, path);
3148
3149
3150
3151
3152
3153 if (!err && cache->disk_cache_state == BTRFS_DC_NEED_WRITE)
3154 cache->disk_cache_state = BTRFS_DC_WRITTEN;
3155 last = cache->key.objectid + cache->key.offset;
3156 btrfs_put_block_group(cache);
3157 }
3158out:
3159
3160 btrfs_free_path(path);
3161 return err;
3162}
3163
3164int btrfs_extent_readonly(struct btrfs_root *root, u64 bytenr)
3165{
3166 struct btrfs_block_group_cache *block_group;
3167 int readonly = 0;
3168
3169 block_group = btrfs_lookup_block_group(root->fs_info, bytenr);
3170 if (!block_group || block_group->ro)
3171 readonly = 1;
3172 if (block_group)
3173 btrfs_put_block_group(block_group);
3174 return readonly;
3175}
3176
3177static int update_space_info(struct btrfs_fs_info *info, u64 flags,
3178 u64 total_bytes, u64 bytes_used,
3179 struct btrfs_space_info **space_info)
3180{
3181 struct btrfs_space_info *found;
3182 int i;
3183 int factor;
3184
3185 if (flags & (BTRFS_BLOCK_GROUP_DUP | BTRFS_BLOCK_GROUP_RAID1 |
3186 BTRFS_BLOCK_GROUP_RAID10))
3187 factor = 2;
3188 else
3189 factor = 1;
3190
3191 found = __find_space_info(info, flags);
3192 if (found) {
3193 spin_lock(&found->lock);
3194 found->total_bytes += total_bytes;
3195 found->disk_total += total_bytes * factor;
3196 found->bytes_used += bytes_used;
3197 found->disk_used += bytes_used * factor;
3198 found->full = 0;
3199 spin_unlock(&found->lock);
3200 *space_info = found;
3201 return 0;
3202 }
3203 found = kzalloc(sizeof(*found), GFP_NOFS);
3204 if (!found)
3205 return -ENOMEM;
3206
3207 for (i = 0; i < BTRFS_NR_RAID_TYPES; i++)
3208 INIT_LIST_HEAD(&found->block_groups[i]);
3209 init_rwsem(&found->groups_sem);
3210 spin_lock_init(&found->lock);
3211 found->flags = flags & BTRFS_BLOCK_GROUP_TYPE_MASK;
3212 found->total_bytes = total_bytes;
3213 found->disk_total = total_bytes * factor;
3214 found->bytes_used = bytes_used;
3215 found->disk_used = bytes_used * factor;
3216 found->bytes_pinned = 0;
3217 found->bytes_reserved = 0;
3218 found->bytes_readonly = 0;
3219 found->bytes_may_use = 0;
3220 found->full = 0;
3221 found->force_alloc = CHUNK_ALLOC_NO_FORCE;
3222 found->chunk_alloc = 0;
3223 found->flush = 0;
3224 init_waitqueue_head(&found->wait);
3225 *space_info = found;
3226 list_add_rcu(&found->list, &info->space_info);
3227 if (flags & BTRFS_BLOCK_GROUP_DATA)
3228 info->data_sinfo = found;
3229 return 0;
3230}
3231
3232static void set_avail_alloc_bits(struct btrfs_fs_info *fs_info, u64 flags)
3233{
3234 u64 extra_flags = chunk_to_extended(flags) &
3235 BTRFS_EXTENDED_PROFILE_MASK;
3236
3237 if (flags & BTRFS_BLOCK_GROUP_DATA)
3238 fs_info->avail_data_alloc_bits |= extra_flags;
3239 if (flags & BTRFS_BLOCK_GROUP_METADATA)
3240 fs_info->avail_metadata_alloc_bits |= extra_flags;
3241 if (flags & BTRFS_BLOCK_GROUP_SYSTEM)
3242 fs_info->avail_system_alloc_bits |= extra_flags;
3243}
3244
3245
3246
3247
3248
3249
3250
3251static u64 get_restripe_target(struct btrfs_fs_info *fs_info, u64 flags)
3252{
3253 struct btrfs_balance_control *bctl = fs_info->balance_ctl;
3254 u64 target = 0;
3255
3256 if (!bctl)
3257 return 0;
3258
3259 if (flags & BTRFS_BLOCK_GROUP_DATA &&
3260 bctl->data.flags & BTRFS_BALANCE_ARGS_CONVERT) {
3261 target = BTRFS_BLOCK_GROUP_DATA | bctl->data.target;
3262 } else if (flags & BTRFS_BLOCK_GROUP_SYSTEM &&
3263 bctl->sys.flags & BTRFS_BALANCE_ARGS_CONVERT) {
3264 target = BTRFS_BLOCK_GROUP_SYSTEM | bctl->sys.target;
3265 } else if (flags & BTRFS_BLOCK_GROUP_METADATA &&
3266 bctl->meta.flags & BTRFS_BALANCE_ARGS_CONVERT) {
3267 target = BTRFS_BLOCK_GROUP_METADATA | bctl->meta.target;
3268 }
3269
3270 return target;
3271}
3272
3273
3274
3275
3276
3277
3278
3279
3280u64 btrfs_reduce_alloc_profile(struct btrfs_root *root, u64 flags)
3281{
3282
3283
3284
3285
3286
3287 u64 num_devices = root->fs_info->fs_devices->rw_devices +
3288 root->fs_info->fs_devices->missing_devices;
3289 u64 target;
3290
3291
3292
3293
3294
3295 spin_lock(&root->fs_info->balance_lock);
3296 target = get_restripe_target(root->fs_info, flags);
3297 if (target) {
3298
3299 if ((flags & target) & BTRFS_EXTENDED_PROFILE_MASK) {
3300 spin_unlock(&root->fs_info->balance_lock);
3301 return extended_to_chunk(target);
3302 }
3303 }
3304 spin_unlock(&root->fs_info->balance_lock);
3305
3306 if (num_devices == 1)
3307 flags &= ~(BTRFS_BLOCK_GROUP_RAID1 | BTRFS_BLOCK_GROUP_RAID0);
3308 if (num_devices < 4)
3309 flags &= ~BTRFS_BLOCK_GROUP_RAID10;
3310
3311 if ((flags & BTRFS_BLOCK_GROUP_DUP) &&
3312 (flags & (BTRFS_BLOCK_GROUP_RAID1 |
3313 BTRFS_BLOCK_GROUP_RAID10))) {
3314 flags &= ~BTRFS_BLOCK_GROUP_DUP;
3315 }
3316
3317 if ((flags & BTRFS_BLOCK_GROUP_RAID1) &&
3318 (flags & BTRFS_BLOCK_GROUP_RAID10)) {
3319 flags &= ~BTRFS_BLOCK_GROUP_RAID1;
3320 }
3321
3322 if ((flags & BTRFS_BLOCK_GROUP_RAID0) &&
3323 ((flags & BTRFS_BLOCK_GROUP_RAID1) |
3324 (flags & BTRFS_BLOCK_GROUP_RAID10) |
3325 (flags & BTRFS_BLOCK_GROUP_DUP))) {
3326 flags &= ~BTRFS_BLOCK_GROUP_RAID0;
3327 }
3328
3329 return extended_to_chunk(flags);
3330}
3331
3332static u64 get_alloc_profile(struct btrfs_root *root, u64 flags)
3333{
3334 if (flags & BTRFS_BLOCK_GROUP_DATA)
3335 flags |= root->fs_info->avail_data_alloc_bits;
3336 else if (flags & BTRFS_BLOCK_GROUP_SYSTEM)
3337 flags |= root->fs_info->avail_system_alloc_bits;
3338 else if (flags & BTRFS_BLOCK_GROUP_METADATA)
3339 flags |= root->fs_info->avail_metadata_alloc_bits;
3340
3341 return btrfs_reduce_alloc_profile(root, flags);
3342}
3343
3344u64 btrfs_get_alloc_profile(struct btrfs_root *root, int data)
3345{
3346 u64 flags;
3347
3348 if (data)
3349 flags = BTRFS_BLOCK_GROUP_DATA;
3350 else if (root == root->fs_info->chunk_root)
3351 flags = BTRFS_BLOCK_GROUP_SYSTEM;
3352 else
3353 flags = BTRFS_BLOCK_GROUP_METADATA;
3354
3355 return get_alloc_profile(root, flags);
3356}
3357
3358
3359
3360
3361
3362int btrfs_check_data_free_space(struct inode *inode, u64 bytes)
3363{
3364 struct btrfs_space_info *data_sinfo;
3365 struct btrfs_root *root = BTRFS_I(inode)->root;
3366 struct btrfs_fs_info *fs_info = root->fs_info;
3367 u64 used;
3368 int ret = 0, committed = 0, alloc_chunk = 1;
3369
3370
3371 bytes = (bytes + root->sectorsize - 1) & ~((u64)root->sectorsize - 1);
3372
3373 if (root == root->fs_info->tree_root ||
3374 BTRFS_I(inode)->location.objectid == BTRFS_FREE_INO_OBJECTID) {
3375 alloc_chunk = 0;
3376 committed = 1;
3377 }
3378
3379 data_sinfo = fs_info->data_sinfo;
3380 if (!data_sinfo)
3381 goto alloc;
3382
3383again:
3384
3385 spin_lock(&data_sinfo->lock);
3386 used = data_sinfo->bytes_used + data_sinfo->bytes_reserved +
3387 data_sinfo->bytes_pinned + data_sinfo->bytes_readonly +
3388 data_sinfo->bytes_may_use;
3389
3390 if (used + bytes > data_sinfo->total_bytes) {
3391 struct btrfs_trans_handle *trans;
3392
3393
3394
3395
3396
3397 if (!data_sinfo->full && alloc_chunk) {
3398 u64 alloc_target;
3399
3400 data_sinfo->force_alloc = CHUNK_ALLOC_FORCE;
3401 spin_unlock(&data_sinfo->lock);
3402alloc:
3403 alloc_target = btrfs_get_alloc_profile(root, 1);
3404 trans = btrfs_join_transaction(root);
3405 if (IS_ERR(trans))
3406 return PTR_ERR(trans);
3407
3408 ret = do_chunk_alloc(trans, root->fs_info->extent_root,
3409 bytes + 2 * 1024 * 1024,
3410 alloc_target,
3411 CHUNK_ALLOC_NO_FORCE);
3412 btrfs_end_transaction(trans, root);
3413 if (ret < 0) {
3414 if (ret != -ENOSPC)
3415 return ret;
3416 else
3417 goto commit_trans;
3418 }
3419
3420 if (!data_sinfo)
3421 data_sinfo = fs_info->data_sinfo;
3422
3423 goto again;
3424 }
3425
3426
3427
3428
3429
3430 if (data_sinfo->bytes_pinned < bytes)
3431 committed = 1;
3432 spin_unlock(&data_sinfo->lock);
3433
3434
3435commit_trans:
3436 if (!committed &&
3437 !atomic_read(&root->fs_info->open_ioctl_trans)) {
3438 committed = 1;
3439 trans = btrfs_join_transaction(root);
3440 if (IS_ERR(trans))
3441 return PTR_ERR(trans);
3442 ret = btrfs_commit_transaction(trans, root);
3443 if (ret)
3444 return ret;
3445 goto again;
3446 }
3447
3448 return -ENOSPC;
3449 }
3450 data_sinfo->bytes_may_use += bytes;
3451 trace_btrfs_space_reservation(root->fs_info, "space_info",
3452 data_sinfo->flags, bytes, 1);
3453 spin_unlock(&data_sinfo->lock);
3454
3455 return 0;
3456}
3457
3458
3459
3460
3461void btrfs_free_reserved_data_space(struct inode *inode, u64 bytes)
3462{
3463 struct btrfs_root *root = BTRFS_I(inode)->root;
3464 struct btrfs_space_info *data_sinfo;
3465
3466
3467 bytes = (bytes + root->sectorsize - 1) & ~((u64)root->sectorsize - 1);
3468
3469 data_sinfo = root->fs_info->data_sinfo;
3470 spin_lock(&data_sinfo->lock);
3471 data_sinfo->bytes_may_use -= bytes;
3472 trace_btrfs_space_reservation(root->fs_info, "space_info",
3473 data_sinfo->flags, bytes, 0);
3474 spin_unlock(&data_sinfo->lock);
3475}
3476
3477static void force_metadata_allocation(struct btrfs_fs_info *info)
3478{
3479 struct list_head *head = &info->space_info;
3480 struct btrfs_space_info *found;
3481
3482 rcu_read_lock();
3483 list_for_each_entry_rcu(found, head, list) {
3484 if (found->flags & BTRFS_BLOCK_GROUP_METADATA)
3485 found->force_alloc = CHUNK_ALLOC_FORCE;
3486 }
3487 rcu_read_unlock();
3488}
3489
3490static int should_alloc_chunk(struct btrfs_root *root,
3491 struct btrfs_space_info *sinfo, u64 alloc_bytes,
3492 int force)
3493{
3494 struct btrfs_block_rsv *global_rsv = &root->fs_info->global_block_rsv;
3495 u64 num_bytes = sinfo->total_bytes - sinfo->bytes_readonly;
3496 u64 num_allocated = sinfo->bytes_used + sinfo->bytes_reserved;
3497 u64 thresh;
3498
3499 if (force == CHUNK_ALLOC_FORCE)
3500 return 1;
3501
3502
3503
3504
3505
3506
3507 num_allocated += global_rsv->size;
3508
3509
3510
3511
3512
3513 if (force == CHUNK_ALLOC_LIMITED) {
3514 thresh = btrfs_super_total_bytes(root->fs_info->super_copy);
3515 thresh = max_t(u64, 64 * 1024 * 1024,
3516 div_factor_fine(thresh, 1));
3517
3518 if (num_bytes - num_allocated < thresh)
3519 return 1;
3520 }
3521 thresh = btrfs_super_total_bytes(root->fs_info->super_copy);
3522
3523
3524 thresh = max_t(u64, 256 * 1024 * 1024, div_factor_fine(thresh, 2));
3525
3526 if (sinfo->flags & BTRFS_BLOCK_GROUP_SYSTEM)
3527 thresh = 32 * 1024 * 1024;
3528
3529 if (num_bytes > thresh && sinfo->bytes_used < div_factor(num_bytes, 8))
3530 return 0;
3531 return 1;
3532}
3533
3534static u64 get_system_chunk_thresh(struct btrfs_root *root, u64 type)
3535{
3536 u64 num_dev;
3537
3538 if (type & BTRFS_BLOCK_GROUP_RAID10 ||
3539 type & BTRFS_BLOCK_GROUP_RAID0)
3540 num_dev = root->fs_info->fs_devices->rw_devices;
3541 else if (type & BTRFS_BLOCK_GROUP_RAID1)
3542 num_dev = 2;
3543 else
3544 num_dev = 1;
3545
3546
3547 return btrfs_calc_trans_metadata_size(root, num_dev + 1);
3548}
3549
3550static void check_system_chunk(struct btrfs_trans_handle *trans,
3551 struct btrfs_root *root, u64 type)
3552{
3553 struct btrfs_space_info *info;
3554 u64 left;
3555 u64 thresh;
3556
3557 info = __find_space_info(root->fs_info, BTRFS_BLOCK_GROUP_SYSTEM);
3558 spin_lock(&info->lock);
3559 left = info->total_bytes - info->bytes_used - info->bytes_pinned -
3560 info->bytes_reserved - info->bytes_readonly;
3561 spin_unlock(&info->lock);
3562
3563 thresh = get_system_chunk_thresh(root, type);
3564 if (left < thresh && btrfs_test_opt(root, ENOSPC_DEBUG)) {
3565 printk(KERN_INFO "left=%llu, need=%llu, flags=%llu\n",
3566 left, thresh, type);
3567 dump_space_info(info, 0, 0);
3568 }
3569
3570 if (left < thresh) {
3571 u64 flags;
3572
3573 flags = btrfs_get_alloc_profile(root->fs_info->chunk_root, 0);
3574 btrfs_alloc_chunk(trans, root, flags);
3575 }
3576}
3577
3578static int do_chunk_alloc(struct btrfs_trans_handle *trans,
3579 struct btrfs_root *extent_root, u64 alloc_bytes,
3580 u64 flags, int force)
3581{
3582 struct btrfs_space_info *space_info;
3583 struct btrfs_fs_info *fs_info = extent_root->fs_info;
3584 int wait_for_alloc = 0;
3585 int ret = 0;
3586
3587 space_info = __find_space_info(extent_root->fs_info, flags);
3588 if (!space_info) {
3589 ret = update_space_info(extent_root->fs_info, flags,
3590 0, 0, &space_info);
3591 BUG_ON(ret);
3592 }
3593 BUG_ON(!space_info);
3594
3595again:
3596 spin_lock(&space_info->lock);
3597 if (force < space_info->force_alloc)
3598 force = space_info->force_alloc;
3599 if (space_info->full) {
3600 spin_unlock(&space_info->lock);
3601 return 0;
3602 }
3603
3604 if (!should_alloc_chunk(extent_root, space_info, alloc_bytes, force)) {
3605 spin_unlock(&space_info->lock);
3606 return 0;
3607 } else if (space_info->chunk_alloc) {
3608 wait_for_alloc = 1;
3609 } else {
3610 space_info->chunk_alloc = 1;
3611 }
3612
3613 spin_unlock(&space_info->lock);
3614
3615 mutex_lock(&fs_info->chunk_mutex);
3616
3617
3618
3619
3620
3621
3622
3623 if (wait_for_alloc) {
3624 mutex_unlock(&fs_info->chunk_mutex);
3625 wait_for_alloc = 0;
3626 goto again;
3627 }
3628
3629
3630
3631
3632
3633 if (btrfs_mixed_space_info(space_info))
3634 flags |= (BTRFS_BLOCK_GROUP_DATA | BTRFS_BLOCK_GROUP_METADATA);
3635
3636
3637
3638
3639
3640
3641 if (flags & BTRFS_BLOCK_GROUP_DATA && fs_info->metadata_ratio) {
3642 fs_info->data_chunk_allocations++;
3643 if (!(fs_info->data_chunk_allocations %
3644 fs_info->metadata_ratio))
3645 force_metadata_allocation(fs_info);
3646 }
3647
3648
3649
3650
3651
3652 check_system_chunk(trans, extent_root, flags);
3653
3654 ret = btrfs_alloc_chunk(trans, extent_root, flags);
3655 if (ret < 0 && ret != -ENOSPC)
3656 goto out;
3657
3658 spin_lock(&space_info->lock);
3659 if (ret)
3660 space_info->full = 1;
3661 else
3662 ret = 1;
3663
3664 space_info->force_alloc = CHUNK_ALLOC_NO_FORCE;
3665 space_info->chunk_alloc = 0;
3666 spin_unlock(&space_info->lock);
3667out:
3668 mutex_unlock(&fs_info->chunk_mutex);
3669 return ret;
3670}
3671
3672
3673
3674
3675static void shrink_delalloc(struct btrfs_root *root, u64 to_reclaim, u64 orig,
3676 bool wait_ordered)
3677{
3678 struct btrfs_block_rsv *block_rsv;
3679 struct btrfs_space_info *space_info;
3680 struct btrfs_trans_handle *trans;
3681 u64 delalloc_bytes;
3682 u64 max_reclaim;
3683 long time_left;
3684 unsigned long nr_pages = (2 * 1024 * 1024) >> PAGE_CACHE_SHIFT;
3685 int loops = 0;
3686
3687 trans = (struct btrfs_trans_handle *)current->journal_info;
3688 block_rsv = &root->fs_info->delalloc_block_rsv;
3689 space_info = block_rsv->space_info;
3690
3691 smp_mb();
3692 delalloc_bytes = root->fs_info->delalloc_bytes;
3693 if (delalloc_bytes == 0) {
3694 if (trans)
3695 return;
3696 btrfs_wait_ordered_extents(root, 0, 0);
3697 return;
3698 }
3699
3700 while (delalloc_bytes && loops < 3) {
3701 max_reclaim = min(delalloc_bytes, to_reclaim);
3702 nr_pages = max_reclaim >> PAGE_CACHE_SHIFT;
3703 writeback_inodes_sb_nr_if_idle(root->fs_info->sb, nr_pages,
3704 WB_REASON_FS_FREE_SPACE);
3705
3706 spin_lock(&space_info->lock);
3707 if (space_info->bytes_used + space_info->bytes_reserved +
3708 space_info->bytes_pinned + space_info->bytes_readonly +
3709 space_info->bytes_may_use + orig <=
3710 space_info->total_bytes) {
3711 spin_unlock(&space_info->lock);
3712 break;
3713 }
3714 spin_unlock(&space_info->lock);
3715
3716 loops++;
3717 if (wait_ordered && !trans) {
3718 btrfs_wait_ordered_extents(root, 0, 0);
3719 } else {
3720 time_left = schedule_timeout_killable(1);
3721 if (time_left)
3722 break;
3723 }
3724 smp_mb();
3725 delalloc_bytes = root->fs_info->delalloc_bytes;
3726 }
3727}
3728
3729
3730
3731
3732
3733
3734
3735
3736
3737
3738
3739static int may_commit_transaction(struct btrfs_root *root,
3740 struct btrfs_space_info *space_info,
3741 u64 bytes, int force)
3742{
3743 struct btrfs_block_rsv *delayed_rsv = &root->fs_info->delayed_block_rsv;
3744 struct btrfs_trans_handle *trans;
3745
3746 trans = (struct btrfs_trans_handle *)current->journal_info;
3747 if (trans)
3748 return -EAGAIN;
3749
3750 if (force)
3751 goto commit;
3752
3753
3754 spin_lock(&space_info->lock);
3755 if (space_info->bytes_pinned >= bytes) {
3756 spin_unlock(&space_info->lock);
3757 goto commit;
3758 }
3759 spin_unlock(&space_info->lock);
3760
3761
3762
3763
3764
3765 if (space_info != delayed_rsv->space_info)
3766 return -ENOSPC;
3767
3768 spin_lock(&space_info->lock);
3769 spin_lock(&delayed_rsv->lock);
3770 if (space_info->bytes_pinned + delayed_rsv->size < bytes) {
3771 spin_unlock(&delayed_rsv->lock);
3772 spin_unlock(&space_info->lock);
3773 return -ENOSPC;
3774 }
3775 spin_unlock(&delayed_rsv->lock);
3776 spin_unlock(&space_info->lock);
3777
3778commit:
3779 trans = btrfs_join_transaction(root);
3780 if (IS_ERR(trans))
3781 return -ENOSPC;
3782
3783 return btrfs_commit_transaction(trans, root);
3784}
3785
3786enum flush_state {
3787 FLUSH_DELALLOC = 1,
3788 FLUSH_DELALLOC_WAIT = 2,
3789 FLUSH_DELAYED_ITEMS_NR = 3,
3790 FLUSH_DELAYED_ITEMS = 4,
3791 COMMIT_TRANS = 5,
3792};
3793
3794static int flush_space(struct btrfs_root *root,
3795 struct btrfs_space_info *space_info, u64 num_bytes,
3796 u64 orig_bytes, int state)
3797{
3798 struct btrfs_trans_handle *trans;
3799 int nr;
3800 int ret = 0;
3801
3802 switch (state) {
3803 case FLUSH_DELALLOC:
3804 case FLUSH_DELALLOC_WAIT:
3805 shrink_delalloc(root, num_bytes, orig_bytes,
3806 state == FLUSH_DELALLOC_WAIT);
3807 break;
3808 case FLUSH_DELAYED_ITEMS_NR:
3809 case FLUSH_DELAYED_ITEMS:
3810 if (state == FLUSH_DELAYED_ITEMS_NR) {
3811 u64 bytes = btrfs_calc_trans_metadata_size(root, 1);
3812
3813 nr = (int)div64_u64(num_bytes, bytes);
3814 if (!nr)
3815 nr = 1;
3816 nr *= 2;
3817 } else {
3818 nr = -1;
3819 }
3820 trans = btrfs_join_transaction(root);
3821 if (IS_ERR(trans)) {
3822 ret = PTR_ERR(trans);
3823 break;
3824 }
3825 ret = btrfs_run_delayed_items_nr(trans, root, nr);
3826 btrfs_end_transaction(trans, root);
3827 break;
3828 case COMMIT_TRANS:
3829 ret = may_commit_transaction(root, space_info, orig_bytes, 0);
3830 break;
3831 default:
3832 ret = -ENOSPC;
3833 break;
3834 }
3835
3836 return ret;
3837}
3838
3839
3840
3841
3842
3843
3844
3845
3846
3847
3848
3849
3850
3851
3852static int reserve_metadata_bytes(struct btrfs_root *root,
3853 struct btrfs_block_rsv *block_rsv,
3854 u64 orig_bytes, int flush)
3855{
3856 struct btrfs_space_info *space_info = block_rsv->space_info;
3857 u64 used;
3858 u64 num_bytes = orig_bytes;
3859 int flush_state = FLUSH_DELALLOC;
3860 int ret = 0;
3861 bool flushing = false;
3862 bool committed = false;
3863
3864again:
3865 ret = 0;
3866 spin_lock(&space_info->lock);
3867
3868
3869
3870
3871 while (flush && !flushing && space_info->flush) {
3872 spin_unlock(&space_info->lock);
3873
3874
3875
3876
3877
3878
3879 if (current->journal_info)
3880 return -EAGAIN;
3881 ret = wait_event_killable(space_info->wait, !space_info->flush);
3882
3883 if (ret)
3884 return -EINTR;
3885
3886 spin_lock(&space_info->lock);
3887 }
3888
3889 ret = -ENOSPC;
3890 used = space_info->bytes_used + space_info->bytes_reserved +
3891 space_info->bytes_pinned + space_info->bytes_readonly +
3892 space_info->bytes_may_use;
3893
3894
3895
3896
3897
3898
3899
3900
3901 if (used <= space_info->total_bytes) {
3902 if (used + orig_bytes <= space_info->total_bytes) {
3903 space_info->bytes_may_use += orig_bytes;
3904 trace_btrfs_space_reservation(root->fs_info,
3905 "space_info", space_info->flags, orig_bytes, 1);
3906 ret = 0;
3907 } else {
3908
3909
3910
3911
3912
3913 num_bytes = orig_bytes;
3914 }
3915 } else {
3916
3917
3918
3919
3920
3921 num_bytes = used - space_info->total_bytes +
3922 (orig_bytes * 2);
3923 }
3924
3925 if (ret) {
3926 u64 profile = btrfs_get_alloc_profile(root, 0);
3927 u64 avail;
3928
3929
3930
3931
3932
3933 avail = (space_info->total_bytes - space_info->bytes_used) * 8;
3934 do_div(avail, 10);
3935 if (space_info->bytes_pinned >= avail && flush && !committed) {
3936 space_info->flush = 1;
3937 flushing = true;
3938 spin_unlock(&space_info->lock);
3939 ret = may_commit_transaction(root, space_info,
3940 orig_bytes, 1);
3941 if (ret)
3942 goto out;
3943 committed = true;
3944 goto again;
3945 }
3946
3947 spin_lock(&root->fs_info->free_chunk_lock);
3948 avail = root->fs_info->free_chunk_space;
3949
3950
3951
3952
3953
3954 if (profile & (BTRFS_BLOCK_GROUP_DUP |
3955 BTRFS_BLOCK_GROUP_RAID1 |
3956 BTRFS_BLOCK_GROUP_RAID10))
3957 avail >>= 1;
3958
3959
3960
3961
3962
3963
3964 if (flush)
3965 avail >>= 3;
3966 else
3967 avail >>= 1;
3968 spin_unlock(&root->fs_info->free_chunk_lock);
3969
3970 if (used + num_bytes < space_info->total_bytes + avail) {
3971 space_info->bytes_may_use += orig_bytes;
3972 trace_btrfs_space_reservation(root->fs_info,
3973 "space_info", space_info->flags, orig_bytes, 1);
3974 ret = 0;
3975 }
3976 }
3977
3978
3979
3980
3981
3982
3983 if (ret && flush) {
3984 flushing = true;
3985 space_info->flush = 1;
3986 }
3987
3988 spin_unlock(&space_info->lock);
3989
3990 if (!ret || !flush)
3991 goto out;
3992
3993 ret = flush_space(root, space_info, num_bytes, orig_bytes,
3994 flush_state);
3995 flush_state++;
3996 if (!ret)
3997 goto again;
3998 else if (flush_state <= COMMIT_TRANS)
3999 goto again;
4000
4001out:
4002 if (flushing) {
4003 spin_lock(&space_info->lock);
4004 space_info->flush = 0;
4005 wake_up_all(&space_info->wait);
4006 spin_unlock(&space_info->lock);
4007 }
4008 return ret;
4009}
4010
4011static struct btrfs_block_rsv *get_block_rsv(
4012 const struct btrfs_trans_handle *trans,
4013 const struct btrfs_root *root)
4014{
4015 struct btrfs_block_rsv *block_rsv = NULL;
4016
4017 if (root->ref_cows)
4018 block_rsv = trans->block_rsv;
4019
4020 if (root == root->fs_info->csum_root && trans->adding_csums)
4021 block_rsv = trans->block_rsv;
4022
4023 if (!block_rsv)
4024 block_rsv = root->block_rsv;
4025
4026 if (!block_rsv)
4027 block_rsv = &root->fs_info->empty_block_rsv;
4028
4029 return block_rsv;
4030}
4031
4032static int block_rsv_use_bytes(struct btrfs_block_rsv *block_rsv,
4033 u64 num_bytes)
4034{
4035 int ret = -ENOSPC;
4036 spin_lock(&block_rsv->lock);
4037 if (block_rsv->reserved >= num_bytes) {
4038 block_rsv->reserved -= num_bytes;
4039 if (block_rsv->reserved < block_rsv->size)
4040 block_rsv->full = 0;
4041 ret = 0;
4042 }
4043 spin_unlock(&block_rsv->lock);
4044 return ret;
4045}
4046
4047static void block_rsv_add_bytes(struct btrfs_block_rsv *block_rsv,
4048 u64 num_bytes, int update_size)
4049{
4050 spin_lock(&block_rsv->lock);
4051 block_rsv->reserved += num_bytes;
4052 if (update_size)
4053 block_rsv->size += num_bytes;
4054 else if (block_rsv->reserved >= block_rsv->size)
4055 block_rsv->full = 1;
4056 spin_unlock(&block_rsv->lock);
4057}
4058
4059static void block_rsv_release_bytes(struct btrfs_fs_info *fs_info,
4060 struct btrfs_block_rsv *block_rsv,
4061 struct btrfs_block_rsv *dest, u64 num_bytes)
4062{
4063 struct btrfs_space_info *space_info = block_rsv->space_info;
4064
4065 spin_lock(&block_rsv->lock);
4066 if (num_bytes == (u64)-1)
4067 num_bytes = block_rsv->size;
4068 block_rsv->size -= num_bytes;
4069 if (block_rsv->reserved >= block_rsv->size) {
4070 num_bytes = block_rsv->reserved - block_rsv->size;
4071 block_rsv->reserved = block_rsv->size;
4072 block_rsv->full = 1;
4073 } else {
4074 num_bytes = 0;
4075 }
4076 spin_unlock(&block_rsv->lock);
4077
4078 if (num_bytes > 0) {
4079 if (dest) {
4080 spin_lock(&dest->lock);
4081 if (!dest->full) {
4082 u64 bytes_to_add;
4083
4084 bytes_to_add = dest->size - dest->reserved;
4085 bytes_to_add = min(num_bytes, bytes_to_add);
4086 dest->reserved += bytes_to_add;
4087 if (dest->reserved >= dest->size)
4088 dest->full = 1;
4089 num_bytes -= bytes_to_add;
4090 }
4091 spin_unlock(&dest->lock);
4092 }
4093 if (num_bytes) {
4094 spin_lock(&space_info->lock);
4095 space_info->bytes_may_use -= num_bytes;
4096 trace_btrfs_space_reservation(fs_info, "space_info",
4097 space_info->flags, num_bytes, 0);
4098 space_info->reservation_progress++;
4099 spin_unlock(&space_info->lock);
4100 }
4101 }
4102}
4103
4104static int block_rsv_migrate_bytes(struct btrfs_block_rsv *src,
4105 struct btrfs_block_rsv *dst, u64 num_bytes)
4106{
4107 int ret;
4108
4109 ret = block_rsv_use_bytes(src, num_bytes);
4110 if (ret)
4111 return ret;
4112
4113 block_rsv_add_bytes(dst, num_bytes, 1);
4114 return 0;
4115}
4116
4117void btrfs_init_block_rsv(struct btrfs_block_rsv *rsv)
4118{
4119 memset(rsv, 0, sizeof(*rsv));
4120 spin_lock_init(&rsv->lock);
4121}
4122
4123struct btrfs_block_rsv *btrfs_alloc_block_rsv(struct btrfs_root *root)
4124{
4125 struct btrfs_block_rsv *block_rsv;
4126 struct btrfs_fs_info *fs_info = root->fs_info;
4127
4128 block_rsv = kmalloc(sizeof(*block_rsv), GFP_NOFS);
4129 if (!block_rsv)
4130 return NULL;
4131
4132 btrfs_init_block_rsv(block_rsv);
4133 block_rsv->space_info = __find_space_info(fs_info,
4134 BTRFS_BLOCK_GROUP_METADATA);
4135 return block_rsv;
4136}
4137
4138void btrfs_free_block_rsv(struct btrfs_root *root,
4139 struct btrfs_block_rsv *rsv)
4140{
4141 btrfs_block_rsv_release(root, rsv, (u64)-1);
4142 kfree(rsv);
4143}
4144
4145static inline int __block_rsv_add(struct btrfs_root *root,
4146 struct btrfs_block_rsv *block_rsv,
4147 u64 num_bytes, int flush)
4148{
4149 int ret;
4150
4151 if (num_bytes == 0)
4152 return 0;
4153
4154 ret = reserve_metadata_bytes(root, block_rsv, num_bytes, flush);
4155 if (!ret) {
4156 block_rsv_add_bytes(block_rsv, num_bytes, 1);
4157 return 0;
4158 }
4159
4160 return ret;
4161}
4162
4163int btrfs_block_rsv_add(struct btrfs_root *root,
4164 struct btrfs_block_rsv *block_rsv,
4165 u64 num_bytes)
4166{
4167 return __block_rsv_add(root, block_rsv, num_bytes, 1);
4168}
4169
4170int btrfs_block_rsv_add_noflush(struct btrfs_root *root,
4171 struct btrfs_block_rsv *block_rsv,
4172 u64 num_bytes)
4173{
4174 return __block_rsv_add(root, block_rsv, num_bytes, 0);
4175}
4176
4177int btrfs_block_rsv_check(struct btrfs_root *root,
4178 struct btrfs_block_rsv *block_rsv, int min_factor)
4179{
4180 u64 num_bytes = 0;
4181 int ret = -ENOSPC;
4182
4183 if (!block_rsv)
4184 return 0;
4185
4186 spin_lock(&block_rsv->lock);
4187 num_bytes = div_factor(block_rsv->size, min_factor);
4188 if (block_rsv->reserved >= num_bytes)
4189 ret = 0;
4190 spin_unlock(&block_rsv->lock);
4191
4192 return ret;
4193}
4194
4195static inline int __btrfs_block_rsv_refill(struct btrfs_root *root,
4196 struct btrfs_block_rsv *block_rsv,
4197 u64 min_reserved, int flush)
4198{
4199 u64 num_bytes = 0;
4200 int ret = -ENOSPC;
4201
4202 if (!block_rsv)
4203 return 0;
4204
4205 spin_lock(&block_rsv->lock);
4206 num_bytes = min_reserved;
4207 if (block_rsv->reserved >= num_bytes)
4208 ret = 0;
4209 else
4210 num_bytes -= block_rsv->reserved;
4211 spin_unlock(&block_rsv->lock);
4212
4213 if (!ret)
4214 return 0;
4215
4216 ret = reserve_metadata_bytes(root, block_rsv, num_bytes, flush);
4217 if (!ret) {
4218 block_rsv_add_bytes(block_rsv, num_bytes, 0);
4219 return 0;
4220 }
4221
4222 return ret;
4223}
4224
4225int btrfs_block_rsv_refill(struct btrfs_root *root,
4226 struct btrfs_block_rsv *block_rsv,
4227 u64 min_reserved)
4228{
4229 return __btrfs_block_rsv_refill(root, block_rsv, min_reserved, 1);
4230}
4231
4232int btrfs_block_rsv_refill_noflush(struct btrfs_root *root,
4233 struct btrfs_block_rsv *block_rsv,
4234 u64 min_reserved)
4235{
4236 return __btrfs_block_rsv_refill(root, block_rsv, min_reserved, 0);
4237}
4238
4239int btrfs_block_rsv_migrate(struct btrfs_block_rsv *src_rsv,
4240 struct btrfs_block_rsv *dst_rsv,
4241 u64 num_bytes)
4242{
4243 return block_rsv_migrate_bytes(src_rsv, dst_rsv, num_bytes);
4244}
4245
4246void btrfs_block_rsv_release(struct btrfs_root *root,
4247 struct btrfs_block_rsv *block_rsv,
4248 u64 num_bytes)
4249{
4250 struct btrfs_block_rsv *global_rsv = &root->fs_info->global_block_rsv;
4251 if (global_rsv->full || global_rsv == block_rsv ||
4252 block_rsv->space_info != global_rsv->space_info)
4253 global_rsv = NULL;
4254 block_rsv_release_bytes(root->fs_info, block_rsv, global_rsv,
4255 num_bytes);
4256}
4257
4258
4259
4260
4261
4262
4263static u64 calc_global_metadata_size(struct btrfs_fs_info *fs_info)
4264{
4265 struct btrfs_space_info *sinfo;
4266 u64 num_bytes;
4267 u64 meta_used;
4268 u64 data_used;
4269 int csum_size = btrfs_super_csum_size(fs_info->super_copy);
4270
4271 sinfo = __find_space_info(fs_info, BTRFS_BLOCK_GROUP_DATA);
4272 spin_lock(&sinfo->lock);
4273 data_used = sinfo->bytes_used;
4274 spin_unlock(&sinfo->lock);
4275
4276 sinfo = __find_space_info(fs_info, BTRFS_BLOCK_GROUP_METADATA);
4277 spin_lock(&sinfo->lock);
4278 if (sinfo->flags & BTRFS_BLOCK_GROUP_DATA)
4279 data_used = 0;
4280 meta_used = sinfo->bytes_used;
4281 spin_unlock(&sinfo->lock);
4282
4283 num_bytes = (data_used >> fs_info->sb->s_blocksize_bits) *
4284 csum_size * 2;
4285 num_bytes += div64_u64(data_used + meta_used, 50);
4286
4287 if (num_bytes * 3 > meta_used)
4288 num_bytes = div64_u64(meta_used, 3);
4289
4290 return ALIGN(num_bytes, fs_info->extent_root->leafsize << 10);
4291}
4292
4293static void update_global_block_rsv(struct btrfs_fs_info *fs_info)
4294{
4295 struct btrfs_block_rsv *block_rsv = &fs_info->global_block_rsv;
4296 struct btrfs_space_info *sinfo = block_rsv->space_info;
4297 u64 num_bytes;
4298
4299 num_bytes = calc_global_metadata_size(fs_info);
4300
4301 spin_lock(&sinfo->lock);
4302 spin_lock(&block_rsv->lock);
4303
4304 block_rsv->size = num_bytes;
4305
4306 num_bytes = sinfo->bytes_used + sinfo->bytes_pinned +
4307 sinfo->bytes_reserved + sinfo->bytes_readonly +
4308 sinfo->bytes_may_use;
4309
4310 if (sinfo->total_bytes > num_bytes) {
4311 num_bytes = sinfo->total_bytes - num_bytes;
4312 block_rsv->reserved += num_bytes;
4313 sinfo->bytes_may_use += num_bytes;
4314 trace_btrfs_space_reservation(fs_info, "space_info",
4315 sinfo->flags, num_bytes, 1);
4316 }
4317
4318 if (block_rsv->reserved >= block_rsv->size) {
4319 num_bytes = block_rsv->reserved - block_rsv->size;
4320 sinfo->bytes_may_use -= num_bytes;
4321 trace_btrfs_space_reservation(fs_info, "space_info",
4322 sinfo->flags, num_bytes, 0);
4323 sinfo->reservation_progress++;
4324 block_rsv->reserved = block_rsv->size;
4325 block_rsv->full = 1;
4326 }
4327
4328 spin_unlock(&block_rsv->lock);
4329 spin_unlock(&sinfo->lock);
4330}
4331
4332static void init_global_block_rsv(struct btrfs_fs_info *fs_info)
4333{
4334 struct btrfs_space_info *space_info;
4335
4336 space_info = __find_space_info(fs_info, BTRFS_BLOCK_GROUP_SYSTEM);
4337 fs_info->chunk_block_rsv.space_info = space_info;
4338
4339 space_info = __find_space_info(fs_info, BTRFS_BLOCK_GROUP_METADATA);
4340 fs_info->global_block_rsv.space_info = space_info;
4341 fs_info->delalloc_block_rsv.space_info = space_info;
4342 fs_info->trans_block_rsv.space_info = space_info;
4343 fs_info->empty_block_rsv.space_info = space_info;
4344 fs_info->delayed_block_rsv.space_info = space_info;
4345
4346 fs_info->extent_root->block_rsv = &fs_info->global_block_rsv;
4347 fs_info->csum_root->block_rsv = &fs_info->global_block_rsv;
4348 fs_info->dev_root->block_rsv = &fs_info->global_block_rsv;
4349 fs_info->tree_root->block_rsv = &fs_info->global_block_rsv;
4350 fs_info->chunk_root->block_rsv = &fs_info->chunk_block_rsv;
4351
4352 update_global_block_rsv(fs_info);
4353}
4354
4355static void release_global_block_rsv(struct btrfs_fs_info *fs_info)
4356{
4357 block_rsv_release_bytes(fs_info, &fs_info->global_block_rsv, NULL,
4358 (u64)-1);
4359 WARN_ON(fs_info->delalloc_block_rsv.size > 0);
4360 WARN_ON(fs_info->delalloc_block_rsv.reserved > 0);
4361 WARN_ON(fs_info->trans_block_rsv.size > 0);
4362 WARN_ON(fs_info->trans_block_rsv.reserved > 0);
4363 WARN_ON(fs_info->chunk_block_rsv.size > 0);
4364 WARN_ON(fs_info->chunk_block_rsv.reserved > 0);
4365 WARN_ON(fs_info->delayed_block_rsv.size > 0);
4366 WARN_ON(fs_info->delayed_block_rsv.reserved > 0);
4367}
4368
4369void btrfs_trans_release_metadata(struct btrfs_trans_handle *trans,
4370 struct btrfs_root *root)
4371{
4372 if (!trans->block_rsv)
4373 return;
4374
4375 if (!trans->bytes_reserved)
4376 return;
4377
4378 trace_btrfs_space_reservation(root->fs_info, "transaction",
4379 trans->transid, trans->bytes_reserved, 0);
4380 btrfs_block_rsv_release(root, trans->block_rsv, trans->bytes_reserved);
4381 trans->bytes_reserved = 0;
4382}
4383
4384
4385int btrfs_orphan_reserve_metadata(struct btrfs_trans_handle *trans,
4386 struct inode *inode)
4387{
4388 struct btrfs_root *root = BTRFS_I(inode)->root;
4389 struct btrfs_block_rsv *src_rsv = get_block_rsv(trans, root);
4390 struct btrfs_block_rsv *dst_rsv = root->orphan_block_rsv;
4391
4392
4393
4394
4395
4396
4397 u64 num_bytes = btrfs_calc_trans_metadata_size(root, 1);
4398 trace_btrfs_space_reservation(root->fs_info, "orphan",
4399 btrfs_ino(inode), num_bytes, 1);
4400 return block_rsv_migrate_bytes(src_rsv, dst_rsv, num_bytes);
4401}
4402
4403void btrfs_orphan_release_metadata(struct inode *inode)
4404{
4405 struct btrfs_root *root = BTRFS_I(inode)->root;
4406 u64 num_bytes = btrfs_calc_trans_metadata_size(root, 1);
4407 trace_btrfs_space_reservation(root->fs_info, "orphan",
4408 btrfs_ino(inode), num_bytes, 0);
4409 btrfs_block_rsv_release(root, root->orphan_block_rsv, num_bytes);
4410}
4411
4412int btrfs_snap_reserve_metadata(struct btrfs_trans_handle *trans,
4413 struct btrfs_pending_snapshot *pending)
4414{
4415 struct btrfs_root *root = pending->root;
4416 struct btrfs_block_rsv *src_rsv = get_block_rsv(trans, root);
4417 struct btrfs_block_rsv *dst_rsv = &pending->block_rsv;
4418
4419
4420
4421
4422 u64 num_bytes = btrfs_calc_trans_metadata_size(root, 5);
4423 dst_rsv->space_info = src_rsv->space_info;
4424 return block_rsv_migrate_bytes(src_rsv, dst_rsv, num_bytes);
4425}
4426
4427
4428
4429
4430
4431
4432
4433
4434
4435
4436static unsigned drop_outstanding_extent(struct inode *inode)
4437{
4438 unsigned drop_inode_space = 0;
4439 unsigned dropped_extents = 0;
4440
4441 BUG_ON(!BTRFS_I(inode)->outstanding_extents);
4442 BTRFS_I(inode)->outstanding_extents--;
4443
4444 if (BTRFS_I(inode)->outstanding_extents == 0 &&
4445 test_and_clear_bit(BTRFS_INODE_DELALLOC_META_RESERVED,
4446 &BTRFS_I(inode)->runtime_flags))
4447 drop_inode_space = 1;
4448
4449
4450
4451
4452
4453 if (BTRFS_I(inode)->outstanding_extents >=
4454 BTRFS_I(inode)->reserved_extents)
4455 return drop_inode_space;
4456
4457 dropped_extents = BTRFS_I(inode)->reserved_extents -
4458 BTRFS_I(inode)->outstanding_extents;
4459 BTRFS_I(inode)->reserved_extents -= dropped_extents;
4460 return dropped_extents + drop_inode_space;
4461}
4462
4463
4464
4465
4466
4467
4468
4469
4470
4471
4472
4473
4474
4475
4476
4477
4478
4479
4480
4481static u64 calc_csum_metadata_size(struct inode *inode, u64 num_bytes,
4482 int reserve)
4483{
4484 struct btrfs_root *root = BTRFS_I(inode)->root;
4485 u64 csum_size;
4486 int num_csums_per_leaf;
4487 int num_csums;
4488 int old_csums;
4489
4490 if (BTRFS_I(inode)->flags & BTRFS_INODE_NODATASUM &&
4491 BTRFS_I(inode)->csum_bytes == 0)
4492 return 0;
4493
4494 old_csums = (int)div64_u64(BTRFS_I(inode)->csum_bytes, root->sectorsize);
4495 if (reserve)
4496 BTRFS_I(inode)->csum_bytes += num_bytes;
4497 else
4498 BTRFS_I(inode)->csum_bytes -= num_bytes;
4499 csum_size = BTRFS_LEAF_DATA_SIZE(root) - sizeof(struct btrfs_item);
4500 num_csums_per_leaf = (int)div64_u64(csum_size,
4501 sizeof(struct btrfs_csum_item) +
4502 sizeof(struct btrfs_disk_key));
4503 num_csums = (int)div64_u64(BTRFS_I(inode)->csum_bytes, root->sectorsize);
4504 num_csums = num_csums + num_csums_per_leaf - 1;
4505 num_csums = num_csums / num_csums_per_leaf;
4506
4507 old_csums = old_csums + num_csums_per_leaf - 1;
4508 old_csums = old_csums / num_csums_per_leaf;
4509
4510
4511 if (old_csums == num_csums)
4512 return 0;
4513
4514 if (reserve)
4515 return btrfs_calc_trans_metadata_size(root,
4516 num_csums - old_csums);
4517
4518 return btrfs_calc_trans_metadata_size(root, old_csums - num_csums);
4519}
4520
4521int btrfs_delalloc_reserve_metadata(struct inode *inode, u64 num_bytes)
4522{
4523 struct btrfs_root *root = BTRFS_I(inode)->root;
4524 struct btrfs_block_rsv *block_rsv = &root->fs_info->delalloc_block_rsv;
4525 u64 to_reserve = 0;
4526 u64 csum_bytes;
4527 unsigned nr_extents = 0;
4528 int extra_reserve = 0;
4529 int flush = 1;
4530 int ret;
4531
4532
4533 if (btrfs_is_free_space_inode(inode))
4534 flush = 0;
4535
4536 if (flush && btrfs_transaction_in_commit(root->fs_info))
4537 schedule_timeout(1);
4538
4539 mutex_lock(&BTRFS_I(inode)->delalloc_mutex);
4540 num_bytes = ALIGN(num_bytes, root->sectorsize);
4541
4542 spin_lock(&BTRFS_I(inode)->lock);
4543 BTRFS_I(inode)->outstanding_extents++;
4544
4545 if (BTRFS_I(inode)->outstanding_extents >
4546 BTRFS_I(inode)->reserved_extents)
4547 nr_extents = BTRFS_I(inode)->outstanding_extents -
4548 BTRFS_I(inode)->reserved_extents;
4549
4550
4551
4552
4553
4554 if (!test_bit(BTRFS_INODE_DELALLOC_META_RESERVED,
4555 &BTRFS_I(inode)->runtime_flags)) {
4556 nr_extents++;
4557 extra_reserve = 1;
4558 }
4559
4560 to_reserve = btrfs_calc_trans_metadata_size(root, nr_extents);
4561 to_reserve += calc_csum_metadata_size(inode, num_bytes, 1);
4562 csum_bytes = BTRFS_I(inode)->csum_bytes;
4563 spin_unlock(&BTRFS_I(inode)->lock);
4564
4565 if (root->fs_info->quota_enabled) {
4566 ret = btrfs_qgroup_reserve(root, num_bytes +
4567 nr_extents * root->leafsize);
4568 if (ret) {
4569 mutex_unlock(&BTRFS_I(inode)->delalloc_mutex);
4570 return ret;
4571 }
4572 }
4573
4574 ret = reserve_metadata_bytes(root, block_rsv, to_reserve, flush);
4575 if (ret) {
4576 u64 to_free = 0;
4577 unsigned dropped;
4578
4579 spin_lock(&BTRFS_I(inode)->lock);
4580 dropped = drop_outstanding_extent(inode);
4581
4582
4583
4584
4585
4586
4587
4588
4589 if (BTRFS_I(inode)->csum_bytes == csum_bytes)
4590 calc_csum_metadata_size(inode, num_bytes, 0);
4591 else
4592 to_free = calc_csum_metadata_size(inode, num_bytes, 0);
4593 spin_unlock(&BTRFS_I(inode)->lock);
4594 if (dropped)
4595 to_free += btrfs_calc_trans_metadata_size(root, dropped);
4596
4597 if (to_free) {
4598 btrfs_block_rsv_release(root, block_rsv, to_free);
4599 trace_btrfs_space_reservation(root->fs_info,
4600 "delalloc",
4601 btrfs_ino(inode),
4602 to_free, 0);
4603 }
4604 mutex_unlock(&BTRFS_I(inode)->delalloc_mutex);
4605 return ret;
4606 }
4607
4608 spin_lock(&BTRFS_I(inode)->lock);
4609 if (extra_reserve) {
4610 set_bit(BTRFS_INODE_DELALLOC_META_RESERVED,
4611 &BTRFS_I(inode)->runtime_flags);
4612 nr_extents--;
4613 }
4614 BTRFS_I(inode)->reserved_extents += nr_extents;
4615 spin_unlock(&BTRFS_I(inode)->lock);
4616 mutex_unlock(&BTRFS_I(inode)->delalloc_mutex);
4617
4618 if (to_reserve)
4619 trace_btrfs_space_reservation(root->fs_info,"delalloc",
4620 btrfs_ino(inode), to_reserve, 1);
4621 block_rsv_add_bytes(block_rsv, to_reserve, 1);
4622
4623 return 0;
4624}
4625
4626
4627
4628
4629
4630
4631
4632
4633
4634
4635void btrfs_delalloc_release_metadata(struct inode *inode, u64 num_bytes)
4636{
4637 struct btrfs_root *root = BTRFS_I(inode)->root;
4638 u64 to_free = 0;
4639 unsigned dropped;
4640
4641 num_bytes = ALIGN(num_bytes, root->sectorsize);
4642 spin_lock(&BTRFS_I(inode)->lock);
4643 dropped = drop_outstanding_extent(inode);
4644
4645 to_free = calc_csum_metadata_size(inode, num_bytes, 0);
4646 spin_unlock(&BTRFS_I(inode)->lock);
4647 if (dropped > 0)
4648 to_free += btrfs_calc_trans_metadata_size(root, dropped);
4649
4650 trace_btrfs_space_reservation(root->fs_info, "delalloc",
4651 btrfs_ino(inode), to_free, 0);
4652 if (root->fs_info->quota_enabled) {
4653 btrfs_qgroup_free(root, num_bytes +
4654 dropped * root->leafsize);
4655 }
4656
4657 btrfs_block_rsv_release(root, &root->fs_info->delalloc_block_rsv,
4658 to_free);
4659}
4660
4661
4662
4663
4664
4665
4666
4667
4668
4669
4670
4671
4672
4673
4674
4675
4676int btrfs_delalloc_reserve_space(struct inode *inode, u64 num_bytes)
4677{
4678 int ret;
4679
4680 ret = btrfs_check_data_free_space(inode, num_bytes);
4681 if (ret)
4682 return ret;
4683
4684 ret = btrfs_delalloc_reserve_metadata(inode, num_bytes);
4685 if (ret) {
4686 btrfs_free_reserved_data_space(inode, num_bytes);
4687 return ret;
4688 }
4689
4690 return 0;
4691}
4692
4693
4694
4695
4696
4697
4698
4699
4700
4701
4702
4703
4704
4705
4706void btrfs_delalloc_release_space(struct inode *inode, u64 num_bytes)
4707{
4708 btrfs_delalloc_release_metadata(inode, num_bytes);
4709 btrfs_free_reserved_data_space(inode, num_bytes);
4710}
4711
4712static int update_block_group(struct btrfs_trans_handle *trans,
4713 struct btrfs_root *root,
4714 u64 bytenr, u64 num_bytes, int alloc)
4715{
4716 struct btrfs_block_group_cache *cache = NULL;
4717 struct btrfs_fs_info *info = root->fs_info;
4718 u64 total = num_bytes;
4719 u64 old_val;
4720 u64 byte_in_group;
4721 int factor;
4722
4723
4724 spin_lock(&info->delalloc_lock);
4725 old_val = btrfs_super_bytes_used(info->super_copy);
4726 if (alloc)
4727 old_val += num_bytes;
4728 else
4729 old_val -= num_bytes;
4730 btrfs_set_super_bytes_used(info->super_copy, old_val);
4731 spin_unlock(&info->delalloc_lock);
4732
4733 while (total) {
4734 cache = btrfs_lookup_block_group(info, bytenr);
4735 if (!cache)
4736 return -ENOENT;
4737 if (cache->flags & (BTRFS_BLOCK_GROUP_DUP |
4738 BTRFS_BLOCK_GROUP_RAID1 |
4739 BTRFS_BLOCK_GROUP_RAID10))
4740 factor = 2;
4741 else
4742 factor = 1;
4743
4744
4745
4746
4747
4748
4749 if (!alloc && cache->cached == BTRFS_CACHE_NO)
4750 cache_block_group(cache, trans, NULL, 1);
4751
4752 byte_in_group = bytenr - cache->key.objectid;
4753 WARN_ON(byte_in_group > cache->key.offset);
4754
4755 spin_lock(&cache->space_info->lock);
4756 spin_lock(&cache->lock);
4757
4758 if (btrfs_test_opt(root, SPACE_CACHE) &&
4759 cache->disk_cache_state < BTRFS_DC_CLEAR)
4760 cache->disk_cache_state = BTRFS_DC_CLEAR;
4761
4762 cache->dirty = 1;
4763 old_val = btrfs_block_group_used(&cache->item);
4764 num_bytes = min(total, cache->key.offset - byte_in_group);
4765 if (alloc) {
4766 old_val += num_bytes;
4767 btrfs_set_block_group_used(&cache->item, old_val);
4768 cache->reserved -= num_bytes;
4769 cache->space_info->bytes_reserved -= num_bytes;
4770 cache->space_info->bytes_used += num_bytes;
4771 cache->space_info->disk_used += num_bytes * factor;
4772 spin_unlock(&cache->lock);
4773 spin_unlock(&cache->space_info->lock);
4774 } else {
4775 old_val -= num_bytes;
4776 btrfs_set_block_group_used(&cache->item, old_val);
4777 cache->pinned += num_bytes;
4778 cache->space_info->bytes_pinned += num_bytes;
4779 cache->space_info->bytes_used -= num_bytes;
4780 cache->space_info->disk_used -= num_bytes * factor;
4781 spin_unlock(&cache->lock);
4782 spin_unlock(&cache->space_info->lock);
4783
4784 set_extent_dirty(info->pinned_extents,
4785 bytenr, bytenr + num_bytes - 1,
4786 GFP_NOFS | __GFP_NOFAIL);
4787 }
4788 btrfs_put_block_group(cache);
4789 total -= num_bytes;
4790 bytenr += num_bytes;
4791 }
4792 return 0;
4793}
4794
4795static u64 first_logical_byte(struct btrfs_root *root, u64 search_start)
4796{
4797 struct btrfs_block_group_cache *cache;
4798 u64 bytenr;
4799
4800 cache = btrfs_lookup_first_block_group(root->fs_info, search_start);
4801 if (!cache)
4802 return 0;
4803
4804 bytenr = cache->key.objectid;
4805 btrfs_put_block_group(cache);
4806
4807 return bytenr;
4808}
4809
4810static int pin_down_extent(struct btrfs_root *root,
4811 struct btrfs_block_group_cache *cache,
4812 u64 bytenr, u64 num_bytes, int reserved)
4813{
4814 spin_lock(&cache->space_info->lock);
4815 spin_lock(&cache->lock);
4816 cache->pinned += num_bytes;
4817 cache->space_info->bytes_pinned += num_bytes;
4818 if (reserved) {
4819 cache->reserved -= num_bytes;
4820 cache->space_info->bytes_reserved -= num_bytes;
4821 }
4822 spin_unlock(&cache->lock);
4823 spin_unlock(&cache->space_info->lock);
4824
4825 set_extent_dirty(root->fs_info->pinned_extents, bytenr,
4826 bytenr + num_bytes - 1, GFP_NOFS | __GFP_NOFAIL);
4827 return 0;
4828}
4829
4830
4831
4832
4833int btrfs_pin_extent(struct btrfs_root *root,
4834 u64 bytenr, u64 num_bytes, int reserved)
4835{
4836 struct btrfs_block_group_cache *cache;
4837
4838 cache = btrfs_lookup_block_group(root->fs_info, bytenr);
4839 BUG_ON(!cache);
4840
4841 pin_down_extent(root, cache, bytenr, num_bytes, reserved);
4842
4843 btrfs_put_block_group(cache);
4844 return 0;
4845}
4846
4847
4848
4849
4850int btrfs_pin_extent_for_log_replay(struct btrfs_trans_handle *trans,
4851 struct btrfs_root *root,
4852 u64 bytenr, u64 num_bytes)
4853{
4854 struct btrfs_block_group_cache *cache;
4855
4856 cache = btrfs_lookup_block_group(root->fs_info, bytenr);
4857 BUG_ON(!cache);
4858
4859
4860
4861
4862
4863
4864
4865 cache_block_group(cache, trans, root, 1);
4866
4867 pin_down_extent(root, cache, bytenr, num_bytes, 0);
4868
4869
4870 btrfs_remove_free_space(cache, bytenr, num_bytes);
4871 btrfs_put_block_group(cache);
4872 return 0;
4873}
4874
4875
4876
4877
4878
4879
4880
4881
4882
4883
4884
4885
4886
4887
4888
4889
4890
4891
4892
4893
4894
4895
4896
4897static int btrfs_update_reserved_bytes(struct btrfs_block_group_cache *cache,
4898 u64 num_bytes, int reserve)
4899{
4900 struct btrfs_space_info *space_info = cache->space_info;
4901 int ret = 0;
4902
4903 spin_lock(&space_info->lock);
4904 spin_lock(&cache->lock);
4905 if (reserve != RESERVE_FREE) {
4906 if (cache->ro) {
4907 ret = -EAGAIN;
4908 } else {
4909 cache->reserved += num_bytes;
4910 space_info->bytes_reserved += num_bytes;
4911 if (reserve == RESERVE_ALLOC) {
4912 trace_btrfs_space_reservation(cache->fs_info,
4913 "space_info", space_info->flags,
4914 num_bytes, 0);
4915 space_info->bytes_may_use -= num_bytes;
4916 }
4917 }
4918 } else {
4919 if (cache->ro)
4920 space_info->bytes_readonly += num_bytes;
4921 cache->reserved -= num_bytes;
4922 space_info->bytes_reserved -= num_bytes;
4923 space_info->reservation_progress++;
4924 }
4925 spin_unlock(&cache->lock);
4926 spin_unlock(&space_info->lock);
4927 return ret;
4928}
4929
4930void btrfs_prepare_extent_commit(struct btrfs_trans_handle *trans,
4931 struct btrfs_root *root)
4932{
4933 struct btrfs_fs_info *fs_info = root->fs_info;
4934 struct btrfs_caching_control *next;
4935 struct btrfs_caching_control *caching_ctl;
4936 struct btrfs_block_group_cache *cache;
4937
4938 down_write(&fs_info->extent_commit_sem);
4939
4940 list_for_each_entry_safe(caching_ctl, next,
4941 &fs_info->caching_block_groups, list) {
4942 cache = caching_ctl->block_group;
4943 if (block_group_cache_done(cache)) {
4944 cache->last_byte_to_unpin = (u64)-1;
4945 list_del_init(&caching_ctl->list);
4946 put_caching_control(caching_ctl);
4947 } else {
4948 cache->last_byte_to_unpin = caching_ctl->progress;
4949 }
4950 }
4951
4952 if (fs_info->pinned_extents == &fs_info->freed_extents[0])
4953 fs_info->pinned_extents = &fs_info->freed_extents[1];
4954 else
4955 fs_info->pinned_extents = &fs_info->freed_extents[0];
4956
4957 up_write(&fs_info->extent_commit_sem);
4958
4959 update_global_block_rsv(fs_info);
4960}
4961
4962static int unpin_extent_range(struct btrfs_root *root, u64 start, u64 end)
4963{
4964 struct btrfs_fs_info *fs_info = root->fs_info;
4965 struct btrfs_block_group_cache *cache = NULL;
4966 u64 len;
4967
4968 while (start <= end) {
4969 if (!cache ||
4970 start >= cache->key.objectid + cache->key.offset) {
4971 if (cache)
4972 btrfs_put_block_group(cache);
4973 cache = btrfs_lookup_block_group(fs_info, start);
4974 BUG_ON(!cache);
4975 }
4976
4977 len = cache->key.objectid + cache->key.offset - start;
4978 len = min(len, end + 1 - start);
4979
4980 if (start < cache->last_byte_to_unpin) {
4981 len = min(len, cache->last_byte_to_unpin - start);
4982 btrfs_add_free_space(cache, start, len);
4983 }
4984
4985 start += len;
4986
4987 spin_lock(&cache->space_info->lock);
4988 spin_lock(&cache->lock);
4989 cache->pinned -= len;
4990 cache->space_info->bytes_pinned -= len;
4991 if (cache->ro)
4992 cache->space_info->bytes_readonly += len;
4993 spin_unlock(&cache->lock);
4994 spin_unlock(&cache->space_info->lock);
4995 }
4996
4997 if (cache)
4998 btrfs_put_block_group(cache);
4999 return 0;
5000}
5001
5002int btrfs_finish_extent_commit(struct btrfs_trans_handle *trans,
5003 struct btrfs_root *root)
5004{
5005 struct btrfs_fs_info *fs_info = root->fs_info;
5006 struct extent_io_tree *unpin;
5007 u64 start;
5008 u64 end;
5009 int ret;
5010
5011 if (trans->aborted)
5012 return 0;
5013
5014 if (fs_info->pinned_extents == &fs_info->freed_extents[0])
5015 unpin = &fs_info->freed_extents[1];
5016 else
5017 unpin = &fs_info->freed_extents[0];
5018
5019 while (1) {
5020 ret = find_first_extent_bit(unpin, 0, &start, &end,
5021 EXTENT_DIRTY);
5022 if (ret)
5023 break;
5024
5025 if (btrfs_test_opt(root, DISCARD))
5026 ret = btrfs_discard_extent(root, start,
5027 end + 1 - start, NULL);
5028
5029 clear_extent_dirty(unpin, start, end, GFP_NOFS);
5030 unpin_extent_range(root, start, end);
5031 cond_resched();
5032 }
5033
5034 return 0;
5035}
5036
5037static int __btrfs_free_extent(struct btrfs_trans_handle *trans,
5038 struct btrfs_root *root,
5039 u64 bytenr, u64 num_bytes, u64 parent,
5040 u64 root_objectid, u64 owner_objectid,
5041 u64 owner_offset, int refs_to_drop,
5042 struct btrfs_delayed_extent_op *extent_op)
5043{
5044 struct btrfs_key key;
5045 struct btrfs_path *path;
5046 struct btrfs_fs_info *info = root->fs_info;
5047 struct btrfs_root *extent_root = info->extent_root;
5048 struct extent_buffer *leaf;
5049 struct btrfs_extent_item *ei;
5050 struct btrfs_extent_inline_ref *iref;
5051 int ret;
5052 int is_data;
5053 int extent_slot = 0;
5054 int found_extent = 0;
5055 int num_to_del = 1;
5056 u32 item_size;
5057 u64 refs;
5058
5059 path = btrfs_alloc_path();
5060 if (!path)
5061 return -ENOMEM;
5062
5063 path->reada = 1;
5064 path->leave_spinning = 1;
5065
5066 is_data = owner_objectid >= BTRFS_FIRST_FREE_OBJECTID;
5067 BUG_ON(!is_data && refs_to_drop != 1);
5068
5069 ret = lookup_extent_backref(trans, extent_root, path, &iref,
5070 bytenr, num_bytes, parent,
5071 root_objectid, owner_objectid,
5072 owner_offset);
5073 if (ret == 0) {
5074 extent_slot = path->slots[0];
5075 while (extent_slot >= 0) {
5076 btrfs_item_key_to_cpu(path->nodes[0], &key,
5077 extent_slot);
5078 if (key.objectid != bytenr)
5079 break;
5080 if (key.type == BTRFS_EXTENT_ITEM_KEY &&
5081 key.offset == num_bytes) {
5082 found_extent = 1;
5083 break;
5084 }
5085 if (path->slots[0] - extent_slot > 5)
5086 break;
5087 extent_slot--;
5088 }
5089#ifdef BTRFS_COMPAT_EXTENT_TREE_V0
5090 item_size = btrfs_item_size_nr(path->nodes[0], extent_slot);
5091 if (found_extent && item_size < sizeof(*ei))
5092 found_extent = 0;
5093#endif
5094 if (!found_extent) {
5095 BUG_ON(iref);
5096 ret = remove_extent_backref(trans, extent_root, path,
5097 NULL, refs_to_drop,
5098 is_data);
5099 if (ret)
5100 goto abort;
5101 btrfs_release_path(path);
5102 path->leave_spinning = 1;
5103
5104 key.objectid = bytenr;
5105 key.type = BTRFS_EXTENT_ITEM_KEY;
5106 key.offset = num_bytes;
5107
5108 ret = btrfs_search_slot(trans, extent_root,
5109 &key, path, -1, 1);
5110 if (ret) {
5111 printk(KERN_ERR "umm, got %d back from search"
5112 ", was looking for %llu\n", ret,
5113 (unsigned long long)bytenr);
5114 if (ret > 0)
5115 btrfs_print_leaf(extent_root,
5116 path->nodes[0]);
5117 }
5118 if (ret < 0)
5119 goto abort;
5120 extent_slot = path->slots[0];
5121 }
5122 } else if (ret == -ENOENT) {
5123 btrfs_print_leaf(extent_root, path->nodes[0]);
5124 WARN_ON(1);
5125 printk(KERN_ERR "btrfs unable to find ref byte nr %llu "
5126 "parent %llu root %llu owner %llu offset %llu\n",
5127 (unsigned long long)bytenr,
5128 (unsigned long long)parent,
5129 (unsigned long long)root_objectid,
5130 (unsigned long long)owner_objectid,
5131 (unsigned long long)owner_offset);
5132 } else {
5133 goto abort;
5134 }
5135
5136 leaf = path->nodes[0];
5137 item_size = btrfs_item_size_nr(leaf, extent_slot);
5138#ifdef BTRFS_COMPAT_EXTENT_TREE_V0
5139 if (item_size < sizeof(*ei)) {
5140 BUG_ON(found_extent || extent_slot != path->slots[0]);
5141 ret = convert_extent_item_v0(trans, extent_root, path,
5142 owner_objectid, 0);
5143 if (ret < 0)
5144 goto abort;
5145
5146 btrfs_release_path(path);
5147 path->leave_spinning = 1;
5148
5149 key.objectid = bytenr;
5150 key.type = BTRFS_EXTENT_ITEM_KEY;
5151 key.offset = num_bytes;
5152
5153 ret = btrfs_search_slot(trans, extent_root, &key, path,
5154 -1, 1);
5155 if (ret) {
5156 printk(KERN_ERR "umm, got %d back from search"
5157 ", was looking for %llu\n", ret,
5158 (unsigned long long)bytenr);
5159 btrfs_print_leaf(extent_root, path->nodes[0]);
5160 }
5161 if (ret < 0)
5162 goto abort;
5163 extent_slot = path->slots[0];
5164 leaf = path->nodes[0];
5165 item_size = btrfs_item_size_nr(leaf, extent_slot);
5166 }
5167#endif
5168 BUG_ON(item_size < sizeof(*ei));
5169 ei = btrfs_item_ptr(leaf, extent_slot,
5170 struct btrfs_extent_item);
5171 if (owner_objectid < BTRFS_FIRST_FREE_OBJECTID) {
5172 struct btrfs_tree_block_info *bi;
5173 BUG_ON(item_size < sizeof(*ei) + sizeof(*bi));
5174 bi = (struct btrfs_tree_block_info *)(ei + 1);
5175 WARN_ON(owner_objectid != btrfs_tree_block_level(leaf, bi));
5176 }
5177
5178 refs = btrfs_extent_refs(leaf, ei);
5179 BUG_ON(refs < refs_to_drop);
5180 refs -= refs_to_drop;
5181
5182 if (refs > 0) {
5183 if (extent_op)
5184 __run_delayed_extent_op(extent_op, leaf, ei);
5185
5186
5187
5188
5189 if (iref) {
5190 BUG_ON(!found_extent);
5191 } else {
5192 btrfs_set_extent_refs(leaf, ei, refs);
5193 btrfs_mark_buffer_dirty(leaf);
5194 }
5195 if (found_extent) {
5196 ret = remove_extent_backref(trans, extent_root, path,
5197 iref, refs_to_drop,
5198 is_data);
5199 if (ret)
5200 goto abort;
5201 }
5202 } else {
5203 if (found_extent) {
5204 BUG_ON(is_data && refs_to_drop !=
5205 extent_data_ref_count(root, path, iref));
5206 if (iref) {
5207 BUG_ON(path->slots[0] != extent_slot);
5208 } else {
5209 BUG_ON(path->slots[0] != extent_slot + 1);
5210 path->slots[0] = extent_slot;
5211 num_to_del = 2;
5212 }
5213 }
5214
5215 ret = btrfs_del_items(trans, extent_root, path, path->slots[0],
5216 num_to_del);
5217 if (ret)
5218 goto abort;
5219 btrfs_release_path(path);
5220
5221 if (is_data) {
5222 ret = btrfs_del_csums(trans, root, bytenr, num_bytes);
5223 if (ret)
5224 goto abort;
5225 }
5226
5227 ret = update_block_group(trans, root, bytenr, num_bytes, 0);
5228 if (ret)
5229 goto abort;
5230 }
5231out:
5232 btrfs_free_path(path);
5233 return ret;
5234
5235abort:
5236 btrfs_abort_transaction(trans, extent_root, ret);
5237 goto out;
5238}
5239
5240
5241
5242
5243
5244
5245
5246static noinline int check_ref_cleanup(struct btrfs_trans_handle *trans,
5247 struct btrfs_root *root, u64 bytenr)
5248{
5249 struct btrfs_delayed_ref_head *head;
5250 struct btrfs_delayed_ref_root *delayed_refs;
5251 struct btrfs_delayed_ref_node *ref;
5252 struct rb_node *node;
5253 int ret = 0;
5254
5255 delayed_refs = &trans->transaction->delayed_refs;
5256 spin_lock(&delayed_refs->lock);
5257 head = btrfs_find_delayed_ref_head(trans, bytenr);
5258 if (!head)
5259 goto out;
5260
5261 node = rb_prev(&head->node.rb_node);
5262 if (!node)
5263 goto out;
5264
5265 ref = rb_entry(node, struct btrfs_delayed_ref_node, rb_node);
5266
5267
5268 if (ref->bytenr == bytenr)
5269 goto out;
5270
5271 if (head->extent_op) {
5272 if (!head->must_insert_reserved)
5273 goto out;
5274 kfree(head->extent_op);
5275 head->extent_op = NULL;
5276 }
5277
5278
5279
5280
5281
5282 if (!mutex_trylock(&head->mutex))
5283 goto out;
5284
5285
5286
5287
5288
5289 head->node.in_tree = 0;
5290 rb_erase(&head->node.rb_node, &delayed_refs->root);
5291
5292 delayed_refs->num_entries--;
5293
5294
5295
5296
5297
5298 delayed_refs->num_heads--;
5299 if (list_empty(&head->cluster))
5300 delayed_refs->num_heads_ready--;
5301
5302 list_del_init(&head->cluster);
5303 spin_unlock(&delayed_refs->lock);
5304
5305 BUG_ON(head->extent_op);
5306 if (head->must_insert_reserved)
5307 ret = 1;
5308
5309 mutex_unlock(&head->mutex);
5310 btrfs_put_delayed_ref(&head->node);
5311 return ret;
5312out:
5313 spin_unlock(&delayed_refs->lock);
5314 return 0;
5315}
5316
5317void btrfs_free_tree_block(struct btrfs_trans_handle *trans,
5318 struct btrfs_root *root,
5319 struct extent_buffer *buf,
5320 u64 parent, int last_ref)
5321{
5322 struct btrfs_block_group_cache *cache = NULL;
5323 int ret;
5324
5325 if (root->root_key.objectid != BTRFS_TREE_LOG_OBJECTID) {
5326 ret = btrfs_add_delayed_tree_ref(root->fs_info, trans,
5327 buf->start, buf->len,
5328 parent, root->root_key.objectid,
5329 btrfs_header_level(buf),
5330 BTRFS_DROP_DELAYED_REF, NULL, 0);
5331 BUG_ON(ret);
5332 }
5333
5334 if (!last_ref)
5335 return;
5336
5337 cache = btrfs_lookup_block_group(root->fs_info, buf->start);
5338
5339 if (btrfs_header_generation(buf) == trans->transid) {
5340 if (root->root_key.objectid != BTRFS_TREE_LOG_OBJECTID) {
5341 ret = check_ref_cleanup(trans, root, buf->start);
5342 if (!ret)
5343 goto out;
5344 }
5345
5346 if (btrfs_header_flag(buf, BTRFS_HEADER_FLAG_WRITTEN)) {
5347 pin_down_extent(root, cache, buf->start, buf->len, 1);
5348 goto out;
5349 }
5350
5351 WARN_ON(test_bit(EXTENT_BUFFER_DIRTY, &buf->bflags));
5352
5353 btrfs_add_free_space(cache, buf->start, buf->len);
5354 btrfs_update_reserved_bytes(cache, buf->len, RESERVE_FREE);
5355 }
5356out:
5357
5358
5359
5360
5361 clear_bit(EXTENT_BUFFER_CORRUPT, &buf->bflags);
5362 btrfs_put_block_group(cache);
5363}
5364
5365
5366int btrfs_free_extent(struct btrfs_trans_handle *trans, struct btrfs_root *root,
5367 u64 bytenr, u64 num_bytes, u64 parent, u64 root_objectid,
5368 u64 owner, u64 offset, int for_cow)
5369{
5370 int ret;
5371 struct btrfs_fs_info *fs_info = root->fs_info;
5372
5373
5374
5375
5376
5377 if (root_objectid == BTRFS_TREE_LOG_OBJECTID) {
5378 WARN_ON(owner >= BTRFS_FIRST_FREE_OBJECTID);
5379
5380 btrfs_pin_extent(root, bytenr, num_bytes, 1);
5381 ret = 0;
5382 } else if (owner < BTRFS_FIRST_FREE_OBJECTID) {
5383 ret = btrfs_add_delayed_tree_ref(fs_info, trans, bytenr,
5384 num_bytes,
5385 parent, root_objectid, (int)owner,
5386 BTRFS_DROP_DELAYED_REF, NULL, for_cow);
5387 } else {
5388 ret = btrfs_add_delayed_data_ref(fs_info, trans, bytenr,
5389 num_bytes,
5390 parent, root_objectid, owner,
5391 offset, BTRFS_DROP_DELAYED_REF,
5392 NULL, for_cow);
5393 }
5394 return ret;
5395}
5396
5397static u64 stripe_align(struct btrfs_root *root, u64 val)
5398{
5399 u64 mask = ((u64)root->stripesize - 1);
5400 u64 ret = (val + mask) & ~mask;
5401 return ret;
5402}
5403
5404
5405
5406
5407
5408
5409
5410
5411
5412
5413
5414
5415static noinline int
5416wait_block_group_cache_progress(struct btrfs_block_group_cache *cache,
5417 u64 num_bytes)
5418{
5419 struct btrfs_caching_control *caching_ctl;
5420 DEFINE_WAIT(wait);
5421
5422 caching_ctl = get_caching_control(cache);
5423 if (!caching_ctl)
5424 return 0;
5425
5426 wait_event(caching_ctl->wait, block_group_cache_done(cache) ||
5427 (cache->free_space_ctl->free_space >= num_bytes));
5428
5429 put_caching_control(caching_ctl);
5430 return 0;
5431}
5432
5433static noinline int
5434wait_block_group_cache_done(struct btrfs_block_group_cache *cache)
5435{
5436 struct btrfs_caching_control *caching_ctl;
5437 DEFINE_WAIT(wait);
5438
5439 caching_ctl = get_caching_control(cache);
5440 if (!caching_ctl)
5441 return 0;
5442
5443 wait_event(caching_ctl->wait, block_group_cache_done(cache));
5444
5445 put_caching_control(caching_ctl);
5446 return 0;
5447}
5448
5449static int __get_block_group_index(u64 flags)
5450{
5451 int index;
5452
5453 if (flags & BTRFS_BLOCK_GROUP_RAID10)
5454 index = 0;
5455 else if (flags & BTRFS_BLOCK_GROUP_RAID1)
5456 index = 1;
5457 else if (flags & BTRFS_BLOCK_GROUP_DUP)
5458 index = 2;
5459 else if (flags & BTRFS_BLOCK_GROUP_RAID0)
5460 index = 3;
5461 else
5462 index = 4;
5463
5464 return index;
5465}
5466
5467static int get_block_group_index(struct btrfs_block_group_cache *cache)
5468{
5469 return __get_block_group_index(cache->flags);
5470}
5471
5472enum btrfs_loop_type {
5473 LOOP_CACHING_NOWAIT = 0,
5474 LOOP_CACHING_WAIT = 1,
5475 LOOP_ALLOC_CHUNK = 2,
5476 LOOP_NO_EMPTY_SIZE = 3,
5477};
5478
5479
5480
5481
5482
5483
5484
5485
5486
5487static noinline int find_free_extent(struct btrfs_trans_handle *trans,
5488 struct btrfs_root *orig_root,
5489 u64 num_bytes, u64 empty_size,
5490 u64 hint_byte, struct btrfs_key *ins,
5491 u64 data)
5492{
5493 int ret = 0;
5494 struct btrfs_root *root = orig_root->fs_info->extent_root;
5495 struct btrfs_free_cluster *last_ptr = NULL;
5496 struct btrfs_block_group_cache *block_group = NULL;
5497 struct btrfs_block_group_cache *used_block_group;
5498 u64 search_start = 0;
5499 int empty_cluster = 2 * 1024 * 1024;
5500 int allowed_chunk_alloc = 0;
5501 int done_chunk_alloc = 0;
5502 struct btrfs_space_info *space_info;
5503 int loop = 0;
5504 int index = 0;
5505 int alloc_type = (data & BTRFS_BLOCK_GROUP_DATA) ?
5506 RESERVE_ALLOC_NO_ACCOUNT : RESERVE_ALLOC;
5507 bool found_uncached_bg = false;
5508 bool failed_cluster_refill = false;
5509 bool failed_alloc = false;
5510 bool use_cluster = true;
5511 bool have_caching_bg = false;
5512
5513 WARN_ON(num_bytes < root->sectorsize);
5514 btrfs_set_key_type(ins, BTRFS_EXTENT_ITEM_KEY);
5515 ins->objectid = 0;
5516 ins->offset = 0;
5517
5518 trace_find_free_extent(orig_root, num_bytes, empty_size, data);
5519
5520 space_info = __find_space_info(root->fs_info, data);
5521 if (!space_info) {
5522 printk(KERN_ERR "No space info for %llu\n", data);
5523 return -ENOSPC;
5524 }
5525
5526
5527
5528
5529
5530 if (btrfs_mixed_space_info(space_info))
5531 use_cluster = false;
5532
5533 if (orig_root->ref_cows || empty_size)
5534 allowed_chunk_alloc = 1;
5535
5536 if (data & BTRFS_BLOCK_GROUP_METADATA && use_cluster) {
5537 last_ptr = &root->fs_info->meta_alloc_cluster;
5538 if (!btrfs_test_opt(root, SSD))
5539 empty_cluster = 64 * 1024;
5540 }
5541
5542 if ((data & BTRFS_BLOCK_GROUP_DATA) && use_cluster &&
5543 btrfs_test_opt(root, SSD)) {
5544 last_ptr = &root->fs_info->data_alloc_cluster;
5545 }
5546
5547 if (last_ptr) {
5548 spin_lock(&last_ptr->lock);
5549 if (last_ptr->block_group)
5550 hint_byte = last_ptr->window_start;
5551 spin_unlock(&last_ptr->lock);
5552 }
5553
5554 search_start = max(search_start, first_logical_byte(root, 0));
5555 search_start = max(search_start, hint_byte);
5556
5557 if (!last_ptr)
5558 empty_cluster = 0;
5559
5560 if (search_start == hint_byte) {
5561 block_group = btrfs_lookup_block_group(root->fs_info,
5562 search_start);
5563 used_block_group = block_group;
5564
5565
5566
5567
5568
5569
5570
5571 if (block_group && block_group_bits(block_group, data) &&
5572 block_group->cached != BTRFS_CACHE_NO) {
5573 down_read(&space_info->groups_sem);
5574 if (list_empty(&block_group->list) ||
5575 block_group->ro) {
5576
5577
5578
5579
5580
5581
5582 btrfs_put_block_group(block_group);
5583 up_read(&space_info->groups_sem);
5584 } else {
5585 index = get_block_group_index(block_group);
5586 goto have_block_group;
5587 }
5588 } else if (block_group) {
5589 btrfs_put_block_group(block_group);
5590 }
5591 }
5592search:
5593 have_caching_bg = false;
5594 down_read(&space_info->groups_sem);
5595 list_for_each_entry(block_group, &space_info->block_groups[index],
5596 list) {
5597 u64 offset;
5598 int cached;
5599
5600 used_block_group = block_group;
5601 btrfs_get_block_group(block_group);
5602 search_start = block_group->key.objectid;
5603
5604
5605
5606
5607
5608
5609 if (!block_group_bits(block_group, data)) {
5610 u64 extra = BTRFS_BLOCK_GROUP_DUP |
5611 BTRFS_BLOCK_GROUP_RAID1 |
5612 BTRFS_BLOCK_GROUP_RAID10;
5613
5614
5615
5616
5617
5618
5619 if ((data & extra) && !(block_group->flags & extra))
5620 goto loop;
5621 }
5622
5623have_block_group:
5624 cached = block_group_cache_done(block_group);
5625 if (unlikely(!cached)) {
5626 found_uncached_bg = true;
5627 ret = cache_block_group(block_group, trans,
5628 orig_root, 0);
5629 BUG_ON(ret < 0);
5630 ret = 0;
5631 }
5632
5633 if (unlikely(block_group->ro))
5634 goto loop;
5635
5636
5637
5638
5639
5640 if (last_ptr) {
5641
5642
5643
5644
5645 spin_lock(&last_ptr->refill_lock);
5646 used_block_group = last_ptr->block_group;
5647 if (used_block_group != block_group &&
5648 (!used_block_group ||
5649 used_block_group->ro ||
5650 !block_group_bits(used_block_group, data))) {
5651 used_block_group = block_group;
5652 goto refill_cluster;
5653 }
5654
5655 if (used_block_group != block_group)
5656 btrfs_get_block_group(used_block_group);
5657
5658 offset = btrfs_alloc_from_cluster(used_block_group,
5659 last_ptr, num_bytes, used_block_group->key.objectid);
5660 if (offset) {
5661
5662 spin_unlock(&last_ptr->refill_lock);
5663 trace_btrfs_reserve_extent_cluster(root,
5664 block_group, search_start, num_bytes);
5665 goto checks;
5666 }
5667
5668 WARN_ON(last_ptr->block_group != used_block_group);
5669 if (used_block_group != block_group) {
5670 btrfs_put_block_group(used_block_group);
5671 used_block_group = block_group;
5672 }
5673refill_cluster:
5674 BUG_ON(used_block_group != block_group);
5675
5676
5677
5678
5679
5680
5681
5682
5683
5684
5685
5686
5687
5688
5689
5690 if (loop >= LOOP_NO_EMPTY_SIZE &&
5691 last_ptr->block_group != block_group) {
5692 spin_unlock(&last_ptr->refill_lock);
5693 goto unclustered_alloc;
5694 }
5695
5696
5697
5698
5699
5700 btrfs_return_cluster_to_free_space(NULL, last_ptr);
5701
5702 if (loop >= LOOP_NO_EMPTY_SIZE) {
5703 spin_unlock(&last_ptr->refill_lock);
5704 goto unclustered_alloc;
5705 }
5706
5707
5708 ret = btrfs_find_space_cluster(trans, root,
5709 block_group, last_ptr,
5710 search_start, num_bytes,
5711 empty_cluster + empty_size);
5712 if (ret == 0) {
5713
5714
5715
5716
5717 offset = btrfs_alloc_from_cluster(block_group,
5718 last_ptr, num_bytes,
5719 search_start);
5720 if (offset) {
5721
5722 spin_unlock(&last_ptr->refill_lock);
5723 trace_btrfs_reserve_extent_cluster(root,
5724 block_group, search_start,
5725 num_bytes);
5726 goto checks;
5727 }
5728 } else if (!cached && loop > LOOP_CACHING_NOWAIT
5729 && !failed_cluster_refill) {
5730 spin_unlock(&last_ptr->refill_lock);
5731
5732 failed_cluster_refill = true;
5733 wait_block_group_cache_progress(block_group,
5734 num_bytes + empty_cluster + empty_size);
5735 goto have_block_group;
5736 }
5737
5738
5739
5740
5741
5742
5743
5744 btrfs_return_cluster_to_free_space(NULL, last_ptr);
5745 spin_unlock(&last_ptr->refill_lock);
5746 goto loop;
5747 }
5748
5749unclustered_alloc:
5750 spin_lock(&block_group->free_space_ctl->tree_lock);
5751 if (cached &&
5752 block_group->free_space_ctl->free_space <
5753 num_bytes + empty_cluster + empty_size) {
5754 spin_unlock(&block_group->free_space_ctl->tree_lock);
5755 goto loop;
5756 }
5757 spin_unlock(&block_group->free_space_ctl->tree_lock);
5758
5759 offset = btrfs_find_space_for_alloc(block_group, search_start,
5760 num_bytes, empty_size);
5761
5762
5763
5764
5765
5766
5767
5768
5769
5770 if (!offset && !failed_alloc && !cached &&
5771 loop > LOOP_CACHING_NOWAIT) {
5772 wait_block_group_cache_progress(block_group,
5773 num_bytes + empty_size);
5774 failed_alloc = true;
5775 goto have_block_group;
5776 } else if (!offset) {
5777 if (!cached)
5778 have_caching_bg = true;
5779 goto loop;
5780 }
5781checks:
5782 search_start = stripe_align(root, offset);
5783
5784
5785 if (search_start + num_bytes >
5786 used_block_group->key.objectid + used_block_group->key.offset) {
5787 btrfs_add_free_space(used_block_group, offset, num_bytes);
5788 goto loop;
5789 }
5790
5791 if (offset < search_start)
5792 btrfs_add_free_space(used_block_group, offset,
5793 search_start - offset);
5794 BUG_ON(offset > search_start);
5795
5796 ret = btrfs_update_reserved_bytes(used_block_group, num_bytes,
5797 alloc_type);
5798 if (ret == -EAGAIN) {
5799 btrfs_add_free_space(used_block_group, offset, num_bytes);
5800 goto loop;
5801 }
5802
5803
5804 ins->objectid = search_start;
5805 ins->offset = num_bytes;
5806
5807 trace_btrfs_reserve_extent(orig_root, block_group,
5808 search_start, num_bytes);
5809 if (offset < search_start)
5810 btrfs_add_free_space(used_block_group, offset,
5811 search_start - offset);
5812 BUG_ON(offset > search_start);
5813 if (used_block_group != block_group)
5814 btrfs_put_block_group(used_block_group);
5815 btrfs_put_block_group(block_group);
5816 break;
5817loop:
5818 failed_cluster_refill = false;
5819 failed_alloc = false;
5820 BUG_ON(index != get_block_group_index(block_group));
5821 if (used_block_group != block_group)
5822 btrfs_put_block_group(used_block_group);
5823 btrfs_put_block_group(block_group);
5824 }
5825 up_read(&space_info->groups_sem);
5826
5827 if (!ins->objectid && loop >= LOOP_CACHING_WAIT && have_caching_bg)
5828 goto search;
5829
5830 if (!ins->objectid && ++index < BTRFS_NR_RAID_TYPES)
5831 goto search;
5832
5833
5834
5835
5836
5837
5838
5839
5840
5841 if (!ins->objectid && loop < LOOP_NO_EMPTY_SIZE) {
5842 index = 0;
5843 loop++;
5844 if (loop == LOOP_ALLOC_CHUNK) {
5845 if (allowed_chunk_alloc) {
5846 ret = do_chunk_alloc(trans, root, num_bytes +
5847 2 * 1024 * 1024, data,
5848 CHUNK_ALLOC_LIMITED);
5849
5850
5851
5852
5853 if (ret < 0 && ret != -ENOSPC) {
5854 btrfs_abort_transaction(trans,
5855 root, ret);
5856 goto out;
5857 }
5858 allowed_chunk_alloc = 0;
5859 if (ret == 1)
5860 done_chunk_alloc = 1;
5861 } else if (!done_chunk_alloc &&
5862 space_info->force_alloc ==
5863 CHUNK_ALLOC_NO_FORCE) {
5864 space_info->force_alloc = CHUNK_ALLOC_LIMITED;
5865 }
5866
5867
5868
5869
5870
5871 if (!done_chunk_alloc)
5872 loop = LOOP_NO_EMPTY_SIZE;
5873 }
5874
5875 if (loop == LOOP_NO_EMPTY_SIZE) {
5876 empty_size = 0;
5877 empty_cluster = 0;
5878 }
5879
5880 goto search;
5881 } else if (!ins->objectid) {
5882 ret = -ENOSPC;
5883 } else if (ins->objectid) {
5884 ret = 0;
5885 }
5886out:
5887
5888 return ret;
5889}
5890
5891static void dump_space_info(struct btrfs_space_info *info, u64 bytes,
5892 int dump_block_groups)
5893{
5894 struct btrfs_block_group_cache *cache;
5895 int index = 0;
5896
5897 spin_lock(&info->lock);
5898 printk(KERN_INFO "space_info %llu has %llu free, is %sfull\n",
5899 (unsigned long long)info->flags,
5900 (unsigned long long)(info->total_bytes - info->bytes_used -
5901 info->bytes_pinned - info->bytes_reserved -
5902 info->bytes_readonly),
5903 (info->full) ? "" : "not ");
5904 printk(KERN_INFO "space_info total=%llu, used=%llu, pinned=%llu, "
5905 "reserved=%llu, may_use=%llu, readonly=%llu\n",
5906 (unsigned long long)info->total_bytes,
5907 (unsigned long long)info->bytes_used,
5908 (unsigned long long)info->bytes_pinned,
5909 (unsigned long long)info->bytes_reserved,
5910 (unsigned long long)info->bytes_may_use,
5911 (unsigned long long)info->bytes_readonly);
5912 spin_unlock(&info->lock);
5913
5914 if (!dump_block_groups)
5915 return;
5916
5917 down_read(&info->groups_sem);
5918again:
5919 list_for_each_entry(cache, &info->block_groups[index], list) {
5920 spin_lock(&cache->lock);
5921 printk(KERN_INFO "block group %llu has %llu bytes, %llu used %llu pinned %llu reserved %s\n",
5922 (unsigned long long)cache->key.objectid,
5923 (unsigned long long)cache->key.offset,
5924 (unsigned long long)btrfs_block_group_used(&cache->item),
5925 (unsigned long long)cache->pinned,
5926 (unsigned long long)cache->reserved,
5927 cache->ro ? "[readonly]" : "");
5928 btrfs_dump_free_space(cache, bytes);
5929 spin_unlock(&cache->lock);
5930 }
5931 if (++index < BTRFS_NR_RAID_TYPES)
5932 goto again;
5933 up_read(&info->groups_sem);
5934}
5935
5936int btrfs_reserve_extent(struct btrfs_trans_handle *trans,
5937 struct btrfs_root *root,
5938 u64 num_bytes, u64 min_alloc_size,
5939 u64 empty_size, u64 hint_byte,
5940 struct btrfs_key *ins, u64 data)
5941{
5942 bool final_tried = false;
5943 int ret;
5944
5945 data = btrfs_get_alloc_profile(root, data);
5946again:
5947
5948
5949
5950
5951 if (empty_size || root->ref_cows) {
5952 ret = do_chunk_alloc(trans, root->fs_info->extent_root,
5953 num_bytes + 2 * 1024 * 1024, data,
5954 CHUNK_ALLOC_NO_FORCE);
5955 if (ret < 0 && ret != -ENOSPC) {
5956 btrfs_abort_transaction(trans, root, ret);
5957 return ret;
5958 }
5959 }
5960
5961 WARN_ON(num_bytes < root->sectorsize);
5962 ret = find_free_extent(trans, root, num_bytes, empty_size,
5963 hint_byte, ins, data);
5964
5965 if (ret == -ENOSPC) {
5966 if (!final_tried) {
5967 num_bytes = num_bytes >> 1;
5968 num_bytes = num_bytes & ~(root->sectorsize - 1);
5969 num_bytes = max(num_bytes, min_alloc_size);
5970 ret = do_chunk_alloc(trans, root->fs_info->extent_root,
5971 num_bytes, data, CHUNK_ALLOC_FORCE);
5972 if (ret < 0 && ret != -ENOSPC) {
5973 btrfs_abort_transaction(trans, root, ret);
5974 return ret;
5975 }
5976 if (num_bytes == min_alloc_size)
5977 final_tried = true;
5978 goto again;
5979 } else if (btrfs_test_opt(root, ENOSPC_DEBUG)) {
5980 struct btrfs_space_info *sinfo;
5981
5982 sinfo = __find_space_info(root->fs_info, data);
5983 printk(KERN_ERR "btrfs allocation failed flags %llu, "
5984 "wanted %llu\n", (unsigned long long)data,
5985 (unsigned long long)num_bytes);
5986 if (sinfo)
5987 dump_space_info(sinfo, num_bytes, 1);
5988 }
5989 }
5990
5991 trace_btrfs_reserved_extent_alloc(root, ins->objectid, ins->offset);
5992
5993 return ret;
5994}
5995
5996static int __btrfs_free_reserved_extent(struct btrfs_root *root,
5997 u64 start, u64 len, int pin)
5998{
5999 struct btrfs_block_group_cache *cache;
6000 int ret = 0;
6001
6002 cache = btrfs_lookup_block_group(root->fs_info, start);
6003 if (!cache) {
6004 printk(KERN_ERR "Unable to find block group for %llu\n",
6005 (unsigned long long)start);
6006 return -ENOSPC;
6007 }
6008
6009 if (btrfs_test_opt(root, DISCARD))
6010 ret = btrfs_discard_extent(root, start, len, NULL);
6011
6012 if (pin)
6013 pin_down_extent(root, cache, start, len, 1);
6014 else {
6015 btrfs_add_free_space(cache, start, len);
6016 btrfs_update_reserved_bytes(cache, len, RESERVE_FREE);
6017 }
6018 btrfs_put_block_group(cache);
6019
6020 trace_btrfs_reserved_extent_free(root, start, len);
6021
6022 return ret;
6023}
6024
6025int btrfs_free_reserved_extent(struct btrfs_root *root,
6026 u64 start, u64 len)
6027{
6028 return __btrfs_free_reserved_extent(root, start, len, 0);
6029}
6030
6031int btrfs_free_and_pin_reserved_extent(struct btrfs_root *root,
6032 u64 start, u64 len)
6033{
6034 return __btrfs_free_reserved_extent(root, start, len, 1);
6035}
6036
6037static int alloc_reserved_file_extent(struct btrfs_trans_handle *trans,
6038 struct btrfs_root *root,
6039 u64 parent, u64 root_objectid,
6040 u64 flags, u64 owner, u64 offset,
6041 struct btrfs_key *ins, int ref_mod)
6042{
6043 int ret;
6044 struct btrfs_fs_info *fs_info = root->fs_info;
6045 struct btrfs_extent_item *extent_item;
6046 struct btrfs_extent_inline_ref *iref;
6047 struct btrfs_path *path;
6048 struct extent_buffer *leaf;
6049 int type;
6050 u32 size;
6051
6052 if (parent > 0)
6053 type = BTRFS_SHARED_DATA_REF_KEY;
6054 else
6055 type = BTRFS_EXTENT_DATA_REF_KEY;
6056
6057 size = sizeof(*extent_item) + btrfs_extent_inline_ref_size(type);
6058
6059 path = btrfs_alloc_path();
6060 if (!path)
6061 return -ENOMEM;
6062
6063 path->leave_spinning = 1;
6064 ret = btrfs_insert_empty_item(trans, fs_info->extent_root, path,
6065 ins, size);
6066 if (ret) {
6067 btrfs_free_path(path);
6068 return ret;
6069 }
6070
6071 leaf = path->nodes[0];
6072 extent_item = btrfs_item_ptr(leaf, path->slots[0],
6073 struct btrfs_extent_item);
6074 btrfs_set_extent_refs(leaf, extent_item, ref_mod);
6075 btrfs_set_extent_generation(leaf, extent_item, trans->transid);
6076 btrfs_set_extent_flags(leaf, extent_item,
6077 flags | BTRFS_EXTENT_FLAG_DATA);
6078
6079 iref = (struct btrfs_extent_inline_ref *)(extent_item + 1);
6080 btrfs_set_extent_inline_ref_type(leaf, iref, type);
6081 if (parent > 0) {
6082 struct btrfs_shared_data_ref *ref;
6083 ref = (struct btrfs_shared_data_ref *)(iref + 1);
6084 btrfs_set_extent_inline_ref_offset(leaf, iref, parent);
6085 btrfs_set_shared_data_ref_count(leaf, ref, ref_mod);
6086 } else {
6087 struct btrfs_extent_data_ref *ref;
6088 ref = (struct btrfs_extent_data_ref *)(&iref->offset);
6089 btrfs_set_extent_data_ref_root(leaf, ref, root_objectid);
6090 btrfs_set_extent_data_ref_objectid(leaf, ref, owner);
6091 btrfs_set_extent_data_ref_offset(leaf, ref, offset);
6092 btrfs_set_extent_data_ref_count(leaf, ref, ref_mod);
6093 }
6094
6095 btrfs_mark_buffer_dirty(path->nodes[0]);
6096 btrfs_free_path(path);
6097
6098 ret = update_block_group(trans, root, ins->objectid, ins->offset, 1);
6099 if (ret) {
6100 printk(KERN_ERR "btrfs update block group failed for %llu "
6101 "%llu\n", (unsigned long long)ins->objectid,
6102 (unsigned long long)ins->offset);
6103 BUG();
6104 }
6105 return ret;
6106}
6107
6108static int alloc_reserved_tree_block(struct btrfs_trans_handle *trans,
6109 struct btrfs_root *root,
6110 u64 parent, u64 root_objectid,
6111 u64 flags, struct btrfs_disk_key *key,
6112 int level, struct btrfs_key *ins)
6113{
6114 int ret;
6115 struct btrfs_fs_info *fs_info = root->fs_info;
6116 struct btrfs_extent_item *extent_item;
6117 struct btrfs_tree_block_info *block_info;
6118 struct btrfs_extent_inline_ref *iref;
6119 struct btrfs_path *path;
6120 struct extent_buffer *leaf;
6121 u32 size = sizeof(*extent_item) + sizeof(*block_info) + sizeof(*iref);
6122
6123 path = btrfs_alloc_path();
6124 if (!path)
6125 return -ENOMEM;
6126
6127 path->leave_spinning = 1;
6128 ret = btrfs_insert_empty_item(trans, fs_info->extent_root, path,
6129 ins, size);
6130 if (ret) {
6131 btrfs_free_path(path);
6132 return ret;
6133 }
6134
6135 leaf = path->nodes[0];
6136 extent_item = btrfs_item_ptr(leaf, path->slots[0],
6137 struct btrfs_extent_item);
6138 btrfs_set_extent_refs(leaf, extent_item, 1);
6139 btrfs_set_extent_generation(leaf, extent_item, trans->transid);
6140 btrfs_set_extent_flags(leaf, extent_item,
6141 flags | BTRFS_EXTENT_FLAG_TREE_BLOCK);
6142 block_info = (struct btrfs_tree_block_info *)(extent_item + 1);
6143
6144 btrfs_set_tree_block_key(leaf, block_info, key);
6145 btrfs_set_tree_block_level(leaf, block_info, level);
6146
6147 iref = (struct btrfs_extent_inline_ref *)(block_info + 1);
6148 if (parent > 0) {
6149 BUG_ON(!(flags & BTRFS_BLOCK_FLAG_FULL_BACKREF));
6150 btrfs_set_extent_inline_ref_type(leaf, iref,
6151 BTRFS_SHARED_BLOCK_REF_KEY);
6152 btrfs_set_extent_inline_ref_offset(leaf, iref, parent);
6153 } else {
6154 btrfs_set_extent_inline_ref_type(leaf, iref,
6155 BTRFS_TREE_BLOCK_REF_KEY);
6156 btrfs_set_extent_inline_ref_offset(leaf, iref, root_objectid);
6157 }
6158
6159 btrfs_mark_buffer_dirty(leaf);
6160 btrfs_free_path(path);
6161
6162 ret = update_block_group(trans, root, ins->objectid, ins->offset, 1);
6163 if (ret) {
6164 printk(KERN_ERR "btrfs update block group failed for %llu "
6165 "%llu\n", (unsigned long long)ins->objectid,
6166 (unsigned long long)ins->offset);
6167 BUG();
6168 }
6169 return ret;
6170}
6171
6172int btrfs_alloc_reserved_file_extent(struct btrfs_trans_handle *trans,
6173 struct btrfs_root *root,
6174 u64 root_objectid, u64 owner,
6175 u64 offset, struct btrfs_key *ins)
6176{
6177 int ret;
6178
6179 BUG_ON(root_objectid == BTRFS_TREE_LOG_OBJECTID);
6180
6181 ret = btrfs_add_delayed_data_ref(root->fs_info, trans, ins->objectid,
6182 ins->offset, 0,
6183 root_objectid, owner, offset,
6184 BTRFS_ADD_DELAYED_EXTENT, NULL, 0);
6185 return ret;
6186}
6187
6188
6189
6190
6191
6192
6193int btrfs_alloc_logged_file_extent(struct btrfs_trans_handle *trans,
6194 struct btrfs_root *root,
6195 u64 root_objectid, u64 owner, u64 offset,
6196 struct btrfs_key *ins)
6197{
6198 int ret;
6199 struct btrfs_block_group_cache *block_group;
6200 struct btrfs_caching_control *caching_ctl;
6201 u64 start = ins->objectid;
6202 u64 num_bytes = ins->offset;
6203
6204 block_group = btrfs_lookup_block_group(root->fs_info, ins->objectid);
6205 cache_block_group(block_group, trans, NULL, 0);
6206 caching_ctl = get_caching_control(block_group);
6207
6208 if (!caching_ctl) {
6209 BUG_ON(!block_group_cache_done(block_group));
6210 ret = btrfs_remove_free_space(block_group, start, num_bytes);
6211 BUG_ON(ret);
6212 } else {
6213 mutex_lock(&caching_ctl->mutex);
6214
6215 if (start >= caching_ctl->progress) {
6216 ret = add_excluded_extent(root, start, num_bytes);
6217 BUG_ON(ret);
6218 } else if (start + num_bytes <= caching_ctl->progress) {
6219 ret = btrfs_remove_free_space(block_group,
6220 start, num_bytes);
6221 BUG_ON(ret);
6222 } else {
6223 num_bytes = caching_ctl->progress - start;
6224 ret = btrfs_remove_free_space(block_group,
6225 start, num_bytes);
6226 BUG_ON(ret);
6227
6228 start = caching_ctl->progress;
6229 num_bytes = ins->objectid + ins->offset -
6230 caching_ctl->progress;
6231 ret = add_excluded_extent(root, start, num_bytes);
6232 BUG_ON(ret);
6233 }
6234
6235 mutex_unlock(&caching_ctl->mutex);
6236 put_caching_control(caching_ctl);
6237 }
6238
6239 ret = btrfs_update_reserved_bytes(block_group, ins->offset,
6240 RESERVE_ALLOC_NO_ACCOUNT);
6241 BUG_ON(ret);
6242 btrfs_put_block_group(block_group);
6243 ret = alloc_reserved_file_extent(trans, root, 0, root_objectid,
6244 0, owner, offset, ins, 1);
6245 return ret;
6246}
6247
6248struct extent_buffer *btrfs_init_new_buffer(struct btrfs_trans_handle *trans,
6249 struct btrfs_root *root,
6250 u64 bytenr, u32 blocksize,
6251 int level)
6252{
6253 struct extent_buffer *buf;
6254
6255 buf = btrfs_find_create_tree_block(root, bytenr, blocksize);
6256 if (!buf)
6257 return ERR_PTR(-ENOMEM);
6258 btrfs_set_header_generation(buf, trans->transid);
6259 btrfs_set_buffer_lockdep_class(root->root_key.objectid, buf, level);
6260 btrfs_tree_lock(buf);
6261 clean_tree_block(trans, root, buf);
6262 clear_bit(EXTENT_BUFFER_STALE, &buf->bflags);
6263
6264 btrfs_set_lock_blocking(buf);
6265 btrfs_set_buffer_uptodate(buf);
6266
6267 if (root->root_key.objectid == BTRFS_TREE_LOG_OBJECTID) {
6268
6269
6270
6271
6272 if (root->log_transid % 2 == 0)
6273 set_extent_dirty(&root->dirty_log_pages, buf->start,
6274 buf->start + buf->len - 1, GFP_NOFS);
6275 else
6276 set_extent_new(&root->dirty_log_pages, buf->start,
6277 buf->start + buf->len - 1, GFP_NOFS);
6278 } else {
6279 set_extent_dirty(&trans->transaction->dirty_pages, buf->start,
6280 buf->start + buf->len - 1, GFP_NOFS);
6281 }
6282 trans->blocks_used++;
6283
6284 return buf;
6285}
6286
6287static struct btrfs_block_rsv *
6288use_block_rsv(struct btrfs_trans_handle *trans,
6289 struct btrfs_root *root, u32 blocksize)
6290{
6291 struct btrfs_block_rsv *block_rsv;
6292 struct btrfs_block_rsv *global_rsv = &root->fs_info->global_block_rsv;
6293 int ret;
6294
6295 block_rsv = get_block_rsv(trans, root);
6296
6297 if (block_rsv->size == 0) {
6298 ret = reserve_metadata_bytes(root, block_rsv, blocksize, 0);
6299
6300
6301
6302
6303 if (ret && block_rsv != global_rsv) {
6304 ret = block_rsv_use_bytes(global_rsv, blocksize);
6305 if (!ret)
6306 return global_rsv;
6307 return ERR_PTR(ret);
6308 } else if (ret) {
6309 return ERR_PTR(ret);
6310 }
6311 return block_rsv;
6312 }
6313
6314 ret = block_rsv_use_bytes(block_rsv, blocksize);
6315 if (!ret)
6316 return block_rsv;
6317 if (ret) {
6318 static DEFINE_RATELIMIT_STATE(_rs,
6319 DEFAULT_RATELIMIT_INTERVAL,
6320 2);
6321 if (__ratelimit(&_rs)) {
6322 printk(KERN_DEBUG "btrfs: block rsv returned %d\n", ret);
6323 WARN_ON(1);
6324 }
6325 ret = reserve_metadata_bytes(root, block_rsv, blocksize, 0);
6326 if (!ret) {
6327 return block_rsv;
6328 } else if (ret && block_rsv != global_rsv) {
6329 ret = block_rsv_use_bytes(global_rsv, blocksize);
6330 if (!ret)
6331 return global_rsv;
6332 }
6333 }
6334
6335 return ERR_PTR(-ENOSPC);
6336}
6337
6338static void unuse_block_rsv(struct btrfs_fs_info *fs_info,
6339 struct btrfs_block_rsv *block_rsv, u32 blocksize)
6340{
6341 block_rsv_add_bytes(block_rsv, blocksize, 0);
6342 block_rsv_release_bytes(fs_info, block_rsv, NULL, 0);
6343}
6344
6345
6346
6347
6348
6349
6350
6351
6352struct extent_buffer *btrfs_alloc_free_block(struct btrfs_trans_handle *trans,
6353 struct btrfs_root *root, u32 blocksize,
6354 u64 parent, u64 root_objectid,
6355 struct btrfs_disk_key *key, int level,
6356 u64 hint, u64 empty_size)
6357{
6358 struct btrfs_key ins;
6359 struct btrfs_block_rsv *block_rsv;
6360 struct extent_buffer *buf;
6361 u64 flags = 0;
6362 int ret;
6363
6364
6365 block_rsv = use_block_rsv(trans, root, blocksize);
6366 if (IS_ERR(block_rsv))
6367 return ERR_CAST(block_rsv);
6368
6369 ret = btrfs_reserve_extent(trans, root, blocksize, blocksize,
6370 empty_size, hint, &ins, 0);
6371 if (ret) {
6372 unuse_block_rsv(root->fs_info, block_rsv, blocksize);
6373 return ERR_PTR(ret);
6374 }
6375
6376 buf = btrfs_init_new_buffer(trans, root, ins.objectid,
6377 blocksize, level);
6378 BUG_ON(IS_ERR(buf));
6379
6380 if (root_objectid == BTRFS_TREE_RELOC_OBJECTID) {
6381 if (parent == 0)
6382 parent = ins.objectid;
6383 flags |= BTRFS_BLOCK_FLAG_FULL_BACKREF;
6384 } else
6385 BUG_ON(parent > 0);
6386
6387 if (root_objectid != BTRFS_TREE_LOG_OBJECTID) {
6388 struct btrfs_delayed_extent_op *extent_op;
6389 extent_op = kmalloc(sizeof(*extent_op), GFP_NOFS);
6390 BUG_ON(!extent_op);
6391 if (key)
6392 memcpy(&extent_op->key, key, sizeof(extent_op->key));
6393 else
6394 memset(&extent_op->key, 0, sizeof(extent_op->key));
6395 extent_op->flags_to_set = flags;
6396 extent_op->update_key = 1;
6397 extent_op->update_flags = 1;
6398 extent_op->is_data = 0;
6399
6400 ret = btrfs_add_delayed_tree_ref(root->fs_info, trans,
6401 ins.objectid,
6402 ins.offset, parent, root_objectid,
6403 level, BTRFS_ADD_DELAYED_EXTENT,
6404 extent_op, 0);
6405 BUG_ON(ret);
6406 }
6407 return buf;
6408}
6409
6410struct walk_control {
6411 u64 refs[BTRFS_MAX_LEVEL];
6412 u64 flags[BTRFS_MAX_LEVEL];
6413 struct btrfs_key update_progress;
6414 int stage;
6415 int level;
6416 int shared_level;
6417 int update_ref;
6418 int keep_locks;
6419 int reada_slot;
6420 int reada_count;
6421 int for_reloc;
6422};
6423
6424#define DROP_REFERENCE 1
6425#define UPDATE_BACKREF 2
6426
6427static noinline void reada_walk_down(struct btrfs_trans_handle *trans,
6428 struct btrfs_root *root,
6429 struct walk_control *wc,
6430 struct btrfs_path *path)
6431{
6432 u64 bytenr;
6433 u64 generation;
6434 u64 refs;
6435 u64 flags;
6436 u32 nritems;
6437 u32 blocksize;
6438 struct btrfs_key key;
6439 struct extent_buffer *eb;
6440 int ret;
6441 int slot;
6442 int nread = 0;
6443
6444 if (path->slots[wc->level] < wc->reada_slot) {
6445 wc->reada_count = wc->reada_count * 2 / 3;
6446 wc->reada_count = max(wc->reada_count, 2);
6447 } else {
6448 wc->reada_count = wc->reada_count * 3 / 2;
6449 wc->reada_count = min_t(int, wc->reada_count,
6450 BTRFS_NODEPTRS_PER_BLOCK(root));
6451 }
6452
6453 eb = path->nodes[wc->level];
6454 nritems = btrfs_header_nritems(eb);
6455 blocksize = btrfs_level_size(root, wc->level - 1);
6456
6457 for (slot = path->slots[wc->level]; slot < nritems; slot++) {
6458 if (nread >= wc->reada_count)
6459 break;
6460
6461 cond_resched();
6462 bytenr = btrfs_node_blockptr(eb, slot);
6463 generation = btrfs_node_ptr_generation(eb, slot);
6464
6465 if (slot == path->slots[wc->level])
6466 goto reada;
6467
6468 if (wc->stage == UPDATE_BACKREF &&
6469 generation <= root->root_key.offset)
6470 continue;
6471
6472
6473 ret = btrfs_lookup_extent_info(trans, root, bytenr, blocksize,
6474 &refs, &flags);
6475
6476 if (ret < 0)
6477 continue;
6478 BUG_ON(refs == 0);
6479
6480 if (wc->stage == DROP_REFERENCE) {
6481 if (refs == 1)
6482 goto reada;
6483
6484 if (wc->level == 1 &&
6485 (flags & BTRFS_BLOCK_FLAG_FULL_BACKREF))
6486 continue;
6487 if (!wc->update_ref ||
6488 generation <= root->root_key.offset)
6489 continue;
6490 btrfs_node_key_to_cpu(eb, &key, slot);
6491 ret = btrfs_comp_cpu_keys(&key,
6492 &wc->update_progress);
6493 if (ret < 0)
6494 continue;
6495 } else {
6496 if (wc->level == 1 &&
6497 (flags & BTRFS_BLOCK_FLAG_FULL_BACKREF))
6498 continue;
6499 }
6500reada:
6501 ret = readahead_tree_block(root, bytenr, blocksize,
6502 generation);
6503 if (ret)
6504 break;
6505 nread++;
6506 }
6507 wc->reada_slot = slot;
6508}
6509
6510
6511
6512
6513
6514
6515
6516
6517
6518static noinline int walk_down_proc(struct btrfs_trans_handle *trans,
6519 struct btrfs_root *root,
6520 struct btrfs_path *path,
6521 struct walk_control *wc, int lookup_info)
6522{
6523 int level = wc->level;
6524 struct extent_buffer *eb = path->nodes[level];
6525 u64 flag = BTRFS_BLOCK_FLAG_FULL_BACKREF;
6526 int ret;
6527
6528 if (wc->stage == UPDATE_BACKREF &&
6529 btrfs_header_owner(eb) != root->root_key.objectid)
6530 return 1;
6531
6532
6533
6534
6535
6536 if (lookup_info &&
6537 ((wc->stage == DROP_REFERENCE && wc->refs[level] != 1) ||
6538 (wc->stage == UPDATE_BACKREF && !(wc->flags[level] & flag)))) {
6539 BUG_ON(!path->locks[level]);
6540 ret = btrfs_lookup_extent_info(trans, root,
6541 eb->start, eb->len,
6542 &wc->refs[level],
6543 &wc->flags[level]);
6544 BUG_ON(ret == -ENOMEM);
6545 if (ret)
6546 return ret;
6547 BUG_ON(wc->refs[level] == 0);
6548 }
6549
6550 if (wc->stage == DROP_REFERENCE) {
6551 if (wc->refs[level] > 1)
6552 return 1;
6553
6554 if (path->locks[level] && !wc->keep_locks) {
6555 btrfs_tree_unlock_rw(eb, path->locks[level]);
6556 path->locks[level] = 0;
6557 }
6558 return 0;
6559 }
6560
6561
6562 if (!(wc->flags[level] & flag)) {
6563 BUG_ON(!path->locks[level]);
6564 ret = btrfs_inc_ref(trans, root, eb, 1, wc->for_reloc);
6565 BUG_ON(ret);
6566 ret = btrfs_dec_ref(trans, root, eb, 0, wc->for_reloc);
6567 BUG_ON(ret);
6568 ret = btrfs_set_disk_extent_flags(trans, root, eb->start,
6569 eb->len, flag, 0);
6570 BUG_ON(ret);
6571 wc->flags[level] |= flag;
6572 }
6573
6574
6575
6576
6577
6578 if (path->locks[level] && level > 0) {
6579 btrfs_tree_unlock_rw(eb, path->locks[level]);
6580 path->locks[level] = 0;
6581 }
6582 return 0;
6583}
6584
6585
6586
6587
6588
6589
6590
6591
6592
6593
6594
6595
6596
6597
6598static noinline int do_walk_down(struct btrfs_trans_handle *trans,
6599 struct btrfs_root *root,
6600 struct btrfs_path *path,
6601 struct walk_control *wc, int *lookup_info)
6602{
6603 u64 bytenr;
6604 u64 generation;
6605 u64 parent;
6606 u32 blocksize;
6607 struct btrfs_key key;
6608 struct extent_buffer *next;
6609 int level = wc->level;
6610 int reada = 0;
6611 int ret = 0;
6612
6613 generation = btrfs_node_ptr_generation(path->nodes[level],
6614 path->slots[level]);
6615
6616
6617
6618
6619
6620 if (wc->stage == UPDATE_BACKREF &&
6621 generation <= root->root_key.offset) {
6622 *lookup_info = 1;
6623 return 1;
6624 }
6625
6626 bytenr = btrfs_node_blockptr(path->nodes[level], path->slots[level]);
6627 blocksize = btrfs_level_size(root, level - 1);
6628
6629 next = btrfs_find_tree_block(root, bytenr, blocksize);
6630 if (!next) {
6631 next = btrfs_find_create_tree_block(root, bytenr, blocksize);
6632 if (!next)
6633 return -ENOMEM;
6634 reada = 1;
6635 }
6636 btrfs_tree_lock(next);
6637 btrfs_set_lock_blocking(next);
6638
6639 ret = btrfs_lookup_extent_info(trans, root, bytenr, blocksize,
6640 &wc->refs[level - 1],
6641 &wc->flags[level - 1]);
6642 if (ret < 0) {
6643 btrfs_tree_unlock(next);
6644 return ret;
6645 }
6646
6647 BUG_ON(wc->refs[level - 1] == 0);
6648 *lookup_info = 0;
6649
6650 if (wc->stage == DROP_REFERENCE) {
6651 if (wc->refs[level - 1] > 1) {
6652 if (level == 1 &&
6653 (wc->flags[0] & BTRFS_BLOCK_FLAG_FULL_BACKREF))
6654 goto skip;
6655
6656 if (!wc->update_ref ||
6657 generation <= root->root_key.offset)
6658 goto skip;
6659
6660 btrfs_node_key_to_cpu(path->nodes[level], &key,
6661 path->slots[level]);
6662 ret = btrfs_comp_cpu_keys(&key, &wc->update_progress);
6663 if (ret < 0)
6664 goto skip;
6665
6666 wc->stage = UPDATE_BACKREF;
6667 wc->shared_level = level - 1;
6668 }
6669 } else {
6670 if (level == 1 &&
6671 (wc->flags[0] & BTRFS_BLOCK_FLAG_FULL_BACKREF))
6672 goto skip;
6673 }
6674
6675 if (!btrfs_buffer_uptodate(next, generation, 0)) {
6676 btrfs_tree_unlock(next);
6677 free_extent_buffer(next);
6678 next = NULL;
6679 *lookup_info = 1;
6680 }
6681
6682 if (!next) {
6683 if (reada && level == 1)
6684 reada_walk_down(trans, root, wc, path);
6685 next = read_tree_block(root, bytenr, blocksize, generation);
6686 if (!next)
6687 return -EIO;
6688 btrfs_tree_lock(next);
6689 btrfs_set_lock_blocking(next);
6690 }
6691
6692 level--;
6693 BUG_ON(level != btrfs_header_level(next));
6694 path->nodes[level] = next;
6695 path->slots[level] = 0;
6696 path->locks[level] = BTRFS_WRITE_LOCK_BLOCKING;
6697 wc->level = level;
6698 if (wc->level == 1)
6699 wc->reada_slot = 0;
6700 return 0;
6701skip:
6702 wc->refs[level - 1] = 0;
6703 wc->flags[level - 1] = 0;
6704 if (wc->stage == DROP_REFERENCE) {
6705 if (wc->flags[level] & BTRFS_BLOCK_FLAG_FULL_BACKREF) {
6706 parent = path->nodes[level]->start;
6707 } else {
6708 BUG_ON(root->root_key.objectid !=
6709 btrfs_header_owner(path->nodes[level]));
6710 parent = 0;
6711 }
6712
6713 ret = btrfs_free_extent(trans, root, bytenr, blocksize, parent,
6714 root->root_key.objectid, level - 1, 0, 0);
6715 BUG_ON(ret);
6716 }
6717 btrfs_tree_unlock(next);
6718 free_extent_buffer(next);
6719 *lookup_info = 1;
6720 return 1;
6721}
6722
6723
6724
6725
6726
6727
6728
6729
6730
6731
6732
6733
6734
6735static noinline int walk_up_proc(struct btrfs_trans_handle *trans,
6736 struct btrfs_root *root,
6737 struct btrfs_path *path,
6738 struct walk_control *wc)
6739{
6740 int ret;
6741 int level = wc->level;
6742 struct extent_buffer *eb = path->nodes[level];
6743 u64 parent = 0;
6744
6745 if (wc->stage == UPDATE_BACKREF) {
6746 BUG_ON(wc->shared_level < level);
6747 if (level < wc->shared_level)
6748 goto out;
6749
6750 ret = find_next_key(path, level + 1, &wc->update_progress);
6751 if (ret > 0)
6752 wc->update_ref = 0;
6753
6754 wc->stage = DROP_REFERENCE;
6755 wc->shared_level = -1;
6756 path->slots[level] = 0;
6757
6758
6759
6760
6761
6762
6763 if (!path->locks[level]) {
6764 BUG_ON(level == 0);
6765 btrfs_tree_lock(eb);
6766 btrfs_set_lock_blocking(eb);
6767 path->locks[level] = BTRFS_WRITE_LOCK_BLOCKING;
6768
6769 ret = btrfs_lookup_extent_info(trans, root,
6770 eb->start, eb->len,
6771 &wc->refs[level],
6772 &wc->flags[level]);
6773 if (ret < 0) {
6774 btrfs_tree_unlock_rw(eb, path->locks[level]);
6775 return ret;
6776 }
6777 BUG_ON(wc->refs[level] == 0);
6778 if (wc->refs[level] == 1) {
6779 btrfs_tree_unlock_rw(eb, path->locks[level]);
6780 return 1;
6781 }
6782 }
6783 }
6784
6785
6786 BUG_ON(wc->refs[level] > 1 && !path->locks[level]);
6787
6788 if (wc->refs[level] == 1) {
6789 if (level == 0) {
6790 if (wc->flags[level] & BTRFS_BLOCK_FLAG_FULL_BACKREF)
6791 ret = btrfs_dec_ref(trans, root, eb, 1,
6792 wc->for_reloc);
6793 else
6794 ret = btrfs_dec_ref(trans, root, eb, 0,
6795 wc->for_reloc);
6796 BUG_ON(ret);
6797 }
6798
6799 if (!path->locks[level] &&
6800 btrfs_header_generation(eb) == trans->transid) {
6801 btrfs_tree_lock(eb);
6802 btrfs_set_lock_blocking(eb);
6803 path->locks[level] = BTRFS_WRITE_LOCK_BLOCKING;
6804 }
6805 clean_tree_block(trans, root, eb);
6806 }
6807
6808 if (eb == root->node) {
6809 if (wc->flags[level] & BTRFS_BLOCK_FLAG_FULL_BACKREF)
6810 parent = eb->start;
6811 else
6812 BUG_ON(root->root_key.objectid !=
6813 btrfs_header_owner(eb));
6814 } else {
6815 if (wc->flags[level + 1] & BTRFS_BLOCK_FLAG_FULL_BACKREF)
6816 parent = path->nodes[level + 1]->start;
6817 else
6818 BUG_ON(root->root_key.objectid !=
6819 btrfs_header_owner(path->nodes[level + 1]));
6820 }
6821
6822 btrfs_free_tree_block(trans, root, eb, parent, wc->refs[level] == 1);
6823out:
6824 wc->refs[level] = 0;
6825 wc->flags[level] = 0;
6826 return 0;
6827}
6828
6829static noinline int walk_down_tree(struct btrfs_trans_handle *trans,
6830 struct btrfs_root *root,
6831 struct btrfs_path *path,
6832 struct walk_control *wc)
6833{
6834 int level = wc->level;
6835 int lookup_info = 1;
6836 int ret;
6837
6838 while (level >= 0) {
6839 ret = walk_down_proc(trans, root, path, wc, lookup_info);
6840 if (ret > 0)
6841 break;
6842
6843 if (level == 0)
6844 break;
6845
6846 if (path->slots[level] >=
6847 btrfs_header_nritems(path->nodes[level]))
6848 break;
6849
6850 ret = do_walk_down(trans, root, path, wc, &lookup_info);
6851 if (ret > 0) {
6852 path->slots[level]++;
6853 continue;
6854 } else if (ret < 0)
6855 return ret;
6856 level = wc->level;
6857 }
6858 return 0;
6859}
6860
6861static noinline int walk_up_tree(struct btrfs_trans_handle *trans,
6862 struct btrfs_root *root,
6863 struct btrfs_path *path,
6864 struct walk_control *wc, int max_level)
6865{
6866 int level = wc->level;
6867 int ret;
6868
6869 path->slots[level] = btrfs_header_nritems(path->nodes[level]);
6870 while (level < max_level && path->nodes[level]) {
6871 wc->level = level;
6872 if (path->slots[level] + 1 <
6873 btrfs_header_nritems(path->nodes[level])) {
6874 path->slots[level]++;
6875 return 0;
6876 } else {
6877 ret = walk_up_proc(trans, root, path, wc);
6878 if (ret > 0)
6879 return 0;
6880
6881 if (path->locks[level]) {
6882 btrfs_tree_unlock_rw(path->nodes[level],
6883 path->locks[level]);
6884 path->locks[level] = 0;
6885 }
6886 free_extent_buffer(path->nodes[level]);
6887 path->nodes[level] = NULL;
6888 level++;
6889 }
6890 }
6891 return 1;
6892}
6893
6894
6895
6896
6897
6898
6899
6900
6901
6902
6903
6904
6905int btrfs_drop_snapshot(struct btrfs_root *root,
6906 struct btrfs_block_rsv *block_rsv, int update_ref,
6907 int for_reloc)
6908{
6909 struct btrfs_path *path;
6910 struct btrfs_trans_handle *trans;
6911 struct btrfs_root *tree_root = root->fs_info->tree_root;
6912 struct btrfs_root_item *root_item = &root->root_item;
6913 struct walk_control *wc;
6914 struct btrfs_key key;
6915 int err = 0;
6916 int ret;
6917 int level;
6918
6919 path = btrfs_alloc_path();
6920 if (!path) {
6921 err = -ENOMEM;
6922 goto out;
6923 }
6924
6925 wc = kzalloc(sizeof(*wc), GFP_NOFS);
6926 if (!wc) {
6927 btrfs_free_path(path);
6928 err = -ENOMEM;
6929 goto out;
6930 }
6931
6932 trans = btrfs_start_transaction(tree_root, 0);
6933 if (IS_ERR(trans)) {
6934 err = PTR_ERR(trans);
6935 goto out_free;
6936 }
6937
6938 if (block_rsv)
6939 trans->block_rsv = block_rsv;
6940
6941 if (btrfs_disk_key_objectid(&root_item->drop_progress) == 0) {
6942 level = btrfs_header_level(root->node);
6943 path->nodes[level] = btrfs_lock_root_node(root);
6944 btrfs_set_lock_blocking(path->nodes[level]);
6945 path->slots[level] = 0;
6946 path->locks[level] = BTRFS_WRITE_LOCK_BLOCKING;
6947 memset(&wc->update_progress, 0,
6948 sizeof(wc->update_progress));
6949 } else {
6950 btrfs_disk_key_to_cpu(&key, &root_item->drop_progress);
6951 memcpy(&wc->update_progress, &key,
6952 sizeof(wc->update_progress));
6953
6954 level = root_item->drop_level;
6955 BUG_ON(level == 0);
6956 path->lowest_level = level;
6957 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
6958 path->lowest_level = 0;
6959 if (ret < 0) {
6960 err = ret;
6961 goto out_end_trans;
6962 }
6963 WARN_ON(ret > 0);
6964
6965
6966
6967
6968
6969 btrfs_unlock_up_safe(path, 0);
6970
6971 level = btrfs_header_level(root->node);
6972 while (1) {
6973 btrfs_tree_lock(path->nodes[level]);
6974 btrfs_set_lock_blocking(path->nodes[level]);
6975
6976 ret = btrfs_lookup_extent_info(trans, root,
6977 path->nodes[level]->start,
6978 path->nodes[level]->len,
6979 &wc->refs[level],
6980 &wc->flags[level]);
6981 if (ret < 0) {
6982 err = ret;
6983 goto out_end_trans;
6984 }
6985 BUG_ON(wc->refs[level] == 0);
6986
6987 if (level == root_item->drop_level)
6988 break;
6989
6990 btrfs_tree_unlock(path->nodes[level]);
6991 WARN_ON(wc->refs[level] != 1);
6992 level--;
6993 }
6994 }
6995
6996 wc->level = level;
6997 wc->shared_level = -1;
6998 wc->stage = DROP_REFERENCE;
6999 wc->update_ref = update_ref;
7000 wc->keep_locks = 0;
7001 wc->for_reloc = for_reloc;
7002 wc->reada_count = BTRFS_NODEPTRS_PER_BLOCK(root);
7003
7004 while (1) {
7005 ret = walk_down_tree(trans, root, path, wc);
7006 if (ret < 0) {
7007 err = ret;
7008 break;
7009 }
7010
7011 ret = walk_up_tree(trans, root, path, wc, BTRFS_MAX_LEVEL);
7012 if (ret < 0) {
7013 err = ret;
7014 break;
7015 }
7016
7017 if (ret > 0) {
7018 BUG_ON(wc->stage != DROP_REFERENCE);
7019 break;
7020 }
7021
7022 if (wc->stage == DROP_REFERENCE) {
7023 level = wc->level;
7024 btrfs_node_key(path->nodes[level],
7025 &root_item->drop_progress,
7026 path->slots[level]);
7027 root_item->drop_level = level;
7028 }
7029
7030 BUG_ON(wc->level == 0);
7031 if (btrfs_should_end_transaction(trans, tree_root)) {
7032 ret = btrfs_update_root(trans, tree_root,
7033 &root->root_key,
7034 root_item);
7035 if (ret) {
7036 btrfs_abort_transaction(trans, tree_root, ret);
7037 err = ret;
7038 goto out_end_trans;
7039 }
7040
7041 btrfs_end_transaction_throttle(trans, tree_root);
7042 trans = btrfs_start_transaction(tree_root, 0);
7043 if (IS_ERR(trans)) {
7044 err = PTR_ERR(trans);
7045 goto out_free;
7046 }
7047 if (block_rsv)
7048 trans->block_rsv = block_rsv;
7049 }
7050 }
7051 btrfs_release_path(path);
7052 if (err)
7053 goto out_end_trans;
7054
7055 ret = btrfs_del_root(trans, tree_root, &root->root_key);
7056 if (ret) {
7057 btrfs_abort_transaction(trans, tree_root, ret);
7058 goto out_end_trans;
7059 }
7060
7061 if (root->root_key.objectid != BTRFS_TREE_RELOC_OBJECTID) {
7062 ret = btrfs_find_last_root(tree_root, root->root_key.objectid,
7063 NULL, NULL);
7064 if (ret < 0) {
7065 btrfs_abort_transaction(trans, tree_root, ret);
7066 err = ret;
7067 goto out_end_trans;
7068 } else if (ret > 0) {
7069
7070
7071
7072
7073
7074 btrfs_del_orphan_item(trans, tree_root,
7075 root->root_key.objectid);
7076 }
7077 }
7078
7079 if (root->in_radix) {
7080 btrfs_free_fs_root(tree_root->fs_info, root);
7081 } else {
7082 free_extent_buffer(root->node);
7083 free_extent_buffer(root->commit_root);
7084 kfree(root);
7085 }
7086out_end_trans:
7087 btrfs_end_transaction_throttle(trans, tree_root);
7088out_free:
7089 kfree(wc);
7090 btrfs_free_path(path);
7091out:
7092 if (err)
7093 btrfs_std_error(root->fs_info, err);
7094 return err;
7095}
7096
7097
7098
7099
7100
7101
7102
7103int btrfs_drop_subtree(struct btrfs_trans_handle *trans,
7104 struct btrfs_root *root,
7105 struct extent_buffer *node,
7106 struct extent_buffer *parent)
7107{
7108 struct btrfs_path *path;
7109 struct walk_control *wc;
7110 int level;
7111 int parent_level;
7112 int ret = 0;
7113 int wret;
7114
7115 BUG_ON(root->root_key.objectid != BTRFS_TREE_RELOC_OBJECTID);
7116
7117 path = btrfs_alloc_path();
7118 if (!path)
7119 return -ENOMEM;
7120
7121 wc = kzalloc(sizeof(*wc), GFP_NOFS);
7122 if (!wc) {
7123 btrfs_free_path(path);
7124 return -ENOMEM;
7125 }
7126
7127 btrfs_assert_tree_locked(parent);
7128 parent_level = btrfs_header_level(parent);
7129 extent_buffer_get(parent);
7130 path->nodes[parent_level] = parent;
7131 path->slots[parent_level] = btrfs_header_nritems(parent);
7132
7133 btrfs_assert_tree_locked(node);
7134 level = btrfs_header_level(node);
7135 path->nodes[level] = node;
7136 path->slots[level] = 0;
7137 path->locks[level] = BTRFS_WRITE_LOCK_BLOCKING;
7138
7139 wc->refs[parent_level] = 1;
7140 wc->flags[parent_level] = BTRFS_BLOCK_FLAG_FULL_BACKREF;
7141 wc->level = level;
7142 wc->shared_level = -1;
7143 wc->stage = DROP_REFERENCE;
7144 wc->update_ref = 0;
7145 wc->keep_locks = 1;
7146 wc->for_reloc = 1;
7147 wc->reada_count = BTRFS_NODEPTRS_PER_BLOCK(root);
7148
7149 while (1) {
7150 wret = walk_down_tree(trans, root, path, wc);
7151 if (wret < 0) {
7152 ret = wret;
7153 break;
7154 }
7155
7156 wret = walk_up_tree(trans, root, path, wc, parent_level);
7157 if (wret < 0)
7158 ret = wret;
7159 if (wret != 0)
7160 break;
7161 }
7162
7163 kfree(wc);
7164 btrfs_free_path(path);
7165 return ret;
7166}
7167
7168static u64 update_block_group_flags(struct btrfs_root *root, u64 flags)
7169{
7170 u64 num_devices;
7171 u64 stripped;
7172
7173
7174
7175
7176
7177 stripped = get_restripe_target(root->fs_info, flags);
7178 if (stripped)
7179 return extended_to_chunk(stripped);
7180
7181
7182
7183
7184
7185
7186 num_devices = root->fs_info->fs_devices->rw_devices +
7187 root->fs_info->fs_devices->missing_devices;
7188
7189 stripped = BTRFS_BLOCK_GROUP_RAID0 |
7190 BTRFS_BLOCK_GROUP_RAID1 | BTRFS_BLOCK_GROUP_RAID10;
7191
7192 if (num_devices == 1) {
7193 stripped |= BTRFS_BLOCK_GROUP_DUP;
7194 stripped = flags & ~stripped;
7195
7196
7197 if (flags & BTRFS_BLOCK_GROUP_RAID0)
7198 return stripped;
7199
7200
7201 if (flags & (BTRFS_BLOCK_GROUP_RAID1 |
7202 BTRFS_BLOCK_GROUP_RAID10))
7203 return stripped | BTRFS_BLOCK_GROUP_DUP;
7204 } else {
7205
7206 if (flags & stripped)
7207 return flags;
7208
7209 stripped |= BTRFS_BLOCK_GROUP_DUP;
7210 stripped = flags & ~stripped;
7211
7212
7213 if (flags & BTRFS_BLOCK_GROUP_DUP)
7214 return stripped | BTRFS_BLOCK_GROUP_RAID1;
7215
7216
7217 }
7218
7219 return flags;
7220}
7221
7222static int set_block_group_ro(struct btrfs_block_group_cache *cache, int force)
7223{
7224 struct btrfs_space_info *sinfo = cache->space_info;
7225 u64 num_bytes;
7226 u64 min_allocable_bytes;
7227 int ret = -ENOSPC;
7228
7229
7230
7231
7232
7233
7234
7235 if ((sinfo->flags &
7236 (BTRFS_BLOCK_GROUP_SYSTEM | BTRFS_BLOCK_GROUP_METADATA)) &&
7237 !force)
7238 min_allocable_bytes = 1 * 1024 * 1024;
7239 else
7240 min_allocable_bytes = 0;
7241
7242 spin_lock(&sinfo->lock);
7243 spin_lock(&cache->lock);
7244
7245 if (cache->ro) {
7246 ret = 0;
7247 goto out;
7248 }
7249
7250 num_bytes = cache->key.offset - cache->reserved - cache->pinned -
7251 cache->bytes_super - btrfs_block_group_used(&cache->item);
7252
7253 if (sinfo->bytes_used + sinfo->bytes_reserved + sinfo->bytes_pinned +
7254 sinfo->bytes_may_use + sinfo->bytes_readonly + num_bytes +
7255 min_allocable_bytes <= sinfo->total_bytes) {
7256 sinfo->bytes_readonly += num_bytes;
7257 cache->ro = 1;
7258 ret = 0;
7259 }
7260out:
7261 spin_unlock(&cache->lock);
7262 spin_unlock(&sinfo->lock);
7263 return ret;
7264}
7265
7266int btrfs_set_block_group_ro(struct btrfs_root *root,
7267 struct btrfs_block_group_cache *cache)
7268
7269{
7270 struct btrfs_trans_handle *trans;
7271 u64 alloc_flags;
7272 int ret;
7273
7274 BUG_ON(cache->ro);
7275
7276 trans = btrfs_join_transaction(root);
7277 if (IS_ERR(trans))
7278 return PTR_ERR(trans);
7279
7280 alloc_flags = update_block_group_flags(root, cache->flags);
7281 if (alloc_flags != cache->flags) {
7282 ret = do_chunk_alloc(trans, root, 2 * 1024 * 1024, alloc_flags,
7283 CHUNK_ALLOC_FORCE);
7284 if (ret < 0)
7285 goto out;
7286 }
7287
7288 ret = set_block_group_ro(cache, 0);
7289 if (!ret)
7290 goto out;
7291 alloc_flags = get_alloc_profile(root, cache->space_info->flags);
7292 ret = do_chunk_alloc(trans, root, 2 * 1024 * 1024, alloc_flags,
7293 CHUNK_ALLOC_FORCE);
7294 if (ret < 0)
7295 goto out;
7296 ret = set_block_group_ro(cache, 0);
7297out:
7298 btrfs_end_transaction(trans, root);
7299 return ret;
7300}
7301
7302int btrfs_force_chunk_alloc(struct btrfs_trans_handle *trans,
7303 struct btrfs_root *root, u64 type)
7304{
7305 u64 alloc_flags = get_alloc_profile(root, type);
7306 return do_chunk_alloc(trans, root, 2 * 1024 * 1024, alloc_flags,
7307 CHUNK_ALLOC_FORCE);
7308}
7309
7310
7311
7312
7313
7314static u64 __btrfs_get_ro_block_group_free_space(struct list_head *groups_list)
7315{
7316 struct btrfs_block_group_cache *block_group;
7317 u64 free_bytes = 0;
7318 int factor;
7319
7320 list_for_each_entry(block_group, groups_list, list) {
7321 spin_lock(&block_group->lock);
7322
7323 if (!block_group->ro) {
7324 spin_unlock(&block_group->lock);
7325 continue;
7326 }
7327
7328 if (block_group->flags & (BTRFS_BLOCK_GROUP_RAID1 |
7329 BTRFS_BLOCK_GROUP_RAID10 |
7330 BTRFS_BLOCK_GROUP_DUP))
7331 factor = 2;
7332 else
7333 factor = 1;
7334
7335 free_bytes += (block_group->key.offset -
7336 btrfs_block_group_used(&block_group->item)) *
7337 factor;
7338
7339 spin_unlock(&block_group->lock);
7340 }
7341
7342 return free_bytes;
7343}
7344
7345
7346
7347
7348
7349u64 btrfs_account_ro_block_groups_free_space(struct btrfs_space_info *sinfo)
7350{
7351 int i;
7352 u64 free_bytes = 0;
7353
7354 spin_lock(&sinfo->lock);
7355
7356 for(i = 0; i < BTRFS_NR_RAID_TYPES; i++)
7357 if (!list_empty(&sinfo->block_groups[i]))
7358 free_bytes += __btrfs_get_ro_block_group_free_space(
7359 &sinfo->block_groups[i]);
7360
7361 spin_unlock(&sinfo->lock);
7362
7363 return free_bytes;
7364}
7365
7366void btrfs_set_block_group_rw(struct btrfs_root *root,
7367 struct btrfs_block_group_cache *cache)
7368{
7369 struct btrfs_space_info *sinfo = cache->space_info;
7370 u64 num_bytes;
7371
7372 BUG_ON(!cache->ro);
7373
7374 spin_lock(&sinfo->lock);
7375 spin_lock(&cache->lock);
7376 num_bytes = cache->key.offset - cache->reserved - cache->pinned -
7377 cache->bytes_super - btrfs_block_group_used(&cache->item);
7378 sinfo->bytes_readonly -= num_bytes;
7379 cache->ro = 0;
7380 spin_unlock(&cache->lock);
7381 spin_unlock(&sinfo->lock);
7382}
7383
7384
7385
7386
7387
7388
7389
7390int btrfs_can_relocate(struct btrfs_root *root, u64 bytenr)
7391{
7392 struct btrfs_block_group_cache *block_group;
7393 struct btrfs_space_info *space_info;
7394 struct btrfs_fs_devices *fs_devices = root->fs_info->fs_devices;
7395 struct btrfs_device *device;
7396 u64 min_free;
7397 u64 dev_min = 1;
7398 u64 dev_nr = 0;
7399 u64 target;
7400 int index;
7401 int full = 0;
7402 int ret = 0;
7403
7404 block_group = btrfs_lookup_block_group(root->fs_info, bytenr);
7405
7406
7407 if (!block_group)
7408 return -1;
7409
7410 min_free = btrfs_block_group_used(&block_group->item);
7411
7412
7413 if (!min_free)
7414 goto out;
7415
7416 space_info = block_group->space_info;
7417 spin_lock(&space_info->lock);
7418
7419 full = space_info->full;
7420
7421
7422
7423
7424
7425
7426
7427
7428 if ((space_info->total_bytes != block_group->key.offset) &&
7429 (space_info->bytes_used + space_info->bytes_reserved +
7430 space_info->bytes_pinned + space_info->bytes_readonly +
7431 min_free < space_info->total_bytes)) {
7432 spin_unlock(&space_info->lock);
7433 goto out;
7434 }
7435 spin_unlock(&space_info->lock);
7436
7437
7438
7439
7440
7441
7442
7443
7444 ret = -1;
7445
7446
7447
7448
7449
7450
7451
7452
7453
7454 target = get_restripe_target(root->fs_info, block_group->flags);
7455 if (target) {
7456 index = __get_block_group_index(extended_to_chunk(target));
7457 } else {
7458
7459
7460
7461
7462 if (full)
7463 goto out;
7464
7465 index = get_block_group_index(block_group);
7466 }
7467
7468 if (index == 0) {
7469 dev_min = 4;
7470
7471 min_free >>= 1;
7472 } else if (index == 1) {
7473 dev_min = 2;
7474 } else if (index == 2) {
7475
7476 min_free <<= 1;
7477 } else if (index == 3) {
7478 dev_min = fs_devices->rw_devices;
7479 do_div(min_free, dev_min);
7480 }
7481
7482 mutex_lock(&root->fs_info->chunk_mutex);
7483 list_for_each_entry(device, &fs_devices->alloc_list, dev_alloc_list) {
7484 u64 dev_offset;
7485
7486
7487
7488
7489
7490 if (device->total_bytes > device->bytes_used + min_free) {
7491 ret = find_free_dev_extent(device, min_free,
7492 &dev_offset, NULL);
7493 if (!ret)
7494 dev_nr++;
7495
7496 if (dev_nr >= dev_min)
7497 break;
7498
7499 ret = -1;
7500 }
7501 }
7502 mutex_unlock(&root->fs_info->chunk_mutex);
7503out:
7504 btrfs_put_block_group(block_group);
7505 return ret;
7506}
7507
7508static int find_first_block_group(struct btrfs_root *root,
7509 struct btrfs_path *path, struct btrfs_key *key)
7510{
7511 int ret = 0;
7512 struct btrfs_key found_key;
7513 struct extent_buffer *leaf;
7514 int slot;
7515
7516 ret = btrfs_search_slot(NULL, root, key, path, 0, 0);
7517 if (ret < 0)
7518 goto out;
7519
7520 while (1) {
7521 slot = path->slots[0];
7522 leaf = path->nodes[0];
7523 if (slot >= btrfs_header_nritems(leaf)) {
7524 ret = btrfs_next_leaf(root, path);
7525 if (ret == 0)
7526 continue;
7527 if (ret < 0)
7528 goto out;
7529 break;
7530 }
7531 btrfs_item_key_to_cpu(leaf, &found_key, slot);
7532
7533 if (found_key.objectid >= key->objectid &&
7534 found_key.type == BTRFS_BLOCK_GROUP_ITEM_KEY) {
7535 ret = 0;
7536 goto out;
7537 }
7538 path->slots[0]++;
7539 }
7540out:
7541 return ret;
7542}
7543
7544void btrfs_put_block_group_cache(struct btrfs_fs_info *info)
7545{
7546 struct btrfs_block_group_cache *block_group;
7547 u64 last = 0;
7548
7549 while (1) {
7550 struct inode *inode;
7551
7552 block_group = btrfs_lookup_first_block_group(info, last);
7553 while (block_group) {
7554 spin_lock(&block_group->lock);
7555 if (block_group->iref)
7556 break;
7557 spin_unlock(&block_group->lock);
7558 block_group = next_block_group(info->tree_root,
7559 block_group);
7560 }
7561 if (!block_group) {
7562 if (last == 0)
7563 break;
7564 last = 0;
7565 continue;
7566 }
7567
7568 inode = block_group->inode;
7569 block_group->iref = 0;
7570 block_group->inode = NULL;
7571 spin_unlock(&block_group->lock);
7572 iput(inode);
7573 last = block_group->key.objectid + block_group->key.offset;
7574 btrfs_put_block_group(block_group);
7575 }
7576}
7577
7578int btrfs_free_block_groups(struct btrfs_fs_info *info)
7579{
7580 struct btrfs_block_group_cache *block_group;
7581 struct btrfs_space_info *space_info;
7582 struct btrfs_caching_control *caching_ctl;
7583 struct rb_node *n;
7584
7585 down_write(&info->extent_commit_sem);
7586 while (!list_empty(&info->caching_block_groups)) {
7587 caching_ctl = list_entry(info->caching_block_groups.next,
7588 struct btrfs_caching_control, list);
7589 list_del(&caching_ctl->list);
7590 put_caching_control(caching_ctl);
7591 }
7592 up_write(&info->extent_commit_sem);
7593
7594 spin_lock(&info->block_group_cache_lock);
7595 while ((n = rb_last(&info->block_group_cache_tree)) != NULL) {
7596 block_group = rb_entry(n, struct btrfs_block_group_cache,
7597 cache_node);
7598 rb_erase(&block_group->cache_node,
7599 &info->block_group_cache_tree);
7600 spin_unlock(&info->block_group_cache_lock);
7601
7602 down_write(&block_group->space_info->groups_sem);
7603 list_del(&block_group->list);
7604 up_write(&block_group->space_info->groups_sem);
7605
7606 if (block_group->cached == BTRFS_CACHE_STARTED)
7607 wait_block_group_cache_done(block_group);
7608
7609
7610
7611
7612
7613 if (block_group->cached == BTRFS_CACHE_NO)
7614 free_excluded_extents(info->extent_root, block_group);
7615
7616 btrfs_remove_free_space_cache(block_group);
7617 btrfs_put_block_group(block_group);
7618
7619 spin_lock(&info->block_group_cache_lock);
7620 }
7621 spin_unlock(&info->block_group_cache_lock);
7622
7623
7624
7625
7626
7627
7628
7629 synchronize_rcu();
7630
7631 release_global_block_rsv(info);
7632
7633 while(!list_empty(&info->space_info)) {
7634 space_info = list_entry(info->space_info.next,
7635 struct btrfs_space_info,
7636 list);
7637 if (space_info->bytes_pinned > 0 ||
7638 space_info->bytes_reserved > 0 ||
7639 space_info->bytes_may_use > 0) {
7640 WARN_ON(1);
7641 dump_space_info(space_info, 0, 0);
7642 }
7643 list_del(&space_info->list);
7644 kfree(space_info);
7645 }
7646 return 0;
7647}
7648
7649static void __link_block_group(struct btrfs_space_info *space_info,
7650 struct btrfs_block_group_cache *cache)
7651{
7652 int index = get_block_group_index(cache);
7653
7654 down_write(&space_info->groups_sem);
7655 list_add_tail(&cache->list, &space_info->block_groups[index]);
7656 up_write(&space_info->groups_sem);
7657}
7658
7659int btrfs_read_block_groups(struct btrfs_root *root)
7660{
7661 struct btrfs_path *path;
7662 int ret;
7663 struct btrfs_block_group_cache *cache;
7664 struct btrfs_fs_info *info = root->fs_info;
7665 struct btrfs_space_info *space_info;
7666 struct btrfs_key key;
7667 struct btrfs_key found_key;
7668 struct extent_buffer *leaf;
7669 int need_clear = 0;
7670 u64 cache_gen;
7671
7672 root = info->extent_root;
7673 key.objectid = 0;
7674 key.offset = 0;
7675 btrfs_set_key_type(&key, BTRFS_BLOCK_GROUP_ITEM_KEY);
7676 path = btrfs_alloc_path();
7677 if (!path)
7678 return -ENOMEM;
7679 path->reada = 1;
7680
7681 cache_gen = btrfs_super_cache_generation(root->fs_info->super_copy);
7682 if (btrfs_test_opt(root, SPACE_CACHE) &&
7683 btrfs_super_generation(root->fs_info->super_copy) != cache_gen)
7684 need_clear = 1;
7685 if (btrfs_test_opt(root, CLEAR_CACHE))
7686 need_clear = 1;
7687
7688 while (1) {
7689 ret = find_first_block_group(root, path, &key);
7690 if (ret > 0)
7691 break;
7692 if (ret != 0)
7693 goto error;
7694 leaf = path->nodes[0];
7695 btrfs_item_key_to_cpu(leaf, &found_key, path->slots[0]);
7696 cache = kzalloc(sizeof(*cache), GFP_NOFS);
7697 if (!cache) {
7698 ret = -ENOMEM;
7699 goto error;
7700 }
7701 cache->free_space_ctl = kzalloc(sizeof(*cache->free_space_ctl),
7702 GFP_NOFS);
7703 if (!cache->free_space_ctl) {
7704 kfree(cache);
7705 ret = -ENOMEM;
7706 goto error;
7707 }
7708
7709 atomic_set(&cache->count, 1);
7710 spin_lock_init(&cache->lock);
7711 cache->fs_info = info;
7712 INIT_LIST_HEAD(&cache->list);
7713 INIT_LIST_HEAD(&cache->cluster_list);
7714
7715 if (need_clear) {
7716
7717
7718
7719
7720
7721
7722
7723
7724
7725
7726 cache->disk_cache_state = BTRFS_DC_CLEAR;
7727 if (btrfs_test_opt(root, SPACE_CACHE))
7728 cache->dirty = 1;
7729 }
7730
7731 read_extent_buffer(leaf, &cache->item,
7732 btrfs_item_ptr_offset(leaf, path->slots[0]),
7733 sizeof(cache->item));
7734 memcpy(&cache->key, &found_key, sizeof(found_key));
7735
7736 key.objectid = found_key.objectid + found_key.offset;
7737 btrfs_release_path(path);
7738 cache->flags = btrfs_block_group_flags(&cache->item);
7739 cache->sectorsize = root->sectorsize;
7740
7741 btrfs_init_free_space_ctl(cache);
7742
7743
7744
7745
7746
7747
7748 exclude_super_stripes(root, cache);
7749
7750
7751
7752
7753
7754
7755
7756
7757 if (found_key.offset == btrfs_block_group_used(&cache->item)) {
7758 cache->last_byte_to_unpin = (u64)-1;
7759 cache->cached = BTRFS_CACHE_FINISHED;
7760 free_excluded_extents(root, cache);
7761 } else if (btrfs_block_group_used(&cache->item) == 0) {
7762 cache->last_byte_to_unpin = (u64)-1;
7763 cache->cached = BTRFS_CACHE_FINISHED;
7764 add_new_free_space(cache, root->fs_info,
7765 found_key.objectid,
7766 found_key.objectid +
7767 found_key.offset);
7768 free_excluded_extents(root, cache);
7769 }
7770
7771 ret = update_space_info(info, cache->flags, found_key.offset,
7772 btrfs_block_group_used(&cache->item),
7773 &space_info);
7774 BUG_ON(ret);
7775 cache->space_info = space_info;
7776 spin_lock(&cache->space_info->lock);
7777 cache->space_info->bytes_readonly += cache->bytes_super;
7778 spin_unlock(&cache->space_info->lock);
7779
7780 __link_block_group(space_info, cache);
7781
7782 ret = btrfs_add_block_group_cache(root->fs_info, cache);
7783 BUG_ON(ret);
7784
7785 set_avail_alloc_bits(root->fs_info, cache->flags);
7786 if (btrfs_chunk_readonly(root, cache->key.objectid))
7787 set_block_group_ro(cache, 1);
7788 }
7789
7790 list_for_each_entry_rcu(space_info, &root->fs_info->space_info, list) {
7791 if (!(get_alloc_profile(root, space_info->flags) &
7792 (BTRFS_BLOCK_GROUP_RAID10 |
7793 BTRFS_BLOCK_GROUP_RAID1 |
7794 BTRFS_BLOCK_GROUP_DUP)))
7795 continue;
7796
7797
7798
7799
7800 list_for_each_entry(cache, &space_info->block_groups[3], list)
7801 set_block_group_ro(cache, 1);
7802 list_for_each_entry(cache, &space_info->block_groups[4], list)
7803 set_block_group_ro(cache, 1);
7804 }
7805
7806 init_global_block_rsv(info);
7807 ret = 0;
7808error:
7809 btrfs_free_path(path);
7810 return ret;
7811}
7812
7813int btrfs_make_block_group(struct btrfs_trans_handle *trans,
7814 struct btrfs_root *root, u64 bytes_used,
7815 u64 type, u64 chunk_objectid, u64 chunk_offset,
7816 u64 size)
7817{
7818 int ret;
7819 struct btrfs_root *extent_root;
7820 struct btrfs_block_group_cache *cache;
7821
7822 extent_root = root->fs_info->extent_root;
7823
7824 root->fs_info->last_trans_log_full_commit = trans->transid;
7825
7826 cache = kzalloc(sizeof(*cache), GFP_NOFS);
7827 if (!cache)
7828 return -ENOMEM;
7829 cache->free_space_ctl = kzalloc(sizeof(*cache->free_space_ctl),
7830 GFP_NOFS);
7831 if (!cache->free_space_ctl) {
7832 kfree(cache);
7833 return -ENOMEM;
7834 }
7835
7836 cache->key.objectid = chunk_offset;
7837 cache->key.offset = size;
7838 cache->key.type = BTRFS_BLOCK_GROUP_ITEM_KEY;
7839 cache->sectorsize = root->sectorsize;
7840 cache->fs_info = root->fs_info;
7841
7842 atomic_set(&cache->count, 1);
7843 spin_lock_init(&cache->lock);
7844 INIT_LIST_HEAD(&cache->list);
7845 INIT_LIST_HEAD(&cache->cluster_list);
7846
7847 btrfs_init_free_space_ctl(cache);
7848
7849 btrfs_set_block_group_used(&cache->item, bytes_used);
7850 btrfs_set_block_group_chunk_objectid(&cache->item, chunk_objectid);
7851 cache->flags = type;
7852 btrfs_set_block_group_flags(&cache->item, type);
7853
7854 cache->last_byte_to_unpin = (u64)-1;
7855 cache->cached = BTRFS_CACHE_FINISHED;
7856 exclude_super_stripes(root, cache);
7857
7858 add_new_free_space(cache, root->fs_info, chunk_offset,
7859 chunk_offset + size);
7860
7861 free_excluded_extents(root, cache);
7862
7863 ret = update_space_info(root->fs_info, cache->flags, size, bytes_used,
7864 &cache->space_info);
7865 BUG_ON(ret);
7866 update_global_block_rsv(root->fs_info);
7867
7868 spin_lock(&cache->space_info->lock);
7869 cache->space_info->bytes_readonly += cache->bytes_super;
7870 spin_unlock(&cache->space_info->lock);
7871
7872 __link_block_group(cache->space_info, cache);
7873
7874 ret = btrfs_add_block_group_cache(root->fs_info, cache);
7875 BUG_ON(ret);
7876
7877 ret = btrfs_insert_item(trans, extent_root, &cache->key, &cache->item,
7878 sizeof(cache->item));
7879 if (ret) {
7880 btrfs_abort_transaction(trans, extent_root, ret);
7881 return ret;
7882 }
7883
7884 set_avail_alloc_bits(extent_root->fs_info, type);
7885
7886 return 0;
7887}
7888
7889static void clear_avail_alloc_bits(struct btrfs_fs_info *fs_info, u64 flags)
7890{
7891 u64 extra_flags = chunk_to_extended(flags) &
7892 BTRFS_EXTENDED_PROFILE_MASK;
7893
7894 if (flags & BTRFS_BLOCK_GROUP_DATA)
7895 fs_info->avail_data_alloc_bits &= ~extra_flags;
7896 if (flags & BTRFS_BLOCK_GROUP_METADATA)
7897 fs_info->avail_metadata_alloc_bits &= ~extra_flags;
7898 if (flags & BTRFS_BLOCK_GROUP_SYSTEM)
7899 fs_info->avail_system_alloc_bits &= ~extra_flags;
7900}
7901
7902int btrfs_remove_block_group(struct btrfs_trans_handle *trans,
7903 struct btrfs_root *root, u64 group_start)
7904{
7905 struct btrfs_path *path;
7906 struct btrfs_block_group_cache *block_group;
7907 struct btrfs_free_cluster *cluster;
7908 struct btrfs_root *tree_root = root->fs_info->tree_root;
7909 struct btrfs_key key;
7910 struct inode *inode;
7911 int ret;
7912 int index;
7913 int factor;
7914
7915 root = root->fs_info->extent_root;
7916
7917 block_group = btrfs_lookup_block_group(root->fs_info, group_start);
7918 BUG_ON(!block_group);
7919 BUG_ON(!block_group->ro);
7920
7921
7922
7923
7924
7925 free_excluded_extents(root, block_group);
7926
7927 memcpy(&key, &block_group->key, sizeof(key));
7928 index = get_block_group_index(block_group);
7929 if (block_group->flags & (BTRFS_BLOCK_GROUP_DUP |
7930 BTRFS_BLOCK_GROUP_RAID1 |
7931 BTRFS_BLOCK_GROUP_RAID10))
7932 factor = 2;
7933 else
7934 factor = 1;
7935
7936
7937 cluster = &root->fs_info->data_alloc_cluster;
7938 spin_lock(&cluster->refill_lock);
7939 btrfs_return_cluster_to_free_space(block_group, cluster);
7940 spin_unlock(&cluster->refill_lock);
7941
7942
7943
7944
7945
7946 cluster = &root->fs_info->meta_alloc_cluster;
7947 spin_lock(&cluster->refill_lock);
7948 btrfs_return_cluster_to_free_space(block_group, cluster);
7949 spin_unlock(&cluster->refill_lock);
7950
7951 path = btrfs_alloc_path();
7952 if (!path) {
7953 ret = -ENOMEM;
7954 goto out;
7955 }
7956
7957 inode = lookup_free_space_inode(tree_root, block_group, path);
7958 if (!IS_ERR(inode)) {
7959 ret = btrfs_orphan_add(trans, inode);
7960 if (ret) {
7961 btrfs_add_delayed_iput(inode);
7962 goto out;
7963 }
7964 clear_nlink(inode);
7965
7966 spin_lock(&block_group->lock);
7967 if (block_group->iref) {
7968 block_group->iref = 0;
7969 block_group->inode = NULL;
7970 spin_unlock(&block_group->lock);
7971 iput(inode);
7972 } else {
7973 spin_unlock(&block_group->lock);
7974 }
7975
7976 btrfs_add_delayed_iput(inode);
7977 }
7978
7979 key.objectid = BTRFS_FREE_SPACE_OBJECTID;
7980 key.offset = block_group->key.objectid;
7981 key.type = 0;
7982
7983 ret = btrfs_search_slot(trans, tree_root, &key, path, -1, 1);
7984 if (ret < 0)
7985 goto out;
7986 if (ret > 0)
7987 btrfs_release_path(path);
7988 if (ret == 0) {
7989 ret = btrfs_del_item(trans, tree_root, path);
7990 if (ret)
7991 goto out;
7992 btrfs_release_path(path);
7993 }
7994
7995 spin_lock(&root->fs_info->block_group_cache_lock);
7996 rb_erase(&block_group->cache_node,
7997 &root->fs_info->block_group_cache_tree);
7998 spin_unlock(&root->fs_info->block_group_cache_lock);
7999
8000 down_write(&block_group->space_info->groups_sem);
8001
8002
8003
8004
8005 list_del_init(&block_group->list);
8006 if (list_empty(&block_group->space_info->block_groups[index]))
8007 clear_avail_alloc_bits(root->fs_info, block_group->flags);
8008 up_write(&block_group->space_info->groups_sem);
8009
8010 if (block_group->cached == BTRFS_CACHE_STARTED)
8011 wait_block_group_cache_done(block_group);
8012
8013 btrfs_remove_free_space_cache(block_group);
8014
8015 spin_lock(&block_group->space_info->lock);
8016 block_group->space_info->total_bytes -= block_group->key.offset;
8017 block_group->space_info->bytes_readonly -= block_group->key.offset;
8018 block_group->space_info->disk_total -= block_group->key.offset * factor;
8019 spin_unlock(&block_group->space_info->lock);
8020
8021 memcpy(&key, &block_group->key, sizeof(key));
8022
8023 btrfs_clear_space_info_full(root->fs_info);
8024
8025 btrfs_put_block_group(block_group);
8026 btrfs_put_block_group(block_group);
8027
8028 ret = btrfs_search_slot(trans, root, &key, path, -1, 1);
8029 if (ret > 0)
8030 ret = -EIO;
8031 if (ret < 0)
8032 goto out;
8033
8034 ret = btrfs_del_item(trans, root, path);
8035out:
8036 btrfs_free_path(path);
8037 return ret;
8038}
8039
8040int btrfs_init_space_info(struct btrfs_fs_info *fs_info)
8041{
8042 struct btrfs_space_info *space_info;
8043 struct btrfs_super_block *disk_super;
8044 u64 features;
8045 u64 flags;
8046 int mixed = 0;
8047 int ret;
8048
8049 disk_super = fs_info->super_copy;
8050 if (!btrfs_super_root(disk_super))
8051 return 1;
8052
8053 features = btrfs_super_incompat_flags(disk_super);
8054 if (features & BTRFS_FEATURE_INCOMPAT_MIXED_GROUPS)
8055 mixed = 1;
8056
8057 flags = BTRFS_BLOCK_GROUP_SYSTEM;
8058 ret = update_space_info(fs_info, flags, 0, 0, &space_info);
8059 if (ret)
8060 goto out;
8061
8062 if (mixed) {
8063 flags = BTRFS_BLOCK_GROUP_METADATA | BTRFS_BLOCK_GROUP_DATA;
8064 ret = update_space_info(fs_info, flags, 0, 0, &space_info);
8065 } else {
8066 flags = BTRFS_BLOCK_GROUP_METADATA;
8067 ret = update_space_info(fs_info, flags, 0, 0, &space_info);
8068 if (ret)
8069 goto out;
8070
8071 flags = BTRFS_BLOCK_GROUP_DATA;
8072 ret = update_space_info(fs_info, flags, 0, 0, &space_info);
8073 }
8074out:
8075 return ret;
8076}
8077
8078int btrfs_error_unpin_extent_range(struct btrfs_root *root, u64 start, u64 end)
8079{
8080 return unpin_extent_range(root, start, end);
8081}
8082
8083int btrfs_error_discard_extent(struct btrfs_root *root, u64 bytenr,
8084 u64 num_bytes, u64 *actual_bytes)
8085{
8086 return btrfs_discard_extent(root, bytenr, num_bytes, actual_bytes);
8087}
8088
8089int btrfs_trim_fs(struct btrfs_root *root, struct fstrim_range *range)
8090{
8091 struct btrfs_fs_info *fs_info = root->fs_info;
8092 struct btrfs_block_group_cache *cache = NULL;
8093 u64 group_trimmed;
8094 u64 start;
8095 u64 end;
8096 u64 trimmed = 0;
8097 u64 total_bytes = btrfs_super_total_bytes(fs_info->super_copy);
8098 int ret = 0;
8099
8100
8101
8102
8103 if (range->len == total_bytes)
8104 cache = btrfs_lookup_first_block_group(fs_info, range->start);
8105 else
8106 cache = btrfs_lookup_block_group(fs_info, range->start);
8107
8108 while (cache) {
8109 if (cache->key.objectid >= (range->start + range->len)) {
8110 btrfs_put_block_group(cache);
8111 break;
8112 }
8113
8114 start = max(range->start, cache->key.objectid);
8115 end = min(range->start + range->len,
8116 cache->key.objectid + cache->key.offset);
8117
8118 if (end - start >= range->minlen) {
8119 if (!block_group_cache_done(cache)) {
8120 ret = cache_block_group(cache, NULL, root, 0);
8121 if (!ret)
8122 wait_block_group_cache_done(cache);
8123 }
8124 ret = btrfs_trim_block_group(cache,
8125 &group_trimmed,
8126 start,
8127 end,
8128 range->minlen);
8129
8130 trimmed += group_trimmed;
8131 if (ret) {
8132 btrfs_put_block_group(cache);
8133 break;
8134 }
8135 }
8136
8137 cache = next_block_group(fs_info->tree_root, cache);
8138 }
8139
8140 range->len = trimmed;
8141 return ret;
8142}
8143