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
38
39
40
41
42
43
44
45
46
47
48
49
50
51enum {
52 CHUNK_ALLOC_NO_FORCE = 0,
53 CHUNK_ALLOC_LIMITED = 1,
54 CHUNK_ALLOC_FORCE = 2,
55};
56
57
58
59
60
61
62
63
64
65
66enum {
67 RESERVE_FREE = 0,
68 RESERVE_ALLOC = 1,
69 RESERVE_ALLOC_NO_ACCOUNT = 2,
70};
71
72static int update_block_group(struct btrfs_trans_handle *trans,
73 struct btrfs_root *root,
74 u64 bytenr, u64 num_bytes, int alloc);
75static int __btrfs_free_extent(struct btrfs_trans_handle *trans,
76 struct btrfs_root *root,
77 u64 bytenr, u64 num_bytes, u64 parent,
78 u64 root_objectid, u64 owner_objectid,
79 u64 owner_offset, int refs_to_drop,
80 struct btrfs_delayed_extent_op *extra_op);
81static void __run_delayed_extent_op(struct btrfs_delayed_extent_op *extent_op,
82 struct extent_buffer *leaf,
83 struct btrfs_extent_item *ei);
84static int alloc_reserved_file_extent(struct btrfs_trans_handle *trans,
85 struct btrfs_root *root,
86 u64 parent, u64 root_objectid,
87 u64 flags, u64 owner, u64 offset,
88 struct btrfs_key *ins, int ref_mod);
89static int alloc_reserved_tree_block(struct btrfs_trans_handle *trans,
90 struct btrfs_root *root,
91 u64 parent, u64 root_objectid,
92 u64 flags, struct btrfs_disk_key *key,
93 int level, struct btrfs_key *ins);
94static int do_chunk_alloc(struct btrfs_trans_handle *trans,
95 struct btrfs_root *extent_root, u64 alloc_bytes,
96 u64 flags, int force);
97static int find_next_key(struct btrfs_path *path, int level,
98 struct btrfs_key *key);
99static void dump_space_info(struct btrfs_space_info *info, u64 bytes,
100 int dump_block_groups);
101static int btrfs_update_reserved_bytes(struct btrfs_block_group_cache *cache,
102 u64 num_bytes, int reserve);
103
104static noinline int
105block_group_cache_done(struct btrfs_block_group_cache *cache)
106{
107 smp_mb();
108 return cache->cached == BTRFS_CACHE_FINISHED;
109}
110
111static int block_group_bits(struct btrfs_block_group_cache *cache, u64 bits)
112{
113 return (cache->flags & bits) == bits;
114}
115
116static void btrfs_get_block_group(struct btrfs_block_group_cache *cache)
117{
118 atomic_inc(&cache->count);
119}
120
121void btrfs_put_block_group(struct btrfs_block_group_cache *cache)
122{
123 if (atomic_dec_and_test(&cache->count)) {
124 WARN_ON(cache->pinned > 0);
125 WARN_ON(cache->reserved > 0);
126 kfree(cache->free_space_ctl);
127 kfree(cache);
128 }
129}
130
131
132
133
134
135static int btrfs_add_block_group_cache(struct btrfs_fs_info *info,
136 struct btrfs_block_group_cache *block_group)
137{
138 struct rb_node **p;
139 struct rb_node *parent = NULL;
140 struct btrfs_block_group_cache *cache;
141
142 spin_lock(&info->block_group_cache_lock);
143 p = &info->block_group_cache_tree.rb_node;
144
145 while (*p) {
146 parent = *p;
147 cache = rb_entry(parent, struct btrfs_block_group_cache,
148 cache_node);
149 if (block_group->key.objectid < cache->key.objectid) {
150 p = &(*p)->rb_left;
151 } else if (block_group->key.objectid > cache->key.objectid) {
152 p = &(*p)->rb_right;
153 } else {
154 spin_unlock(&info->block_group_cache_lock);
155 return -EEXIST;
156 }
157 }
158
159 rb_link_node(&block_group->cache_node, parent, p);
160 rb_insert_color(&block_group->cache_node,
161 &info->block_group_cache_tree);
162 spin_unlock(&info->block_group_cache_lock);
163
164 return 0;
165}
166
167
168
169
170
171static struct btrfs_block_group_cache *
172block_group_cache_tree_search(struct btrfs_fs_info *info, u64 bytenr,
173 int contains)
174{
175 struct btrfs_block_group_cache *cache, *ret = NULL;
176 struct rb_node *n;
177 u64 end, start;
178
179 spin_lock(&info->block_group_cache_lock);
180 n = info->block_group_cache_tree.rb_node;
181
182 while (n) {
183 cache = rb_entry(n, struct btrfs_block_group_cache,
184 cache_node);
185 end = cache->key.objectid + cache->key.offset - 1;
186 start = cache->key.objectid;
187
188 if (bytenr < start) {
189 if (!contains && (!ret || start < ret->key.objectid))
190 ret = cache;
191 n = n->rb_left;
192 } else if (bytenr > start) {
193 if (contains && bytenr <= end) {
194 ret = cache;
195 break;
196 }
197 n = n->rb_right;
198 } else {
199 ret = cache;
200 break;
201 }
202 }
203 if (ret)
204 btrfs_get_block_group(ret);
205 spin_unlock(&info->block_group_cache_lock);
206
207 return ret;
208}
209
210static int add_excluded_extent(struct btrfs_root *root,
211 u64 start, u64 num_bytes)
212{
213 u64 end = start + num_bytes - 1;
214 set_extent_bits(&root->fs_info->freed_extents[0],
215 start, end, EXTENT_UPTODATE, GFP_NOFS);
216 set_extent_bits(&root->fs_info->freed_extents[1],
217 start, end, EXTENT_UPTODATE, GFP_NOFS);
218 return 0;
219}
220
221static void free_excluded_extents(struct btrfs_root *root,
222 struct btrfs_block_group_cache *cache)
223{
224 u64 start, end;
225
226 start = cache->key.objectid;
227 end = start + cache->key.offset - 1;
228
229 clear_extent_bits(&root->fs_info->freed_extents[0],
230 start, end, EXTENT_UPTODATE, GFP_NOFS);
231 clear_extent_bits(&root->fs_info->freed_extents[1],
232 start, end, EXTENT_UPTODATE, GFP_NOFS);
233}
234
235static int exclude_super_stripes(struct btrfs_root *root,
236 struct btrfs_block_group_cache *cache)
237{
238 u64 bytenr;
239 u64 *logical;
240 int stripe_len;
241 int i, nr, ret;
242
243 if (cache->key.objectid < BTRFS_SUPER_INFO_OFFSET) {
244 stripe_len = BTRFS_SUPER_INFO_OFFSET - cache->key.objectid;
245 cache->bytes_super += stripe_len;
246 ret = add_excluded_extent(root, cache->key.objectid,
247 stripe_len);
248 BUG_ON(ret);
249 }
250
251 for (i = 0; i < BTRFS_SUPER_MIRROR_MAX; i++) {
252 bytenr = btrfs_sb_offset(i);
253 ret = btrfs_rmap_block(&root->fs_info->mapping_tree,
254 cache->key.objectid, bytenr,
255 0, &logical, &nr, &stripe_len);
256 BUG_ON(ret);
257
258 while (nr--) {
259 cache->bytes_super += stripe_len;
260 ret = add_excluded_extent(root, logical[nr],
261 stripe_len);
262 BUG_ON(ret);
263 }
264
265 kfree(logical);
266 }
267 return 0;
268}
269
270static struct btrfs_caching_control *
271get_caching_control(struct btrfs_block_group_cache *cache)
272{
273 struct btrfs_caching_control *ctl;
274
275 spin_lock(&cache->lock);
276 if (cache->cached != BTRFS_CACHE_STARTED) {
277 spin_unlock(&cache->lock);
278 return NULL;
279 }
280
281
282 if (!cache->caching_ctl) {
283 spin_unlock(&cache->lock);
284 return NULL;
285 }
286
287 ctl = cache->caching_ctl;
288 atomic_inc(&ctl->count);
289 spin_unlock(&cache->lock);
290 return ctl;
291}
292
293static void put_caching_control(struct btrfs_caching_control *ctl)
294{
295 if (atomic_dec_and_test(&ctl->count))
296 kfree(ctl);
297}
298
299
300
301
302
303
304static u64 add_new_free_space(struct btrfs_block_group_cache *block_group,
305 struct btrfs_fs_info *info, u64 start, u64 end)
306{
307 u64 extent_start, extent_end, size, total_added = 0;
308 int ret;
309
310 while (start < end) {
311 ret = find_first_extent_bit(info->pinned_extents, start,
312 &extent_start, &extent_end,
313 EXTENT_DIRTY | EXTENT_UPTODATE);
314 if (ret)
315 break;
316
317 if (extent_start <= start) {
318 start = extent_end + 1;
319 } else if (extent_start > start && extent_start < end) {
320 size = extent_start - start;
321 total_added += size;
322 ret = btrfs_add_free_space(block_group, start,
323 size);
324 BUG_ON(ret);
325 start = extent_end + 1;
326 } else {
327 break;
328 }
329 }
330
331 if (start < end) {
332 size = end - start;
333 total_added += size;
334 ret = btrfs_add_free_space(block_group, start, size);
335 BUG_ON(ret);
336 }
337
338 return total_added;
339}
340
341static noinline void caching_thread(struct btrfs_work *work)
342{
343 struct btrfs_block_group_cache *block_group;
344 struct btrfs_fs_info *fs_info;
345 struct btrfs_caching_control *caching_ctl;
346 struct btrfs_root *extent_root;
347 struct btrfs_path *path;
348 struct extent_buffer *leaf;
349 struct btrfs_key key;
350 u64 total_found = 0;
351 u64 last = 0;
352 u32 nritems;
353 int ret = 0;
354
355 caching_ctl = container_of(work, struct btrfs_caching_control, work);
356 block_group = caching_ctl->block_group;
357 fs_info = block_group->fs_info;
358 extent_root = fs_info->extent_root;
359
360 path = btrfs_alloc_path();
361 if (!path)
362 goto out;
363
364 last = max_t(u64, block_group->key.objectid, BTRFS_SUPER_INFO_OFFSET);
365
366
367
368
369
370
371
372 path->skip_locking = 1;
373 path->search_commit_root = 1;
374 path->reada = 1;
375
376 key.objectid = last;
377 key.offset = 0;
378 key.type = BTRFS_EXTENT_ITEM_KEY;
379again:
380 mutex_lock(&caching_ctl->mutex);
381
382 down_read(&fs_info->extent_commit_sem);
383
384 ret = btrfs_search_slot(NULL, extent_root, &key, path, 0, 0);
385 if (ret < 0)
386 goto err;
387
388 leaf = path->nodes[0];
389 nritems = btrfs_header_nritems(leaf);
390
391 while (1) {
392 if (btrfs_fs_closing(fs_info) > 1) {
393 last = (u64)-1;
394 break;
395 }
396
397 if (path->slots[0] < nritems) {
398 btrfs_item_key_to_cpu(leaf, &key, path->slots[0]);
399 } else {
400 ret = find_next_key(path, 0, &key);
401 if (ret)
402 break;
403
404 if (need_resched() ||
405 btrfs_next_leaf(extent_root, path)) {
406 caching_ctl->progress = last;
407 btrfs_release_path(path);
408 up_read(&fs_info->extent_commit_sem);
409 mutex_unlock(&caching_ctl->mutex);
410 cond_resched();
411 goto again;
412 }
413 leaf = path->nodes[0];
414 nritems = btrfs_header_nritems(leaf);
415 continue;
416 }
417
418 if (key.objectid < block_group->key.objectid) {
419 path->slots[0]++;
420 continue;
421 }
422
423 if (key.objectid >= block_group->key.objectid +
424 block_group->key.offset)
425 break;
426
427 if (key.type == BTRFS_EXTENT_ITEM_KEY) {
428 total_found += add_new_free_space(block_group,
429 fs_info, last,
430 key.objectid);
431 last = key.objectid + key.offset;
432
433 if (total_found > (1024 * 1024 * 2)) {
434 total_found = 0;
435 wake_up(&caching_ctl->wait);
436 }
437 }
438 path->slots[0]++;
439 }
440 ret = 0;
441
442 total_found += add_new_free_space(block_group, fs_info, last,
443 block_group->key.objectid +
444 block_group->key.offset);
445 caching_ctl->progress = (u64)-1;
446
447 spin_lock(&block_group->lock);
448 block_group->caching_ctl = NULL;
449 block_group->cached = BTRFS_CACHE_FINISHED;
450 spin_unlock(&block_group->lock);
451
452err:
453 btrfs_free_path(path);
454 up_read(&fs_info->extent_commit_sem);
455
456 free_excluded_extents(extent_root, block_group);
457
458 mutex_unlock(&caching_ctl->mutex);
459out:
460 wake_up(&caching_ctl->wait);
461
462 put_caching_control(caching_ctl);
463 btrfs_put_block_group(block_group);
464}
465
466static int cache_block_group(struct btrfs_block_group_cache *cache,
467 struct btrfs_trans_handle *trans,
468 struct btrfs_root *root,
469 int load_cache_only)
470{
471 DEFINE_WAIT(wait);
472 struct btrfs_fs_info *fs_info = cache->fs_info;
473 struct btrfs_caching_control *caching_ctl;
474 int ret = 0;
475
476 caching_ctl = kzalloc(sizeof(*caching_ctl), GFP_NOFS);
477 BUG_ON(!caching_ctl);
478
479 INIT_LIST_HEAD(&caching_ctl->list);
480 mutex_init(&caching_ctl->mutex);
481 init_waitqueue_head(&caching_ctl->wait);
482 caching_ctl->block_group = cache;
483 caching_ctl->progress = cache->key.objectid;
484 atomic_set(&caching_ctl->count, 1);
485 caching_ctl->work.func = caching_thread;
486
487 spin_lock(&cache->lock);
488
489
490
491
492
493
494
495
496
497
498
499
500 while (cache->cached == BTRFS_CACHE_FAST) {
501 struct btrfs_caching_control *ctl;
502
503 ctl = cache->caching_ctl;
504 atomic_inc(&ctl->count);
505 prepare_to_wait(&ctl->wait, &wait, TASK_UNINTERRUPTIBLE);
506 spin_unlock(&cache->lock);
507
508 schedule();
509
510 finish_wait(&ctl->wait, &wait);
511 put_caching_control(ctl);
512 spin_lock(&cache->lock);
513 }
514
515 if (cache->cached != BTRFS_CACHE_NO) {
516 spin_unlock(&cache->lock);
517 kfree(caching_ctl);
518 return 0;
519 }
520 WARN_ON(cache->caching_ctl);
521 cache->caching_ctl = caching_ctl;
522 cache->cached = BTRFS_CACHE_FAST;
523 spin_unlock(&cache->lock);
524
525
526
527
528
529
530
531 if (trans && (!trans->transaction->in_commit) &&
532 (root && root != root->fs_info->tree_root) &&
533 btrfs_test_opt(root, SPACE_CACHE)) {
534 ret = load_free_space_cache(fs_info, cache);
535
536 spin_lock(&cache->lock);
537 if (ret == 1) {
538 cache->caching_ctl = NULL;
539 cache->cached = BTRFS_CACHE_FINISHED;
540 cache->last_byte_to_unpin = (u64)-1;
541 } else {
542 if (load_cache_only) {
543 cache->caching_ctl = NULL;
544 cache->cached = BTRFS_CACHE_NO;
545 } else {
546 cache->cached = BTRFS_CACHE_STARTED;
547 }
548 }
549 spin_unlock(&cache->lock);
550 wake_up(&caching_ctl->wait);
551 if (ret == 1) {
552 put_caching_control(caching_ctl);
553 free_excluded_extents(fs_info->extent_root, cache);
554 return 0;
555 }
556 } else {
557
558
559
560
561 spin_lock(&cache->lock);
562 if (load_cache_only) {
563 cache->caching_ctl = NULL;
564 cache->cached = BTRFS_CACHE_NO;
565 } else {
566 cache->cached = BTRFS_CACHE_STARTED;
567 }
568 spin_unlock(&cache->lock);
569 wake_up(&caching_ctl->wait);
570 }
571
572 if (load_cache_only) {
573 put_caching_control(caching_ctl);
574 return 0;
575 }
576
577 down_write(&fs_info->extent_commit_sem);
578 atomic_inc(&caching_ctl->count);
579 list_add_tail(&caching_ctl->list, &fs_info->caching_block_groups);
580 up_write(&fs_info->extent_commit_sem);
581
582 btrfs_get_block_group(cache);
583
584 btrfs_queue_worker(&fs_info->caching_workers, &caching_ctl->work);
585
586 return ret;
587}
588
589
590
591
592static struct btrfs_block_group_cache *
593btrfs_lookup_first_block_group(struct btrfs_fs_info *info, u64 bytenr)
594{
595 struct btrfs_block_group_cache *cache;
596
597 cache = block_group_cache_tree_search(info, bytenr, 0);
598
599 return cache;
600}
601
602
603
604
605struct btrfs_block_group_cache *btrfs_lookup_block_group(
606 struct btrfs_fs_info *info,
607 u64 bytenr)
608{
609 struct btrfs_block_group_cache *cache;
610
611 cache = block_group_cache_tree_search(info, bytenr, 1);
612
613 return cache;
614}
615
616static struct btrfs_space_info *__find_space_info(struct btrfs_fs_info *info,
617 u64 flags)
618{
619 struct list_head *head = &info->space_info;
620 struct btrfs_space_info *found;
621
622 flags &= BTRFS_BLOCK_GROUP_TYPE_MASK;
623
624 rcu_read_lock();
625 list_for_each_entry_rcu(found, head, list) {
626 if (found->flags & flags) {
627 rcu_read_unlock();
628 return found;
629 }
630 }
631 rcu_read_unlock();
632 return NULL;
633}
634
635
636
637
638
639void btrfs_clear_space_info_full(struct btrfs_fs_info *info)
640{
641 struct list_head *head = &info->space_info;
642 struct btrfs_space_info *found;
643
644 rcu_read_lock();
645 list_for_each_entry_rcu(found, head, list)
646 found->full = 0;
647 rcu_read_unlock();
648}
649
650static u64 div_factor(u64 num, int factor)
651{
652 if (factor == 10)
653 return num;
654 num *= factor;
655 do_div(num, 10);
656 return num;
657}
658
659static u64 div_factor_fine(u64 num, int factor)
660{
661 if (factor == 100)
662 return num;
663 num *= factor;
664 do_div(num, 100);
665 return num;
666}
667
668u64 btrfs_find_block_group(struct btrfs_root *root,
669 u64 search_start, u64 search_hint, int owner)
670{
671 struct btrfs_block_group_cache *cache;
672 u64 used;
673 u64 last = max(search_hint, search_start);
674 u64 group_start = 0;
675 int full_search = 0;
676 int factor = 9;
677 int wrapped = 0;
678again:
679 while (1) {
680 cache = btrfs_lookup_first_block_group(root->fs_info, last);
681 if (!cache)
682 break;
683
684 spin_lock(&cache->lock);
685 last = cache->key.objectid + cache->key.offset;
686 used = btrfs_block_group_used(&cache->item);
687
688 if ((full_search || !cache->ro) &&
689 block_group_bits(cache, BTRFS_BLOCK_GROUP_METADATA)) {
690 if (used + cache->pinned + cache->reserved <
691 div_factor(cache->key.offset, factor)) {
692 group_start = cache->key.objectid;
693 spin_unlock(&cache->lock);
694 btrfs_put_block_group(cache);
695 goto found;
696 }
697 }
698 spin_unlock(&cache->lock);
699 btrfs_put_block_group(cache);
700 cond_resched();
701 }
702 if (!wrapped) {
703 last = search_start;
704 wrapped = 1;
705 goto again;
706 }
707 if (!full_search && factor < 10) {
708 last = search_start;
709 full_search = 1;
710 factor = 10;
711 goto again;
712 }
713found:
714 return group_start;
715}
716
717
718int btrfs_lookup_extent(struct btrfs_root *root, u64 start, u64 len)
719{
720 int ret;
721 struct btrfs_key key;
722 struct btrfs_path *path;
723
724 path = btrfs_alloc_path();
725 if (!path)
726 return -ENOMEM;
727
728 key.objectid = start;
729 key.offset = len;
730 btrfs_set_key_type(&key, BTRFS_EXTENT_ITEM_KEY);
731 ret = btrfs_search_slot(NULL, root->fs_info->extent_root, &key, path,
732 0, 0);
733 btrfs_free_path(path);
734 return ret;
735}
736
737
738
739
740
741
742
743
744
745
746int btrfs_lookup_extent_info(struct btrfs_trans_handle *trans,
747 struct btrfs_root *root, u64 bytenr,
748 u64 num_bytes, u64 *refs, u64 *flags)
749{
750 struct btrfs_delayed_ref_head *head;
751 struct btrfs_delayed_ref_root *delayed_refs;
752 struct btrfs_path *path;
753 struct btrfs_extent_item *ei;
754 struct extent_buffer *leaf;
755 struct btrfs_key key;
756 u32 item_size;
757 u64 num_refs;
758 u64 extent_flags;
759 int ret;
760
761 path = btrfs_alloc_path();
762 if (!path)
763 return -ENOMEM;
764
765 key.objectid = bytenr;
766 key.type = BTRFS_EXTENT_ITEM_KEY;
767 key.offset = num_bytes;
768 if (!trans) {
769 path->skip_locking = 1;
770 path->search_commit_root = 1;
771 }
772again:
773 ret = btrfs_search_slot(trans, root->fs_info->extent_root,
774 &key, path, 0, 0);
775 if (ret < 0)
776 goto out_free;
777
778 if (ret == 0) {
779 leaf = path->nodes[0];
780 item_size = btrfs_item_size_nr(leaf, path->slots[0]);
781 if (item_size >= sizeof(*ei)) {
782 ei = btrfs_item_ptr(leaf, path->slots[0],
783 struct btrfs_extent_item);
784 num_refs = btrfs_extent_refs(leaf, ei);
785 extent_flags = btrfs_extent_flags(leaf, ei);
786 } else {
787#ifdef BTRFS_COMPAT_EXTENT_TREE_V0
788 struct btrfs_extent_item_v0 *ei0;
789 BUG_ON(item_size != sizeof(*ei0));
790 ei0 = btrfs_item_ptr(leaf, path->slots[0],
791 struct btrfs_extent_item_v0);
792 num_refs = btrfs_extent_refs_v0(leaf, ei0);
793
794 extent_flags = BTRFS_BLOCK_FLAG_FULL_BACKREF;
795#else
796 BUG();
797#endif
798 }
799 BUG_ON(num_refs == 0);
800 } else {
801 num_refs = 0;
802 extent_flags = 0;
803 ret = 0;
804 }
805
806 if (!trans)
807 goto out;
808
809 delayed_refs = &trans->transaction->delayed_refs;
810 spin_lock(&delayed_refs->lock);
811 head = btrfs_find_delayed_ref_head(trans, bytenr);
812 if (head) {
813 if (!mutex_trylock(&head->mutex)) {
814 atomic_inc(&head->node.refs);
815 spin_unlock(&delayed_refs->lock);
816
817 btrfs_release_path(path);
818
819
820
821
822
823 mutex_lock(&head->mutex);
824 mutex_unlock(&head->mutex);
825 btrfs_put_delayed_ref(&head->node);
826 goto again;
827 }
828 if (head->extent_op && head->extent_op->update_flags)
829 extent_flags |= head->extent_op->flags_to_set;
830 else
831 BUG_ON(num_refs == 0);
832
833 num_refs += head->node.ref_mod;
834 mutex_unlock(&head->mutex);
835 }
836 spin_unlock(&delayed_refs->lock);
837out:
838 WARN_ON(num_refs == 0);
839 if (refs)
840 *refs = num_refs;
841 if (flags)
842 *flags = extent_flags;
843out_free:
844 btrfs_free_path(path);
845 return ret;
846}
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#ifdef BTRFS_COMPAT_EXTENT_TREE_V0
955static int convert_extent_item_v0(struct btrfs_trans_handle *trans,
956 struct btrfs_root *root,
957 struct btrfs_path *path,
958 u64 owner, u32 extra_size)
959{
960 struct btrfs_extent_item *item;
961 struct btrfs_extent_item_v0 *ei0;
962 struct btrfs_extent_ref_v0 *ref0;
963 struct btrfs_tree_block_info *bi;
964 struct extent_buffer *leaf;
965 struct btrfs_key key;
966 struct btrfs_key found_key;
967 u32 new_size = sizeof(*item);
968 u64 refs;
969 int ret;
970
971 leaf = path->nodes[0];
972 BUG_ON(btrfs_item_size_nr(leaf, path->slots[0]) != sizeof(*ei0));
973
974 btrfs_item_key_to_cpu(leaf, &key, path->slots[0]);
975 ei0 = btrfs_item_ptr(leaf, path->slots[0],
976 struct btrfs_extent_item_v0);
977 refs = btrfs_extent_refs_v0(leaf, ei0);
978
979 if (owner == (u64)-1) {
980 while (1) {
981 if (path->slots[0] >= btrfs_header_nritems(leaf)) {
982 ret = btrfs_next_leaf(root, path);
983 if (ret < 0)
984 return ret;
985 BUG_ON(ret > 0);
986 leaf = path->nodes[0];
987 }
988 btrfs_item_key_to_cpu(leaf, &found_key,
989 path->slots[0]);
990 BUG_ON(key.objectid != found_key.objectid);
991 if (found_key.type != BTRFS_EXTENT_REF_V0_KEY) {
992 path->slots[0]++;
993 continue;
994 }
995 ref0 = btrfs_item_ptr(leaf, path->slots[0],
996 struct btrfs_extent_ref_v0);
997 owner = btrfs_ref_objectid_v0(leaf, ref0);
998 break;
999 }
1000 }
1001 btrfs_release_path(path);
1002
1003 if (owner < BTRFS_FIRST_FREE_OBJECTID)
1004 new_size += sizeof(*bi);
1005
1006 new_size -= sizeof(*ei0);
1007 ret = btrfs_search_slot(trans, root, &key, path,
1008 new_size + extra_size, 1);
1009 if (ret < 0)
1010 return ret;
1011 BUG_ON(ret);
1012
1013 ret = btrfs_extend_item(trans, root, path, new_size);
1014
1015 leaf = path->nodes[0];
1016 item = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item);
1017 btrfs_set_extent_refs(leaf, item, refs);
1018
1019 btrfs_set_extent_generation(leaf, item, 0);
1020 if (owner < BTRFS_FIRST_FREE_OBJECTID) {
1021 btrfs_set_extent_flags(leaf, item,
1022 BTRFS_EXTENT_FLAG_TREE_BLOCK |
1023 BTRFS_BLOCK_FLAG_FULL_BACKREF);
1024 bi = (struct btrfs_tree_block_info *)(item + 1);
1025
1026 memset_extent_buffer(leaf, 0, (unsigned long)bi, sizeof(*bi));
1027 btrfs_set_tree_block_level(leaf, bi, (int)owner);
1028 } else {
1029 btrfs_set_extent_flags(leaf, item, BTRFS_EXTENT_FLAG_DATA);
1030 }
1031 btrfs_mark_buffer_dirty(leaf);
1032 return 0;
1033}
1034#endif
1035
1036static u64 hash_extent_data_ref(u64 root_objectid, u64 owner, u64 offset)
1037{
1038 u32 high_crc = ~(u32)0;
1039 u32 low_crc = ~(u32)0;
1040 __le64 lenum;
1041
1042 lenum = cpu_to_le64(root_objectid);
1043 high_crc = crc32c(high_crc, &lenum, sizeof(lenum));
1044 lenum = cpu_to_le64(owner);
1045 low_crc = crc32c(low_crc, &lenum, sizeof(lenum));
1046 lenum = cpu_to_le64(offset);
1047 low_crc = crc32c(low_crc, &lenum, sizeof(lenum));
1048
1049 return ((u64)high_crc << 31) ^ (u64)low_crc;
1050}
1051
1052static u64 hash_extent_data_ref_item(struct extent_buffer *leaf,
1053 struct btrfs_extent_data_ref *ref)
1054{
1055 return hash_extent_data_ref(btrfs_extent_data_ref_root(leaf, ref),
1056 btrfs_extent_data_ref_objectid(leaf, ref),
1057 btrfs_extent_data_ref_offset(leaf, ref));
1058}
1059
1060static int match_extent_data_ref(struct extent_buffer *leaf,
1061 struct btrfs_extent_data_ref *ref,
1062 u64 root_objectid, u64 owner, u64 offset)
1063{
1064 if (btrfs_extent_data_ref_root(leaf, ref) != root_objectid ||
1065 btrfs_extent_data_ref_objectid(leaf, ref) != owner ||
1066 btrfs_extent_data_ref_offset(leaf, ref) != offset)
1067 return 0;
1068 return 1;
1069}
1070
1071static noinline int lookup_extent_data_ref(struct btrfs_trans_handle *trans,
1072 struct btrfs_root *root,
1073 struct btrfs_path *path,
1074 u64 bytenr, u64 parent,
1075 u64 root_objectid,
1076 u64 owner, u64 offset)
1077{
1078 struct btrfs_key key;
1079 struct btrfs_extent_data_ref *ref;
1080 struct extent_buffer *leaf;
1081 u32 nritems;
1082 int ret;
1083 int recow;
1084 int err = -ENOENT;
1085
1086 key.objectid = bytenr;
1087 if (parent) {
1088 key.type = BTRFS_SHARED_DATA_REF_KEY;
1089 key.offset = parent;
1090 } else {
1091 key.type = BTRFS_EXTENT_DATA_REF_KEY;
1092 key.offset = hash_extent_data_ref(root_objectid,
1093 owner, offset);
1094 }
1095again:
1096 recow = 0;
1097 ret = btrfs_search_slot(trans, root, &key, path, -1, 1);
1098 if (ret < 0) {
1099 err = ret;
1100 goto fail;
1101 }
1102
1103 if (parent) {
1104 if (!ret)
1105 return 0;
1106#ifdef BTRFS_COMPAT_EXTENT_TREE_V0
1107 key.type = BTRFS_EXTENT_REF_V0_KEY;
1108 btrfs_release_path(path);
1109 ret = btrfs_search_slot(trans, root, &key, path, -1, 1);
1110 if (ret < 0) {
1111 err = ret;
1112 goto fail;
1113 }
1114 if (!ret)
1115 return 0;
1116#endif
1117 goto fail;
1118 }
1119
1120 leaf = path->nodes[0];
1121 nritems = btrfs_header_nritems(leaf);
1122 while (1) {
1123 if (path->slots[0] >= nritems) {
1124 ret = btrfs_next_leaf(root, path);
1125 if (ret < 0)
1126 err = ret;
1127 if (ret)
1128 goto fail;
1129
1130 leaf = path->nodes[0];
1131 nritems = btrfs_header_nritems(leaf);
1132 recow = 1;
1133 }
1134
1135 btrfs_item_key_to_cpu(leaf, &key, path->slots[0]);
1136 if (key.objectid != bytenr ||
1137 key.type != BTRFS_EXTENT_DATA_REF_KEY)
1138 goto fail;
1139
1140 ref = btrfs_item_ptr(leaf, path->slots[0],
1141 struct btrfs_extent_data_ref);
1142
1143 if (match_extent_data_ref(leaf, ref, root_objectid,
1144 owner, offset)) {
1145 if (recow) {
1146 btrfs_release_path(path);
1147 goto again;
1148 }
1149 err = 0;
1150 break;
1151 }
1152 path->slots[0]++;
1153 }
1154fail:
1155 return err;
1156}
1157
1158static noinline int insert_extent_data_ref(struct btrfs_trans_handle *trans,
1159 struct btrfs_root *root,
1160 struct btrfs_path *path,
1161 u64 bytenr, u64 parent,
1162 u64 root_objectid, u64 owner,
1163 u64 offset, int refs_to_add)
1164{
1165 struct btrfs_key key;
1166 struct extent_buffer *leaf;
1167 u32 size;
1168 u32 num_refs;
1169 int ret;
1170
1171 key.objectid = bytenr;
1172 if (parent) {
1173 key.type = BTRFS_SHARED_DATA_REF_KEY;
1174 key.offset = parent;
1175 size = sizeof(struct btrfs_shared_data_ref);
1176 } else {
1177 key.type = BTRFS_EXTENT_DATA_REF_KEY;
1178 key.offset = hash_extent_data_ref(root_objectid,
1179 owner, offset);
1180 size = sizeof(struct btrfs_extent_data_ref);
1181 }
1182
1183 ret = btrfs_insert_empty_item(trans, root, path, &key, size);
1184 if (ret && ret != -EEXIST)
1185 goto fail;
1186
1187 leaf = path->nodes[0];
1188 if (parent) {
1189 struct btrfs_shared_data_ref *ref;
1190 ref = btrfs_item_ptr(leaf, path->slots[0],
1191 struct btrfs_shared_data_ref);
1192 if (ret == 0) {
1193 btrfs_set_shared_data_ref_count(leaf, ref, refs_to_add);
1194 } else {
1195 num_refs = btrfs_shared_data_ref_count(leaf, ref);
1196 num_refs += refs_to_add;
1197 btrfs_set_shared_data_ref_count(leaf, ref, num_refs);
1198 }
1199 } else {
1200 struct btrfs_extent_data_ref *ref;
1201 while (ret == -EEXIST) {
1202 ref = btrfs_item_ptr(leaf, path->slots[0],
1203 struct btrfs_extent_data_ref);
1204 if (match_extent_data_ref(leaf, ref, root_objectid,
1205 owner, offset))
1206 break;
1207 btrfs_release_path(path);
1208 key.offset++;
1209 ret = btrfs_insert_empty_item(trans, root, path, &key,
1210 size);
1211 if (ret && ret != -EEXIST)
1212 goto fail;
1213
1214 leaf = path->nodes[0];
1215 }
1216 ref = btrfs_item_ptr(leaf, path->slots[0],
1217 struct btrfs_extent_data_ref);
1218 if (ret == 0) {
1219 btrfs_set_extent_data_ref_root(leaf, ref,
1220 root_objectid);
1221 btrfs_set_extent_data_ref_objectid(leaf, ref, owner);
1222 btrfs_set_extent_data_ref_offset(leaf, ref, offset);
1223 btrfs_set_extent_data_ref_count(leaf, ref, refs_to_add);
1224 } else {
1225 num_refs = btrfs_extent_data_ref_count(leaf, ref);
1226 num_refs += refs_to_add;
1227 btrfs_set_extent_data_ref_count(leaf, ref, num_refs);
1228 }
1229 }
1230 btrfs_mark_buffer_dirty(leaf);
1231 ret = 0;
1232fail:
1233 btrfs_release_path(path);
1234 return ret;
1235}
1236
1237static noinline int remove_extent_data_ref(struct btrfs_trans_handle *trans,
1238 struct btrfs_root *root,
1239 struct btrfs_path *path,
1240 int refs_to_drop)
1241{
1242 struct btrfs_key key;
1243 struct btrfs_extent_data_ref *ref1 = NULL;
1244 struct btrfs_shared_data_ref *ref2 = NULL;
1245 struct extent_buffer *leaf;
1246 u32 num_refs = 0;
1247 int ret = 0;
1248
1249 leaf = path->nodes[0];
1250 btrfs_item_key_to_cpu(leaf, &key, path->slots[0]);
1251
1252 if (key.type == BTRFS_EXTENT_DATA_REF_KEY) {
1253 ref1 = btrfs_item_ptr(leaf, path->slots[0],
1254 struct btrfs_extent_data_ref);
1255 num_refs = btrfs_extent_data_ref_count(leaf, ref1);
1256 } else if (key.type == BTRFS_SHARED_DATA_REF_KEY) {
1257 ref2 = btrfs_item_ptr(leaf, path->slots[0],
1258 struct btrfs_shared_data_ref);
1259 num_refs = btrfs_shared_data_ref_count(leaf, ref2);
1260#ifdef BTRFS_COMPAT_EXTENT_TREE_V0
1261 } else if (key.type == BTRFS_EXTENT_REF_V0_KEY) {
1262 struct btrfs_extent_ref_v0 *ref0;
1263 ref0 = btrfs_item_ptr(leaf, path->slots[0],
1264 struct btrfs_extent_ref_v0);
1265 num_refs = btrfs_ref_count_v0(leaf, ref0);
1266#endif
1267 } else {
1268 BUG();
1269 }
1270
1271 BUG_ON(num_refs < refs_to_drop);
1272 num_refs -= refs_to_drop;
1273
1274 if (num_refs == 0) {
1275 ret = btrfs_del_item(trans, root, path);
1276 } else {
1277 if (key.type == BTRFS_EXTENT_DATA_REF_KEY)
1278 btrfs_set_extent_data_ref_count(leaf, ref1, num_refs);
1279 else if (key.type == BTRFS_SHARED_DATA_REF_KEY)
1280 btrfs_set_shared_data_ref_count(leaf, ref2, num_refs);
1281#ifdef BTRFS_COMPAT_EXTENT_TREE_V0
1282 else {
1283 struct btrfs_extent_ref_v0 *ref0;
1284 ref0 = btrfs_item_ptr(leaf, path->slots[0],
1285 struct btrfs_extent_ref_v0);
1286 btrfs_set_ref_count_v0(leaf, ref0, num_refs);
1287 }
1288#endif
1289 btrfs_mark_buffer_dirty(leaf);
1290 }
1291 return ret;
1292}
1293
1294static noinline u32 extent_data_ref_count(struct btrfs_root *root,
1295 struct btrfs_path *path,
1296 struct btrfs_extent_inline_ref *iref)
1297{
1298 struct btrfs_key key;
1299 struct extent_buffer *leaf;
1300 struct btrfs_extent_data_ref *ref1;
1301 struct btrfs_shared_data_ref *ref2;
1302 u32 num_refs = 0;
1303
1304 leaf = path->nodes[0];
1305 btrfs_item_key_to_cpu(leaf, &key, path->slots[0]);
1306 if (iref) {
1307 if (btrfs_extent_inline_ref_type(leaf, iref) ==
1308 BTRFS_EXTENT_DATA_REF_KEY) {
1309 ref1 = (struct btrfs_extent_data_ref *)(&iref->offset);
1310 num_refs = btrfs_extent_data_ref_count(leaf, ref1);
1311 } else {
1312 ref2 = (struct btrfs_shared_data_ref *)(iref + 1);
1313 num_refs = btrfs_shared_data_ref_count(leaf, ref2);
1314 }
1315 } else if (key.type == BTRFS_EXTENT_DATA_REF_KEY) {
1316 ref1 = btrfs_item_ptr(leaf, path->slots[0],
1317 struct btrfs_extent_data_ref);
1318 num_refs = btrfs_extent_data_ref_count(leaf, ref1);
1319 } else if (key.type == BTRFS_SHARED_DATA_REF_KEY) {
1320 ref2 = btrfs_item_ptr(leaf, path->slots[0],
1321 struct btrfs_shared_data_ref);
1322 num_refs = btrfs_shared_data_ref_count(leaf, ref2);
1323#ifdef BTRFS_COMPAT_EXTENT_TREE_V0
1324 } else if (key.type == BTRFS_EXTENT_REF_V0_KEY) {
1325 struct btrfs_extent_ref_v0 *ref0;
1326 ref0 = btrfs_item_ptr(leaf, path->slots[0],
1327 struct btrfs_extent_ref_v0);
1328 num_refs = btrfs_ref_count_v0(leaf, ref0);
1329#endif
1330 } else {
1331 WARN_ON(1);
1332 }
1333 return num_refs;
1334}
1335
1336static noinline int lookup_tree_block_ref(struct btrfs_trans_handle *trans,
1337 struct btrfs_root *root,
1338 struct btrfs_path *path,
1339 u64 bytenr, u64 parent,
1340 u64 root_objectid)
1341{
1342 struct btrfs_key key;
1343 int ret;
1344
1345 key.objectid = bytenr;
1346 if (parent) {
1347 key.type = BTRFS_SHARED_BLOCK_REF_KEY;
1348 key.offset = parent;
1349 } else {
1350 key.type = BTRFS_TREE_BLOCK_REF_KEY;
1351 key.offset = root_objectid;
1352 }
1353
1354 ret = btrfs_search_slot(trans, root, &key, path, -1, 1);
1355 if (ret > 0)
1356 ret = -ENOENT;
1357#ifdef BTRFS_COMPAT_EXTENT_TREE_V0
1358 if (ret == -ENOENT && parent) {
1359 btrfs_release_path(path);
1360 key.type = BTRFS_EXTENT_REF_V0_KEY;
1361 ret = btrfs_search_slot(trans, root, &key, path, -1, 1);
1362 if (ret > 0)
1363 ret = -ENOENT;
1364 }
1365#endif
1366 return ret;
1367}
1368
1369static noinline int insert_tree_block_ref(struct btrfs_trans_handle *trans,
1370 struct btrfs_root *root,
1371 struct btrfs_path *path,
1372 u64 bytenr, u64 parent,
1373 u64 root_objectid)
1374{
1375 struct btrfs_key key;
1376 int ret;
1377
1378 key.objectid = bytenr;
1379 if (parent) {
1380 key.type = BTRFS_SHARED_BLOCK_REF_KEY;
1381 key.offset = parent;
1382 } else {
1383 key.type = BTRFS_TREE_BLOCK_REF_KEY;
1384 key.offset = root_objectid;
1385 }
1386
1387 ret = btrfs_insert_empty_item(trans, root, path, &key, 0);
1388 btrfs_release_path(path);
1389 return ret;
1390}
1391
1392static inline int extent_ref_type(u64 parent, u64 owner)
1393{
1394 int type;
1395 if (owner < BTRFS_FIRST_FREE_OBJECTID) {
1396 if (parent > 0)
1397 type = BTRFS_SHARED_BLOCK_REF_KEY;
1398 else
1399 type = BTRFS_TREE_BLOCK_REF_KEY;
1400 } else {
1401 if (parent > 0)
1402 type = BTRFS_SHARED_DATA_REF_KEY;
1403 else
1404 type = BTRFS_EXTENT_DATA_REF_KEY;
1405 }
1406 return type;
1407}
1408
1409static int find_next_key(struct btrfs_path *path, int level,
1410 struct btrfs_key *key)
1411
1412{
1413 for (; level < BTRFS_MAX_LEVEL; level++) {
1414 if (!path->nodes[level])
1415 break;
1416 if (path->slots[level] + 1 >=
1417 btrfs_header_nritems(path->nodes[level]))
1418 continue;
1419 if (level == 0)
1420 btrfs_item_key_to_cpu(path->nodes[level], key,
1421 path->slots[level] + 1);
1422 else
1423 btrfs_node_key_to_cpu(path->nodes[level], key,
1424 path->slots[level] + 1);
1425 return 0;
1426 }
1427 return 1;
1428}
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443static noinline_for_stack
1444int lookup_inline_extent_backref(struct btrfs_trans_handle *trans,
1445 struct btrfs_root *root,
1446 struct btrfs_path *path,
1447 struct btrfs_extent_inline_ref **ref_ret,
1448 u64 bytenr, u64 num_bytes,
1449 u64 parent, u64 root_objectid,
1450 u64 owner, u64 offset, int insert)
1451{
1452 struct btrfs_key key;
1453 struct extent_buffer *leaf;
1454 struct btrfs_extent_item *ei;
1455 struct btrfs_extent_inline_ref *iref;
1456 u64 flags;
1457 u64 item_size;
1458 unsigned long ptr;
1459 unsigned long end;
1460 int extra_size;
1461 int type;
1462 int want;
1463 int ret;
1464 int err = 0;
1465
1466 key.objectid = bytenr;
1467 key.type = BTRFS_EXTENT_ITEM_KEY;
1468 key.offset = num_bytes;
1469
1470 want = extent_ref_type(parent, owner);
1471 if (insert) {
1472 extra_size = btrfs_extent_inline_ref_size(want);
1473 path->keep_locks = 1;
1474 } else
1475 extra_size = -1;
1476 ret = btrfs_search_slot(trans, root, &key, path, extra_size, 1);
1477 if (ret < 0) {
1478 err = ret;
1479 goto out;
1480 }
1481 BUG_ON(ret);
1482
1483 leaf = path->nodes[0];
1484 item_size = btrfs_item_size_nr(leaf, path->slots[0]);
1485#ifdef BTRFS_COMPAT_EXTENT_TREE_V0
1486 if (item_size < sizeof(*ei)) {
1487 if (!insert) {
1488 err = -ENOENT;
1489 goto out;
1490 }
1491 ret = convert_extent_item_v0(trans, root, path, owner,
1492 extra_size);
1493 if (ret < 0) {
1494 err = ret;
1495 goto out;
1496 }
1497 leaf = path->nodes[0];
1498 item_size = btrfs_item_size_nr(leaf, path->slots[0]);
1499 }
1500#endif
1501 BUG_ON(item_size < sizeof(*ei));
1502
1503 ei = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item);
1504 flags = btrfs_extent_flags(leaf, ei);
1505
1506 ptr = (unsigned long)(ei + 1);
1507 end = (unsigned long)ei + item_size;
1508
1509 if (flags & BTRFS_EXTENT_FLAG_TREE_BLOCK) {
1510 ptr += sizeof(struct btrfs_tree_block_info);
1511 BUG_ON(ptr > end);
1512 } else {
1513 BUG_ON(!(flags & BTRFS_EXTENT_FLAG_DATA));
1514 }
1515
1516 err = -ENOENT;
1517 while (1) {
1518 if (ptr >= end) {
1519 WARN_ON(ptr > end);
1520 break;
1521 }
1522 iref = (struct btrfs_extent_inline_ref *)ptr;
1523 type = btrfs_extent_inline_ref_type(leaf, iref);
1524 if (want < type)
1525 break;
1526 if (want > type) {
1527 ptr += btrfs_extent_inline_ref_size(type);
1528 continue;
1529 }
1530
1531 if (type == BTRFS_EXTENT_DATA_REF_KEY) {
1532 struct btrfs_extent_data_ref *dref;
1533 dref = (struct btrfs_extent_data_ref *)(&iref->offset);
1534 if (match_extent_data_ref(leaf, dref, root_objectid,
1535 owner, offset)) {
1536 err = 0;
1537 break;
1538 }
1539 if (hash_extent_data_ref_item(leaf, dref) <
1540 hash_extent_data_ref(root_objectid, owner, offset))
1541 break;
1542 } else {
1543 u64 ref_offset;
1544 ref_offset = btrfs_extent_inline_ref_offset(leaf, iref);
1545 if (parent > 0) {
1546 if (parent == ref_offset) {
1547 err = 0;
1548 break;
1549 }
1550 if (ref_offset < parent)
1551 break;
1552 } else {
1553 if (root_objectid == ref_offset) {
1554 err = 0;
1555 break;
1556 }
1557 if (ref_offset < root_objectid)
1558 break;
1559 }
1560 }
1561 ptr += btrfs_extent_inline_ref_size(type);
1562 }
1563 if (err == -ENOENT && insert) {
1564 if (item_size + extra_size >=
1565 BTRFS_MAX_EXTENT_ITEM_SIZE(root)) {
1566 err = -EAGAIN;
1567 goto out;
1568 }
1569
1570
1571
1572
1573
1574
1575 if (find_next_key(path, 0, &key) == 0 &&
1576 key.objectid == bytenr &&
1577 key.type < BTRFS_BLOCK_GROUP_ITEM_KEY) {
1578 err = -EAGAIN;
1579 goto out;
1580 }
1581 }
1582 *ref_ret = (struct btrfs_extent_inline_ref *)ptr;
1583out:
1584 if (insert) {
1585 path->keep_locks = 0;
1586 btrfs_unlock_up_safe(path, 1);
1587 }
1588 return err;
1589}
1590
1591
1592
1593
1594static noinline_for_stack
1595int setup_inline_extent_backref(struct btrfs_trans_handle *trans,
1596 struct btrfs_root *root,
1597 struct btrfs_path *path,
1598 struct btrfs_extent_inline_ref *iref,
1599 u64 parent, u64 root_objectid,
1600 u64 owner, u64 offset, int refs_to_add,
1601 struct btrfs_delayed_extent_op *extent_op)
1602{
1603 struct extent_buffer *leaf;
1604 struct btrfs_extent_item *ei;
1605 unsigned long ptr;
1606 unsigned long end;
1607 unsigned long item_offset;
1608 u64 refs;
1609 int size;
1610 int type;
1611 int ret;
1612
1613 leaf = path->nodes[0];
1614 ei = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item);
1615 item_offset = (unsigned long)iref - (unsigned long)ei;
1616
1617 type = extent_ref_type(parent, owner);
1618 size = btrfs_extent_inline_ref_size(type);
1619
1620 ret = btrfs_extend_item(trans, root, path, size);
1621
1622 ei = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item);
1623 refs = btrfs_extent_refs(leaf, ei);
1624 refs += refs_to_add;
1625 btrfs_set_extent_refs(leaf, ei, refs);
1626 if (extent_op)
1627 __run_delayed_extent_op(extent_op, leaf, ei);
1628
1629 ptr = (unsigned long)ei + item_offset;
1630 end = (unsigned long)ei + btrfs_item_size_nr(leaf, path->slots[0]);
1631 if (ptr < end - size)
1632 memmove_extent_buffer(leaf, ptr + size, ptr,
1633 end - size - ptr);
1634
1635 iref = (struct btrfs_extent_inline_ref *)ptr;
1636 btrfs_set_extent_inline_ref_type(leaf, iref, type);
1637 if (type == BTRFS_EXTENT_DATA_REF_KEY) {
1638 struct btrfs_extent_data_ref *dref;
1639 dref = (struct btrfs_extent_data_ref *)(&iref->offset);
1640 btrfs_set_extent_data_ref_root(leaf, dref, root_objectid);
1641 btrfs_set_extent_data_ref_objectid(leaf, dref, owner);
1642 btrfs_set_extent_data_ref_offset(leaf, dref, offset);
1643 btrfs_set_extent_data_ref_count(leaf, dref, refs_to_add);
1644 } else if (type == BTRFS_SHARED_DATA_REF_KEY) {
1645 struct btrfs_shared_data_ref *sref;
1646 sref = (struct btrfs_shared_data_ref *)(iref + 1);
1647 btrfs_set_shared_data_ref_count(leaf, sref, refs_to_add);
1648 btrfs_set_extent_inline_ref_offset(leaf, iref, parent);
1649 } else if (type == BTRFS_SHARED_BLOCK_REF_KEY) {
1650 btrfs_set_extent_inline_ref_offset(leaf, iref, parent);
1651 } else {
1652 btrfs_set_extent_inline_ref_offset(leaf, iref, root_objectid);
1653 }
1654 btrfs_mark_buffer_dirty(leaf);
1655 return 0;
1656}
1657
1658static int lookup_extent_backref(struct btrfs_trans_handle *trans,
1659 struct btrfs_root *root,
1660 struct btrfs_path *path,
1661 struct btrfs_extent_inline_ref **ref_ret,
1662 u64 bytenr, u64 num_bytes, u64 parent,
1663 u64 root_objectid, u64 owner, u64 offset)
1664{
1665 int ret;
1666
1667 ret = lookup_inline_extent_backref(trans, root, path, ref_ret,
1668 bytenr, num_bytes, parent,
1669 root_objectid, owner, offset, 0);
1670 if (ret != -ENOENT)
1671 return ret;
1672
1673 btrfs_release_path(path);
1674 *ref_ret = NULL;
1675
1676 if (owner < BTRFS_FIRST_FREE_OBJECTID) {
1677 ret = lookup_tree_block_ref(trans, root, path, bytenr, parent,
1678 root_objectid);
1679 } else {
1680 ret = lookup_extent_data_ref(trans, root, path, bytenr, parent,
1681 root_objectid, owner, offset);
1682 }
1683 return ret;
1684}
1685
1686
1687
1688
1689static noinline_for_stack
1690int update_inline_extent_backref(struct btrfs_trans_handle *trans,
1691 struct btrfs_root *root,
1692 struct btrfs_path *path,
1693 struct btrfs_extent_inline_ref *iref,
1694 int refs_to_mod,
1695 struct btrfs_delayed_extent_op *extent_op)
1696{
1697 struct extent_buffer *leaf;
1698 struct btrfs_extent_item *ei;
1699 struct btrfs_extent_data_ref *dref = NULL;
1700 struct btrfs_shared_data_ref *sref = NULL;
1701 unsigned long ptr;
1702 unsigned long end;
1703 u32 item_size;
1704 int size;
1705 int type;
1706 int ret;
1707 u64 refs;
1708
1709 leaf = path->nodes[0];
1710 ei = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item);
1711 refs = btrfs_extent_refs(leaf, ei);
1712 WARN_ON(refs_to_mod < 0 && refs + refs_to_mod <= 0);
1713 refs += refs_to_mod;
1714 btrfs_set_extent_refs(leaf, ei, refs);
1715 if (extent_op)
1716 __run_delayed_extent_op(extent_op, leaf, ei);
1717
1718 type = btrfs_extent_inline_ref_type(leaf, iref);
1719
1720 if (type == BTRFS_EXTENT_DATA_REF_KEY) {
1721 dref = (struct btrfs_extent_data_ref *)(&iref->offset);
1722 refs = btrfs_extent_data_ref_count(leaf, dref);
1723 } else if (type == BTRFS_SHARED_DATA_REF_KEY) {
1724 sref = (struct btrfs_shared_data_ref *)(iref + 1);
1725 refs = btrfs_shared_data_ref_count(leaf, sref);
1726 } else {
1727 refs = 1;
1728 BUG_ON(refs_to_mod != -1);
1729 }
1730
1731 BUG_ON(refs_to_mod < 0 && refs < -refs_to_mod);
1732 refs += refs_to_mod;
1733
1734 if (refs > 0) {
1735 if (type == BTRFS_EXTENT_DATA_REF_KEY)
1736 btrfs_set_extent_data_ref_count(leaf, dref, refs);
1737 else
1738 btrfs_set_shared_data_ref_count(leaf, sref, refs);
1739 } else {
1740 size = btrfs_extent_inline_ref_size(type);
1741 item_size = btrfs_item_size_nr(leaf, path->slots[0]);
1742 ptr = (unsigned long)iref;
1743 end = (unsigned long)ei + item_size;
1744 if (ptr + size < end)
1745 memmove_extent_buffer(leaf, ptr, ptr + size,
1746 end - ptr - size);
1747 item_size -= size;
1748 ret = btrfs_truncate_item(trans, root, path, item_size, 1);
1749 }
1750 btrfs_mark_buffer_dirty(leaf);
1751 return 0;
1752}
1753
1754static noinline_for_stack
1755int insert_inline_extent_backref(struct btrfs_trans_handle *trans,
1756 struct btrfs_root *root,
1757 struct btrfs_path *path,
1758 u64 bytenr, u64 num_bytes, u64 parent,
1759 u64 root_objectid, u64 owner,
1760 u64 offset, int refs_to_add,
1761 struct btrfs_delayed_extent_op *extent_op)
1762{
1763 struct btrfs_extent_inline_ref *iref;
1764 int ret;
1765
1766 ret = lookup_inline_extent_backref(trans, root, path, &iref,
1767 bytenr, num_bytes, parent,
1768 root_objectid, owner, offset, 1);
1769 if (ret == 0) {
1770 BUG_ON(owner < BTRFS_FIRST_FREE_OBJECTID);
1771 ret = update_inline_extent_backref(trans, root, path, iref,
1772 refs_to_add, extent_op);
1773 } else if (ret == -ENOENT) {
1774 ret = setup_inline_extent_backref(trans, root, path, iref,
1775 parent, root_objectid,
1776 owner, offset, refs_to_add,
1777 extent_op);
1778 }
1779 return ret;
1780}
1781
1782static int insert_extent_backref(struct btrfs_trans_handle *trans,
1783 struct btrfs_root *root,
1784 struct btrfs_path *path,
1785 u64 bytenr, u64 parent, u64 root_objectid,
1786 u64 owner, u64 offset, int refs_to_add)
1787{
1788 int ret;
1789 if (owner < BTRFS_FIRST_FREE_OBJECTID) {
1790 BUG_ON(refs_to_add != 1);
1791 ret = insert_tree_block_ref(trans, root, path, bytenr,
1792 parent, root_objectid);
1793 } else {
1794 ret = insert_extent_data_ref(trans, root, path, bytenr,
1795 parent, root_objectid,
1796 owner, offset, refs_to_add);
1797 }
1798 return ret;
1799}
1800
1801static int remove_extent_backref(struct btrfs_trans_handle *trans,
1802 struct btrfs_root *root,
1803 struct btrfs_path *path,
1804 struct btrfs_extent_inline_ref *iref,
1805 int refs_to_drop, int is_data)
1806{
1807 int ret;
1808
1809 BUG_ON(!is_data && refs_to_drop != 1);
1810 if (iref) {
1811 ret = update_inline_extent_backref(trans, root, path, iref,
1812 -refs_to_drop, NULL);
1813 } else if (is_data) {
1814 ret = remove_extent_data_ref(trans, root, path, refs_to_drop);
1815 } else {
1816 ret = btrfs_del_item(trans, root, path);
1817 }
1818 return ret;
1819}
1820
1821static int btrfs_issue_discard(struct block_device *bdev,
1822 u64 start, u64 len)
1823{
1824 return blkdev_issue_discard(bdev, start >> 9, len >> 9, GFP_NOFS, 0);
1825}
1826
1827static int btrfs_discard_extent(struct btrfs_root *root, u64 bytenr,
1828 u64 num_bytes, u64 *actual_bytes)
1829{
1830 int ret;
1831 u64 discarded_bytes = 0;
1832 struct btrfs_bio *bbio = NULL;
1833
1834
1835
1836 ret = btrfs_map_block(&root->fs_info->mapping_tree, REQ_DISCARD,
1837 bytenr, &num_bytes, &bbio, 0);
1838 if (!ret) {
1839 struct btrfs_bio_stripe *stripe = bbio->stripes;
1840 int i;
1841
1842
1843 for (i = 0; i < bbio->num_stripes; i++, stripe++) {
1844 if (!stripe->dev->can_discard)
1845 continue;
1846
1847 ret = btrfs_issue_discard(stripe->dev->bdev,
1848 stripe->physical,
1849 stripe->length);
1850 if (!ret)
1851 discarded_bytes += stripe->length;
1852 else if (ret != -EOPNOTSUPP)
1853 break;
1854
1855
1856
1857
1858
1859
1860 ret = 0;
1861 }
1862 kfree(bbio);
1863 }
1864
1865 if (actual_bytes)
1866 *actual_bytes = discarded_bytes;
1867
1868
1869 return ret;
1870}
1871
1872int btrfs_inc_extent_ref(struct btrfs_trans_handle *trans,
1873 struct btrfs_root *root,
1874 u64 bytenr, u64 num_bytes, u64 parent,
1875 u64 root_objectid, u64 owner, u64 offset, int for_cow)
1876{
1877 int ret;
1878 struct btrfs_fs_info *fs_info = root->fs_info;
1879
1880 BUG_ON(owner < BTRFS_FIRST_FREE_OBJECTID &&
1881 root_objectid == BTRFS_TREE_LOG_OBJECTID);
1882
1883 if (owner < BTRFS_FIRST_FREE_OBJECTID) {
1884 ret = btrfs_add_delayed_tree_ref(fs_info, trans, bytenr,
1885 num_bytes,
1886 parent, root_objectid, (int)owner,
1887 BTRFS_ADD_DELAYED_REF, NULL, for_cow);
1888 } else {
1889 ret = btrfs_add_delayed_data_ref(fs_info, trans, bytenr,
1890 num_bytes,
1891 parent, root_objectid, owner, offset,
1892 BTRFS_ADD_DELAYED_REF, NULL, for_cow);
1893 }
1894 return ret;
1895}
1896
1897static int __btrfs_inc_extent_ref(struct btrfs_trans_handle *trans,
1898 struct btrfs_root *root,
1899 u64 bytenr, u64 num_bytes,
1900 u64 parent, u64 root_objectid,
1901 u64 owner, u64 offset, int refs_to_add,
1902 struct btrfs_delayed_extent_op *extent_op)
1903{
1904 struct btrfs_path *path;
1905 struct extent_buffer *leaf;
1906 struct btrfs_extent_item *item;
1907 u64 refs;
1908 int ret;
1909 int err = 0;
1910
1911 path = btrfs_alloc_path();
1912 if (!path)
1913 return -ENOMEM;
1914
1915 path->reada = 1;
1916 path->leave_spinning = 1;
1917
1918 ret = insert_inline_extent_backref(trans, root->fs_info->extent_root,
1919 path, bytenr, num_bytes, parent,
1920 root_objectid, owner, offset,
1921 refs_to_add, extent_op);
1922 if (ret == 0)
1923 goto out;
1924
1925 if (ret != -EAGAIN) {
1926 err = ret;
1927 goto out;
1928 }
1929
1930 leaf = path->nodes[0];
1931 item = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item);
1932 refs = btrfs_extent_refs(leaf, item);
1933 btrfs_set_extent_refs(leaf, item, refs + refs_to_add);
1934 if (extent_op)
1935 __run_delayed_extent_op(extent_op, leaf, item);
1936
1937 btrfs_mark_buffer_dirty(leaf);
1938 btrfs_release_path(path);
1939
1940 path->reada = 1;
1941 path->leave_spinning = 1;
1942
1943
1944 ret = insert_extent_backref(trans, root->fs_info->extent_root,
1945 path, bytenr, parent, root_objectid,
1946 owner, offset, refs_to_add);
1947 BUG_ON(ret);
1948out:
1949 btrfs_free_path(path);
1950 return err;
1951}
1952
1953static int run_delayed_data_ref(struct btrfs_trans_handle *trans,
1954 struct btrfs_root *root,
1955 struct btrfs_delayed_ref_node *node,
1956 struct btrfs_delayed_extent_op *extent_op,
1957 int insert_reserved)
1958{
1959 int ret = 0;
1960 struct btrfs_delayed_data_ref *ref;
1961 struct btrfs_key ins;
1962 u64 parent = 0;
1963 u64 ref_root = 0;
1964 u64 flags = 0;
1965
1966 ins.objectid = node->bytenr;
1967 ins.offset = node->num_bytes;
1968 ins.type = BTRFS_EXTENT_ITEM_KEY;
1969
1970 ref = btrfs_delayed_node_to_data_ref(node);
1971 if (node->type == BTRFS_SHARED_DATA_REF_KEY)
1972 parent = ref->parent;
1973 else
1974 ref_root = ref->root;
1975
1976 if (node->action == BTRFS_ADD_DELAYED_REF && insert_reserved) {
1977 if (extent_op) {
1978 BUG_ON(extent_op->update_key);
1979 flags |= extent_op->flags_to_set;
1980 }
1981 ret = alloc_reserved_file_extent(trans, root,
1982 parent, ref_root, flags,
1983 ref->objectid, ref->offset,
1984 &ins, node->ref_mod);
1985 } else if (node->action == BTRFS_ADD_DELAYED_REF) {
1986 ret = __btrfs_inc_extent_ref(trans, root, node->bytenr,
1987 node->num_bytes, parent,
1988 ref_root, ref->objectid,
1989 ref->offset, node->ref_mod,
1990 extent_op);
1991 } else if (node->action == BTRFS_DROP_DELAYED_REF) {
1992 ret = __btrfs_free_extent(trans, root, node->bytenr,
1993 node->num_bytes, parent,
1994 ref_root, ref->objectid,
1995 ref->offset, node->ref_mod,
1996 extent_op);
1997 } else {
1998 BUG();
1999 }
2000 return ret;
2001}
2002
2003static void __run_delayed_extent_op(struct btrfs_delayed_extent_op *extent_op,
2004 struct extent_buffer *leaf,
2005 struct btrfs_extent_item *ei)
2006{
2007 u64 flags = btrfs_extent_flags(leaf, ei);
2008 if (extent_op->update_flags) {
2009 flags |= extent_op->flags_to_set;
2010 btrfs_set_extent_flags(leaf, ei, flags);
2011 }
2012
2013 if (extent_op->update_key) {
2014 struct btrfs_tree_block_info *bi;
2015 BUG_ON(!(flags & BTRFS_EXTENT_FLAG_TREE_BLOCK));
2016 bi = (struct btrfs_tree_block_info *)(ei + 1);
2017 btrfs_set_tree_block_key(leaf, bi, &extent_op->key);
2018 }
2019}
2020
2021static int run_delayed_extent_op(struct btrfs_trans_handle *trans,
2022 struct btrfs_root *root,
2023 struct btrfs_delayed_ref_node *node,
2024 struct btrfs_delayed_extent_op *extent_op)
2025{
2026 struct btrfs_key key;
2027 struct btrfs_path *path;
2028 struct btrfs_extent_item *ei;
2029 struct extent_buffer *leaf;
2030 u32 item_size;
2031 int ret;
2032 int err = 0;
2033
2034 path = btrfs_alloc_path();
2035 if (!path)
2036 return -ENOMEM;
2037
2038 key.objectid = node->bytenr;
2039 key.type = BTRFS_EXTENT_ITEM_KEY;
2040 key.offset = node->num_bytes;
2041
2042 path->reada = 1;
2043 path->leave_spinning = 1;
2044 ret = btrfs_search_slot(trans, root->fs_info->extent_root, &key,
2045 path, 0, 1);
2046 if (ret < 0) {
2047 err = ret;
2048 goto out;
2049 }
2050 if (ret > 0) {
2051 err = -EIO;
2052 goto out;
2053 }
2054
2055 leaf = path->nodes[0];
2056 item_size = btrfs_item_size_nr(leaf, path->slots[0]);
2057#ifdef BTRFS_COMPAT_EXTENT_TREE_V0
2058 if (item_size < sizeof(*ei)) {
2059 ret = convert_extent_item_v0(trans, root->fs_info->extent_root,
2060 path, (u64)-1, 0);
2061 if (ret < 0) {
2062 err = ret;
2063 goto out;
2064 }
2065 leaf = path->nodes[0];
2066 item_size = btrfs_item_size_nr(leaf, path->slots[0]);
2067 }
2068#endif
2069 BUG_ON(item_size < sizeof(*ei));
2070 ei = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item);
2071 __run_delayed_extent_op(extent_op, leaf, ei);
2072
2073 btrfs_mark_buffer_dirty(leaf);
2074out:
2075 btrfs_free_path(path);
2076 return err;
2077}
2078
2079static int run_delayed_tree_ref(struct btrfs_trans_handle *trans,
2080 struct btrfs_root *root,
2081 struct btrfs_delayed_ref_node *node,
2082 struct btrfs_delayed_extent_op *extent_op,
2083 int insert_reserved)
2084{
2085 int ret = 0;
2086 struct btrfs_delayed_tree_ref *ref;
2087 struct btrfs_key ins;
2088 u64 parent = 0;
2089 u64 ref_root = 0;
2090
2091 ins.objectid = node->bytenr;
2092 ins.offset = node->num_bytes;
2093 ins.type = BTRFS_EXTENT_ITEM_KEY;
2094
2095 ref = btrfs_delayed_node_to_tree_ref(node);
2096 if (node->type == BTRFS_SHARED_BLOCK_REF_KEY)
2097 parent = ref->parent;
2098 else
2099 ref_root = ref->root;
2100
2101 BUG_ON(node->ref_mod != 1);
2102 if (node->action == BTRFS_ADD_DELAYED_REF && insert_reserved) {
2103 BUG_ON(!extent_op || !extent_op->update_flags ||
2104 !extent_op->update_key);
2105 ret = alloc_reserved_tree_block(trans, root,
2106 parent, ref_root,
2107 extent_op->flags_to_set,
2108 &extent_op->key,
2109 ref->level, &ins);
2110 } else if (node->action == BTRFS_ADD_DELAYED_REF) {
2111 ret = __btrfs_inc_extent_ref(trans, root, node->bytenr,
2112 node->num_bytes, parent, ref_root,
2113 ref->level, 0, 1, extent_op);
2114 } else if (node->action == BTRFS_DROP_DELAYED_REF) {
2115 ret = __btrfs_free_extent(trans, root, node->bytenr,
2116 node->num_bytes, parent, ref_root,
2117 ref->level, 0, 1, extent_op);
2118 } else {
2119 BUG();
2120 }
2121 return ret;
2122}
2123
2124
2125static int run_one_delayed_ref(struct btrfs_trans_handle *trans,
2126 struct btrfs_root *root,
2127 struct btrfs_delayed_ref_node *node,
2128 struct btrfs_delayed_extent_op *extent_op,
2129 int insert_reserved)
2130{
2131 int ret;
2132 if (btrfs_delayed_ref_is_head(node)) {
2133 struct btrfs_delayed_ref_head *head;
2134
2135
2136
2137
2138
2139
2140 BUG_ON(extent_op);
2141 head = btrfs_delayed_node_to_head(node);
2142 if (insert_reserved) {
2143 btrfs_pin_extent(root, node->bytenr,
2144 node->num_bytes, 1);
2145 if (head->is_data) {
2146 ret = btrfs_del_csums(trans, root,
2147 node->bytenr,
2148 node->num_bytes);
2149 BUG_ON(ret);
2150 }
2151 }
2152 mutex_unlock(&head->mutex);
2153 return 0;
2154 }
2155
2156 if (node->type == BTRFS_TREE_BLOCK_REF_KEY ||
2157 node->type == BTRFS_SHARED_BLOCK_REF_KEY)
2158 ret = run_delayed_tree_ref(trans, root, node, extent_op,
2159 insert_reserved);
2160 else if (node->type == BTRFS_EXTENT_DATA_REF_KEY ||
2161 node->type == BTRFS_SHARED_DATA_REF_KEY)
2162 ret = run_delayed_data_ref(trans, root, node, extent_op,
2163 insert_reserved);
2164 else
2165 BUG();
2166 return ret;
2167}
2168
2169static noinline struct btrfs_delayed_ref_node *
2170select_delayed_ref(struct btrfs_delayed_ref_head *head)
2171{
2172 struct rb_node *node;
2173 struct btrfs_delayed_ref_node *ref;
2174 int action = BTRFS_ADD_DELAYED_REF;
2175again:
2176
2177
2178
2179
2180
2181 node = rb_prev(&head->node.rb_node);
2182 while (1) {
2183 if (!node)
2184 break;
2185 ref = rb_entry(node, struct btrfs_delayed_ref_node,
2186 rb_node);
2187 if (ref->bytenr != head->node.bytenr)
2188 break;
2189 if (ref->action == action)
2190 return ref;
2191 node = rb_prev(node);
2192 }
2193 if (action == BTRFS_ADD_DELAYED_REF) {
2194 action = BTRFS_DROP_DELAYED_REF;
2195 goto again;
2196 }
2197 return NULL;
2198}
2199
2200static noinline int run_clustered_refs(struct btrfs_trans_handle *trans,
2201 struct btrfs_root *root,
2202 struct list_head *cluster)
2203{
2204 struct btrfs_delayed_ref_root *delayed_refs;
2205 struct btrfs_delayed_ref_node *ref;
2206 struct btrfs_delayed_ref_head *locked_ref = NULL;
2207 struct btrfs_delayed_extent_op *extent_op;
2208 int ret;
2209 int count = 0;
2210 int must_insert_reserved = 0;
2211
2212 delayed_refs = &trans->transaction->delayed_refs;
2213 while (1) {
2214 if (!locked_ref) {
2215
2216 if (list_empty(cluster))
2217 break;
2218
2219 locked_ref = list_entry(cluster->next,
2220 struct btrfs_delayed_ref_head, cluster);
2221
2222
2223
2224 ret = btrfs_delayed_ref_lock(trans, locked_ref);
2225
2226
2227
2228
2229
2230
2231
2232 if (ret == -EAGAIN) {
2233 locked_ref = NULL;
2234 count++;
2235 continue;
2236 }
2237 }
2238
2239
2240
2241
2242
2243 ref = select_delayed_ref(locked_ref);
2244
2245 if (ref && ref->seq &&
2246 btrfs_check_delayed_seq(delayed_refs, ref->seq)) {
2247
2248
2249
2250
2251 list_del_init(&locked_ref->cluster);
2252 mutex_unlock(&locked_ref->mutex);
2253 locked_ref = NULL;
2254 delayed_refs->num_heads_ready++;
2255 spin_unlock(&delayed_refs->lock);
2256 cond_resched();
2257 spin_lock(&delayed_refs->lock);
2258 continue;
2259 }
2260
2261
2262
2263
2264
2265 must_insert_reserved = locked_ref->must_insert_reserved;
2266 locked_ref->must_insert_reserved = 0;
2267
2268 extent_op = locked_ref->extent_op;
2269 locked_ref->extent_op = NULL;
2270
2271 if (!ref) {
2272
2273
2274
2275
2276 ref = &locked_ref->node;
2277
2278 if (extent_op && must_insert_reserved) {
2279 kfree(extent_op);
2280 extent_op = NULL;
2281 }
2282
2283 if (extent_op) {
2284 spin_unlock(&delayed_refs->lock);
2285
2286 ret = run_delayed_extent_op(trans, root,
2287 ref, extent_op);
2288 BUG_ON(ret);
2289 kfree(extent_op);
2290
2291 goto next;
2292 }
2293
2294 list_del_init(&locked_ref->cluster);
2295 locked_ref = NULL;
2296 }
2297
2298 ref->in_tree = 0;
2299 rb_erase(&ref->rb_node, &delayed_refs->root);
2300 delayed_refs->num_entries--;
2301
2302
2303
2304
2305
2306
2307 spin_unlock(&delayed_refs->lock);
2308
2309 ret = run_one_delayed_ref(trans, root, ref, extent_op,
2310 must_insert_reserved);
2311 BUG_ON(ret);
2312
2313 btrfs_put_delayed_ref(ref);
2314 kfree(extent_op);
2315 count++;
2316next:
2317 do_chunk_alloc(trans, root->fs_info->extent_root,
2318 2 * 1024 * 1024,
2319 btrfs_get_alloc_profile(root, 0),
2320 CHUNK_ALLOC_NO_FORCE);
2321 cond_resched();
2322 spin_lock(&delayed_refs->lock);
2323 }
2324 return count;
2325}
2326
2327
2328static void wait_for_more_refs(struct btrfs_delayed_ref_root *delayed_refs,
2329 unsigned long num_refs)
2330{
2331 struct list_head *first_seq = delayed_refs->seq_head.next;
2332
2333 spin_unlock(&delayed_refs->lock);
2334 pr_debug("waiting for more refs (num %ld, first %p)\n",
2335 num_refs, first_seq);
2336 wait_event(delayed_refs->seq_wait,
2337 num_refs != delayed_refs->num_entries ||
2338 delayed_refs->seq_head.next != first_seq);
2339 pr_debug("done waiting for more refs (num %ld, first %p)\n",
2340 delayed_refs->num_entries, delayed_refs->seq_head.next);
2341 spin_lock(&delayed_refs->lock);
2342}
2343
2344
2345
2346
2347
2348
2349
2350
2351int btrfs_run_delayed_refs(struct btrfs_trans_handle *trans,
2352 struct btrfs_root *root, unsigned long count)
2353{
2354 struct rb_node *node;
2355 struct btrfs_delayed_ref_root *delayed_refs;
2356 struct btrfs_delayed_ref_node *ref;
2357 struct list_head cluster;
2358 int ret;
2359 u64 delayed_start;
2360 int run_all = count == (unsigned long)-1;
2361 int run_most = 0;
2362 unsigned long num_refs = 0;
2363 int consider_waiting;
2364
2365 if (root == root->fs_info->extent_root)
2366 root = root->fs_info->tree_root;
2367
2368 do_chunk_alloc(trans, root->fs_info->extent_root,
2369 2 * 1024 * 1024, btrfs_get_alloc_profile(root, 0),
2370 CHUNK_ALLOC_NO_FORCE);
2371
2372 delayed_refs = &trans->transaction->delayed_refs;
2373 INIT_LIST_HEAD(&cluster);
2374again:
2375 consider_waiting = 0;
2376 spin_lock(&delayed_refs->lock);
2377 if (count == 0) {
2378 count = delayed_refs->num_entries * 2;
2379 run_most = 1;
2380 }
2381 while (1) {
2382 if (!(run_all || run_most) &&
2383 delayed_refs->num_heads_ready < 64)
2384 break;
2385
2386
2387
2388
2389
2390
2391
2392 delayed_start = delayed_refs->run_delayed_start;
2393 ret = btrfs_find_ref_cluster(trans, &cluster,
2394 delayed_refs->run_delayed_start);
2395 if (ret)
2396 break;
2397
2398 if (delayed_start >= delayed_refs->run_delayed_start) {
2399 if (consider_waiting == 0) {
2400
2401
2402
2403
2404
2405
2406
2407 consider_waiting = 1;
2408 num_refs = delayed_refs->num_entries;
2409 } else {
2410 wait_for_more_refs(delayed_refs, num_refs);
2411
2412
2413
2414
2415
2416
2417 consider_waiting = 0;
2418 }
2419 }
2420
2421 ret = run_clustered_refs(trans, root, &cluster);
2422 BUG_ON(ret < 0);
2423
2424 count -= min_t(unsigned long, ret, count);
2425
2426 if (count == 0)
2427 break;
2428
2429 if (ret || delayed_refs->run_delayed_start == 0) {
2430
2431 consider_waiting = 0;
2432 }
2433 }
2434
2435 if (run_all) {
2436 node = rb_first(&delayed_refs->root);
2437 if (!node)
2438 goto out;
2439 count = (unsigned long)-1;
2440
2441 while (node) {
2442 ref = rb_entry(node, struct btrfs_delayed_ref_node,
2443 rb_node);
2444 if (btrfs_delayed_ref_is_head(ref)) {
2445 struct btrfs_delayed_ref_head *head;
2446
2447 head = btrfs_delayed_node_to_head(ref);
2448 atomic_inc(&ref->refs);
2449
2450 spin_unlock(&delayed_refs->lock);
2451
2452
2453
2454
2455 mutex_lock(&head->mutex);
2456 mutex_unlock(&head->mutex);
2457
2458 btrfs_put_delayed_ref(ref);
2459 cond_resched();
2460 goto again;
2461 }
2462 node = rb_next(node);
2463 }
2464 spin_unlock(&delayed_refs->lock);
2465 schedule_timeout(1);
2466 goto again;
2467 }
2468out:
2469 spin_unlock(&delayed_refs->lock);
2470 return 0;
2471}
2472
2473int btrfs_set_disk_extent_flags(struct btrfs_trans_handle *trans,
2474 struct btrfs_root *root,
2475 u64 bytenr, u64 num_bytes, u64 flags,
2476 int is_data)
2477{
2478 struct btrfs_delayed_extent_op *extent_op;
2479 int ret;
2480
2481 extent_op = kmalloc(sizeof(*extent_op), GFP_NOFS);
2482 if (!extent_op)
2483 return -ENOMEM;
2484
2485 extent_op->flags_to_set = flags;
2486 extent_op->update_flags = 1;
2487 extent_op->update_key = 0;
2488 extent_op->is_data = is_data ? 1 : 0;
2489
2490 ret = btrfs_add_delayed_extent_op(root->fs_info, trans, bytenr,
2491 num_bytes, extent_op);
2492 if (ret)
2493 kfree(extent_op);
2494 return ret;
2495}
2496
2497static noinline int check_delayed_ref(struct btrfs_trans_handle *trans,
2498 struct btrfs_root *root,
2499 struct btrfs_path *path,
2500 u64 objectid, u64 offset, u64 bytenr)
2501{
2502 struct btrfs_delayed_ref_head *head;
2503 struct btrfs_delayed_ref_node *ref;
2504 struct btrfs_delayed_data_ref *data_ref;
2505 struct btrfs_delayed_ref_root *delayed_refs;
2506 struct rb_node *node;
2507 int ret = 0;
2508
2509 ret = -ENOENT;
2510 delayed_refs = &trans->transaction->delayed_refs;
2511 spin_lock(&delayed_refs->lock);
2512 head = btrfs_find_delayed_ref_head(trans, bytenr);
2513 if (!head)
2514 goto out;
2515
2516 if (!mutex_trylock(&head->mutex)) {
2517 atomic_inc(&head->node.refs);
2518 spin_unlock(&delayed_refs->lock);
2519
2520 btrfs_release_path(path);
2521
2522
2523
2524
2525
2526 mutex_lock(&head->mutex);
2527 mutex_unlock(&head->mutex);
2528 btrfs_put_delayed_ref(&head->node);
2529 return -EAGAIN;
2530 }
2531
2532 node = rb_prev(&head->node.rb_node);
2533 if (!node)
2534 goto out_unlock;
2535
2536 ref = rb_entry(node, struct btrfs_delayed_ref_node, rb_node);
2537
2538 if (ref->bytenr != bytenr)
2539 goto out_unlock;
2540
2541 ret = 1;
2542 if (ref->type != BTRFS_EXTENT_DATA_REF_KEY)
2543 goto out_unlock;
2544
2545 data_ref = btrfs_delayed_node_to_data_ref(ref);
2546
2547 node = rb_prev(node);
2548 if (node) {
2549 ref = rb_entry(node, struct btrfs_delayed_ref_node, rb_node);
2550 if (ref->bytenr == bytenr)
2551 goto out_unlock;
2552 }
2553
2554 if (data_ref->root != root->root_key.objectid ||
2555 data_ref->objectid != objectid || data_ref->offset != offset)
2556 goto out_unlock;
2557
2558 ret = 0;
2559out_unlock:
2560 mutex_unlock(&head->mutex);
2561out:
2562 spin_unlock(&delayed_refs->lock);
2563 return ret;
2564}
2565
2566static noinline int check_committed_ref(struct btrfs_trans_handle *trans,
2567 struct btrfs_root *root,
2568 struct btrfs_path *path,
2569 u64 objectid, u64 offset, u64 bytenr)
2570{
2571 struct btrfs_root *extent_root = root->fs_info->extent_root;
2572 struct extent_buffer *leaf;
2573 struct btrfs_extent_data_ref *ref;
2574 struct btrfs_extent_inline_ref *iref;
2575 struct btrfs_extent_item *ei;
2576 struct btrfs_key key;
2577 u32 item_size;
2578 int ret;
2579
2580 key.objectid = bytenr;
2581 key.offset = (u64)-1;
2582 key.type = BTRFS_EXTENT_ITEM_KEY;
2583
2584 ret = btrfs_search_slot(NULL, extent_root, &key, path, 0, 0);
2585 if (ret < 0)
2586 goto out;
2587 BUG_ON(ret == 0);
2588
2589 ret = -ENOENT;
2590 if (path->slots[0] == 0)
2591 goto out;
2592
2593 path->slots[0]--;
2594 leaf = path->nodes[0];
2595 btrfs_item_key_to_cpu(leaf, &key, path->slots[0]);
2596
2597 if (key.objectid != bytenr || key.type != BTRFS_EXTENT_ITEM_KEY)
2598 goto out;
2599
2600 ret = 1;
2601 item_size = btrfs_item_size_nr(leaf, path->slots[0]);
2602#ifdef BTRFS_COMPAT_EXTENT_TREE_V0
2603 if (item_size < sizeof(*ei)) {
2604 WARN_ON(item_size != sizeof(struct btrfs_extent_item_v0));
2605 goto out;
2606 }
2607#endif
2608 ei = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item);
2609
2610 if (item_size != sizeof(*ei) +
2611 btrfs_extent_inline_ref_size(BTRFS_EXTENT_DATA_REF_KEY))
2612 goto out;
2613
2614 if (btrfs_extent_generation(leaf, ei) <=
2615 btrfs_root_last_snapshot(&root->root_item))
2616 goto out;
2617
2618 iref = (struct btrfs_extent_inline_ref *)(ei + 1);
2619 if (btrfs_extent_inline_ref_type(leaf, iref) !=
2620 BTRFS_EXTENT_DATA_REF_KEY)
2621 goto out;
2622
2623 ref = (struct btrfs_extent_data_ref *)(&iref->offset);
2624 if (btrfs_extent_refs(leaf, ei) !=
2625 btrfs_extent_data_ref_count(leaf, ref) ||
2626 btrfs_extent_data_ref_root(leaf, ref) !=
2627 root->root_key.objectid ||
2628 btrfs_extent_data_ref_objectid(leaf, ref) != objectid ||
2629 btrfs_extent_data_ref_offset(leaf, ref) != offset)
2630 goto out;
2631
2632 ret = 0;
2633out:
2634 return ret;
2635}
2636
2637int btrfs_cross_ref_exist(struct btrfs_trans_handle *trans,
2638 struct btrfs_root *root,
2639 u64 objectid, u64 offset, u64 bytenr)
2640{
2641 struct btrfs_path *path;
2642 int ret;
2643 int ret2;
2644
2645 path = btrfs_alloc_path();
2646 if (!path)
2647 return -ENOENT;
2648
2649 do {
2650 ret = check_committed_ref(trans, root, path, objectid,
2651 offset, bytenr);
2652 if (ret && ret != -ENOENT)
2653 goto out;
2654
2655 ret2 = check_delayed_ref(trans, root, path, objectid,
2656 offset, bytenr);
2657 } while (ret2 == -EAGAIN);
2658
2659 if (ret2 && ret2 != -ENOENT) {
2660 ret = ret2;
2661 goto out;
2662 }
2663
2664 if (ret != -ENOENT || ret2 != -ENOENT)
2665 ret = 0;
2666out:
2667 btrfs_free_path(path);
2668 if (root->root_key.objectid == BTRFS_DATA_RELOC_TREE_OBJECTID)
2669 WARN_ON(ret > 0);
2670 return ret;
2671}
2672
2673static int __btrfs_mod_ref(struct btrfs_trans_handle *trans,
2674 struct btrfs_root *root,
2675 struct extent_buffer *buf,
2676 int full_backref, int inc, int for_cow)
2677{
2678 u64 bytenr;
2679 u64 num_bytes;
2680 u64 parent;
2681 u64 ref_root;
2682 u32 nritems;
2683 struct btrfs_key key;
2684 struct btrfs_file_extent_item *fi;
2685 int i;
2686 int level;
2687 int ret = 0;
2688 int (*process_func)(struct btrfs_trans_handle *, struct btrfs_root *,
2689 u64, u64, u64, u64, u64, u64, int);
2690
2691 ref_root = btrfs_header_owner(buf);
2692 nritems = btrfs_header_nritems(buf);
2693 level = btrfs_header_level(buf);
2694
2695 if (!root->ref_cows && level == 0)
2696 return 0;
2697
2698 if (inc)
2699 process_func = btrfs_inc_extent_ref;
2700 else
2701 process_func = btrfs_free_extent;
2702
2703 if (full_backref)
2704 parent = buf->start;
2705 else
2706 parent = 0;
2707
2708 for (i = 0; i < nritems; i++) {
2709 if (level == 0) {
2710 btrfs_item_key_to_cpu(buf, &key, i);
2711 if (btrfs_key_type(&key) != BTRFS_EXTENT_DATA_KEY)
2712 continue;
2713 fi = btrfs_item_ptr(buf, i,
2714 struct btrfs_file_extent_item);
2715 if (btrfs_file_extent_type(buf, fi) ==
2716 BTRFS_FILE_EXTENT_INLINE)
2717 continue;
2718 bytenr = btrfs_file_extent_disk_bytenr(buf, fi);
2719 if (bytenr == 0)
2720 continue;
2721
2722 num_bytes = btrfs_file_extent_disk_num_bytes(buf, fi);
2723 key.offset -= btrfs_file_extent_offset(buf, fi);
2724 ret = process_func(trans, root, bytenr, num_bytes,
2725 parent, ref_root, key.objectid,
2726 key.offset, for_cow);
2727 if (ret)
2728 goto fail;
2729 } else {
2730 bytenr = btrfs_node_blockptr(buf, i);
2731 num_bytes = btrfs_level_size(root, level - 1);
2732 ret = process_func(trans, root, bytenr, num_bytes,
2733 parent, ref_root, level - 1, 0,
2734 for_cow);
2735 if (ret)
2736 goto fail;
2737 }
2738 }
2739 return 0;
2740fail:
2741 BUG();
2742 return ret;
2743}
2744
2745int btrfs_inc_ref(struct btrfs_trans_handle *trans, struct btrfs_root *root,
2746 struct extent_buffer *buf, int full_backref, int for_cow)
2747{
2748 return __btrfs_mod_ref(trans, root, buf, full_backref, 1, for_cow);
2749}
2750
2751int btrfs_dec_ref(struct btrfs_trans_handle *trans, struct btrfs_root *root,
2752 struct extent_buffer *buf, int full_backref, int for_cow)
2753{
2754 return __btrfs_mod_ref(trans, root, buf, full_backref, 0, for_cow);
2755}
2756
2757static int write_one_cache_group(struct btrfs_trans_handle *trans,
2758 struct btrfs_root *root,
2759 struct btrfs_path *path,
2760 struct btrfs_block_group_cache *cache)
2761{
2762 int ret;
2763 struct btrfs_root *extent_root = root->fs_info->extent_root;
2764 unsigned long bi;
2765 struct extent_buffer *leaf;
2766
2767 ret = btrfs_search_slot(trans, extent_root, &cache->key, path, 0, 1);
2768 if (ret < 0)
2769 goto fail;
2770 BUG_ON(ret);
2771
2772 leaf = path->nodes[0];
2773 bi = btrfs_item_ptr_offset(leaf, path->slots[0]);
2774 write_extent_buffer(leaf, &cache->item, bi, sizeof(cache->item));
2775 btrfs_mark_buffer_dirty(leaf);
2776 btrfs_release_path(path);
2777fail:
2778 if (ret)
2779 return ret;
2780 return 0;
2781
2782}
2783
2784static struct btrfs_block_group_cache *
2785next_block_group(struct btrfs_root *root,
2786 struct btrfs_block_group_cache *cache)
2787{
2788 struct rb_node *node;
2789 spin_lock(&root->fs_info->block_group_cache_lock);
2790 node = rb_next(&cache->cache_node);
2791 btrfs_put_block_group(cache);
2792 if (node) {
2793 cache = rb_entry(node, struct btrfs_block_group_cache,
2794 cache_node);
2795 btrfs_get_block_group(cache);
2796 } else
2797 cache = NULL;
2798 spin_unlock(&root->fs_info->block_group_cache_lock);
2799 return cache;
2800}
2801
2802static int cache_save_setup(struct btrfs_block_group_cache *block_group,
2803 struct btrfs_trans_handle *trans,
2804 struct btrfs_path *path)
2805{
2806 struct btrfs_root *root = block_group->fs_info->tree_root;
2807 struct inode *inode = NULL;
2808 u64 alloc_hint = 0;
2809 int dcs = BTRFS_DC_ERROR;
2810 int num_pages = 0;
2811 int retries = 0;
2812 int ret = 0;
2813
2814
2815
2816
2817
2818 if (block_group->key.offset < (100 * 1024 * 1024)) {
2819 spin_lock(&block_group->lock);
2820 block_group->disk_cache_state = BTRFS_DC_WRITTEN;
2821 spin_unlock(&block_group->lock);
2822 return 0;
2823 }
2824
2825again:
2826 inode = lookup_free_space_inode(root, block_group, path);
2827 if (IS_ERR(inode) && PTR_ERR(inode) != -ENOENT) {
2828 ret = PTR_ERR(inode);
2829 btrfs_release_path(path);
2830 goto out;
2831 }
2832
2833 if (IS_ERR(inode)) {
2834 BUG_ON(retries);
2835 retries++;
2836
2837 if (block_group->ro)
2838 goto out_free;
2839
2840 ret = create_free_space_inode(root, trans, block_group, path);
2841 if (ret)
2842 goto out_free;
2843 goto again;
2844 }
2845
2846
2847 if (block_group->cache_generation == trans->transid &&
2848 i_size_read(inode)) {
2849 dcs = BTRFS_DC_SETUP;
2850 goto out_put;
2851 }
2852
2853
2854
2855
2856
2857
2858 BTRFS_I(inode)->generation = 0;
2859 ret = btrfs_update_inode(trans, root, inode);
2860 WARN_ON(ret);
2861
2862 if (i_size_read(inode) > 0) {
2863 ret = btrfs_truncate_free_space_cache(root, trans, path,
2864 inode);
2865 if (ret)
2866 goto out_put;
2867 }
2868
2869 spin_lock(&block_group->lock);
2870 if (block_group->cached != BTRFS_CACHE_FINISHED) {
2871
2872 dcs = BTRFS_DC_WRITTEN;
2873 spin_unlock(&block_group->lock);
2874 goto out_put;
2875 }
2876 spin_unlock(&block_group->lock);
2877
2878 num_pages = (int)div64_u64(block_group->key.offset, 1024 * 1024 * 1024);
2879 if (!num_pages)
2880 num_pages = 1;
2881
2882
2883
2884
2885
2886
2887
2888
2889 num_pages *= 16;
2890 num_pages *= PAGE_CACHE_SIZE;
2891
2892 ret = btrfs_check_data_free_space(inode, num_pages);
2893 if (ret)
2894 goto out_put;
2895
2896 ret = btrfs_prealloc_file_range_trans(inode, trans, 0, 0, num_pages,
2897 num_pages, num_pages,
2898 &alloc_hint);
2899 if (!ret)
2900 dcs = BTRFS_DC_SETUP;
2901 btrfs_free_reserved_data_space(inode, num_pages);
2902
2903out_put:
2904 iput(inode);
2905out_free:
2906 btrfs_release_path(path);
2907out:
2908 spin_lock(&block_group->lock);
2909 if (!ret && dcs == BTRFS_DC_SETUP)
2910 block_group->cache_generation = trans->transid;
2911 block_group->disk_cache_state = dcs;
2912 spin_unlock(&block_group->lock);
2913
2914 return ret;
2915}
2916
2917int btrfs_write_dirty_block_groups(struct btrfs_trans_handle *trans,
2918 struct btrfs_root *root)
2919{
2920 struct btrfs_block_group_cache *cache;
2921 int err = 0;
2922 struct btrfs_path *path;
2923 u64 last = 0;
2924
2925 path = btrfs_alloc_path();
2926 if (!path)
2927 return -ENOMEM;
2928
2929again:
2930 while (1) {
2931 cache = btrfs_lookup_first_block_group(root->fs_info, last);
2932 while (cache) {
2933 if (cache->disk_cache_state == BTRFS_DC_CLEAR)
2934 break;
2935 cache = next_block_group(root, cache);
2936 }
2937 if (!cache) {
2938 if (last == 0)
2939 break;
2940 last = 0;
2941 continue;
2942 }
2943 err = cache_save_setup(cache, trans, path);
2944 last = cache->key.objectid + cache->key.offset;
2945 btrfs_put_block_group(cache);
2946 }
2947
2948 while (1) {
2949 if (last == 0) {
2950 err = btrfs_run_delayed_refs(trans, root,
2951 (unsigned long)-1);
2952 BUG_ON(err);
2953 }
2954
2955 cache = btrfs_lookup_first_block_group(root->fs_info, last);
2956 while (cache) {
2957 if (cache->disk_cache_state == BTRFS_DC_CLEAR) {
2958 btrfs_put_block_group(cache);
2959 goto again;
2960 }
2961
2962 if (cache->dirty)
2963 break;
2964 cache = next_block_group(root, cache);
2965 }
2966 if (!cache) {
2967 if (last == 0)
2968 break;
2969 last = 0;
2970 continue;
2971 }
2972
2973 if (cache->disk_cache_state == BTRFS_DC_SETUP)
2974 cache->disk_cache_state = BTRFS_DC_NEED_WRITE;
2975 cache->dirty = 0;
2976 last = cache->key.objectid + cache->key.offset;
2977
2978 err = write_one_cache_group(trans, root, path, cache);
2979 BUG_ON(err);
2980 btrfs_put_block_group(cache);
2981 }
2982
2983 while (1) {
2984
2985
2986
2987
2988
2989 if (last == 0) {
2990 err = btrfs_run_delayed_refs(trans, root,
2991 (unsigned long)-1);
2992 BUG_ON(err);
2993 }
2994
2995 cache = btrfs_lookup_first_block_group(root->fs_info, last);
2996 while (cache) {
2997
2998
2999
3000
3001
3002 if (cache->dirty) {
3003 btrfs_put_block_group(cache);
3004 goto again;
3005 }
3006 if (cache->disk_cache_state == BTRFS_DC_NEED_WRITE)
3007 break;
3008 cache = next_block_group(root, cache);
3009 }
3010 if (!cache) {
3011 if (last == 0)
3012 break;
3013 last = 0;
3014 continue;
3015 }
3016
3017 btrfs_write_out_cache(root, trans, cache, path);
3018
3019
3020
3021
3022
3023 if (cache->disk_cache_state == BTRFS_DC_NEED_WRITE)
3024 cache->disk_cache_state = BTRFS_DC_WRITTEN;
3025 last = cache->key.objectid + cache->key.offset;
3026 btrfs_put_block_group(cache);
3027 }
3028
3029 btrfs_free_path(path);
3030 return 0;
3031}
3032
3033int btrfs_extent_readonly(struct btrfs_root *root, u64 bytenr)
3034{
3035 struct btrfs_block_group_cache *block_group;
3036 int readonly = 0;
3037
3038 block_group = btrfs_lookup_block_group(root->fs_info, bytenr);
3039 if (!block_group || block_group->ro)
3040 readonly = 1;
3041 if (block_group)
3042 btrfs_put_block_group(block_group);
3043 return readonly;
3044}
3045
3046static int update_space_info(struct btrfs_fs_info *info, u64 flags,
3047 u64 total_bytes, u64 bytes_used,
3048 struct btrfs_space_info **space_info)
3049{
3050 struct btrfs_space_info *found;
3051 int i;
3052 int factor;
3053
3054 if (flags & (BTRFS_BLOCK_GROUP_DUP | BTRFS_BLOCK_GROUP_RAID1 |
3055 BTRFS_BLOCK_GROUP_RAID10))
3056 factor = 2;
3057 else
3058 factor = 1;
3059
3060 found = __find_space_info(info, flags);
3061 if (found) {
3062 spin_lock(&found->lock);
3063 found->total_bytes += total_bytes;
3064 found->disk_total += total_bytes * factor;
3065 found->bytes_used += bytes_used;
3066 found->disk_used += bytes_used * factor;
3067 found->full = 0;
3068 spin_unlock(&found->lock);
3069 *space_info = found;
3070 return 0;
3071 }
3072 found = kzalloc(sizeof(*found), GFP_NOFS);
3073 if (!found)
3074 return -ENOMEM;
3075
3076 for (i = 0; i < BTRFS_NR_RAID_TYPES; i++)
3077 INIT_LIST_HEAD(&found->block_groups[i]);
3078 init_rwsem(&found->groups_sem);
3079 spin_lock_init(&found->lock);
3080 found->flags = flags & BTRFS_BLOCK_GROUP_TYPE_MASK;
3081 found->total_bytes = total_bytes;
3082 found->disk_total = total_bytes * factor;
3083 found->bytes_used = bytes_used;
3084 found->disk_used = bytes_used * factor;
3085 found->bytes_pinned = 0;
3086 found->bytes_reserved = 0;
3087 found->bytes_readonly = 0;
3088 found->bytes_may_use = 0;
3089 found->full = 0;
3090 found->force_alloc = CHUNK_ALLOC_NO_FORCE;
3091 found->chunk_alloc = 0;
3092 found->flush = 0;
3093 init_waitqueue_head(&found->wait);
3094 *space_info = found;
3095 list_add_rcu(&found->list, &info->space_info);
3096 return 0;
3097}
3098
3099static void set_avail_alloc_bits(struct btrfs_fs_info *fs_info, u64 flags)
3100{
3101 u64 extra_flags = flags & BTRFS_BLOCK_GROUP_PROFILE_MASK;
3102
3103
3104 if (extra_flags == 0)
3105 extra_flags = BTRFS_AVAIL_ALLOC_BIT_SINGLE;
3106
3107 if (flags & BTRFS_BLOCK_GROUP_DATA)
3108 fs_info->avail_data_alloc_bits |= extra_flags;
3109 if (flags & BTRFS_BLOCK_GROUP_METADATA)
3110 fs_info->avail_metadata_alloc_bits |= extra_flags;
3111 if (flags & BTRFS_BLOCK_GROUP_SYSTEM)
3112 fs_info->avail_system_alloc_bits |= extra_flags;
3113}
3114
3115
3116
3117
3118
3119
3120
3121
3122u64 btrfs_reduce_alloc_profile(struct btrfs_root *root, u64 flags)
3123{
3124
3125
3126
3127
3128
3129 u64 num_devices = root->fs_info->fs_devices->rw_devices +
3130 root->fs_info->fs_devices->missing_devices;
3131
3132
3133 spin_lock(&root->fs_info->balance_lock);
3134 if (root->fs_info->balance_ctl) {
3135 struct btrfs_balance_control *bctl = root->fs_info->balance_ctl;
3136 u64 tgt = 0;
3137
3138 if ((flags & BTRFS_BLOCK_GROUP_DATA) &&
3139 (bctl->data.flags & BTRFS_BALANCE_ARGS_CONVERT) &&
3140 (flags & bctl->data.target)) {
3141 tgt = BTRFS_BLOCK_GROUP_DATA | bctl->data.target;
3142 } else if ((flags & BTRFS_BLOCK_GROUP_SYSTEM) &&
3143 (bctl->sys.flags & BTRFS_BALANCE_ARGS_CONVERT) &&
3144 (flags & bctl->sys.target)) {
3145 tgt = BTRFS_BLOCK_GROUP_SYSTEM | bctl->sys.target;
3146 } else if ((flags & BTRFS_BLOCK_GROUP_METADATA) &&
3147 (bctl->meta.flags & BTRFS_BALANCE_ARGS_CONVERT) &&
3148 (flags & bctl->meta.target)) {
3149 tgt = BTRFS_BLOCK_GROUP_METADATA | bctl->meta.target;
3150 }
3151
3152 if (tgt) {
3153 spin_unlock(&root->fs_info->balance_lock);
3154 flags = tgt;
3155 goto out;
3156 }
3157 }
3158 spin_unlock(&root->fs_info->balance_lock);
3159
3160 if (num_devices == 1)
3161 flags &= ~(BTRFS_BLOCK_GROUP_RAID1 | BTRFS_BLOCK_GROUP_RAID0);
3162 if (num_devices < 4)
3163 flags &= ~BTRFS_BLOCK_GROUP_RAID10;
3164
3165 if ((flags & BTRFS_BLOCK_GROUP_DUP) &&
3166 (flags & (BTRFS_BLOCK_GROUP_RAID1 |
3167 BTRFS_BLOCK_GROUP_RAID10))) {
3168 flags &= ~BTRFS_BLOCK_GROUP_DUP;
3169 }
3170
3171 if ((flags & BTRFS_BLOCK_GROUP_RAID1) &&
3172 (flags & BTRFS_BLOCK_GROUP_RAID10)) {
3173 flags &= ~BTRFS_BLOCK_GROUP_RAID1;
3174 }
3175
3176 if ((flags & BTRFS_BLOCK_GROUP_RAID0) &&
3177 ((flags & BTRFS_BLOCK_GROUP_RAID1) |
3178 (flags & BTRFS_BLOCK_GROUP_RAID10) |
3179 (flags & BTRFS_BLOCK_GROUP_DUP))) {
3180 flags &= ~BTRFS_BLOCK_GROUP_RAID0;
3181 }
3182
3183out:
3184
3185 flags &= ~BTRFS_AVAIL_ALLOC_BIT_SINGLE;
3186 return flags;
3187}
3188
3189static u64 get_alloc_profile(struct btrfs_root *root, u64 flags)
3190{
3191 if (flags & BTRFS_BLOCK_GROUP_DATA)
3192 flags |= root->fs_info->avail_data_alloc_bits;
3193 else if (flags & BTRFS_BLOCK_GROUP_SYSTEM)
3194 flags |= root->fs_info->avail_system_alloc_bits;
3195 else if (flags & BTRFS_BLOCK_GROUP_METADATA)
3196 flags |= root->fs_info->avail_metadata_alloc_bits;
3197
3198 return btrfs_reduce_alloc_profile(root, flags);
3199}
3200
3201u64 btrfs_get_alloc_profile(struct btrfs_root *root, int data)
3202{
3203 u64 flags;
3204
3205 if (data)
3206 flags = BTRFS_BLOCK_GROUP_DATA;
3207 else if (root == root->fs_info->chunk_root)
3208 flags = BTRFS_BLOCK_GROUP_SYSTEM;
3209 else
3210 flags = BTRFS_BLOCK_GROUP_METADATA;
3211
3212 return get_alloc_profile(root, flags);
3213}
3214
3215void btrfs_set_inode_space_info(struct btrfs_root *root, struct inode *inode)
3216{
3217 BTRFS_I(inode)->space_info = __find_space_info(root->fs_info,
3218 BTRFS_BLOCK_GROUP_DATA);
3219}
3220
3221
3222
3223
3224
3225int btrfs_check_data_free_space(struct inode *inode, u64 bytes)
3226{
3227 struct btrfs_space_info *data_sinfo;
3228 struct btrfs_root *root = BTRFS_I(inode)->root;
3229 u64 used;
3230 int ret = 0, committed = 0, alloc_chunk = 1;
3231
3232
3233 bytes = (bytes + root->sectorsize - 1) & ~((u64)root->sectorsize - 1);
3234
3235 if (root == root->fs_info->tree_root ||
3236 BTRFS_I(inode)->location.objectid == BTRFS_FREE_INO_OBJECTID) {
3237 alloc_chunk = 0;
3238 committed = 1;
3239 }
3240
3241 data_sinfo = BTRFS_I(inode)->space_info;
3242 if (!data_sinfo)
3243 goto alloc;
3244
3245again:
3246
3247 spin_lock(&data_sinfo->lock);
3248 used = data_sinfo->bytes_used + data_sinfo->bytes_reserved +
3249 data_sinfo->bytes_pinned + data_sinfo->bytes_readonly +
3250 data_sinfo->bytes_may_use;
3251
3252 if (used + bytes > data_sinfo->total_bytes) {
3253 struct btrfs_trans_handle *trans;
3254
3255
3256
3257
3258
3259 if (!data_sinfo->full && alloc_chunk) {
3260 u64 alloc_target;
3261
3262 data_sinfo->force_alloc = CHUNK_ALLOC_FORCE;
3263 spin_unlock(&data_sinfo->lock);
3264alloc:
3265 alloc_target = btrfs_get_alloc_profile(root, 1);
3266 trans = btrfs_join_transaction(root);
3267 if (IS_ERR(trans))
3268 return PTR_ERR(trans);
3269
3270 ret = do_chunk_alloc(trans, root->fs_info->extent_root,
3271 bytes + 2 * 1024 * 1024,
3272 alloc_target,
3273 CHUNK_ALLOC_NO_FORCE);
3274 btrfs_end_transaction(trans, root);
3275 if (ret < 0) {
3276 if (ret != -ENOSPC)
3277 return ret;
3278 else
3279 goto commit_trans;
3280 }
3281
3282 if (!data_sinfo) {
3283 btrfs_set_inode_space_info(root, inode);
3284 data_sinfo = BTRFS_I(inode)->space_info;
3285 }
3286 goto again;
3287 }
3288
3289
3290
3291
3292
3293 if (data_sinfo->bytes_pinned < bytes)
3294 committed = 1;
3295 spin_unlock(&data_sinfo->lock);
3296
3297
3298commit_trans:
3299 if (!committed &&
3300 !atomic_read(&root->fs_info->open_ioctl_trans)) {
3301 committed = 1;
3302 trans = btrfs_join_transaction(root);
3303 if (IS_ERR(trans))
3304 return PTR_ERR(trans);
3305 ret = btrfs_commit_transaction(trans, root);
3306 if (ret)
3307 return ret;
3308 goto again;
3309 }
3310
3311 return -ENOSPC;
3312 }
3313 data_sinfo->bytes_may_use += bytes;
3314 trace_btrfs_space_reservation(root->fs_info, "space_info",
3315 (u64)(unsigned long)data_sinfo,
3316 bytes, 1);
3317 spin_unlock(&data_sinfo->lock);
3318
3319 return 0;
3320}
3321
3322
3323
3324
3325void btrfs_free_reserved_data_space(struct inode *inode, u64 bytes)
3326{
3327 struct btrfs_root *root = BTRFS_I(inode)->root;
3328 struct btrfs_space_info *data_sinfo;
3329
3330
3331 bytes = (bytes + root->sectorsize - 1) & ~((u64)root->sectorsize - 1);
3332
3333 data_sinfo = BTRFS_I(inode)->space_info;
3334 spin_lock(&data_sinfo->lock);
3335 data_sinfo->bytes_may_use -= bytes;
3336 trace_btrfs_space_reservation(root->fs_info, "space_info",
3337 (u64)(unsigned long)data_sinfo,
3338 bytes, 0);
3339 spin_unlock(&data_sinfo->lock);
3340}
3341
3342static void force_metadata_allocation(struct btrfs_fs_info *info)
3343{
3344 struct list_head *head = &info->space_info;
3345 struct btrfs_space_info *found;
3346
3347 rcu_read_lock();
3348 list_for_each_entry_rcu(found, head, list) {
3349 if (found->flags & BTRFS_BLOCK_GROUP_METADATA)
3350 found->force_alloc = CHUNK_ALLOC_FORCE;
3351 }
3352 rcu_read_unlock();
3353}
3354
3355static int should_alloc_chunk(struct btrfs_root *root,
3356 struct btrfs_space_info *sinfo, u64 alloc_bytes,
3357 int force)
3358{
3359 struct btrfs_block_rsv *global_rsv = &root->fs_info->global_block_rsv;
3360 u64 num_bytes = sinfo->total_bytes - sinfo->bytes_readonly;
3361 u64 num_allocated = sinfo->bytes_used + sinfo->bytes_reserved;
3362 u64 thresh;
3363
3364 if (force == CHUNK_ALLOC_FORCE)
3365 return 1;
3366
3367
3368
3369
3370
3371
3372 num_allocated += global_rsv->size;
3373
3374
3375
3376
3377
3378 if (force == CHUNK_ALLOC_LIMITED) {
3379 thresh = btrfs_super_total_bytes(root->fs_info->super_copy);
3380 thresh = max_t(u64, 64 * 1024 * 1024,
3381 div_factor_fine(thresh, 1));
3382
3383 if (num_bytes - num_allocated < thresh)
3384 return 1;
3385 }
3386 thresh = btrfs_super_total_bytes(root->fs_info->super_copy);
3387
3388
3389 thresh = max_t(u64, 256 * 1024 * 1024, div_factor_fine(thresh, 2));
3390
3391 if (sinfo->flags & BTRFS_BLOCK_GROUP_SYSTEM)
3392 thresh = 32 * 1024 * 1024;
3393
3394 if (num_bytes > thresh && sinfo->bytes_used < div_factor(num_bytes, 8))
3395 return 0;
3396 return 1;
3397}
3398
3399static int do_chunk_alloc(struct btrfs_trans_handle *trans,
3400 struct btrfs_root *extent_root, u64 alloc_bytes,
3401 u64 flags, int force)
3402{
3403 struct btrfs_space_info *space_info;
3404 struct btrfs_fs_info *fs_info = extent_root->fs_info;
3405 int wait_for_alloc = 0;
3406 int ret = 0;
3407
3408 BUG_ON(!profile_is_valid(flags, 0));
3409
3410 space_info = __find_space_info(extent_root->fs_info, flags);
3411 if (!space_info) {
3412 ret = update_space_info(extent_root->fs_info, flags,
3413 0, 0, &space_info);
3414 BUG_ON(ret);
3415 }
3416 BUG_ON(!space_info);
3417
3418again:
3419 spin_lock(&space_info->lock);
3420 if (force < space_info->force_alloc)
3421 force = space_info->force_alloc;
3422 if (space_info->full) {
3423 spin_unlock(&space_info->lock);
3424 return 0;
3425 }
3426
3427 if (!should_alloc_chunk(extent_root, space_info, alloc_bytes, force)) {
3428 spin_unlock(&space_info->lock);
3429 return 0;
3430 } else if (space_info->chunk_alloc) {
3431 wait_for_alloc = 1;
3432 } else {
3433 space_info->chunk_alloc = 1;
3434 }
3435
3436 spin_unlock(&space_info->lock);
3437
3438 mutex_lock(&fs_info->chunk_mutex);
3439
3440
3441
3442
3443
3444
3445
3446 if (wait_for_alloc) {
3447 mutex_unlock(&fs_info->chunk_mutex);
3448 wait_for_alloc = 0;
3449 goto again;
3450 }
3451
3452
3453
3454
3455
3456 if (btrfs_mixed_space_info(space_info))
3457 flags |= (BTRFS_BLOCK_GROUP_DATA | BTRFS_BLOCK_GROUP_METADATA);
3458
3459
3460
3461
3462
3463
3464 if (flags & BTRFS_BLOCK_GROUP_DATA && fs_info->metadata_ratio) {
3465 fs_info->data_chunk_allocations++;
3466 if (!(fs_info->data_chunk_allocations %
3467 fs_info->metadata_ratio))
3468 force_metadata_allocation(fs_info);
3469 }
3470
3471 ret = btrfs_alloc_chunk(trans, extent_root, flags);
3472 if (ret < 0 && ret != -ENOSPC)
3473 goto out;
3474
3475 spin_lock(&space_info->lock);
3476 if (ret)
3477 space_info->full = 1;
3478 else
3479 ret = 1;
3480
3481 space_info->force_alloc = CHUNK_ALLOC_NO_FORCE;
3482 space_info->chunk_alloc = 0;
3483 spin_unlock(&space_info->lock);
3484out:
3485 mutex_unlock(&extent_root->fs_info->chunk_mutex);
3486 return ret;
3487}
3488
3489
3490
3491
3492static int shrink_delalloc(struct btrfs_root *root, u64 to_reclaim,
3493 bool wait_ordered)
3494{
3495 struct btrfs_block_rsv *block_rsv;
3496 struct btrfs_space_info *space_info;
3497 struct btrfs_trans_handle *trans;
3498 u64 reserved;
3499 u64 max_reclaim;
3500 u64 reclaimed = 0;
3501 long time_left;
3502 unsigned long nr_pages = (2 * 1024 * 1024) >> PAGE_CACHE_SHIFT;
3503 int loops = 0;
3504 unsigned long progress;
3505
3506 trans = (struct btrfs_trans_handle *)current->journal_info;
3507 block_rsv = &root->fs_info->delalloc_block_rsv;
3508 space_info = block_rsv->space_info;
3509
3510 smp_mb();
3511 reserved = space_info->bytes_may_use;
3512 progress = space_info->reservation_progress;
3513
3514 if (reserved == 0)
3515 return 0;
3516
3517 smp_mb();
3518 if (root->fs_info->delalloc_bytes == 0) {
3519 if (trans)
3520 return 0;
3521 btrfs_wait_ordered_extents(root, 0, 0);
3522 return 0;
3523 }
3524
3525 max_reclaim = min(reserved, to_reclaim);
3526 nr_pages = max_t(unsigned long, nr_pages,
3527 max_reclaim >> PAGE_CACHE_SHIFT);
3528 while (loops < 1024) {
3529
3530 smp_mb();
3531 nr_pages = min_t(unsigned long, nr_pages,
3532 root->fs_info->delalloc_bytes >> PAGE_CACHE_SHIFT);
3533 writeback_inodes_sb_nr_if_idle(root->fs_info->sb, nr_pages,
3534 WB_REASON_FS_FREE_SPACE);
3535
3536 spin_lock(&space_info->lock);
3537 if (reserved > space_info->bytes_may_use)
3538 reclaimed += reserved - space_info->bytes_may_use;
3539 reserved = space_info->bytes_may_use;
3540 spin_unlock(&space_info->lock);
3541
3542 loops++;
3543
3544 if (reserved == 0 || reclaimed >= max_reclaim)
3545 break;
3546
3547 if (trans && trans->transaction->blocked)
3548 return -EAGAIN;
3549
3550 if (wait_ordered && !trans) {
3551 btrfs_wait_ordered_extents(root, 0, 0);
3552 } else {
3553 time_left = schedule_timeout_interruptible(1);
3554
3555
3556 if (time_left)
3557 break;
3558 }
3559
3560
3561
3562
3563
3564
3565
3566 if (loops > 3) {
3567 smp_mb();
3568 if (progress != space_info->reservation_progress)
3569 break;
3570 }
3571
3572 }
3573
3574 return reclaimed >= to_reclaim;
3575}
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585
3586
3587static int may_commit_transaction(struct btrfs_root *root,
3588 struct btrfs_space_info *space_info,
3589 u64 bytes, int force)
3590{
3591 struct btrfs_block_rsv *delayed_rsv = &root->fs_info->delayed_block_rsv;
3592 struct btrfs_trans_handle *trans;
3593
3594 trans = (struct btrfs_trans_handle *)current->journal_info;
3595 if (trans)
3596 return -EAGAIN;
3597
3598 if (force)
3599 goto commit;
3600
3601
3602 spin_lock(&space_info->lock);
3603 if (space_info->bytes_pinned >= bytes) {
3604 spin_unlock(&space_info->lock);
3605 goto commit;
3606 }
3607 spin_unlock(&space_info->lock);
3608
3609
3610
3611
3612
3613 if (space_info != delayed_rsv->space_info)
3614 return -ENOSPC;
3615
3616 spin_lock(&space_info->lock);
3617 spin_lock(&delayed_rsv->lock);
3618 if (space_info->bytes_pinned + delayed_rsv->size < bytes) {
3619 spin_unlock(&delayed_rsv->lock);
3620 spin_unlock(&space_info->lock);
3621 return -ENOSPC;
3622 }
3623 spin_unlock(&delayed_rsv->lock);
3624 spin_unlock(&space_info->lock);
3625
3626commit:
3627 trans = btrfs_join_transaction(root);
3628 if (IS_ERR(trans))
3629 return -ENOSPC;
3630
3631 return btrfs_commit_transaction(trans, root);
3632}
3633
3634
3635
3636
3637
3638
3639
3640
3641
3642
3643
3644
3645
3646
3647
3648static int reserve_metadata_bytes(struct btrfs_root *root,
3649 struct btrfs_block_rsv *block_rsv,
3650 u64 orig_bytes, int flush)
3651{
3652 struct btrfs_space_info *space_info = block_rsv->space_info;
3653 u64 used;
3654 u64 num_bytes = orig_bytes;
3655 int retries = 0;
3656 int ret = 0;
3657 bool committed = false;
3658 bool flushing = false;
3659 bool wait_ordered = false;
3660
3661again:
3662 ret = 0;
3663 spin_lock(&space_info->lock);
3664
3665
3666
3667
3668 while (flush && !flushing && space_info->flush) {
3669 spin_unlock(&space_info->lock);
3670
3671
3672
3673
3674
3675
3676 if (current->journal_info)
3677 return -EAGAIN;
3678 ret = wait_event_interruptible(space_info->wait,
3679 !space_info->flush);
3680
3681 if (ret)
3682 return -EINTR;
3683
3684 spin_lock(&space_info->lock);
3685 }
3686
3687 ret = -ENOSPC;
3688 used = space_info->bytes_used + space_info->bytes_reserved +
3689 space_info->bytes_pinned + space_info->bytes_readonly +
3690 space_info->bytes_may_use;
3691
3692
3693
3694
3695
3696
3697
3698
3699 if (used <= space_info->total_bytes) {
3700 if (used + orig_bytes <= space_info->total_bytes) {
3701 space_info->bytes_may_use += orig_bytes;
3702 trace_btrfs_space_reservation(root->fs_info,
3703 "space_info",
3704 (u64)(unsigned long)space_info,
3705 orig_bytes, 1);
3706 ret = 0;
3707 } else {
3708
3709
3710
3711
3712
3713 num_bytes = orig_bytes;
3714 }
3715 } else {
3716
3717
3718
3719
3720
3721 wait_ordered = true;
3722 num_bytes = used - space_info->total_bytes +
3723 (orig_bytes * (retries + 1));
3724 }
3725
3726 if (ret) {
3727 u64 profile = btrfs_get_alloc_profile(root, 0);
3728 u64 avail;
3729
3730
3731
3732
3733
3734 avail = (space_info->total_bytes - space_info->bytes_used) * 8;
3735 do_div(avail, 10);
3736 if (space_info->bytes_pinned >= avail && flush && !committed) {
3737 space_info->flush = 1;
3738 flushing = true;
3739 spin_unlock(&space_info->lock);
3740 ret = may_commit_transaction(root, space_info,
3741 orig_bytes, 1);
3742 if (ret)
3743 goto out;
3744 committed = true;
3745 goto again;
3746 }
3747
3748 spin_lock(&root->fs_info->free_chunk_lock);
3749 avail = root->fs_info->free_chunk_space;
3750
3751
3752
3753
3754
3755 if (profile & (BTRFS_BLOCK_GROUP_DUP |
3756 BTRFS_BLOCK_GROUP_RAID1 |
3757 BTRFS_BLOCK_GROUP_RAID10))
3758 avail >>= 1;
3759
3760
3761
3762
3763
3764
3765 if (flush)
3766 avail >>= 3;
3767 else
3768 avail >>= 1;
3769 spin_unlock(&root->fs_info->free_chunk_lock);
3770
3771 if (used + num_bytes < space_info->total_bytes + avail) {
3772 space_info->bytes_may_use += orig_bytes;
3773 trace_btrfs_space_reservation(root->fs_info,
3774 "space_info",
3775 (u64)(unsigned long)space_info,
3776 orig_bytes, 1);
3777 ret = 0;
3778 } else {
3779 wait_ordered = true;
3780 }
3781 }
3782
3783
3784
3785
3786
3787
3788 if (ret && flush) {
3789 flushing = true;
3790 space_info->flush = 1;
3791 }
3792
3793 spin_unlock(&space_info->lock);
3794
3795 if (!ret || !flush)
3796 goto out;
3797
3798
3799
3800
3801
3802 ret = shrink_delalloc(root, num_bytes, wait_ordered);
3803 if (ret < 0)
3804 goto out;
3805
3806 ret = 0;
3807
3808
3809
3810
3811
3812
3813 if (retries < 2) {
3814 wait_ordered = true;
3815 retries++;
3816 goto again;
3817 }
3818
3819 ret = -ENOSPC;
3820 if (committed)
3821 goto out;
3822
3823 ret = may_commit_transaction(root, space_info, orig_bytes, 0);
3824 if (!ret) {
3825 committed = true;
3826 goto again;
3827 }
3828
3829out:
3830 if (flushing) {
3831 spin_lock(&space_info->lock);
3832 space_info->flush = 0;
3833 wake_up_all(&space_info->wait);
3834 spin_unlock(&space_info->lock);
3835 }
3836 return ret;
3837}
3838
3839static struct btrfs_block_rsv *get_block_rsv(struct btrfs_trans_handle *trans,
3840 struct btrfs_root *root)
3841{
3842 struct btrfs_block_rsv *block_rsv = NULL;
3843
3844 if (root->ref_cows || root == root->fs_info->csum_root)
3845 block_rsv = trans->block_rsv;
3846
3847 if (!block_rsv)
3848 block_rsv = root->block_rsv;
3849
3850 if (!block_rsv)
3851 block_rsv = &root->fs_info->empty_block_rsv;
3852
3853 return block_rsv;
3854}
3855
3856static int block_rsv_use_bytes(struct btrfs_block_rsv *block_rsv,
3857 u64 num_bytes)
3858{
3859 int ret = -ENOSPC;
3860 spin_lock(&block_rsv->lock);
3861 if (block_rsv->reserved >= num_bytes) {
3862 block_rsv->reserved -= num_bytes;
3863 if (block_rsv->reserved < block_rsv->size)
3864 block_rsv->full = 0;
3865 ret = 0;
3866 }
3867 spin_unlock(&block_rsv->lock);
3868 return ret;
3869}
3870
3871static void block_rsv_add_bytes(struct btrfs_block_rsv *block_rsv,
3872 u64 num_bytes, int update_size)
3873{
3874 spin_lock(&block_rsv->lock);
3875 block_rsv->reserved += num_bytes;
3876 if (update_size)
3877 block_rsv->size += num_bytes;
3878 else if (block_rsv->reserved >= block_rsv->size)
3879 block_rsv->full = 1;
3880 spin_unlock(&block_rsv->lock);
3881}
3882
3883static void block_rsv_release_bytes(struct btrfs_fs_info *fs_info,
3884 struct btrfs_block_rsv *block_rsv,
3885 struct btrfs_block_rsv *dest, u64 num_bytes)
3886{
3887 struct btrfs_space_info *space_info = block_rsv->space_info;
3888
3889 spin_lock(&block_rsv->lock);
3890 if (num_bytes == (u64)-1)
3891 num_bytes = block_rsv->size;
3892 block_rsv->size -= num_bytes;
3893 if (block_rsv->reserved >= block_rsv->size) {
3894 num_bytes = block_rsv->reserved - block_rsv->size;
3895 block_rsv->reserved = block_rsv->size;
3896 block_rsv->full = 1;
3897 } else {
3898 num_bytes = 0;
3899 }
3900 spin_unlock(&block_rsv->lock);
3901
3902 if (num_bytes > 0) {
3903 if (dest) {
3904 spin_lock(&dest->lock);
3905 if (!dest->full) {
3906 u64 bytes_to_add;
3907
3908 bytes_to_add = dest->size - dest->reserved;
3909 bytes_to_add = min(num_bytes, bytes_to_add);
3910 dest->reserved += bytes_to_add;
3911 if (dest->reserved >= dest->size)
3912 dest->full = 1;
3913 num_bytes -= bytes_to_add;
3914 }
3915 spin_unlock(&dest->lock);
3916 }
3917 if (num_bytes) {
3918 spin_lock(&space_info->lock);
3919 space_info->bytes_may_use -= num_bytes;
3920 trace_btrfs_space_reservation(fs_info, "space_info",
3921 (u64)(unsigned long)space_info,
3922 num_bytes, 0);
3923 space_info->reservation_progress++;
3924 spin_unlock(&space_info->lock);
3925 }
3926 }
3927}
3928
3929static int block_rsv_migrate_bytes(struct btrfs_block_rsv *src,
3930 struct btrfs_block_rsv *dst, u64 num_bytes)
3931{
3932 int ret;
3933
3934 ret = block_rsv_use_bytes(src, num_bytes);
3935 if (ret)
3936 return ret;
3937
3938 block_rsv_add_bytes(dst, num_bytes, 1);
3939 return 0;
3940}
3941
3942void btrfs_init_block_rsv(struct btrfs_block_rsv *rsv)
3943{
3944 memset(rsv, 0, sizeof(*rsv));
3945 spin_lock_init(&rsv->lock);
3946}
3947
3948struct btrfs_block_rsv *btrfs_alloc_block_rsv(struct btrfs_root *root)
3949{
3950 struct btrfs_block_rsv *block_rsv;
3951 struct btrfs_fs_info *fs_info = root->fs_info;
3952
3953 block_rsv = kmalloc(sizeof(*block_rsv), GFP_NOFS);
3954 if (!block_rsv)
3955 return NULL;
3956
3957 btrfs_init_block_rsv(block_rsv);
3958 block_rsv->space_info = __find_space_info(fs_info,
3959 BTRFS_BLOCK_GROUP_METADATA);
3960 return block_rsv;
3961}
3962
3963void btrfs_free_block_rsv(struct btrfs_root *root,
3964 struct btrfs_block_rsv *rsv)
3965{
3966 btrfs_block_rsv_release(root, rsv, (u64)-1);
3967 kfree(rsv);
3968}
3969
3970static inline int __block_rsv_add(struct btrfs_root *root,
3971 struct btrfs_block_rsv *block_rsv,
3972 u64 num_bytes, int flush)
3973{
3974 int ret;
3975
3976 if (num_bytes == 0)
3977 return 0;
3978
3979 ret = reserve_metadata_bytes(root, block_rsv, num_bytes, flush);
3980 if (!ret) {
3981 block_rsv_add_bytes(block_rsv, num_bytes, 1);
3982 return 0;
3983 }
3984
3985 return ret;
3986}
3987
3988int btrfs_block_rsv_add(struct btrfs_root *root,
3989 struct btrfs_block_rsv *block_rsv,
3990 u64 num_bytes)
3991{
3992 return __block_rsv_add(root, block_rsv, num_bytes, 1);
3993}
3994
3995int btrfs_block_rsv_add_noflush(struct btrfs_root *root,
3996 struct btrfs_block_rsv *block_rsv,
3997 u64 num_bytes)
3998{
3999 return __block_rsv_add(root, block_rsv, num_bytes, 0);
4000}
4001
4002int btrfs_block_rsv_check(struct btrfs_root *root,
4003 struct btrfs_block_rsv *block_rsv, int min_factor)
4004{
4005 u64 num_bytes = 0;
4006 int ret = -ENOSPC;
4007
4008 if (!block_rsv)
4009 return 0;
4010
4011 spin_lock(&block_rsv->lock);
4012 num_bytes = div_factor(block_rsv->size, min_factor);
4013 if (block_rsv->reserved >= num_bytes)
4014 ret = 0;
4015 spin_unlock(&block_rsv->lock);
4016
4017 return ret;
4018}
4019
4020static inline int __btrfs_block_rsv_refill(struct btrfs_root *root,
4021 struct btrfs_block_rsv *block_rsv,
4022 u64 min_reserved, int flush)
4023{
4024 u64 num_bytes = 0;
4025 int ret = -ENOSPC;
4026
4027 if (!block_rsv)
4028 return 0;
4029
4030 spin_lock(&block_rsv->lock);
4031 num_bytes = min_reserved;
4032 if (block_rsv->reserved >= num_bytes)
4033 ret = 0;
4034 else
4035 num_bytes -= block_rsv->reserved;
4036 spin_unlock(&block_rsv->lock);
4037
4038 if (!ret)
4039 return 0;
4040
4041 ret = reserve_metadata_bytes(root, block_rsv, num_bytes, flush);
4042 if (!ret) {
4043 block_rsv_add_bytes(block_rsv, num_bytes, 0);
4044 return 0;
4045 }
4046
4047 return ret;
4048}
4049
4050int btrfs_block_rsv_refill(struct btrfs_root *root,
4051 struct btrfs_block_rsv *block_rsv,
4052 u64 min_reserved)
4053{
4054 return __btrfs_block_rsv_refill(root, block_rsv, min_reserved, 1);
4055}
4056
4057int btrfs_block_rsv_refill_noflush(struct btrfs_root *root,
4058 struct btrfs_block_rsv *block_rsv,
4059 u64 min_reserved)
4060{
4061 return __btrfs_block_rsv_refill(root, block_rsv, min_reserved, 0);
4062}
4063
4064int btrfs_block_rsv_migrate(struct btrfs_block_rsv *src_rsv,
4065 struct btrfs_block_rsv *dst_rsv,
4066 u64 num_bytes)
4067{
4068 return block_rsv_migrate_bytes(src_rsv, dst_rsv, num_bytes);
4069}
4070
4071void btrfs_block_rsv_release(struct btrfs_root *root,
4072 struct btrfs_block_rsv *block_rsv,
4073 u64 num_bytes)
4074{
4075 struct btrfs_block_rsv *global_rsv = &root->fs_info->global_block_rsv;
4076 if (global_rsv->full || global_rsv == block_rsv ||
4077 block_rsv->space_info != global_rsv->space_info)
4078 global_rsv = NULL;
4079 block_rsv_release_bytes(root->fs_info, block_rsv, global_rsv,
4080 num_bytes);
4081}
4082
4083
4084
4085
4086
4087
4088static u64 calc_global_metadata_size(struct btrfs_fs_info *fs_info)
4089{
4090 struct btrfs_space_info *sinfo;
4091 u64 num_bytes;
4092 u64 meta_used;
4093 u64 data_used;
4094 int csum_size = btrfs_super_csum_size(fs_info->super_copy);
4095
4096 sinfo = __find_space_info(fs_info, BTRFS_BLOCK_GROUP_DATA);
4097 spin_lock(&sinfo->lock);
4098 data_used = sinfo->bytes_used;
4099 spin_unlock(&sinfo->lock);
4100
4101 sinfo = __find_space_info(fs_info, BTRFS_BLOCK_GROUP_METADATA);
4102 spin_lock(&sinfo->lock);
4103 if (sinfo->flags & BTRFS_BLOCK_GROUP_DATA)
4104 data_used = 0;
4105 meta_used = sinfo->bytes_used;
4106 spin_unlock(&sinfo->lock);
4107
4108 num_bytes = (data_used >> fs_info->sb->s_blocksize_bits) *
4109 csum_size * 2;
4110 num_bytes += div64_u64(data_used + meta_used, 50);
4111
4112 if (num_bytes * 3 > meta_used)
4113 num_bytes = div64_u64(meta_used, 3) * 2;
4114
4115 return ALIGN(num_bytes, fs_info->extent_root->leafsize << 10);
4116}
4117
4118static void update_global_block_rsv(struct btrfs_fs_info *fs_info)
4119{
4120 struct btrfs_block_rsv *block_rsv = &fs_info->global_block_rsv;
4121 struct btrfs_space_info *sinfo = block_rsv->space_info;
4122 u64 num_bytes;
4123
4124 num_bytes = calc_global_metadata_size(fs_info);
4125
4126 spin_lock(&block_rsv->lock);
4127 spin_lock(&sinfo->lock);
4128
4129 block_rsv->size = num_bytes;
4130
4131 num_bytes = sinfo->bytes_used + sinfo->bytes_pinned +
4132 sinfo->bytes_reserved + sinfo->bytes_readonly +
4133 sinfo->bytes_may_use;
4134
4135 if (sinfo->total_bytes > num_bytes) {
4136 num_bytes = sinfo->total_bytes - num_bytes;
4137 block_rsv->reserved += num_bytes;
4138 sinfo->bytes_may_use += num_bytes;
4139 trace_btrfs_space_reservation(fs_info, "space_info",
4140 (u64)(unsigned long)sinfo, num_bytes, 1);
4141 }
4142
4143 if (block_rsv->reserved >= block_rsv->size) {
4144 num_bytes = block_rsv->reserved - block_rsv->size;
4145 sinfo->bytes_may_use -= num_bytes;
4146 trace_btrfs_space_reservation(fs_info, "space_info",
4147 (u64)(unsigned long)sinfo, num_bytes, 0);
4148 sinfo->reservation_progress++;
4149 block_rsv->reserved = block_rsv->size;
4150 block_rsv->full = 1;
4151 }
4152
4153 spin_unlock(&sinfo->lock);
4154 spin_unlock(&block_rsv->lock);
4155}
4156
4157static void init_global_block_rsv(struct btrfs_fs_info *fs_info)
4158{
4159 struct btrfs_space_info *space_info;
4160
4161 space_info = __find_space_info(fs_info, BTRFS_BLOCK_GROUP_SYSTEM);
4162 fs_info->chunk_block_rsv.space_info = space_info;
4163
4164 space_info = __find_space_info(fs_info, BTRFS_BLOCK_GROUP_METADATA);
4165 fs_info->global_block_rsv.space_info = space_info;
4166 fs_info->delalloc_block_rsv.space_info = space_info;
4167 fs_info->trans_block_rsv.space_info = space_info;
4168 fs_info->empty_block_rsv.space_info = space_info;
4169 fs_info->delayed_block_rsv.space_info = space_info;
4170
4171 fs_info->extent_root->block_rsv = &fs_info->global_block_rsv;
4172 fs_info->csum_root->block_rsv = &fs_info->global_block_rsv;
4173 fs_info->dev_root->block_rsv = &fs_info->global_block_rsv;
4174 fs_info->tree_root->block_rsv = &fs_info->global_block_rsv;
4175 fs_info->chunk_root->block_rsv = &fs_info->chunk_block_rsv;
4176
4177 update_global_block_rsv(fs_info);
4178}
4179
4180static void release_global_block_rsv(struct btrfs_fs_info *fs_info)
4181{
4182 block_rsv_release_bytes(fs_info, &fs_info->global_block_rsv, NULL,
4183 (u64)-1);
4184 WARN_ON(fs_info->delalloc_block_rsv.size > 0);
4185 WARN_ON(fs_info->delalloc_block_rsv.reserved > 0);
4186 WARN_ON(fs_info->trans_block_rsv.size > 0);
4187 WARN_ON(fs_info->trans_block_rsv.reserved > 0);
4188 WARN_ON(fs_info->chunk_block_rsv.size > 0);
4189 WARN_ON(fs_info->chunk_block_rsv.reserved > 0);
4190 WARN_ON(fs_info->delayed_block_rsv.size > 0);
4191 WARN_ON(fs_info->delayed_block_rsv.reserved > 0);
4192}
4193
4194void btrfs_trans_release_metadata(struct btrfs_trans_handle *trans,
4195 struct btrfs_root *root)
4196{
4197 if (!trans->bytes_reserved)
4198 return;
4199
4200 trace_btrfs_space_reservation(root->fs_info, "transaction",
4201 (u64)(unsigned long)trans,
4202 trans->bytes_reserved, 0);
4203 btrfs_block_rsv_release(root, trans->block_rsv, trans->bytes_reserved);
4204 trans->bytes_reserved = 0;
4205}
4206
4207int btrfs_orphan_reserve_metadata(struct btrfs_trans_handle *trans,
4208 struct inode *inode)
4209{
4210 struct btrfs_root *root = BTRFS_I(inode)->root;
4211 struct btrfs_block_rsv *src_rsv = get_block_rsv(trans, root);
4212 struct btrfs_block_rsv *dst_rsv = root->orphan_block_rsv;
4213
4214
4215
4216
4217
4218
4219 u64 num_bytes = btrfs_calc_trans_metadata_size(root, 1);
4220 trace_btrfs_space_reservation(root->fs_info, "orphan",
4221 btrfs_ino(inode), num_bytes, 1);
4222 return block_rsv_migrate_bytes(src_rsv, dst_rsv, num_bytes);
4223}
4224
4225void btrfs_orphan_release_metadata(struct inode *inode)
4226{
4227 struct btrfs_root *root = BTRFS_I(inode)->root;
4228 u64 num_bytes = btrfs_calc_trans_metadata_size(root, 1);
4229 trace_btrfs_space_reservation(root->fs_info, "orphan",
4230 btrfs_ino(inode), num_bytes, 0);
4231 btrfs_block_rsv_release(root, root->orphan_block_rsv, num_bytes);
4232}
4233
4234int btrfs_snap_reserve_metadata(struct btrfs_trans_handle *trans,
4235 struct btrfs_pending_snapshot *pending)
4236{
4237 struct btrfs_root *root = pending->root;
4238 struct btrfs_block_rsv *src_rsv = get_block_rsv(trans, root);
4239 struct btrfs_block_rsv *dst_rsv = &pending->block_rsv;
4240
4241
4242
4243
4244 u64 num_bytes = btrfs_calc_trans_metadata_size(root, 5);
4245 dst_rsv->space_info = src_rsv->space_info;
4246 return block_rsv_migrate_bytes(src_rsv, dst_rsv, num_bytes);
4247}
4248
4249
4250
4251
4252
4253
4254
4255
4256
4257
4258static unsigned drop_outstanding_extent(struct inode *inode)
4259{
4260 unsigned drop_inode_space = 0;
4261 unsigned dropped_extents = 0;
4262
4263 BUG_ON(!BTRFS_I(inode)->outstanding_extents);
4264 BTRFS_I(inode)->outstanding_extents--;
4265
4266 if (BTRFS_I(inode)->outstanding_extents == 0 &&
4267 BTRFS_I(inode)->delalloc_meta_reserved) {
4268 drop_inode_space = 1;
4269 BTRFS_I(inode)->delalloc_meta_reserved = 0;
4270 }
4271
4272
4273
4274
4275
4276 if (BTRFS_I(inode)->outstanding_extents >=
4277 BTRFS_I(inode)->reserved_extents)
4278 return drop_inode_space;
4279
4280 dropped_extents = BTRFS_I(inode)->reserved_extents -
4281 BTRFS_I(inode)->outstanding_extents;
4282 BTRFS_I(inode)->reserved_extents -= dropped_extents;
4283 return dropped_extents + drop_inode_space;
4284}
4285
4286
4287
4288
4289
4290
4291
4292
4293
4294
4295
4296
4297
4298
4299
4300
4301
4302
4303
4304static u64 calc_csum_metadata_size(struct inode *inode, u64 num_bytes,
4305 int reserve)
4306{
4307 struct btrfs_root *root = BTRFS_I(inode)->root;
4308 u64 csum_size;
4309 int num_csums_per_leaf;
4310 int num_csums;
4311 int old_csums;
4312
4313 if (BTRFS_I(inode)->flags & BTRFS_INODE_NODATASUM &&
4314 BTRFS_I(inode)->csum_bytes == 0)
4315 return 0;
4316
4317 old_csums = (int)div64_u64(BTRFS_I(inode)->csum_bytes, root->sectorsize);
4318 if (reserve)
4319 BTRFS_I(inode)->csum_bytes += num_bytes;
4320 else
4321 BTRFS_I(inode)->csum_bytes -= num_bytes;
4322 csum_size = BTRFS_LEAF_DATA_SIZE(root) - sizeof(struct btrfs_item);
4323 num_csums_per_leaf = (int)div64_u64(csum_size,
4324 sizeof(struct btrfs_csum_item) +
4325 sizeof(struct btrfs_disk_key));
4326 num_csums = (int)div64_u64(BTRFS_I(inode)->csum_bytes, root->sectorsize);
4327 num_csums = num_csums + num_csums_per_leaf - 1;
4328 num_csums = num_csums / num_csums_per_leaf;
4329
4330 old_csums = old_csums + num_csums_per_leaf - 1;
4331 old_csums = old_csums / num_csums_per_leaf;
4332
4333
4334 if (old_csums == num_csums)
4335 return 0;
4336
4337 if (reserve)
4338 return btrfs_calc_trans_metadata_size(root,
4339 num_csums - old_csums);
4340
4341 return btrfs_calc_trans_metadata_size(root, old_csums - num_csums);
4342}
4343
4344int btrfs_delalloc_reserve_metadata(struct inode *inode, u64 num_bytes)
4345{
4346 struct btrfs_root *root = BTRFS_I(inode)->root;
4347 struct btrfs_block_rsv *block_rsv = &root->fs_info->delalloc_block_rsv;
4348 u64 to_reserve = 0;
4349 u64 csum_bytes;
4350 unsigned nr_extents = 0;
4351 int extra_reserve = 0;
4352 int flush = 1;
4353 int ret;
4354
4355
4356 if (btrfs_is_free_space_inode(root, inode))
4357 flush = 0;
4358
4359 if (flush && btrfs_transaction_in_commit(root->fs_info))
4360 schedule_timeout(1);
4361
4362 mutex_lock(&BTRFS_I(inode)->delalloc_mutex);
4363 num_bytes = ALIGN(num_bytes, root->sectorsize);
4364
4365 spin_lock(&BTRFS_I(inode)->lock);
4366 BTRFS_I(inode)->outstanding_extents++;
4367
4368 if (BTRFS_I(inode)->outstanding_extents >
4369 BTRFS_I(inode)->reserved_extents)
4370 nr_extents = BTRFS_I(inode)->outstanding_extents -
4371 BTRFS_I(inode)->reserved_extents;
4372
4373
4374
4375
4376
4377 if (!BTRFS_I(inode)->delalloc_meta_reserved) {
4378 nr_extents++;
4379 extra_reserve = 1;
4380 }
4381
4382 to_reserve = btrfs_calc_trans_metadata_size(root, nr_extents);
4383 to_reserve += calc_csum_metadata_size(inode, num_bytes, 1);
4384 csum_bytes = BTRFS_I(inode)->csum_bytes;
4385 spin_unlock(&BTRFS_I(inode)->lock);
4386
4387 ret = reserve_metadata_bytes(root, block_rsv, to_reserve, flush);
4388 if (ret) {
4389 u64 to_free = 0;
4390 unsigned dropped;
4391
4392 spin_lock(&BTRFS_I(inode)->lock);
4393 dropped = drop_outstanding_extent(inode);
4394
4395
4396
4397
4398
4399
4400
4401
4402 if (BTRFS_I(inode)->csum_bytes == csum_bytes)
4403 calc_csum_metadata_size(inode, num_bytes, 0);
4404 else
4405 to_free = calc_csum_metadata_size(inode, num_bytes, 0);
4406 spin_unlock(&BTRFS_I(inode)->lock);
4407 if (dropped)
4408 to_free += btrfs_calc_trans_metadata_size(root, dropped);
4409
4410 if (to_free) {
4411 btrfs_block_rsv_release(root, block_rsv, to_free);
4412 trace_btrfs_space_reservation(root->fs_info,
4413 "delalloc",
4414 btrfs_ino(inode),
4415 to_free, 0);
4416 }
4417 mutex_unlock(&BTRFS_I(inode)->delalloc_mutex);
4418 return ret;
4419 }
4420
4421 spin_lock(&BTRFS_I(inode)->lock);
4422 if (extra_reserve) {
4423 BTRFS_I(inode)->delalloc_meta_reserved = 1;
4424 nr_extents--;
4425 }
4426 BTRFS_I(inode)->reserved_extents += nr_extents;
4427 spin_unlock(&BTRFS_I(inode)->lock);
4428 mutex_unlock(&BTRFS_I(inode)->delalloc_mutex);
4429
4430 if (to_reserve)
4431 trace_btrfs_space_reservation(root->fs_info,"delalloc",
4432 btrfs_ino(inode), to_reserve, 1);
4433 block_rsv_add_bytes(block_rsv, to_reserve, 1);
4434
4435 return 0;
4436}
4437
4438
4439
4440
4441
4442
4443
4444
4445
4446
4447void btrfs_delalloc_release_metadata(struct inode *inode, u64 num_bytes)
4448{
4449 struct btrfs_root *root = BTRFS_I(inode)->root;
4450 u64 to_free = 0;
4451 unsigned dropped;
4452
4453 num_bytes = ALIGN(num_bytes, root->sectorsize);
4454 spin_lock(&BTRFS_I(inode)->lock);
4455 dropped = drop_outstanding_extent(inode);
4456
4457 to_free = calc_csum_metadata_size(inode, num_bytes, 0);
4458 spin_unlock(&BTRFS_I(inode)->lock);
4459 if (dropped > 0)
4460 to_free += btrfs_calc_trans_metadata_size(root, dropped);
4461
4462 trace_btrfs_space_reservation(root->fs_info, "delalloc",
4463 btrfs_ino(inode), to_free, 0);
4464 btrfs_block_rsv_release(root, &root->fs_info->delalloc_block_rsv,
4465 to_free);
4466}
4467
4468
4469
4470
4471
4472
4473
4474
4475
4476
4477
4478
4479
4480
4481
4482
4483int btrfs_delalloc_reserve_space(struct inode *inode, u64 num_bytes)
4484{
4485 int ret;
4486
4487 ret = btrfs_check_data_free_space(inode, num_bytes);
4488 if (ret)
4489 return ret;
4490
4491 ret = btrfs_delalloc_reserve_metadata(inode, num_bytes);
4492 if (ret) {
4493 btrfs_free_reserved_data_space(inode, num_bytes);
4494 return ret;
4495 }
4496
4497 return 0;
4498}
4499
4500
4501
4502
4503
4504
4505
4506
4507
4508
4509
4510
4511
4512
4513void btrfs_delalloc_release_space(struct inode *inode, u64 num_bytes)
4514{
4515 btrfs_delalloc_release_metadata(inode, num_bytes);
4516 btrfs_free_reserved_data_space(inode, num_bytes);
4517}
4518
4519static int update_block_group(struct btrfs_trans_handle *trans,
4520 struct btrfs_root *root,
4521 u64 bytenr, u64 num_bytes, int alloc)
4522{
4523 struct btrfs_block_group_cache *cache = NULL;
4524 struct btrfs_fs_info *info = root->fs_info;
4525 u64 total = num_bytes;
4526 u64 old_val;
4527 u64 byte_in_group;
4528 int factor;
4529
4530
4531 spin_lock(&info->delalloc_lock);
4532 old_val = btrfs_super_bytes_used(info->super_copy);
4533 if (alloc)
4534 old_val += num_bytes;
4535 else
4536 old_val -= num_bytes;
4537 btrfs_set_super_bytes_used(info->super_copy, old_val);
4538 spin_unlock(&info->delalloc_lock);
4539
4540 while (total) {
4541 cache = btrfs_lookup_block_group(info, bytenr);
4542 if (!cache)
4543 return -1;
4544 if (cache->flags & (BTRFS_BLOCK_GROUP_DUP |
4545 BTRFS_BLOCK_GROUP_RAID1 |
4546 BTRFS_BLOCK_GROUP_RAID10))
4547 factor = 2;
4548 else
4549 factor = 1;
4550
4551
4552
4553
4554
4555
4556 if (!alloc && cache->cached == BTRFS_CACHE_NO)
4557 cache_block_group(cache, trans, NULL, 1);
4558
4559 byte_in_group = bytenr - cache->key.objectid;
4560 WARN_ON(byte_in_group > cache->key.offset);
4561
4562 spin_lock(&cache->space_info->lock);
4563 spin_lock(&cache->lock);
4564
4565 if (btrfs_test_opt(root, SPACE_CACHE) &&
4566 cache->disk_cache_state < BTRFS_DC_CLEAR)
4567 cache->disk_cache_state = BTRFS_DC_CLEAR;
4568
4569 cache->dirty = 1;
4570 old_val = btrfs_block_group_used(&cache->item);
4571 num_bytes = min(total, cache->key.offset - byte_in_group);
4572 if (alloc) {
4573 old_val += num_bytes;
4574 btrfs_set_block_group_used(&cache->item, old_val);
4575 cache->reserved -= num_bytes;
4576 cache->space_info->bytes_reserved -= num_bytes;
4577 cache->space_info->bytes_used += num_bytes;
4578 cache->space_info->disk_used += num_bytes * factor;
4579 spin_unlock(&cache->lock);
4580 spin_unlock(&cache->space_info->lock);
4581 } else {
4582 old_val -= num_bytes;
4583 btrfs_set_block_group_used(&cache->item, old_val);
4584 cache->pinned += num_bytes;
4585 cache->space_info->bytes_pinned += num_bytes;
4586 cache->space_info->bytes_used -= num_bytes;
4587 cache->space_info->disk_used -= num_bytes * factor;
4588 spin_unlock(&cache->lock);
4589 spin_unlock(&cache->space_info->lock);
4590
4591 set_extent_dirty(info->pinned_extents,
4592 bytenr, bytenr + num_bytes - 1,
4593 GFP_NOFS | __GFP_NOFAIL);
4594 }
4595 btrfs_put_block_group(cache);
4596 total -= num_bytes;
4597 bytenr += num_bytes;
4598 }
4599 return 0;
4600}
4601
4602static u64 first_logical_byte(struct btrfs_root *root, u64 search_start)
4603{
4604 struct btrfs_block_group_cache *cache;
4605 u64 bytenr;
4606
4607 cache = btrfs_lookup_first_block_group(root->fs_info, search_start);
4608 if (!cache)
4609 return 0;
4610
4611 bytenr = cache->key.objectid;
4612 btrfs_put_block_group(cache);
4613
4614 return bytenr;
4615}
4616
4617static int pin_down_extent(struct btrfs_root *root,
4618 struct btrfs_block_group_cache *cache,
4619 u64 bytenr, u64 num_bytes, int reserved)
4620{
4621 spin_lock(&cache->space_info->lock);
4622 spin_lock(&cache->lock);
4623 cache->pinned += num_bytes;
4624 cache->space_info->bytes_pinned += num_bytes;
4625 if (reserved) {
4626 cache->reserved -= num_bytes;
4627 cache->space_info->bytes_reserved -= num_bytes;
4628 }
4629 spin_unlock(&cache->lock);
4630 spin_unlock(&cache->space_info->lock);
4631
4632 set_extent_dirty(root->fs_info->pinned_extents, bytenr,
4633 bytenr + num_bytes - 1, GFP_NOFS | __GFP_NOFAIL);
4634 return 0;
4635}
4636
4637
4638
4639
4640int btrfs_pin_extent(struct btrfs_root *root,
4641 u64 bytenr, u64 num_bytes, int reserved)
4642{
4643 struct btrfs_block_group_cache *cache;
4644
4645 cache = btrfs_lookup_block_group(root->fs_info, bytenr);
4646 BUG_ON(!cache);
4647
4648 pin_down_extent(root, cache, bytenr, num_bytes, reserved);
4649
4650 btrfs_put_block_group(cache);
4651 return 0;
4652}
4653
4654
4655
4656
4657int btrfs_pin_extent_for_log_replay(struct btrfs_trans_handle *trans,
4658 struct btrfs_root *root,
4659 u64 bytenr, u64 num_bytes)
4660{
4661 struct btrfs_block_group_cache *cache;
4662
4663 cache = btrfs_lookup_block_group(root->fs_info, bytenr);
4664 BUG_ON(!cache);
4665
4666
4667
4668
4669
4670
4671
4672 cache_block_group(cache, trans, root, 1);
4673
4674 pin_down_extent(root, cache, bytenr, num_bytes, 0);
4675
4676
4677 btrfs_remove_free_space(cache, bytenr, num_bytes);
4678 btrfs_put_block_group(cache);
4679 return 0;
4680}
4681
4682
4683
4684
4685
4686
4687
4688
4689
4690
4691
4692
4693
4694
4695
4696
4697
4698
4699
4700
4701
4702
4703
4704static int btrfs_update_reserved_bytes(struct btrfs_block_group_cache *cache,
4705 u64 num_bytes, int reserve)
4706{
4707 struct btrfs_space_info *space_info = cache->space_info;
4708 int ret = 0;
4709 spin_lock(&space_info->lock);
4710 spin_lock(&cache->lock);
4711 if (reserve != RESERVE_FREE) {
4712 if (cache->ro) {
4713 ret = -EAGAIN;
4714 } else {
4715 cache->reserved += num_bytes;
4716 space_info->bytes_reserved += num_bytes;
4717 if (reserve == RESERVE_ALLOC) {
4718 trace_btrfs_space_reservation(cache->fs_info,
4719 "space_info",
4720 (u64)(unsigned long)space_info,
4721 num_bytes, 0);
4722 space_info->bytes_may_use -= num_bytes;
4723 }
4724 }
4725 } else {
4726 if (cache->ro)
4727 space_info->bytes_readonly += num_bytes;
4728 cache->reserved -= num_bytes;
4729 space_info->bytes_reserved -= num_bytes;
4730 space_info->reservation_progress++;
4731 }
4732 spin_unlock(&cache->lock);
4733 spin_unlock(&space_info->lock);
4734 return ret;
4735}
4736
4737int btrfs_prepare_extent_commit(struct btrfs_trans_handle *trans,
4738 struct btrfs_root *root)
4739{
4740 struct btrfs_fs_info *fs_info = root->fs_info;
4741 struct btrfs_caching_control *next;
4742 struct btrfs_caching_control *caching_ctl;
4743 struct btrfs_block_group_cache *cache;
4744
4745 down_write(&fs_info->extent_commit_sem);
4746
4747 list_for_each_entry_safe(caching_ctl, next,
4748 &fs_info->caching_block_groups, list) {
4749 cache = caching_ctl->block_group;
4750 if (block_group_cache_done(cache)) {
4751 cache->last_byte_to_unpin = (u64)-1;
4752 list_del_init(&caching_ctl->list);
4753 put_caching_control(caching_ctl);
4754 } else {
4755 cache->last_byte_to_unpin = caching_ctl->progress;
4756 }
4757 }
4758
4759 if (fs_info->pinned_extents == &fs_info->freed_extents[0])
4760 fs_info->pinned_extents = &fs_info->freed_extents[1];
4761 else
4762 fs_info->pinned_extents = &fs_info->freed_extents[0];
4763
4764 up_write(&fs_info->extent_commit_sem);
4765
4766 update_global_block_rsv(fs_info);
4767 return 0;
4768}
4769
4770static int unpin_extent_range(struct btrfs_root *root, u64 start, u64 end)
4771{
4772 struct btrfs_fs_info *fs_info = root->fs_info;
4773 struct btrfs_block_group_cache *cache = NULL;
4774 u64 len;
4775
4776 while (start <= end) {
4777 if (!cache ||
4778 start >= cache->key.objectid + cache->key.offset) {
4779 if (cache)
4780 btrfs_put_block_group(cache);
4781 cache = btrfs_lookup_block_group(fs_info, start);
4782 BUG_ON(!cache);
4783 }
4784
4785 len = cache->key.objectid + cache->key.offset - start;
4786 len = min(len, end + 1 - start);
4787
4788 if (start < cache->last_byte_to_unpin) {
4789 len = min(len, cache->last_byte_to_unpin - start);
4790 btrfs_add_free_space(cache, start, len);
4791 }
4792
4793 start += len;
4794
4795 spin_lock(&cache->space_info->lock);
4796 spin_lock(&cache->lock);
4797 cache->pinned -= len;
4798 cache->space_info->bytes_pinned -= len;
4799 if (cache->ro)
4800 cache->space_info->bytes_readonly += len;
4801 spin_unlock(&cache->lock);
4802 spin_unlock(&cache->space_info->lock);
4803 }
4804
4805 if (cache)
4806 btrfs_put_block_group(cache);
4807 return 0;
4808}
4809
4810int btrfs_finish_extent_commit(struct btrfs_trans_handle *trans,
4811 struct btrfs_root *root)
4812{
4813 struct btrfs_fs_info *fs_info = root->fs_info;
4814 struct extent_io_tree *unpin;
4815 u64 start;
4816 u64 end;
4817 int ret;
4818
4819 if (fs_info->pinned_extents == &fs_info->freed_extents[0])
4820 unpin = &fs_info->freed_extents[1];
4821 else
4822 unpin = &fs_info->freed_extents[0];
4823
4824 while (1) {
4825 ret = find_first_extent_bit(unpin, 0, &start, &end,
4826 EXTENT_DIRTY);
4827 if (ret)
4828 break;
4829
4830 if (btrfs_test_opt(root, DISCARD))
4831 ret = btrfs_discard_extent(root, start,
4832 end + 1 - start, NULL);
4833
4834 clear_extent_dirty(unpin, start, end, GFP_NOFS);
4835 unpin_extent_range(root, start, end);
4836 cond_resched();
4837 }
4838
4839 return 0;
4840}
4841
4842static int __btrfs_free_extent(struct btrfs_trans_handle *trans,
4843 struct btrfs_root *root,
4844 u64 bytenr, u64 num_bytes, u64 parent,
4845 u64 root_objectid, u64 owner_objectid,
4846 u64 owner_offset, int refs_to_drop,
4847 struct btrfs_delayed_extent_op *extent_op)
4848{
4849 struct btrfs_key key;
4850 struct btrfs_path *path;
4851 struct btrfs_fs_info *info = root->fs_info;
4852 struct btrfs_root *extent_root = info->extent_root;
4853 struct extent_buffer *leaf;
4854 struct btrfs_extent_item *ei;
4855 struct btrfs_extent_inline_ref *iref;
4856 int ret;
4857 int is_data;
4858 int extent_slot = 0;
4859 int found_extent = 0;
4860 int num_to_del = 1;
4861 u32 item_size;
4862 u64 refs;
4863
4864 path = btrfs_alloc_path();
4865 if (!path)
4866 return -ENOMEM;
4867
4868 path->reada = 1;
4869 path->leave_spinning = 1;
4870
4871 is_data = owner_objectid >= BTRFS_FIRST_FREE_OBJECTID;
4872 BUG_ON(!is_data && refs_to_drop != 1);
4873
4874 ret = lookup_extent_backref(trans, extent_root, path, &iref,
4875 bytenr, num_bytes, parent,
4876 root_objectid, owner_objectid,
4877 owner_offset);
4878 if (ret == 0) {
4879 extent_slot = path->slots[0];
4880 while (extent_slot >= 0) {
4881 btrfs_item_key_to_cpu(path->nodes[0], &key,
4882 extent_slot);
4883 if (key.objectid != bytenr)
4884 break;
4885 if (key.type == BTRFS_EXTENT_ITEM_KEY &&
4886 key.offset == num_bytes) {
4887 found_extent = 1;
4888 break;
4889 }
4890 if (path->slots[0] - extent_slot > 5)
4891 break;
4892 extent_slot--;
4893 }
4894#ifdef BTRFS_COMPAT_EXTENT_TREE_V0
4895 item_size = btrfs_item_size_nr(path->nodes[0], extent_slot);
4896 if (found_extent && item_size < sizeof(*ei))
4897 found_extent = 0;
4898#endif
4899 if (!found_extent) {
4900 BUG_ON(iref);
4901 ret = remove_extent_backref(trans, extent_root, path,
4902 NULL, refs_to_drop,
4903 is_data);
4904 BUG_ON(ret);
4905 btrfs_release_path(path);
4906 path->leave_spinning = 1;
4907
4908 key.objectid = bytenr;
4909 key.type = BTRFS_EXTENT_ITEM_KEY;
4910 key.offset = num_bytes;
4911
4912 ret = btrfs_search_slot(trans, extent_root,
4913 &key, path, -1, 1);
4914 if (ret) {
4915 printk(KERN_ERR "umm, got %d back from search"
4916 ", was looking for %llu\n", ret,
4917 (unsigned long long)bytenr);
4918 if (ret > 0)
4919 btrfs_print_leaf(extent_root,
4920 path->nodes[0]);
4921 }
4922 BUG_ON(ret);
4923 extent_slot = path->slots[0];
4924 }
4925 } else {
4926 btrfs_print_leaf(extent_root, path->nodes[0]);
4927 WARN_ON(1);
4928 printk(KERN_ERR "btrfs unable to find ref byte nr %llu "
4929 "parent %llu root %llu owner %llu offset %llu\n",
4930 (unsigned long long)bytenr,
4931 (unsigned long long)parent,
4932 (unsigned long long)root_objectid,
4933 (unsigned long long)owner_objectid,
4934 (unsigned long long)owner_offset);
4935 }
4936
4937 leaf = path->nodes[0];
4938 item_size = btrfs_item_size_nr(leaf, extent_slot);
4939#ifdef BTRFS_COMPAT_EXTENT_TREE_V0
4940 if (item_size < sizeof(*ei)) {
4941 BUG_ON(found_extent || extent_slot != path->slots[0]);
4942 ret = convert_extent_item_v0(trans, extent_root, path,
4943 owner_objectid, 0);
4944 BUG_ON(ret < 0);
4945
4946 btrfs_release_path(path);
4947 path->leave_spinning = 1;
4948
4949 key.objectid = bytenr;
4950 key.type = BTRFS_EXTENT_ITEM_KEY;
4951 key.offset = num_bytes;
4952
4953 ret = btrfs_search_slot(trans, extent_root, &key, path,
4954 -1, 1);
4955 if (ret) {
4956 printk(KERN_ERR "umm, got %d back from search"
4957 ", was looking for %llu\n", ret,
4958 (unsigned long long)bytenr);
4959 btrfs_print_leaf(extent_root, path->nodes[0]);
4960 }
4961 BUG_ON(ret);
4962 extent_slot = path->slots[0];
4963 leaf = path->nodes[0];
4964 item_size = btrfs_item_size_nr(leaf, extent_slot);
4965 }
4966#endif
4967 BUG_ON(item_size < sizeof(*ei));
4968 ei = btrfs_item_ptr(leaf, extent_slot,
4969 struct btrfs_extent_item);
4970 if (owner_objectid < BTRFS_FIRST_FREE_OBJECTID) {
4971 struct btrfs_tree_block_info *bi;
4972 BUG_ON(item_size < sizeof(*ei) + sizeof(*bi));
4973 bi = (struct btrfs_tree_block_info *)(ei + 1);
4974 WARN_ON(owner_objectid != btrfs_tree_block_level(leaf, bi));
4975 }
4976
4977 refs = btrfs_extent_refs(leaf, ei);
4978 BUG_ON(refs < refs_to_drop);
4979 refs -= refs_to_drop;
4980
4981 if (refs > 0) {
4982 if (extent_op)
4983 __run_delayed_extent_op(extent_op, leaf, ei);
4984
4985
4986
4987
4988 if (iref) {
4989 BUG_ON(!found_extent);
4990 } else {
4991 btrfs_set_extent_refs(leaf, ei, refs);
4992 btrfs_mark_buffer_dirty(leaf);
4993 }
4994 if (found_extent) {
4995 ret = remove_extent_backref(trans, extent_root, path,
4996 iref, refs_to_drop,
4997 is_data);
4998 BUG_ON(ret);
4999 }
5000 } else {
5001 if (found_extent) {
5002 BUG_ON(is_data && refs_to_drop !=
5003 extent_data_ref_count(root, path, iref));
5004 if (iref) {
5005 BUG_ON(path->slots[0] != extent_slot);
5006 } else {
5007 BUG_ON(path->slots[0] != extent_slot + 1);
5008 path->slots[0] = extent_slot;
5009 num_to_del = 2;
5010 }
5011 }
5012
5013 ret = btrfs_del_items(trans, extent_root, path, path->slots[0],
5014 num_to_del);
5015 BUG_ON(ret);
5016 btrfs_release_path(path);
5017
5018 if (is_data) {
5019 ret = btrfs_del_csums(trans, root, bytenr, num_bytes);
5020 BUG_ON(ret);
5021 } else {
5022 invalidate_mapping_pages(info->btree_inode->i_mapping,
5023 bytenr >> PAGE_CACHE_SHIFT,
5024 (bytenr + num_bytes - 1) >> PAGE_CACHE_SHIFT);
5025 }
5026
5027 ret = update_block_group(trans, root, bytenr, num_bytes, 0);
5028 BUG_ON(ret);
5029 }
5030 btrfs_free_path(path);
5031 return ret;
5032}
5033
5034
5035
5036
5037
5038
5039
5040static noinline int check_ref_cleanup(struct btrfs_trans_handle *trans,
5041 struct btrfs_root *root, u64 bytenr)
5042{
5043 struct btrfs_delayed_ref_head *head;
5044 struct btrfs_delayed_ref_root *delayed_refs;
5045 struct btrfs_delayed_ref_node *ref;
5046 struct rb_node *node;
5047 int ret = 0;
5048
5049 delayed_refs = &trans->transaction->delayed_refs;
5050 spin_lock(&delayed_refs->lock);
5051 head = btrfs_find_delayed_ref_head(trans, bytenr);
5052 if (!head)
5053 goto out;
5054
5055 node = rb_prev(&head->node.rb_node);
5056 if (!node)
5057 goto out;
5058
5059 ref = rb_entry(node, struct btrfs_delayed_ref_node, rb_node);
5060
5061
5062 if (ref->bytenr == bytenr)
5063 goto out;
5064
5065 if (head->extent_op) {
5066 if (!head->must_insert_reserved)
5067 goto out;
5068 kfree(head->extent_op);
5069 head->extent_op = NULL;
5070 }
5071
5072
5073
5074
5075
5076 if (!mutex_trylock(&head->mutex))
5077 goto out;
5078
5079
5080
5081
5082
5083 head->node.in_tree = 0;
5084 rb_erase(&head->node.rb_node, &delayed_refs->root);
5085
5086 delayed_refs->num_entries--;
5087 if (waitqueue_active(&delayed_refs->seq_wait))
5088 wake_up(&delayed_refs->seq_wait);
5089
5090
5091
5092
5093
5094 delayed_refs->num_heads--;
5095 if (list_empty(&head->cluster))
5096 delayed_refs->num_heads_ready--;
5097
5098 list_del_init(&head->cluster);
5099 spin_unlock(&delayed_refs->lock);
5100
5101 BUG_ON(head->extent_op);
5102 if (head->must_insert_reserved)
5103 ret = 1;
5104
5105 mutex_unlock(&head->mutex);
5106 btrfs_put_delayed_ref(&head->node);
5107 return ret;
5108out:
5109 spin_unlock(&delayed_refs->lock);
5110 return 0;
5111}
5112
5113void btrfs_free_tree_block(struct btrfs_trans_handle *trans,
5114 struct btrfs_root *root,
5115 struct extent_buffer *buf,
5116 u64 parent, int last_ref, int for_cow)
5117{
5118 struct btrfs_block_group_cache *cache = NULL;
5119 int ret;
5120
5121 if (root->root_key.objectid != BTRFS_TREE_LOG_OBJECTID) {
5122 ret = btrfs_add_delayed_tree_ref(root->fs_info, trans,
5123 buf->start, buf->len,
5124 parent, root->root_key.objectid,
5125