Merge tag 'selinux-pr-20181115' of git://git.kernel.org/pub/scm/linux/kernel/git...
[sfrench/cifs-2.6.git] / fs / btrfs / relocation.c
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Copyright (C) 2009 Oracle.  All rights reserved.
4  */
5
6 #include <linux/sched.h>
7 #include <linux/pagemap.h>
8 #include <linux/writeback.h>
9 #include <linux/blkdev.h>
10 #include <linux/rbtree.h>
11 #include <linux/slab.h>
12 #include "ctree.h"
13 #include "disk-io.h"
14 #include "transaction.h"
15 #include "volumes.h"
16 #include "locking.h"
17 #include "btrfs_inode.h"
18 #include "async-thread.h"
19 #include "free-space-cache.h"
20 #include "inode-map.h"
21 #include "qgroup.h"
22 #include "print-tree.h"
23
24 /*
25  * backref_node, mapping_node and tree_block start with this
26  */
27 struct tree_entry {
28         struct rb_node rb_node;
29         u64 bytenr;
30 };
31
32 /*
33  * present a tree block in the backref cache
34  */
35 struct backref_node {
36         struct rb_node rb_node;
37         u64 bytenr;
38
39         u64 new_bytenr;
40         /* objectid of tree block owner, can be not uptodate */
41         u64 owner;
42         /* link to pending, changed or detached list */
43         struct list_head list;
44         /* list of upper level blocks reference this block */
45         struct list_head upper;
46         /* list of child blocks in the cache */
47         struct list_head lower;
48         /* NULL if this node is not tree root */
49         struct btrfs_root *root;
50         /* extent buffer got by COW the block */
51         struct extent_buffer *eb;
52         /* level of tree block */
53         unsigned int level:8;
54         /* is the block in non-reference counted tree */
55         unsigned int cowonly:1;
56         /* 1 if no child node in the cache */
57         unsigned int lowest:1;
58         /* is the extent buffer locked */
59         unsigned int locked:1;
60         /* has the block been processed */
61         unsigned int processed:1;
62         /* have backrefs of this block been checked */
63         unsigned int checked:1;
64         /*
65          * 1 if corresponding block has been cowed but some upper
66          * level block pointers may not point to the new location
67          */
68         unsigned int pending:1;
69         /*
70          * 1 if the backref node isn't connected to any other
71          * backref node.
72          */
73         unsigned int detached:1;
74 };
75
76 /*
77  * present a block pointer in the backref cache
78  */
79 struct backref_edge {
80         struct list_head list[2];
81         struct backref_node *node[2];
82 };
83
84 #define LOWER   0
85 #define UPPER   1
86 #define RELOCATION_RESERVED_NODES       256
87
88 struct backref_cache {
89         /* red black tree of all backref nodes in the cache */
90         struct rb_root rb_root;
91         /* for passing backref nodes to btrfs_reloc_cow_block */
92         struct backref_node *path[BTRFS_MAX_LEVEL];
93         /*
94          * list of blocks that have been cowed but some block
95          * pointers in upper level blocks may not reflect the
96          * new location
97          */
98         struct list_head pending[BTRFS_MAX_LEVEL];
99         /* list of backref nodes with no child node */
100         struct list_head leaves;
101         /* list of blocks that have been cowed in current transaction */
102         struct list_head changed;
103         /* list of detached backref node. */
104         struct list_head detached;
105
106         u64 last_trans;
107
108         int nr_nodes;
109         int nr_edges;
110 };
111
112 /*
113  * map address of tree root to tree
114  */
115 struct mapping_node {
116         struct rb_node rb_node;
117         u64 bytenr;
118         void *data;
119 };
120
121 struct mapping_tree {
122         struct rb_root rb_root;
123         spinlock_t lock;
124 };
125
126 /*
127  * present a tree block to process
128  */
129 struct tree_block {
130         struct rb_node rb_node;
131         u64 bytenr;
132         struct btrfs_key key;
133         unsigned int level:8;
134         unsigned int key_ready:1;
135 };
136
137 #define MAX_EXTENTS 128
138
139 struct file_extent_cluster {
140         u64 start;
141         u64 end;
142         u64 boundary[MAX_EXTENTS];
143         unsigned int nr;
144 };
145
146 struct reloc_control {
147         /* block group to relocate */
148         struct btrfs_block_group_cache *block_group;
149         /* extent tree */
150         struct btrfs_root *extent_root;
151         /* inode for moving data */
152         struct inode *data_inode;
153
154         struct btrfs_block_rsv *block_rsv;
155
156         struct backref_cache backref_cache;
157
158         struct file_extent_cluster cluster;
159         /* tree blocks have been processed */
160         struct extent_io_tree processed_blocks;
161         /* map start of tree root to corresponding reloc tree */
162         struct mapping_tree reloc_root_tree;
163         /* list of reloc trees */
164         struct list_head reloc_roots;
165         /* size of metadata reservation for merging reloc trees */
166         u64 merging_rsv_size;
167         /* size of relocated tree nodes */
168         u64 nodes_relocated;
169         /* reserved size for block group relocation*/
170         u64 reserved_bytes;
171
172         u64 search_start;
173         u64 extents_found;
174
175         unsigned int stage:8;
176         unsigned int create_reloc_tree:1;
177         unsigned int merge_reloc_tree:1;
178         unsigned int found_file_extent:1;
179 };
180
181 /* stages of data relocation */
182 #define MOVE_DATA_EXTENTS       0
183 #define UPDATE_DATA_PTRS        1
184
185 static void remove_backref_node(struct backref_cache *cache,
186                                 struct backref_node *node);
187 static void __mark_block_processed(struct reloc_control *rc,
188                                    struct backref_node *node);
189
190 static void mapping_tree_init(struct mapping_tree *tree)
191 {
192         tree->rb_root = RB_ROOT;
193         spin_lock_init(&tree->lock);
194 }
195
196 static void backref_cache_init(struct backref_cache *cache)
197 {
198         int i;
199         cache->rb_root = RB_ROOT;
200         for (i = 0; i < BTRFS_MAX_LEVEL; i++)
201                 INIT_LIST_HEAD(&cache->pending[i]);
202         INIT_LIST_HEAD(&cache->changed);
203         INIT_LIST_HEAD(&cache->detached);
204         INIT_LIST_HEAD(&cache->leaves);
205 }
206
207 static void backref_cache_cleanup(struct backref_cache *cache)
208 {
209         struct backref_node *node;
210         int i;
211
212         while (!list_empty(&cache->detached)) {
213                 node = list_entry(cache->detached.next,
214                                   struct backref_node, list);
215                 remove_backref_node(cache, node);
216         }
217
218         while (!list_empty(&cache->leaves)) {
219                 node = list_entry(cache->leaves.next,
220                                   struct backref_node, lower);
221                 remove_backref_node(cache, node);
222         }
223
224         cache->last_trans = 0;
225
226         for (i = 0; i < BTRFS_MAX_LEVEL; i++)
227                 ASSERT(list_empty(&cache->pending[i]));
228         ASSERT(list_empty(&cache->changed));
229         ASSERT(list_empty(&cache->detached));
230         ASSERT(RB_EMPTY_ROOT(&cache->rb_root));
231         ASSERT(!cache->nr_nodes);
232         ASSERT(!cache->nr_edges);
233 }
234
235 static struct backref_node *alloc_backref_node(struct backref_cache *cache)
236 {
237         struct backref_node *node;
238
239         node = kzalloc(sizeof(*node), GFP_NOFS);
240         if (node) {
241                 INIT_LIST_HEAD(&node->list);
242                 INIT_LIST_HEAD(&node->upper);
243                 INIT_LIST_HEAD(&node->lower);
244                 RB_CLEAR_NODE(&node->rb_node);
245                 cache->nr_nodes++;
246         }
247         return node;
248 }
249
250 static void free_backref_node(struct backref_cache *cache,
251                               struct backref_node *node)
252 {
253         if (node) {
254                 cache->nr_nodes--;
255                 kfree(node);
256         }
257 }
258
259 static struct backref_edge *alloc_backref_edge(struct backref_cache *cache)
260 {
261         struct backref_edge *edge;
262
263         edge = kzalloc(sizeof(*edge), GFP_NOFS);
264         if (edge)
265                 cache->nr_edges++;
266         return edge;
267 }
268
269 static void free_backref_edge(struct backref_cache *cache,
270                               struct backref_edge *edge)
271 {
272         if (edge) {
273                 cache->nr_edges--;
274                 kfree(edge);
275         }
276 }
277
278 static struct rb_node *tree_insert(struct rb_root *root, u64 bytenr,
279                                    struct rb_node *node)
280 {
281         struct rb_node **p = &root->rb_node;
282         struct rb_node *parent = NULL;
283         struct tree_entry *entry;
284
285         while (*p) {
286                 parent = *p;
287                 entry = rb_entry(parent, struct tree_entry, rb_node);
288
289                 if (bytenr < entry->bytenr)
290                         p = &(*p)->rb_left;
291                 else if (bytenr > entry->bytenr)
292                         p = &(*p)->rb_right;
293                 else
294                         return parent;
295         }
296
297         rb_link_node(node, parent, p);
298         rb_insert_color(node, root);
299         return NULL;
300 }
301
302 static struct rb_node *tree_search(struct rb_root *root, u64 bytenr)
303 {
304         struct rb_node *n = root->rb_node;
305         struct tree_entry *entry;
306
307         while (n) {
308                 entry = rb_entry(n, struct tree_entry, rb_node);
309
310                 if (bytenr < entry->bytenr)
311                         n = n->rb_left;
312                 else if (bytenr > entry->bytenr)
313                         n = n->rb_right;
314                 else
315                         return n;
316         }
317         return NULL;
318 }
319
320 static void backref_tree_panic(struct rb_node *rb_node, int errno, u64 bytenr)
321 {
322
323         struct btrfs_fs_info *fs_info = NULL;
324         struct backref_node *bnode = rb_entry(rb_node, struct backref_node,
325                                               rb_node);
326         if (bnode->root)
327                 fs_info = bnode->root->fs_info;
328         btrfs_panic(fs_info, errno,
329                     "Inconsistency in backref cache found at offset %llu",
330                     bytenr);
331 }
332
333 /*
334  * walk up backref nodes until reach node presents tree root
335  */
336 static struct backref_node *walk_up_backref(struct backref_node *node,
337                                             struct backref_edge *edges[],
338                                             int *index)
339 {
340         struct backref_edge *edge;
341         int idx = *index;
342
343         while (!list_empty(&node->upper)) {
344                 edge = list_entry(node->upper.next,
345                                   struct backref_edge, list[LOWER]);
346                 edges[idx++] = edge;
347                 node = edge->node[UPPER];
348         }
349         BUG_ON(node->detached);
350         *index = idx;
351         return node;
352 }
353
354 /*
355  * walk down backref nodes to find start of next reference path
356  */
357 static struct backref_node *walk_down_backref(struct backref_edge *edges[],
358                                               int *index)
359 {
360         struct backref_edge *edge;
361         struct backref_node *lower;
362         int idx = *index;
363
364         while (idx > 0) {
365                 edge = edges[idx - 1];
366                 lower = edge->node[LOWER];
367                 if (list_is_last(&edge->list[LOWER], &lower->upper)) {
368                         idx--;
369                         continue;
370                 }
371                 edge = list_entry(edge->list[LOWER].next,
372                                   struct backref_edge, list[LOWER]);
373                 edges[idx - 1] = edge;
374                 *index = idx;
375                 return edge->node[UPPER];
376         }
377         *index = 0;
378         return NULL;
379 }
380
381 static void unlock_node_buffer(struct backref_node *node)
382 {
383         if (node->locked) {
384                 btrfs_tree_unlock(node->eb);
385                 node->locked = 0;
386         }
387 }
388
389 static void drop_node_buffer(struct backref_node *node)
390 {
391         if (node->eb) {
392                 unlock_node_buffer(node);
393                 free_extent_buffer(node->eb);
394                 node->eb = NULL;
395         }
396 }
397
398 static void drop_backref_node(struct backref_cache *tree,
399                               struct backref_node *node)
400 {
401         BUG_ON(!list_empty(&node->upper));
402
403         drop_node_buffer(node);
404         list_del(&node->list);
405         list_del(&node->lower);
406         if (!RB_EMPTY_NODE(&node->rb_node))
407                 rb_erase(&node->rb_node, &tree->rb_root);
408         free_backref_node(tree, node);
409 }
410
411 /*
412  * remove a backref node from the backref cache
413  */
414 static void remove_backref_node(struct backref_cache *cache,
415                                 struct backref_node *node)
416 {
417         struct backref_node *upper;
418         struct backref_edge *edge;
419
420         if (!node)
421                 return;
422
423         BUG_ON(!node->lowest && !node->detached);
424         while (!list_empty(&node->upper)) {
425                 edge = list_entry(node->upper.next, struct backref_edge,
426                                   list[LOWER]);
427                 upper = edge->node[UPPER];
428                 list_del(&edge->list[LOWER]);
429                 list_del(&edge->list[UPPER]);
430                 free_backref_edge(cache, edge);
431
432                 if (RB_EMPTY_NODE(&upper->rb_node)) {
433                         BUG_ON(!list_empty(&node->upper));
434                         drop_backref_node(cache, node);
435                         node = upper;
436                         node->lowest = 1;
437                         continue;
438                 }
439                 /*
440                  * add the node to leaf node list if no other
441                  * child block cached.
442                  */
443                 if (list_empty(&upper->lower)) {
444                         list_add_tail(&upper->lower, &cache->leaves);
445                         upper->lowest = 1;
446                 }
447         }
448
449         drop_backref_node(cache, node);
450 }
451
452 static void update_backref_node(struct backref_cache *cache,
453                                 struct backref_node *node, u64 bytenr)
454 {
455         struct rb_node *rb_node;
456         rb_erase(&node->rb_node, &cache->rb_root);
457         node->bytenr = bytenr;
458         rb_node = tree_insert(&cache->rb_root, node->bytenr, &node->rb_node);
459         if (rb_node)
460                 backref_tree_panic(rb_node, -EEXIST, bytenr);
461 }
462
463 /*
464  * update backref cache after a transaction commit
465  */
466 static int update_backref_cache(struct btrfs_trans_handle *trans,
467                                 struct backref_cache *cache)
468 {
469         struct backref_node *node;
470         int level = 0;
471
472         if (cache->last_trans == 0) {
473                 cache->last_trans = trans->transid;
474                 return 0;
475         }
476
477         if (cache->last_trans == trans->transid)
478                 return 0;
479
480         /*
481          * detached nodes are used to avoid unnecessary backref
482          * lookup. transaction commit changes the extent tree.
483          * so the detached nodes are no longer useful.
484          */
485         while (!list_empty(&cache->detached)) {
486                 node = list_entry(cache->detached.next,
487                                   struct backref_node, list);
488                 remove_backref_node(cache, node);
489         }
490
491         while (!list_empty(&cache->changed)) {
492                 node = list_entry(cache->changed.next,
493                                   struct backref_node, list);
494                 list_del_init(&node->list);
495                 BUG_ON(node->pending);
496                 update_backref_node(cache, node, node->new_bytenr);
497         }
498
499         /*
500          * some nodes can be left in the pending list if there were
501          * errors during processing the pending nodes.
502          */
503         for (level = 0; level < BTRFS_MAX_LEVEL; level++) {
504                 list_for_each_entry(node, &cache->pending[level], list) {
505                         BUG_ON(!node->pending);
506                         if (node->bytenr == node->new_bytenr)
507                                 continue;
508                         update_backref_node(cache, node, node->new_bytenr);
509                 }
510         }
511
512         cache->last_trans = 0;
513         return 1;
514 }
515
516
517 static int should_ignore_root(struct btrfs_root *root)
518 {
519         struct btrfs_root *reloc_root;
520
521         if (!test_bit(BTRFS_ROOT_REF_COWS, &root->state))
522                 return 0;
523
524         reloc_root = root->reloc_root;
525         if (!reloc_root)
526                 return 0;
527
528         if (btrfs_root_last_snapshot(&reloc_root->root_item) ==
529             root->fs_info->running_transaction->transid - 1)
530                 return 0;
531         /*
532          * if there is reloc tree and it was created in previous
533          * transaction backref lookup can find the reloc tree,
534          * so backref node for the fs tree root is useless for
535          * relocation.
536          */
537         return 1;
538 }
539 /*
540  * find reloc tree by address of tree root
541  */
542 static struct btrfs_root *find_reloc_root(struct reloc_control *rc,
543                                           u64 bytenr)
544 {
545         struct rb_node *rb_node;
546         struct mapping_node *node;
547         struct btrfs_root *root = NULL;
548
549         spin_lock(&rc->reloc_root_tree.lock);
550         rb_node = tree_search(&rc->reloc_root_tree.rb_root, bytenr);
551         if (rb_node) {
552                 node = rb_entry(rb_node, struct mapping_node, rb_node);
553                 root = (struct btrfs_root *)node->data;
554         }
555         spin_unlock(&rc->reloc_root_tree.lock);
556         return root;
557 }
558
559 static int is_cowonly_root(u64 root_objectid)
560 {
561         if (root_objectid == BTRFS_ROOT_TREE_OBJECTID ||
562             root_objectid == BTRFS_EXTENT_TREE_OBJECTID ||
563             root_objectid == BTRFS_CHUNK_TREE_OBJECTID ||
564             root_objectid == BTRFS_DEV_TREE_OBJECTID ||
565             root_objectid == BTRFS_TREE_LOG_OBJECTID ||
566             root_objectid == BTRFS_CSUM_TREE_OBJECTID ||
567             root_objectid == BTRFS_UUID_TREE_OBJECTID ||
568             root_objectid == BTRFS_QUOTA_TREE_OBJECTID ||
569             root_objectid == BTRFS_FREE_SPACE_TREE_OBJECTID)
570                 return 1;
571         return 0;
572 }
573
574 static struct btrfs_root *read_fs_root(struct btrfs_fs_info *fs_info,
575                                         u64 root_objectid)
576 {
577         struct btrfs_key key;
578
579         key.objectid = root_objectid;
580         key.type = BTRFS_ROOT_ITEM_KEY;
581         if (is_cowonly_root(root_objectid))
582                 key.offset = 0;
583         else
584                 key.offset = (u64)-1;
585
586         return btrfs_get_fs_root(fs_info, &key, false);
587 }
588
589 static noinline_for_stack
590 int find_inline_backref(struct extent_buffer *leaf, int slot,
591                         unsigned long *ptr, unsigned long *end)
592 {
593         struct btrfs_key key;
594         struct btrfs_extent_item *ei;
595         struct btrfs_tree_block_info *bi;
596         u32 item_size;
597
598         btrfs_item_key_to_cpu(leaf, &key, slot);
599
600         item_size = btrfs_item_size_nr(leaf, slot);
601         if (item_size < sizeof(*ei)) {
602                 btrfs_print_v0_err(leaf->fs_info);
603                 btrfs_handle_fs_error(leaf->fs_info, -EINVAL, NULL);
604                 return 1;
605         }
606         ei = btrfs_item_ptr(leaf, slot, struct btrfs_extent_item);
607         WARN_ON(!(btrfs_extent_flags(leaf, ei) &
608                   BTRFS_EXTENT_FLAG_TREE_BLOCK));
609
610         if (key.type == BTRFS_EXTENT_ITEM_KEY &&
611             item_size <= sizeof(*ei) + sizeof(*bi)) {
612                 WARN_ON(item_size < sizeof(*ei) + sizeof(*bi));
613                 return 1;
614         }
615         if (key.type == BTRFS_METADATA_ITEM_KEY &&
616             item_size <= sizeof(*ei)) {
617                 WARN_ON(item_size < sizeof(*ei));
618                 return 1;
619         }
620
621         if (key.type == BTRFS_EXTENT_ITEM_KEY) {
622                 bi = (struct btrfs_tree_block_info *)(ei + 1);
623                 *ptr = (unsigned long)(bi + 1);
624         } else {
625                 *ptr = (unsigned long)(ei + 1);
626         }
627         *end = (unsigned long)ei + item_size;
628         return 0;
629 }
630
631 /*
632  * build backref tree for a given tree block. root of the backref tree
633  * corresponds the tree block, leaves of the backref tree correspond
634  * roots of b-trees that reference the tree block.
635  *
636  * the basic idea of this function is check backrefs of a given block
637  * to find upper level blocks that reference the block, and then check
638  * backrefs of these upper level blocks recursively. the recursion stop
639  * when tree root is reached or backrefs for the block is cached.
640  *
641  * NOTE: if we find backrefs for a block are cached, we know backrefs
642  * for all upper level blocks that directly/indirectly reference the
643  * block are also cached.
644  */
645 static noinline_for_stack
646 struct backref_node *build_backref_tree(struct reloc_control *rc,
647                                         struct btrfs_key *node_key,
648                                         int level, u64 bytenr)
649 {
650         struct backref_cache *cache = &rc->backref_cache;
651         struct btrfs_path *path1; /* For searching extent root */
652         struct btrfs_path *path2; /* For searching parent of TREE_BLOCK_REF */
653         struct extent_buffer *eb;
654         struct btrfs_root *root;
655         struct backref_node *cur;
656         struct backref_node *upper;
657         struct backref_node *lower;
658         struct backref_node *node = NULL;
659         struct backref_node *exist = NULL;
660         struct backref_edge *edge;
661         struct rb_node *rb_node;
662         struct btrfs_key key;
663         unsigned long end;
664         unsigned long ptr;
665         LIST_HEAD(list); /* Pending edge list, upper node needs to be checked */
666         LIST_HEAD(useless);
667         int cowonly;
668         int ret;
669         int err = 0;
670         bool need_check = true;
671
672         path1 = btrfs_alloc_path();
673         path2 = btrfs_alloc_path();
674         if (!path1 || !path2) {
675                 err = -ENOMEM;
676                 goto out;
677         }
678         path1->reada = READA_FORWARD;
679         path2->reada = READA_FORWARD;
680
681         node = alloc_backref_node(cache);
682         if (!node) {
683                 err = -ENOMEM;
684                 goto out;
685         }
686
687         node->bytenr = bytenr;
688         node->level = level;
689         node->lowest = 1;
690         cur = node;
691 again:
692         end = 0;
693         ptr = 0;
694         key.objectid = cur->bytenr;
695         key.type = BTRFS_METADATA_ITEM_KEY;
696         key.offset = (u64)-1;
697
698         path1->search_commit_root = 1;
699         path1->skip_locking = 1;
700         ret = btrfs_search_slot(NULL, rc->extent_root, &key, path1,
701                                 0, 0);
702         if (ret < 0) {
703                 err = ret;
704                 goto out;
705         }
706         ASSERT(ret);
707         ASSERT(path1->slots[0]);
708
709         path1->slots[0]--;
710
711         WARN_ON(cur->checked);
712         if (!list_empty(&cur->upper)) {
713                 /*
714                  * the backref was added previously when processing
715                  * backref of type BTRFS_TREE_BLOCK_REF_KEY
716                  */
717                 ASSERT(list_is_singular(&cur->upper));
718                 edge = list_entry(cur->upper.next, struct backref_edge,
719                                   list[LOWER]);
720                 ASSERT(list_empty(&edge->list[UPPER]));
721                 exist = edge->node[UPPER];
722                 /*
723                  * add the upper level block to pending list if we need
724                  * check its backrefs
725                  */
726                 if (!exist->checked)
727                         list_add_tail(&edge->list[UPPER], &list);
728         } else {
729                 exist = NULL;
730         }
731
732         while (1) {
733                 cond_resched();
734                 eb = path1->nodes[0];
735
736                 if (ptr >= end) {
737                         if (path1->slots[0] >= btrfs_header_nritems(eb)) {
738                                 ret = btrfs_next_leaf(rc->extent_root, path1);
739                                 if (ret < 0) {
740                                         err = ret;
741                                         goto out;
742                                 }
743                                 if (ret > 0)
744                                         break;
745                                 eb = path1->nodes[0];
746                         }
747
748                         btrfs_item_key_to_cpu(eb, &key, path1->slots[0]);
749                         if (key.objectid != cur->bytenr) {
750                                 WARN_ON(exist);
751                                 break;
752                         }
753
754                         if (key.type == BTRFS_EXTENT_ITEM_KEY ||
755                             key.type == BTRFS_METADATA_ITEM_KEY) {
756                                 ret = find_inline_backref(eb, path1->slots[0],
757                                                           &ptr, &end);
758                                 if (ret)
759                                         goto next;
760                         }
761                 }
762
763                 if (ptr < end) {
764                         /* update key for inline back ref */
765                         struct btrfs_extent_inline_ref *iref;
766                         int type;
767                         iref = (struct btrfs_extent_inline_ref *)ptr;
768                         type = btrfs_get_extent_inline_ref_type(eb, iref,
769                                                         BTRFS_REF_TYPE_BLOCK);
770                         if (type == BTRFS_REF_TYPE_INVALID) {
771                                 err = -EUCLEAN;
772                                 goto out;
773                         }
774                         key.type = type;
775                         key.offset = btrfs_extent_inline_ref_offset(eb, iref);
776
777                         WARN_ON(key.type != BTRFS_TREE_BLOCK_REF_KEY &&
778                                 key.type != BTRFS_SHARED_BLOCK_REF_KEY);
779                 }
780
781                 /*
782                  * Parent node found and matches current inline ref, no need to
783                  * rebuild this node for this inline ref.
784                  */
785                 if (exist &&
786                     ((key.type == BTRFS_TREE_BLOCK_REF_KEY &&
787                       exist->owner == key.offset) ||
788                      (key.type == BTRFS_SHARED_BLOCK_REF_KEY &&
789                       exist->bytenr == key.offset))) {
790                         exist = NULL;
791                         goto next;
792                 }
793
794                 /* SHARED_BLOCK_REF means key.offset is the parent bytenr */
795                 if (key.type == BTRFS_SHARED_BLOCK_REF_KEY) {
796                         if (key.objectid == key.offset) {
797                                 /*
798                                  * Only root blocks of reloc trees use backref
799                                  * pointing to itself.
800                                  */
801                                 root = find_reloc_root(rc, cur->bytenr);
802                                 ASSERT(root);
803                                 cur->root = root;
804                                 break;
805                         }
806
807                         edge = alloc_backref_edge(cache);
808                         if (!edge) {
809                                 err = -ENOMEM;
810                                 goto out;
811                         }
812                         rb_node = tree_search(&cache->rb_root, key.offset);
813                         if (!rb_node) {
814                                 upper = alloc_backref_node(cache);
815                                 if (!upper) {
816                                         free_backref_edge(cache, edge);
817                                         err = -ENOMEM;
818                                         goto out;
819                                 }
820                                 upper->bytenr = key.offset;
821                                 upper->level = cur->level + 1;
822                                 /*
823                                  *  backrefs for the upper level block isn't
824                                  *  cached, add the block to pending list
825                                  */
826                                 list_add_tail(&edge->list[UPPER], &list);
827                         } else {
828                                 upper = rb_entry(rb_node, struct backref_node,
829                                                  rb_node);
830                                 ASSERT(upper->checked);
831                                 INIT_LIST_HEAD(&edge->list[UPPER]);
832                         }
833                         list_add_tail(&edge->list[LOWER], &cur->upper);
834                         edge->node[LOWER] = cur;
835                         edge->node[UPPER] = upper;
836
837                         goto next;
838                 } else if (unlikely(key.type == BTRFS_EXTENT_REF_V0_KEY)) {
839                         err = -EINVAL;
840                         btrfs_print_v0_err(rc->extent_root->fs_info);
841                         btrfs_handle_fs_error(rc->extent_root->fs_info, err,
842                                               NULL);
843                         goto out;
844                 } else if (key.type != BTRFS_TREE_BLOCK_REF_KEY) {
845                         goto next;
846                 }
847
848                 /*
849                  * key.type == BTRFS_TREE_BLOCK_REF_KEY, inline ref offset
850                  * means the root objectid. We need to search the tree to get
851                  * its parent bytenr.
852                  */
853                 root = read_fs_root(rc->extent_root->fs_info, key.offset);
854                 if (IS_ERR(root)) {
855                         err = PTR_ERR(root);
856                         goto out;
857                 }
858
859                 if (!test_bit(BTRFS_ROOT_REF_COWS, &root->state))
860                         cur->cowonly = 1;
861
862                 if (btrfs_root_level(&root->root_item) == cur->level) {
863                         /* tree root */
864                         ASSERT(btrfs_root_bytenr(&root->root_item) ==
865                                cur->bytenr);
866                         if (should_ignore_root(root))
867                                 list_add(&cur->list, &useless);
868                         else
869                                 cur->root = root;
870                         break;
871                 }
872
873                 level = cur->level + 1;
874
875                 /* Search the tree to find parent blocks referring the block. */
876                 path2->search_commit_root = 1;
877                 path2->skip_locking = 1;
878                 path2->lowest_level = level;
879                 ret = btrfs_search_slot(NULL, root, node_key, path2, 0, 0);
880                 path2->lowest_level = 0;
881                 if (ret < 0) {
882                         err = ret;
883                         goto out;
884                 }
885                 if (ret > 0 && path2->slots[level] > 0)
886                         path2->slots[level]--;
887
888                 eb = path2->nodes[level];
889                 if (btrfs_node_blockptr(eb, path2->slots[level]) !=
890                     cur->bytenr) {
891                         btrfs_err(root->fs_info,
892         "couldn't find block (%llu) (level %d) in tree (%llu) with key (%llu %u %llu)",
893                                   cur->bytenr, level - 1,
894                                   root->root_key.objectid,
895                                   node_key->objectid, node_key->type,
896                                   node_key->offset);
897                         err = -ENOENT;
898                         goto out;
899                 }
900                 lower = cur;
901                 need_check = true;
902
903                 /* Add all nodes and edges in the path */
904                 for (; level < BTRFS_MAX_LEVEL; level++) {
905                         if (!path2->nodes[level]) {
906                                 ASSERT(btrfs_root_bytenr(&root->root_item) ==
907                                        lower->bytenr);
908                                 if (should_ignore_root(root))
909                                         list_add(&lower->list, &useless);
910                                 else
911                                         lower->root = root;
912                                 break;
913                         }
914
915                         edge = alloc_backref_edge(cache);
916                         if (!edge) {
917                                 err = -ENOMEM;
918                                 goto out;
919                         }
920
921                         eb = path2->nodes[level];
922                         rb_node = tree_search(&cache->rb_root, eb->start);
923                         if (!rb_node) {
924                                 upper = alloc_backref_node(cache);
925                                 if (!upper) {
926                                         free_backref_edge(cache, edge);
927                                         err = -ENOMEM;
928                                         goto out;
929                                 }
930                                 upper->bytenr = eb->start;
931                                 upper->owner = btrfs_header_owner(eb);
932                                 upper->level = lower->level + 1;
933                                 if (!test_bit(BTRFS_ROOT_REF_COWS,
934                                               &root->state))
935                                         upper->cowonly = 1;
936
937                                 /*
938                                  * if we know the block isn't shared
939                                  * we can void checking its backrefs.
940                                  */
941                                 if (btrfs_block_can_be_shared(root, eb))
942                                         upper->checked = 0;
943                                 else
944                                         upper->checked = 1;
945
946                                 /*
947                                  * add the block to pending list if we
948                                  * need check its backrefs, we only do this once
949                                  * while walking up a tree as we will catch
950                                  * anything else later on.
951                                  */
952                                 if (!upper->checked && need_check) {
953                                         need_check = false;
954                                         list_add_tail(&edge->list[UPPER],
955                                                       &list);
956                                 } else {
957                                         if (upper->checked)
958                                                 need_check = true;
959                                         INIT_LIST_HEAD(&edge->list[UPPER]);
960                                 }
961                         } else {
962                                 upper = rb_entry(rb_node, struct backref_node,
963                                                  rb_node);
964                                 ASSERT(upper->checked);
965                                 INIT_LIST_HEAD(&edge->list[UPPER]);
966                                 if (!upper->owner)
967                                         upper->owner = btrfs_header_owner(eb);
968                         }
969                         list_add_tail(&edge->list[LOWER], &lower->upper);
970                         edge->node[LOWER] = lower;
971                         edge->node[UPPER] = upper;
972
973                         if (rb_node)
974                                 break;
975                         lower = upper;
976                         upper = NULL;
977                 }
978                 btrfs_release_path(path2);
979 next:
980                 if (ptr < end) {
981                         ptr += btrfs_extent_inline_ref_size(key.type);
982                         if (ptr >= end) {
983                                 WARN_ON(ptr > end);
984                                 ptr = 0;
985                                 end = 0;
986                         }
987                 }
988                 if (ptr >= end)
989                         path1->slots[0]++;
990         }
991         btrfs_release_path(path1);
992
993         cur->checked = 1;
994         WARN_ON(exist);
995
996         /* the pending list isn't empty, take the first block to process */
997         if (!list_empty(&list)) {
998                 edge = list_entry(list.next, struct backref_edge, list[UPPER]);
999                 list_del_init(&edge->list[UPPER]);
1000                 cur = edge->node[UPPER];
1001                 goto again;
1002         }
1003
1004         /*
1005          * everything goes well, connect backref nodes and insert backref nodes
1006          * into the cache.
1007          */
1008         ASSERT(node->checked);
1009         cowonly = node->cowonly;
1010         if (!cowonly) {
1011                 rb_node = tree_insert(&cache->rb_root, node->bytenr,
1012                                       &node->rb_node);
1013                 if (rb_node)
1014                         backref_tree_panic(rb_node, -EEXIST, node->bytenr);
1015                 list_add_tail(&node->lower, &cache->leaves);
1016         }
1017
1018         list_for_each_entry(edge, &node->upper, list[LOWER])
1019                 list_add_tail(&edge->list[UPPER], &list);
1020
1021         while (!list_empty(&list)) {
1022                 edge = list_entry(list.next, struct backref_edge, list[UPPER]);
1023                 list_del_init(&edge->list[UPPER]);
1024                 upper = edge->node[UPPER];
1025                 if (upper->detached) {
1026                         list_del(&edge->list[LOWER]);
1027                         lower = edge->node[LOWER];
1028                         free_backref_edge(cache, edge);
1029                         if (list_empty(&lower->upper))
1030                                 list_add(&lower->list, &useless);
1031                         continue;
1032                 }
1033
1034                 if (!RB_EMPTY_NODE(&upper->rb_node)) {
1035                         if (upper->lowest) {
1036                                 list_del_init(&upper->lower);
1037                                 upper->lowest = 0;
1038                         }
1039
1040                         list_add_tail(&edge->list[UPPER], &upper->lower);
1041                         continue;
1042                 }
1043
1044                 if (!upper->checked) {
1045                         /*
1046                          * Still want to blow up for developers since this is a
1047                          * logic bug.
1048                          */
1049                         ASSERT(0);
1050                         err = -EINVAL;
1051                         goto out;
1052                 }
1053                 if (cowonly != upper->cowonly) {
1054                         ASSERT(0);
1055                         err = -EINVAL;
1056                         goto out;
1057                 }
1058
1059                 if (!cowonly) {
1060                         rb_node = tree_insert(&cache->rb_root, upper->bytenr,
1061                                               &upper->rb_node);
1062                         if (rb_node)
1063                                 backref_tree_panic(rb_node, -EEXIST,
1064                                                    upper->bytenr);
1065                 }
1066
1067                 list_add_tail(&edge->list[UPPER], &upper->lower);
1068
1069                 list_for_each_entry(edge, &upper->upper, list[LOWER])
1070                         list_add_tail(&edge->list[UPPER], &list);
1071         }
1072         /*
1073          * process useless backref nodes. backref nodes for tree leaves
1074          * are deleted from the cache. backref nodes for upper level
1075          * tree blocks are left in the cache to avoid unnecessary backref
1076          * lookup.
1077          */
1078         while (!list_empty(&useless)) {
1079                 upper = list_entry(useless.next, struct backref_node, list);
1080                 list_del_init(&upper->list);
1081                 ASSERT(list_empty(&upper->upper));
1082                 if (upper == node)
1083                         node = NULL;
1084                 if (upper->lowest) {
1085                         list_del_init(&upper->lower);
1086                         upper->lowest = 0;
1087                 }
1088                 while (!list_empty(&upper->lower)) {
1089                         edge = list_entry(upper->lower.next,
1090                                           struct backref_edge, list[UPPER]);
1091                         list_del(&edge->list[UPPER]);
1092                         list_del(&edge->list[LOWER]);
1093                         lower = edge->node[LOWER];
1094                         free_backref_edge(cache, edge);
1095
1096                         if (list_empty(&lower->upper))
1097                                 list_add(&lower->list, &useless);
1098                 }
1099                 __mark_block_processed(rc, upper);
1100                 if (upper->level > 0) {
1101                         list_add(&upper->list, &cache->detached);
1102                         upper->detached = 1;
1103                 } else {
1104                         rb_erase(&upper->rb_node, &cache->rb_root);
1105                         free_backref_node(cache, upper);
1106                 }
1107         }
1108 out:
1109         btrfs_free_path(path1);
1110         btrfs_free_path(path2);
1111         if (err) {
1112                 while (!list_empty(&useless)) {
1113                         lower = list_entry(useless.next,
1114                                            struct backref_node, list);
1115                         list_del_init(&lower->list);
1116                 }
1117                 while (!list_empty(&list)) {
1118                         edge = list_first_entry(&list, struct backref_edge,
1119                                                 list[UPPER]);
1120                         list_del(&edge->list[UPPER]);
1121                         list_del(&edge->list[LOWER]);
1122                         lower = edge->node[LOWER];
1123                         upper = edge->node[UPPER];
1124                         free_backref_edge(cache, edge);
1125
1126                         /*
1127                          * Lower is no longer linked to any upper backref nodes
1128                          * and isn't in the cache, we can free it ourselves.
1129                          */
1130                         if (list_empty(&lower->upper) &&
1131                             RB_EMPTY_NODE(&lower->rb_node))
1132                                 list_add(&lower->list, &useless);
1133
1134                         if (!RB_EMPTY_NODE(&upper->rb_node))
1135                                 continue;
1136
1137                         /* Add this guy's upper edges to the list to process */
1138                         list_for_each_entry(edge, &upper->upper, list[LOWER])
1139                                 list_add_tail(&edge->list[UPPER], &list);
1140                         if (list_empty(&upper->upper))
1141                                 list_add(&upper->list, &useless);
1142                 }
1143
1144                 while (!list_empty(&useless)) {
1145                         lower = list_entry(useless.next,
1146                                            struct backref_node, list);
1147                         list_del_init(&lower->list);
1148                         if (lower == node)
1149                                 node = NULL;
1150                         free_backref_node(cache, lower);
1151                 }
1152
1153                 free_backref_node(cache, node);
1154                 return ERR_PTR(err);
1155         }
1156         ASSERT(!node || !node->detached);
1157         return node;
1158 }
1159
1160 /*
1161  * helper to add backref node for the newly created snapshot.
1162  * the backref node is created by cloning backref node that
1163  * corresponds to root of source tree
1164  */
1165 static int clone_backref_node(struct btrfs_trans_handle *trans,
1166                               struct reloc_control *rc,
1167                               struct btrfs_root *src,
1168                               struct btrfs_root *dest)
1169 {
1170         struct btrfs_root *reloc_root = src->reloc_root;
1171         struct backref_cache *cache = &rc->backref_cache;
1172         struct backref_node *node = NULL;
1173         struct backref_node *new_node;
1174         struct backref_edge *edge;
1175         struct backref_edge *new_edge;
1176         struct rb_node *rb_node;
1177
1178         if (cache->last_trans > 0)
1179                 update_backref_cache(trans, cache);
1180
1181         rb_node = tree_search(&cache->rb_root, src->commit_root->start);
1182         if (rb_node) {
1183                 node = rb_entry(rb_node, struct backref_node, rb_node);
1184                 if (node->detached)
1185                         node = NULL;
1186                 else
1187                         BUG_ON(node->new_bytenr != reloc_root->node->start);
1188         }
1189
1190         if (!node) {
1191                 rb_node = tree_search(&cache->rb_root,
1192                                       reloc_root->commit_root->start);
1193                 if (rb_node) {
1194                         node = rb_entry(rb_node, struct backref_node,
1195                                         rb_node);
1196                         BUG_ON(node->detached);
1197                 }
1198         }
1199
1200         if (!node)
1201                 return 0;
1202
1203         new_node = alloc_backref_node(cache);
1204         if (!new_node)
1205                 return -ENOMEM;
1206
1207         new_node->bytenr = dest->node->start;
1208         new_node->level = node->level;
1209         new_node->lowest = node->lowest;
1210         new_node->checked = 1;
1211         new_node->root = dest;
1212
1213         if (!node->lowest) {
1214                 list_for_each_entry(edge, &node->lower, list[UPPER]) {
1215                         new_edge = alloc_backref_edge(cache);
1216                         if (!new_edge)
1217                                 goto fail;
1218
1219                         new_edge->node[UPPER] = new_node;
1220                         new_edge->node[LOWER] = edge->node[LOWER];
1221                         list_add_tail(&new_edge->list[UPPER],
1222                                       &new_node->lower);
1223                 }
1224         } else {
1225                 list_add_tail(&new_node->lower, &cache->leaves);
1226         }
1227
1228         rb_node = tree_insert(&cache->rb_root, new_node->bytenr,
1229                               &new_node->rb_node);
1230         if (rb_node)
1231                 backref_tree_panic(rb_node, -EEXIST, new_node->bytenr);
1232
1233         if (!new_node->lowest) {
1234                 list_for_each_entry(new_edge, &new_node->lower, list[UPPER]) {
1235                         list_add_tail(&new_edge->list[LOWER],
1236                                       &new_edge->node[LOWER]->upper);
1237                 }
1238         }
1239         return 0;
1240 fail:
1241         while (!list_empty(&new_node->lower)) {
1242                 new_edge = list_entry(new_node->lower.next,
1243                                       struct backref_edge, list[UPPER]);
1244                 list_del(&new_edge->list[UPPER]);
1245                 free_backref_edge(cache, new_edge);
1246         }
1247         free_backref_node(cache, new_node);
1248         return -ENOMEM;
1249 }
1250
1251 /*
1252  * helper to add 'address of tree root -> reloc tree' mapping
1253  */
1254 static int __must_check __add_reloc_root(struct btrfs_root *root)
1255 {
1256         struct btrfs_fs_info *fs_info = root->fs_info;
1257         struct rb_node *rb_node;
1258         struct mapping_node *node;
1259         struct reloc_control *rc = fs_info->reloc_ctl;
1260
1261         node = kmalloc(sizeof(*node), GFP_NOFS);
1262         if (!node)
1263                 return -ENOMEM;
1264
1265         node->bytenr = root->node->start;
1266         node->data = root;
1267
1268         spin_lock(&rc->reloc_root_tree.lock);
1269         rb_node = tree_insert(&rc->reloc_root_tree.rb_root,
1270                               node->bytenr, &node->rb_node);
1271         spin_unlock(&rc->reloc_root_tree.lock);
1272         if (rb_node) {
1273                 btrfs_panic(fs_info, -EEXIST,
1274                             "Duplicate root found for start=%llu while inserting into relocation tree",
1275                             node->bytenr);
1276         }
1277
1278         list_add_tail(&root->root_list, &rc->reloc_roots);
1279         return 0;
1280 }
1281
1282 /*
1283  * helper to delete the 'address of tree root -> reloc tree'
1284  * mapping
1285  */
1286 static void __del_reloc_root(struct btrfs_root *root)
1287 {
1288         struct btrfs_fs_info *fs_info = root->fs_info;
1289         struct rb_node *rb_node;
1290         struct mapping_node *node = NULL;
1291         struct reloc_control *rc = fs_info->reloc_ctl;
1292
1293         if (rc && root->node) {
1294                 spin_lock(&rc->reloc_root_tree.lock);
1295                 rb_node = tree_search(&rc->reloc_root_tree.rb_root,
1296                                       root->node->start);
1297                 if (rb_node) {
1298                         node = rb_entry(rb_node, struct mapping_node, rb_node);
1299                         rb_erase(&node->rb_node, &rc->reloc_root_tree.rb_root);
1300                 }
1301                 spin_unlock(&rc->reloc_root_tree.lock);
1302                 if (!node)
1303                         return;
1304                 BUG_ON((struct btrfs_root *)node->data != root);
1305         }
1306
1307         spin_lock(&fs_info->trans_lock);
1308         list_del_init(&root->root_list);
1309         spin_unlock(&fs_info->trans_lock);
1310         kfree(node);
1311 }
1312
1313 /*
1314  * helper to update the 'address of tree root -> reloc tree'
1315  * mapping
1316  */
1317 static int __update_reloc_root(struct btrfs_root *root, u64 new_bytenr)
1318 {
1319         struct btrfs_fs_info *fs_info = root->fs_info;
1320         struct rb_node *rb_node;
1321         struct mapping_node *node = NULL;
1322         struct reloc_control *rc = fs_info->reloc_ctl;
1323
1324         spin_lock(&rc->reloc_root_tree.lock);
1325         rb_node = tree_search(&rc->reloc_root_tree.rb_root,
1326                               root->node->start);
1327         if (rb_node) {
1328                 node = rb_entry(rb_node, struct mapping_node, rb_node);
1329                 rb_erase(&node->rb_node, &rc->reloc_root_tree.rb_root);
1330         }
1331         spin_unlock(&rc->reloc_root_tree.lock);
1332
1333         if (!node)
1334                 return 0;
1335         BUG_ON((struct btrfs_root *)node->data != root);
1336
1337         spin_lock(&rc->reloc_root_tree.lock);
1338         node->bytenr = new_bytenr;
1339         rb_node = tree_insert(&rc->reloc_root_tree.rb_root,
1340                               node->bytenr, &node->rb_node);
1341         spin_unlock(&rc->reloc_root_tree.lock);
1342         if (rb_node)
1343                 backref_tree_panic(rb_node, -EEXIST, node->bytenr);
1344         return 0;
1345 }
1346
1347 static struct btrfs_root *create_reloc_root(struct btrfs_trans_handle *trans,
1348                                         struct btrfs_root *root, u64 objectid)
1349 {
1350         struct btrfs_fs_info *fs_info = root->fs_info;
1351         struct btrfs_root *reloc_root;
1352         struct extent_buffer *eb;
1353         struct btrfs_root_item *root_item;
1354         struct btrfs_key root_key;
1355         int ret;
1356
1357         root_item = kmalloc(sizeof(*root_item), GFP_NOFS);
1358         BUG_ON(!root_item);
1359
1360         root_key.objectid = BTRFS_TREE_RELOC_OBJECTID;
1361         root_key.type = BTRFS_ROOT_ITEM_KEY;
1362         root_key.offset = objectid;
1363
1364         if (root->root_key.objectid == objectid) {
1365                 u64 commit_root_gen;
1366
1367                 /* called by btrfs_init_reloc_root */
1368                 ret = btrfs_copy_root(trans, root, root->commit_root, &eb,
1369                                       BTRFS_TREE_RELOC_OBJECTID);
1370                 BUG_ON(ret);
1371                 /*
1372                  * Set the last_snapshot field to the generation of the commit
1373                  * root - like this ctree.c:btrfs_block_can_be_shared() behaves
1374                  * correctly (returns true) when the relocation root is created
1375                  * either inside the critical section of a transaction commit
1376                  * (through transaction.c:qgroup_account_snapshot()) and when
1377                  * it's created before the transaction commit is started.
1378                  */
1379                 commit_root_gen = btrfs_header_generation(root->commit_root);
1380                 btrfs_set_root_last_snapshot(&root->root_item, commit_root_gen);
1381         } else {
1382                 /*
1383                  * called by btrfs_reloc_post_snapshot_hook.
1384                  * the source tree is a reloc tree, all tree blocks
1385                  * modified after it was created have RELOC flag
1386                  * set in their headers. so it's OK to not update
1387                  * the 'last_snapshot'.
1388                  */
1389                 ret = btrfs_copy_root(trans, root, root->node, &eb,
1390                                       BTRFS_TREE_RELOC_OBJECTID);
1391                 BUG_ON(ret);
1392         }
1393
1394         memcpy(root_item, &root->root_item, sizeof(*root_item));
1395         btrfs_set_root_bytenr(root_item, eb->start);
1396         btrfs_set_root_level(root_item, btrfs_header_level(eb));
1397         btrfs_set_root_generation(root_item, trans->transid);
1398
1399         if (root->root_key.objectid == objectid) {
1400                 btrfs_set_root_refs(root_item, 0);
1401                 memset(&root_item->drop_progress, 0,
1402                        sizeof(struct btrfs_disk_key));
1403                 root_item->drop_level = 0;
1404         }
1405
1406         btrfs_tree_unlock(eb);
1407         free_extent_buffer(eb);
1408
1409         ret = btrfs_insert_root(trans, fs_info->tree_root,
1410                                 &root_key, root_item);
1411         BUG_ON(ret);
1412         kfree(root_item);
1413
1414         reloc_root = btrfs_read_fs_root(fs_info->tree_root, &root_key);
1415         BUG_ON(IS_ERR(reloc_root));
1416         reloc_root->last_trans = trans->transid;
1417         return reloc_root;
1418 }
1419
1420 /*
1421  * create reloc tree for a given fs tree. reloc tree is just a
1422  * snapshot of the fs tree with special root objectid.
1423  */
1424 int btrfs_init_reloc_root(struct btrfs_trans_handle *trans,
1425                           struct btrfs_root *root)
1426 {
1427         struct btrfs_fs_info *fs_info = root->fs_info;
1428         struct btrfs_root *reloc_root;
1429         struct reloc_control *rc = fs_info->reloc_ctl;
1430         struct btrfs_block_rsv *rsv;
1431         int clear_rsv = 0;
1432         int ret;
1433
1434         if (root->reloc_root) {
1435                 reloc_root = root->reloc_root;
1436                 reloc_root->last_trans = trans->transid;
1437                 return 0;
1438         }
1439
1440         if (!rc || !rc->create_reloc_tree ||
1441             root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID)
1442                 return 0;
1443
1444         if (!trans->reloc_reserved) {
1445                 rsv = trans->block_rsv;
1446                 trans->block_rsv = rc->block_rsv;
1447                 clear_rsv = 1;
1448         }
1449         reloc_root = create_reloc_root(trans, root, root->root_key.objectid);
1450         if (clear_rsv)
1451                 trans->block_rsv = rsv;
1452
1453         ret = __add_reloc_root(reloc_root);
1454         BUG_ON(ret < 0);
1455         root->reloc_root = reloc_root;
1456         return 0;
1457 }
1458
1459 /*
1460  * update root item of reloc tree
1461  */
1462 int btrfs_update_reloc_root(struct btrfs_trans_handle *trans,
1463                             struct btrfs_root *root)
1464 {
1465         struct btrfs_fs_info *fs_info = root->fs_info;
1466         struct btrfs_root *reloc_root;
1467         struct btrfs_root_item *root_item;
1468         int ret;
1469
1470         if (!root->reloc_root)
1471                 goto out;
1472
1473         reloc_root = root->reloc_root;
1474         root_item = &reloc_root->root_item;
1475
1476         if (fs_info->reloc_ctl->merge_reloc_tree &&
1477             btrfs_root_refs(root_item) == 0) {
1478                 root->reloc_root = NULL;
1479                 __del_reloc_root(reloc_root);
1480         }
1481
1482         if (reloc_root->commit_root != reloc_root->node) {
1483                 btrfs_set_root_node(root_item, reloc_root->node);
1484                 free_extent_buffer(reloc_root->commit_root);
1485                 reloc_root->commit_root = btrfs_root_node(reloc_root);
1486         }
1487
1488         ret = btrfs_update_root(trans, fs_info->tree_root,
1489                                 &reloc_root->root_key, root_item);
1490         BUG_ON(ret);
1491
1492 out:
1493         return 0;
1494 }
1495
1496 /*
1497  * helper to find first cached inode with inode number >= objectid
1498  * in a subvolume
1499  */
1500 static struct inode *find_next_inode(struct btrfs_root *root, u64 objectid)
1501 {
1502         struct rb_node *node;
1503         struct rb_node *prev;
1504         struct btrfs_inode *entry;
1505         struct inode *inode;
1506
1507         spin_lock(&root->inode_lock);
1508 again:
1509         node = root->inode_tree.rb_node;
1510         prev = NULL;
1511         while (node) {
1512                 prev = node;
1513                 entry = rb_entry(node, struct btrfs_inode, rb_node);
1514
1515                 if (objectid < btrfs_ino(entry))
1516                         node = node->rb_left;
1517                 else if (objectid > btrfs_ino(entry))
1518                         node = node->rb_right;
1519                 else
1520                         break;
1521         }
1522         if (!node) {
1523                 while (prev) {
1524                         entry = rb_entry(prev, struct btrfs_inode, rb_node);
1525                         if (objectid <= btrfs_ino(entry)) {
1526                                 node = prev;
1527                                 break;
1528                         }
1529                         prev = rb_next(prev);
1530                 }
1531         }
1532         while (node) {
1533                 entry = rb_entry(node, struct btrfs_inode, rb_node);
1534                 inode = igrab(&entry->vfs_inode);
1535                 if (inode) {
1536                         spin_unlock(&root->inode_lock);
1537                         return inode;
1538                 }
1539
1540                 objectid = btrfs_ino(entry) + 1;
1541                 if (cond_resched_lock(&root->inode_lock))
1542                         goto again;
1543
1544                 node = rb_next(node);
1545         }
1546         spin_unlock(&root->inode_lock);
1547         return NULL;
1548 }
1549
1550 static int in_block_group(u64 bytenr,
1551                           struct btrfs_block_group_cache *block_group)
1552 {
1553         if (bytenr >= block_group->key.objectid &&
1554             bytenr < block_group->key.objectid + block_group->key.offset)
1555                 return 1;
1556         return 0;
1557 }
1558
1559 /*
1560  * get new location of data
1561  */
1562 static int get_new_location(struct inode *reloc_inode, u64 *new_bytenr,
1563                             u64 bytenr, u64 num_bytes)
1564 {
1565         struct btrfs_root *root = BTRFS_I(reloc_inode)->root;
1566         struct btrfs_path *path;
1567         struct btrfs_file_extent_item *fi;
1568         struct extent_buffer *leaf;
1569         int ret;
1570
1571         path = btrfs_alloc_path();
1572         if (!path)
1573                 return -ENOMEM;
1574
1575         bytenr -= BTRFS_I(reloc_inode)->index_cnt;
1576         ret = btrfs_lookup_file_extent(NULL, root, path,
1577                         btrfs_ino(BTRFS_I(reloc_inode)), bytenr, 0);
1578         if (ret < 0)
1579                 goto out;
1580         if (ret > 0) {
1581                 ret = -ENOENT;
1582                 goto out;
1583         }
1584
1585         leaf = path->nodes[0];
1586         fi = btrfs_item_ptr(leaf, path->slots[0],
1587                             struct btrfs_file_extent_item);
1588
1589         BUG_ON(btrfs_file_extent_offset(leaf, fi) ||
1590                btrfs_file_extent_compression(leaf, fi) ||
1591                btrfs_file_extent_encryption(leaf, fi) ||
1592                btrfs_file_extent_other_encoding(leaf, fi));
1593
1594         if (num_bytes != btrfs_file_extent_disk_num_bytes(leaf, fi)) {
1595                 ret = -EINVAL;
1596                 goto out;
1597         }
1598
1599         *new_bytenr = btrfs_file_extent_disk_bytenr(leaf, fi);
1600         ret = 0;
1601 out:
1602         btrfs_free_path(path);
1603         return ret;
1604 }
1605
1606 /*
1607  * update file extent items in the tree leaf to point to
1608  * the new locations.
1609  */
1610 static noinline_for_stack
1611 int replace_file_extents(struct btrfs_trans_handle *trans,
1612                          struct reloc_control *rc,
1613                          struct btrfs_root *root,
1614                          struct extent_buffer *leaf)
1615 {
1616         struct btrfs_fs_info *fs_info = root->fs_info;
1617         struct btrfs_key key;
1618         struct btrfs_file_extent_item *fi;
1619         struct inode *inode = NULL;
1620         u64 parent;
1621         u64 bytenr;
1622         u64 new_bytenr = 0;
1623         u64 num_bytes;
1624         u64 end;
1625         u32 nritems;
1626         u32 i;
1627         int ret = 0;
1628         int first = 1;
1629         int dirty = 0;
1630
1631         if (rc->stage != UPDATE_DATA_PTRS)
1632                 return 0;
1633
1634         /* reloc trees always use full backref */
1635         if (root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID)
1636                 parent = leaf->start;
1637         else
1638                 parent = 0;
1639
1640         nritems = btrfs_header_nritems(leaf);
1641         for (i = 0; i < nritems; i++) {
1642                 cond_resched();
1643                 btrfs_item_key_to_cpu(leaf, &key, i);
1644                 if (key.type != BTRFS_EXTENT_DATA_KEY)
1645                         continue;
1646                 fi = btrfs_item_ptr(leaf, i, struct btrfs_file_extent_item);
1647                 if (btrfs_file_extent_type(leaf, fi) ==
1648                     BTRFS_FILE_EXTENT_INLINE)
1649                         continue;
1650                 bytenr = btrfs_file_extent_disk_bytenr(leaf, fi);
1651                 num_bytes = btrfs_file_extent_disk_num_bytes(leaf, fi);
1652                 if (bytenr == 0)
1653                         continue;
1654                 if (!in_block_group(bytenr, rc->block_group))
1655                         continue;
1656
1657                 /*
1658                  * if we are modifying block in fs tree, wait for readpage
1659                  * to complete and drop the extent cache
1660                  */
1661                 if (root->root_key.objectid != BTRFS_TREE_RELOC_OBJECTID) {
1662                         if (first) {
1663                                 inode = find_next_inode(root, key.objectid);
1664                                 first = 0;
1665                         } else if (inode && btrfs_ino(BTRFS_I(inode)) < key.objectid) {
1666                                 btrfs_add_delayed_iput(inode);
1667                                 inode = find_next_inode(root, key.objectid);
1668                         }
1669                         if (inode && btrfs_ino(BTRFS_I(inode)) == key.objectid) {
1670                                 end = key.offset +
1671                                       btrfs_file_extent_num_bytes(leaf, fi);
1672                                 WARN_ON(!IS_ALIGNED(key.offset,
1673                                                     fs_info->sectorsize));
1674                                 WARN_ON(!IS_ALIGNED(end, fs_info->sectorsize));
1675                                 end--;
1676                                 ret = try_lock_extent(&BTRFS_I(inode)->io_tree,
1677                                                       key.offset, end);
1678                                 if (!ret)
1679                                         continue;
1680
1681                                 btrfs_drop_extent_cache(BTRFS_I(inode),
1682                                                 key.offset,     end, 1);
1683                                 unlock_extent(&BTRFS_I(inode)->io_tree,
1684                                               key.offset, end);
1685                         }
1686                 }
1687
1688                 ret = get_new_location(rc->data_inode, &new_bytenr,
1689                                        bytenr, num_bytes);
1690                 if (ret) {
1691                         /*
1692                          * Don't have to abort since we've not changed anything
1693                          * in the file extent yet.
1694                          */
1695                         break;
1696                 }
1697
1698                 btrfs_set_file_extent_disk_bytenr(leaf, fi, new_bytenr);
1699                 dirty = 1;
1700
1701                 key.offset -= btrfs_file_extent_offset(leaf, fi);
1702                 ret = btrfs_inc_extent_ref(trans, root, new_bytenr,
1703                                            num_bytes, parent,
1704                                            btrfs_header_owner(leaf),
1705                                            key.objectid, key.offset);
1706                 if (ret) {
1707                         btrfs_abort_transaction(trans, ret);
1708                         break;
1709                 }
1710
1711                 ret = btrfs_free_extent(trans, root, bytenr, num_bytes,
1712                                         parent, btrfs_header_owner(leaf),
1713                                         key.objectid, key.offset);
1714                 if (ret) {
1715                         btrfs_abort_transaction(trans, ret);
1716                         break;
1717                 }
1718         }
1719         if (dirty)
1720                 btrfs_mark_buffer_dirty(leaf);
1721         if (inode)
1722                 btrfs_add_delayed_iput(inode);
1723         return ret;
1724 }
1725
1726 static noinline_for_stack
1727 int memcmp_node_keys(struct extent_buffer *eb, int slot,
1728                      struct btrfs_path *path, int level)
1729 {
1730         struct btrfs_disk_key key1;
1731         struct btrfs_disk_key key2;
1732         btrfs_node_key(eb, &key1, slot);
1733         btrfs_node_key(path->nodes[level], &key2, path->slots[level]);
1734         return memcmp(&key1, &key2, sizeof(key1));
1735 }
1736
1737 /*
1738  * try to replace tree blocks in fs tree with the new blocks
1739  * in reloc tree. tree blocks haven't been modified since the
1740  * reloc tree was create can be replaced.
1741  *
1742  * if a block was replaced, level of the block + 1 is returned.
1743  * if no block got replaced, 0 is returned. if there are other
1744  * errors, a negative error number is returned.
1745  */
1746 static noinline_for_stack
1747 int replace_path(struct btrfs_trans_handle *trans, struct reloc_control *rc,
1748                  struct btrfs_root *dest, struct btrfs_root *src,
1749                  struct btrfs_path *path, struct btrfs_key *next_key,
1750                  int lowest_level, int max_level)
1751 {
1752         struct btrfs_fs_info *fs_info = dest->fs_info;
1753         struct extent_buffer *eb;
1754         struct extent_buffer *parent;
1755         struct btrfs_key key;
1756         u64 old_bytenr;
1757         u64 new_bytenr;
1758         u64 old_ptr_gen;
1759         u64 new_ptr_gen;
1760         u64 last_snapshot;
1761         u32 blocksize;
1762         int cow = 0;
1763         int level;
1764         int ret;
1765         int slot;
1766
1767         BUG_ON(src->root_key.objectid != BTRFS_TREE_RELOC_OBJECTID);
1768         BUG_ON(dest->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID);
1769
1770         last_snapshot = btrfs_root_last_snapshot(&src->root_item);
1771 again:
1772         slot = path->slots[lowest_level];
1773         btrfs_node_key_to_cpu(path->nodes[lowest_level], &key, slot);
1774
1775         eb = btrfs_lock_root_node(dest);
1776         btrfs_set_lock_blocking(eb);
1777         level = btrfs_header_level(eb);
1778
1779         if (level < lowest_level) {
1780                 btrfs_tree_unlock(eb);
1781                 free_extent_buffer(eb);
1782                 return 0;
1783         }
1784
1785         if (cow) {
1786                 ret = btrfs_cow_block(trans, dest, eb, NULL, 0, &eb);
1787                 BUG_ON(ret);
1788         }
1789         btrfs_set_lock_blocking(eb);
1790
1791         if (next_key) {
1792                 next_key->objectid = (u64)-1;
1793                 next_key->type = (u8)-1;
1794                 next_key->offset = (u64)-1;
1795         }
1796
1797         parent = eb;
1798         while (1) {
1799                 struct btrfs_key first_key;
1800
1801                 level = btrfs_header_level(parent);
1802                 BUG_ON(level < lowest_level);
1803
1804                 ret = btrfs_bin_search(parent, &key, level, &slot);
1805                 if (ret && slot > 0)
1806                         slot--;
1807
1808                 if (next_key && slot + 1 < btrfs_header_nritems(parent))
1809                         btrfs_node_key_to_cpu(parent, next_key, slot + 1);
1810
1811                 old_bytenr = btrfs_node_blockptr(parent, slot);
1812                 blocksize = fs_info->nodesize;
1813                 old_ptr_gen = btrfs_node_ptr_generation(parent, slot);
1814                 btrfs_node_key_to_cpu(parent, &first_key, slot);
1815
1816                 if (level <= max_level) {
1817                         eb = path->nodes[level];
1818                         new_bytenr = btrfs_node_blockptr(eb,
1819                                                         path->slots[level]);
1820                         new_ptr_gen = btrfs_node_ptr_generation(eb,
1821                                                         path->slots[level]);
1822                 } else {
1823                         new_bytenr = 0;
1824                         new_ptr_gen = 0;
1825                 }
1826
1827                 if (WARN_ON(new_bytenr > 0 && new_bytenr == old_bytenr)) {
1828                         ret = level;
1829                         break;
1830                 }
1831
1832                 if (new_bytenr == 0 || old_ptr_gen > last_snapshot ||
1833                     memcmp_node_keys(parent, slot, path, level)) {
1834                         if (level <= lowest_level) {
1835                                 ret = 0;
1836                                 break;
1837                         }
1838
1839                         eb = read_tree_block(fs_info, old_bytenr, old_ptr_gen,
1840                                              level - 1, &first_key);
1841                         if (IS_ERR(eb)) {
1842                                 ret = PTR_ERR(eb);
1843                                 break;
1844                         } else if (!extent_buffer_uptodate(eb)) {
1845                                 ret = -EIO;
1846                                 free_extent_buffer(eb);
1847                                 break;
1848                         }
1849                         btrfs_tree_lock(eb);
1850                         if (cow) {
1851                                 ret = btrfs_cow_block(trans, dest, eb, parent,
1852                                                       slot, &eb);
1853                                 BUG_ON(ret);
1854                         }
1855                         btrfs_set_lock_blocking(eb);
1856
1857                         btrfs_tree_unlock(parent);
1858                         free_extent_buffer(parent);
1859
1860                         parent = eb;
1861                         continue;
1862                 }
1863
1864                 if (!cow) {
1865                         btrfs_tree_unlock(parent);
1866                         free_extent_buffer(parent);
1867                         cow = 1;
1868                         goto again;
1869                 }
1870
1871                 btrfs_node_key_to_cpu(path->nodes[level], &key,
1872                                       path->slots[level]);
1873                 btrfs_release_path(path);
1874
1875                 path->lowest_level = level;
1876                 ret = btrfs_search_slot(trans, src, &key, path, 0, 1);
1877                 path->lowest_level = 0;
1878                 BUG_ON(ret);
1879
1880                 /*
1881                  * Info qgroup to trace both subtrees.
1882                  *
1883                  * We must trace both trees.
1884                  * 1) Tree reloc subtree
1885                  *    If not traced, we will leak data numbers
1886                  * 2) Fs subtree
1887                  *    If not traced, we will double count old data
1888                  *    and tree block numbers, if current trans doesn't free
1889                  *    data reloc tree inode.
1890                  */
1891                 ret = btrfs_qgroup_trace_subtree_swap(trans, rc->block_group,
1892                                 parent, slot, path->nodes[level],
1893                                 path->slots[level], last_snapshot);
1894                 if (ret < 0)
1895                         break;
1896
1897                 /*
1898                  * swap blocks in fs tree and reloc tree.
1899                  */
1900                 btrfs_set_node_blockptr(parent, slot, new_bytenr);
1901                 btrfs_set_node_ptr_generation(parent, slot, new_ptr_gen);
1902                 btrfs_mark_buffer_dirty(parent);
1903
1904                 btrfs_set_node_blockptr(path->nodes[level],
1905                                         path->slots[level], old_bytenr);
1906                 btrfs_set_node_ptr_generation(path->nodes[level],
1907                                               path->slots[level], old_ptr_gen);
1908                 btrfs_mark_buffer_dirty(path->nodes[level]);
1909
1910                 ret = btrfs_inc_extent_ref(trans, src, old_bytenr,
1911                                         blocksize, path->nodes[level]->start,
1912                                         src->root_key.objectid, level - 1, 0);
1913                 BUG_ON(ret);
1914                 ret = btrfs_inc_extent_ref(trans, dest, new_bytenr,
1915                                         blocksize, 0, dest->root_key.objectid,
1916                                         level - 1, 0);
1917                 BUG_ON(ret);
1918
1919                 ret = btrfs_free_extent(trans, src, new_bytenr, blocksize,
1920                                         path->nodes[level]->start,
1921                                         src->root_key.objectid, level - 1, 0);
1922                 BUG_ON(ret);
1923
1924                 ret = btrfs_free_extent(trans, dest, old_bytenr, blocksize,
1925                                         0, dest->root_key.objectid, level - 1,
1926                                         0);
1927                 BUG_ON(ret);
1928
1929                 btrfs_unlock_up_safe(path, 0);
1930
1931                 ret = level;
1932                 break;
1933         }
1934         btrfs_tree_unlock(parent);
1935         free_extent_buffer(parent);
1936         return ret;
1937 }
1938
1939 /*
1940  * helper to find next relocated block in reloc tree
1941  */
1942 static noinline_for_stack
1943 int walk_up_reloc_tree(struct btrfs_root *root, struct btrfs_path *path,
1944                        int *level)
1945 {
1946         struct extent_buffer *eb;
1947         int i;
1948         u64 last_snapshot;
1949         u32 nritems;
1950
1951         last_snapshot = btrfs_root_last_snapshot(&root->root_item);
1952
1953         for (i = 0; i < *level; i++) {
1954                 free_extent_buffer(path->nodes[i]);
1955                 path->nodes[i] = NULL;
1956         }
1957
1958         for (i = *level; i < BTRFS_MAX_LEVEL && path->nodes[i]; i++) {
1959                 eb = path->nodes[i];
1960                 nritems = btrfs_header_nritems(eb);
1961                 while (path->slots[i] + 1 < nritems) {
1962                         path->slots[i]++;
1963                         if (btrfs_node_ptr_generation(eb, path->slots[i]) <=
1964                             last_snapshot)
1965                                 continue;
1966
1967                         *level = i;
1968                         return 0;
1969                 }
1970                 free_extent_buffer(path->nodes[i]);
1971                 path->nodes[i] = NULL;
1972         }
1973         return 1;
1974 }
1975
1976 /*
1977  * walk down reloc tree to find relocated block of lowest level
1978  */
1979 static noinline_for_stack
1980 int walk_down_reloc_tree(struct btrfs_root *root, struct btrfs_path *path,
1981                          int *level)
1982 {
1983         struct btrfs_fs_info *fs_info = root->fs_info;
1984         struct extent_buffer *eb = NULL;
1985         int i;
1986         u64 bytenr;
1987         u64 ptr_gen = 0;
1988         u64 last_snapshot;
1989         u32 nritems;
1990
1991         last_snapshot = btrfs_root_last_snapshot(&root->root_item);
1992
1993         for (i = *level; i > 0; i--) {
1994                 struct btrfs_key first_key;
1995
1996                 eb = path->nodes[i];
1997                 nritems = btrfs_header_nritems(eb);
1998                 while (path->slots[i] < nritems) {
1999                         ptr_gen = btrfs_node_ptr_generation(eb, path->slots[i]);
2000                         if (ptr_gen > last_snapshot)
2001                                 break;
2002                         path->slots[i]++;
2003                 }
2004                 if (path->slots[i] >= nritems) {
2005                         if (i == *level)
2006                                 break;
2007                         *level = i + 1;
2008                         return 0;
2009                 }
2010                 if (i == 1) {
2011                         *level = i;
2012                         return 0;
2013                 }
2014
2015                 bytenr = btrfs_node_blockptr(eb, path->slots[i]);
2016                 btrfs_node_key_to_cpu(eb, &first_key, path->slots[i]);
2017                 eb = read_tree_block(fs_info, bytenr, ptr_gen, i - 1,
2018                                      &first_key);
2019                 if (IS_ERR(eb)) {
2020                         return PTR_ERR(eb);
2021                 } else if (!extent_buffer_uptodate(eb)) {
2022                         free_extent_buffer(eb);
2023                         return -EIO;
2024                 }
2025                 BUG_ON(btrfs_header_level(eb) != i - 1);
2026                 path->nodes[i - 1] = eb;
2027                 path->slots[i - 1] = 0;
2028         }
2029         return 1;
2030 }
2031
2032 /*
2033  * invalidate extent cache for file extents whose key in range of
2034  * [min_key, max_key)
2035  */
2036 static int invalidate_extent_cache(struct btrfs_root *root,
2037                                    struct btrfs_key *min_key,
2038                                    struct btrfs_key *max_key)
2039 {
2040         struct btrfs_fs_info *fs_info = root->fs_info;
2041         struct inode *inode = NULL;
2042         u64 objectid;
2043         u64 start, end;
2044         u64 ino;
2045
2046         objectid = min_key->objectid;
2047         while (1) {
2048                 cond_resched();
2049                 iput(inode);
2050
2051                 if (objectid > max_key->objectid)
2052                         break;
2053
2054                 inode = find_next_inode(root, objectid);
2055                 if (!inode)
2056                         break;
2057                 ino = btrfs_ino(BTRFS_I(inode));
2058
2059                 if (ino > max_key->objectid) {
2060                         iput(inode);
2061                         break;
2062                 }
2063
2064                 objectid = ino + 1;
2065                 if (!S_ISREG(inode->i_mode))
2066                         continue;
2067
2068                 if (unlikely(min_key->objectid == ino)) {
2069                         if (min_key->type > BTRFS_EXTENT_DATA_KEY)
2070                                 continue;
2071                         if (min_key->type < BTRFS_EXTENT_DATA_KEY)
2072                                 start = 0;
2073                         else {
2074                                 start = min_key->offset;
2075                                 WARN_ON(!IS_ALIGNED(start, fs_info->sectorsize));
2076                         }
2077                 } else {
2078                         start = 0;
2079                 }
2080
2081                 if (unlikely(max_key->objectid == ino)) {
2082                         if (max_key->type < BTRFS_EXTENT_DATA_KEY)
2083                                 continue;
2084                         if (max_key->type > BTRFS_EXTENT_DATA_KEY) {
2085                                 end = (u64)-1;
2086                         } else {
2087                                 if (max_key->offset == 0)
2088                                         continue;
2089                                 end = max_key->offset;
2090                                 WARN_ON(!IS_ALIGNED(end, fs_info->sectorsize));
2091                                 end--;
2092                         }
2093                 } else {
2094                         end = (u64)-1;
2095                 }
2096
2097                 /* the lock_extent waits for readpage to complete */
2098                 lock_extent(&BTRFS_I(inode)->io_tree, start, end);
2099                 btrfs_drop_extent_cache(BTRFS_I(inode), start, end, 1);
2100                 unlock_extent(&BTRFS_I(inode)->io_tree, start, end);
2101         }
2102         return 0;
2103 }
2104
2105 static int find_next_key(struct btrfs_path *path, int level,
2106                          struct btrfs_key *key)
2107
2108 {
2109         while (level < BTRFS_MAX_LEVEL) {
2110                 if (!path->nodes[level])
2111                         break;
2112                 if (path->slots[level] + 1 <
2113                     btrfs_header_nritems(path->nodes[level])) {
2114                         btrfs_node_key_to_cpu(path->nodes[level], key,
2115                                               path->slots[level] + 1);
2116                         return 0;
2117                 }
2118                 level++;
2119         }
2120         return 1;
2121 }
2122
2123 /*
2124  * merge the relocated tree blocks in reloc tree with corresponding
2125  * fs tree.
2126  */
2127 static noinline_for_stack int merge_reloc_root(struct reloc_control *rc,
2128                                                struct btrfs_root *root)
2129 {
2130         struct btrfs_fs_info *fs_info = rc->extent_root->fs_info;
2131         LIST_HEAD(inode_list);
2132         struct btrfs_key key;
2133         struct btrfs_key next_key;
2134         struct btrfs_trans_handle *trans = NULL;
2135         struct btrfs_root *reloc_root;
2136         struct btrfs_root_item *root_item;
2137         struct btrfs_path *path;
2138         struct extent_buffer *leaf;
2139         int level;
2140         int max_level;
2141         int replaced = 0;
2142         int ret;
2143         int err = 0;
2144         u32 min_reserved;
2145
2146         path = btrfs_alloc_path();
2147         if (!path)
2148                 return -ENOMEM;
2149         path->reada = READA_FORWARD;
2150
2151         reloc_root = root->reloc_root;
2152         root_item = &reloc_root->root_item;
2153
2154         if (btrfs_disk_key_objectid(&root_item->drop_progress) == 0) {
2155                 level = btrfs_root_level(root_item);
2156                 extent_buffer_get(reloc_root->node);
2157                 path->nodes[level] = reloc_root->node;
2158                 path->slots[level] = 0;
2159         } else {
2160                 btrfs_disk_key_to_cpu(&key, &root_item->drop_progress);
2161
2162                 level = root_item->drop_level;
2163                 BUG_ON(level == 0);
2164                 path->lowest_level = level;
2165                 ret = btrfs_search_slot(NULL, reloc_root, &key, path, 0, 0);
2166                 path->lowest_level = 0;
2167                 if (ret < 0) {
2168                         btrfs_free_path(path);
2169                         return ret;
2170                 }
2171
2172                 btrfs_node_key_to_cpu(path->nodes[level], &next_key,
2173                                       path->slots[level]);
2174                 WARN_ON(memcmp(&key, &next_key, sizeof(key)));
2175
2176                 btrfs_unlock_up_safe(path, 0);
2177         }
2178
2179         min_reserved = fs_info->nodesize * (BTRFS_MAX_LEVEL - 1) * 2;
2180         memset(&next_key, 0, sizeof(next_key));
2181
2182         while (1) {
2183                 ret = btrfs_block_rsv_refill(root, rc->block_rsv, min_reserved,
2184                                              BTRFS_RESERVE_FLUSH_ALL);
2185                 if (ret) {
2186                         err = ret;
2187                         goto out;
2188                 }
2189                 trans = btrfs_start_transaction(root, 0);
2190                 if (IS_ERR(trans)) {
2191                         err = PTR_ERR(trans);
2192                         trans = NULL;
2193                         goto out;
2194                 }
2195                 trans->block_rsv = rc->block_rsv;
2196
2197                 replaced = 0;
2198                 max_level = level;
2199
2200                 ret = walk_down_reloc_tree(reloc_root, path, &level);
2201                 if (ret < 0) {
2202                         err = ret;
2203                         goto out;
2204                 }
2205                 if (ret > 0)
2206                         break;
2207
2208                 if (!find_next_key(path, level, &key) &&
2209                     btrfs_comp_cpu_keys(&next_key, &key) >= 0) {
2210                         ret = 0;
2211                 } else {
2212                         ret = replace_path(trans, rc, root, reloc_root, path,
2213                                            &next_key, level, max_level);
2214                 }
2215                 if (ret < 0) {
2216                         err = ret;
2217                         goto out;
2218                 }
2219
2220                 if (ret > 0) {
2221                         level = ret;
2222                         btrfs_node_key_to_cpu(path->nodes[level], &key,
2223                                               path->slots[level]);
2224                         replaced = 1;
2225                 }
2226
2227                 ret = walk_up_reloc_tree(reloc_root, path, &level);
2228                 if (ret > 0)
2229                         break;
2230
2231                 BUG_ON(level == 0);
2232                 /*
2233                  * save the merging progress in the drop_progress.
2234                  * this is OK since root refs == 1 in this case.
2235                  */
2236                 btrfs_node_key(path->nodes[level], &root_item->drop_progress,
2237                                path->slots[level]);
2238                 root_item->drop_level = level;
2239
2240                 btrfs_end_transaction_throttle(trans);
2241                 trans = NULL;
2242
2243                 btrfs_btree_balance_dirty(fs_info);
2244
2245                 if (replaced && rc->stage == UPDATE_DATA_PTRS)
2246                         invalidate_extent_cache(root, &key, &next_key);
2247         }
2248
2249         /*
2250          * handle the case only one block in the fs tree need to be
2251          * relocated and the block is tree root.
2252          */
2253         leaf = btrfs_lock_root_node(root);
2254         ret = btrfs_cow_block(trans, root, leaf, NULL, 0, &leaf);
2255         btrfs_tree_unlock(leaf);
2256         free_extent_buffer(leaf);
2257         if (ret < 0)
2258                 err = ret;
2259 out:
2260         btrfs_free_path(path);
2261
2262         if (err == 0) {
2263                 memset(&root_item->drop_progress, 0,
2264                        sizeof(root_item->drop_progress));
2265                 root_item->drop_level = 0;
2266                 btrfs_set_root_refs(root_item, 0);
2267                 btrfs_update_reloc_root(trans, root);
2268         }
2269
2270         if (trans)
2271                 btrfs_end_transaction_throttle(trans);
2272
2273         btrfs_btree_balance_dirty(fs_info);
2274
2275         if (replaced && rc->stage == UPDATE_DATA_PTRS)
2276                 invalidate_extent_cache(root, &key, &next_key);
2277
2278         return err;
2279 }
2280
2281 static noinline_for_stack
2282 int prepare_to_merge(struct reloc_control *rc, int err)
2283 {
2284         struct btrfs_root *root = rc->extent_root;
2285         struct btrfs_fs_info *fs_info = root->fs_info;
2286         struct btrfs_root *reloc_root;
2287         struct btrfs_trans_handle *trans;
2288         LIST_HEAD(reloc_roots);
2289         u64 num_bytes = 0;
2290         int ret;
2291
2292         mutex_lock(&fs_info->reloc_mutex);
2293         rc->merging_rsv_size += fs_info->nodesize * (BTRFS_MAX_LEVEL - 1) * 2;
2294         rc->merging_rsv_size += rc->nodes_relocated * 2;
2295         mutex_unlock(&fs_info->reloc_mutex);
2296
2297 again:
2298         if (!err) {
2299                 num_bytes = rc->merging_rsv_size;
2300                 ret = btrfs_block_rsv_add(root, rc->block_rsv, num_bytes,
2301                                           BTRFS_RESERVE_FLUSH_ALL);
2302                 if (ret)
2303                         err = ret;
2304         }
2305
2306         trans = btrfs_join_transaction(rc->extent_root);
2307         if (IS_ERR(trans)) {
2308                 if (!err)
2309                         btrfs_block_rsv_release(fs_info, rc->block_rsv,
2310                                                 num_bytes);
2311                 return PTR_ERR(trans);
2312         }
2313
2314         if (!err) {
2315                 if (num_bytes != rc->merging_rsv_size) {
2316                         btrfs_end_transaction(trans);
2317                         btrfs_block_rsv_release(fs_info, rc->block_rsv,
2318                                                 num_bytes);
2319                         goto again;
2320                 }
2321         }
2322
2323         rc->merge_reloc_tree = 1;
2324
2325         while (!list_empty(&rc->reloc_roots)) {
2326                 reloc_root = list_entry(rc->reloc_roots.next,
2327                                         struct btrfs_root, root_list);
2328                 list_del_init(&reloc_root->root_list);
2329
2330                 root = read_fs_root(fs_info, reloc_root->root_key.offset);
2331                 BUG_ON(IS_ERR(root));
2332                 BUG_ON(root->reloc_root != reloc_root);
2333
2334                 /*
2335                  * set reference count to 1, so btrfs_recover_relocation
2336                  * knows it should resumes merging
2337                  */
2338                 if (!err)
2339                         btrfs_set_root_refs(&reloc_root->root_item, 1);
2340                 btrfs_update_reloc_root(trans, root);
2341
2342                 list_add(&reloc_root->root_list, &reloc_roots);
2343         }
2344
2345         list_splice(&reloc_roots, &rc->reloc_roots);
2346
2347         if (!err)
2348                 btrfs_commit_transaction(trans);
2349         else
2350                 btrfs_end_transaction(trans);
2351         return err;
2352 }
2353
2354 static noinline_for_stack
2355 void free_reloc_roots(struct list_head *list)
2356 {
2357         struct btrfs_root *reloc_root;
2358
2359         while (!list_empty(list)) {
2360                 reloc_root = list_entry(list->next, struct btrfs_root,
2361                                         root_list);
2362                 __del_reloc_root(reloc_root);
2363                 free_extent_buffer(reloc_root->node);
2364                 free_extent_buffer(reloc_root->commit_root);
2365                 reloc_root->node = NULL;
2366                 reloc_root->commit_root = NULL;
2367         }
2368 }
2369
2370 static noinline_for_stack
2371 void merge_reloc_roots(struct reloc_control *rc)
2372 {
2373         struct btrfs_fs_info *fs_info = rc->extent_root->fs_info;
2374         struct btrfs_root *root;
2375         struct btrfs_root *reloc_root;
2376         LIST_HEAD(reloc_roots);
2377         int found = 0;
2378         int ret = 0;
2379 again:
2380         root = rc->extent_root;
2381
2382         /*
2383          * this serializes us with btrfs_record_root_in_transaction,
2384          * we have to make sure nobody is in the middle of
2385          * adding their roots to the list while we are
2386          * doing this splice
2387          */
2388         mutex_lock(&fs_info->reloc_mutex);
2389         list_splice_init(&rc->reloc_roots, &reloc_roots);
2390         mutex_unlock(&fs_info->reloc_mutex);
2391
2392         while (!list_empty(&reloc_roots)) {
2393                 found = 1;
2394                 reloc_root = list_entry(reloc_roots.next,
2395                                         struct btrfs_root, root_list);
2396
2397                 if (btrfs_root_refs(&reloc_root->root_item) > 0) {
2398                         root = read_fs_root(fs_info,
2399                                             reloc_root->root_key.offset);
2400                         BUG_ON(IS_ERR(root));
2401                         BUG_ON(root->reloc_root != reloc_root);
2402
2403                         ret = merge_reloc_root(rc, root);
2404                         if (ret) {
2405                                 if (list_empty(&reloc_root->root_list))
2406                                         list_add_tail(&reloc_root->root_list,
2407                                                       &reloc_roots);
2408                                 goto out;
2409                         }
2410                 } else {
2411                         list_del_init(&reloc_root->root_list);
2412                 }
2413
2414                 ret = btrfs_drop_snapshot(reloc_root, rc->block_rsv, 0, 1);
2415                 if (ret < 0) {
2416                         if (list_empty(&reloc_root->root_list))
2417                                 list_add_tail(&reloc_root->root_list,
2418                                               &reloc_roots);
2419                         goto out;
2420                 }
2421         }
2422
2423         if (found) {
2424                 found = 0;
2425                 goto again;
2426         }
2427 out:
2428         if (ret) {
2429                 btrfs_handle_fs_error(fs_info, ret, NULL);
2430                 if (!list_empty(&reloc_roots))
2431                         free_reloc_roots(&reloc_roots);
2432
2433                 /* new reloc root may be added */
2434                 mutex_lock(&fs_info->reloc_mutex);
2435                 list_splice_init(&rc->reloc_roots, &reloc_roots);
2436                 mutex_unlock(&fs_info->reloc_mutex);
2437                 if (!list_empty(&reloc_roots))
2438                         free_reloc_roots(&reloc_roots);
2439         }
2440
2441         BUG_ON(!RB_EMPTY_ROOT(&rc->reloc_root_tree.rb_root));
2442 }
2443
2444 static void free_block_list(struct rb_root *blocks)
2445 {
2446         struct tree_block *block;
2447         struct rb_node *rb_node;
2448         while ((rb_node = rb_first(blocks))) {
2449                 block = rb_entry(rb_node, struct tree_block, rb_node);
2450                 rb_erase(rb_node, blocks);
2451                 kfree(block);
2452         }
2453 }
2454
2455 static int record_reloc_root_in_trans(struct btrfs_trans_handle *trans,
2456                                       struct btrfs_root *reloc_root)
2457 {
2458         struct btrfs_fs_info *fs_info = reloc_root->fs_info;
2459         struct btrfs_root *root;
2460
2461         if (reloc_root->last_trans == trans->transid)
2462                 return 0;
2463
2464         root = read_fs_root(fs_info, reloc_root->root_key.offset);
2465         BUG_ON(IS_ERR(root));
2466         BUG_ON(root->reloc_root != reloc_root);
2467
2468         return btrfs_record_root_in_trans(trans, root);
2469 }
2470
2471 static noinline_for_stack
2472 struct btrfs_root *select_reloc_root(struct btrfs_trans_handle *trans,
2473                                      struct reloc_control *rc,
2474                                      struct backref_node *node,
2475                                      struct backref_edge *edges[])
2476 {
2477         struct backref_node *next;
2478         struct btrfs_root *root;
2479         int index = 0;
2480
2481         next = node;
2482         while (1) {
2483                 cond_resched();
2484                 next = walk_up_backref(next, edges, &index);
2485                 root = next->root;
2486                 BUG_ON(!root);
2487                 BUG_ON(!test_bit(BTRFS_ROOT_REF_COWS, &root->state));
2488
2489                 if (root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID) {
2490                         record_reloc_root_in_trans(trans, root);
2491                         break;
2492                 }
2493
2494                 btrfs_record_root_in_trans(trans, root);
2495                 root = root->reloc_root;
2496
2497                 if (next->new_bytenr != root->node->start) {
2498                         BUG_ON(next->new_bytenr);
2499                         BUG_ON(!list_empty(&next->list));
2500                         next->new_bytenr = root->node->start;
2501                         next->root = root;
2502                         list_add_tail(&next->list,
2503                                       &rc->backref_cache.changed);
2504                         __mark_block_processed(rc, next);
2505                         break;
2506                 }
2507
2508                 WARN_ON(1);
2509                 root = NULL;
2510                 next = walk_down_backref(edges, &index);
2511                 if (!next || next->level <= node->level)
2512                         break;
2513         }
2514         if (!root)
2515                 return NULL;
2516
2517         next = node;
2518         /* setup backref node path for btrfs_reloc_cow_block */
2519         while (1) {
2520                 rc->backref_cache.path[next->level] = next;
2521                 if (--index < 0)
2522                         break;
2523                 next = edges[index]->node[UPPER];
2524         }
2525         return root;
2526 }
2527
2528 /*
2529  * select a tree root for relocation. return NULL if the block
2530  * is reference counted. we should use do_relocation() in this
2531  * case. return a tree root pointer if the block isn't reference
2532  * counted. return -ENOENT if the block is root of reloc tree.
2533  */
2534 static noinline_for_stack
2535 struct btrfs_root *select_one_root(struct backref_node *node)
2536 {
2537         struct backref_node *next;
2538         struct btrfs_root *root;
2539         struct btrfs_root *fs_root = NULL;
2540         struct backref_edge *edges[BTRFS_MAX_LEVEL - 1];
2541         int index = 0;
2542
2543         next = node;
2544         while (1) {
2545                 cond_resched();
2546                 next = walk_up_backref(next, edges, &index);
2547                 root = next->root;
2548                 BUG_ON(!root);
2549
2550                 /* no other choice for non-references counted tree */
2551                 if (!test_bit(BTRFS_ROOT_REF_COWS, &root->state))
2552                         return root;
2553
2554                 if (root->root_key.objectid != BTRFS_TREE_RELOC_OBJECTID)
2555                         fs_root = root;
2556
2557                 if (next != node)
2558                         return NULL;
2559
2560                 next = walk_down_backref(edges, &index);
2561                 if (!next || next->level <= node->level)
2562                         break;
2563         }
2564
2565         if (!fs_root)
2566                 return ERR_PTR(-ENOENT);
2567         return fs_root;
2568 }
2569
2570 static noinline_for_stack
2571 u64 calcu_metadata_size(struct reloc_control *rc,
2572                         struct backref_node *node, int reserve)
2573 {
2574         struct btrfs_fs_info *fs_info = rc->extent_root->fs_info;
2575         struct backref_node *next = node;
2576         struct backref_edge *edge;
2577         struct backref_edge *edges[BTRFS_MAX_LEVEL - 1];
2578         u64 num_bytes = 0;
2579         int index = 0;
2580
2581         BUG_ON(reserve && node->processed);
2582
2583         while (next) {
2584                 cond_resched();
2585                 while (1) {
2586                         if (next->processed && (reserve || next != node))
2587                                 break;
2588
2589                         num_bytes += fs_info->nodesize;
2590
2591                         if (list_empty(&next->upper))
2592                                 break;
2593
2594                         edge = list_entry(next->upper.next,
2595                                           struct backref_edge, list[LOWER]);
2596                         edges[index++] = edge;
2597                         next = edge->node[UPPER];
2598                 }
2599                 next = walk_down_backref(edges, &index);
2600         }
2601         return num_bytes;
2602 }
2603
2604 static int reserve_metadata_space(struct btrfs_trans_handle *trans,
2605                                   struct reloc_control *rc,
2606                                   struct backref_node *node)
2607 {
2608         struct btrfs_root *root = rc->extent_root;
2609         struct btrfs_fs_info *fs_info = root->fs_info;
2610         u64 num_bytes;
2611         int ret;
2612         u64 tmp;
2613
2614         num_bytes = calcu_metadata_size(rc, node, 1) * 2;
2615
2616         trans->block_rsv = rc->block_rsv;
2617         rc->reserved_bytes += num_bytes;
2618
2619         /*
2620          * We are under a transaction here so we can only do limited flushing.
2621          * If we get an enospc just kick back -EAGAIN so we know to drop the
2622          * transaction and try to refill when we can flush all the things.
2623          */
2624         ret = btrfs_block_rsv_refill(root, rc->block_rsv, num_bytes,
2625                                 BTRFS_RESERVE_FLUSH_LIMIT);
2626         if (ret) {
2627                 tmp = fs_info->nodesize * RELOCATION_RESERVED_NODES;
2628                 while (tmp <= rc->reserved_bytes)
2629                         tmp <<= 1;
2630                 /*
2631                  * only one thread can access block_rsv at this point,
2632                  * so we don't need hold lock to protect block_rsv.
2633                  * we expand more reservation size here to allow enough
2634                  * space for relocation and we will return eailer in
2635                  * enospc case.
2636                  */
2637                 rc->block_rsv->size = tmp + fs_info->nodesize *
2638                                       RELOCATION_RESERVED_NODES;
2639                 return -EAGAIN;
2640         }
2641
2642         return 0;
2643 }
2644
2645 /*
2646  * relocate a block tree, and then update pointers in upper level
2647  * blocks that reference the block to point to the new location.
2648  *
2649  * if called by link_to_upper, the block has already been relocated.
2650  * in that case this function just updates pointers.
2651  */
2652 static int do_relocation(struct btrfs_trans_handle *trans,
2653                          struct reloc_control *rc,
2654                          struct backref_node *node,
2655                          struct btrfs_key *key,
2656                          struct btrfs_path *path, int lowest)
2657 {
2658         struct btrfs_fs_info *fs_info = rc->extent_root->fs_info;
2659         struct backref_node *upper;
2660         struct backref_edge *edge;
2661         struct backref_edge *edges[BTRFS_MAX_LEVEL - 1];
2662         struct btrfs_root *root;
2663         struct extent_buffer *eb;
2664         u32 blocksize;
2665         u64 bytenr;
2666         u64 generation;
2667         int slot;
2668         int ret;
2669         int err = 0;
2670
2671         BUG_ON(lowest && node->eb);
2672
2673         path->lowest_level = node->level + 1;
2674         rc->backref_cache.path[node->level] = node;
2675         list_for_each_entry(edge, &node->upper, list[LOWER]) {
2676                 struct btrfs_key first_key;
2677
2678                 cond_resched();
2679
2680                 upper = edge->node[UPPER];
2681                 root = select_reloc_root(trans, rc, upper, edges);
2682                 BUG_ON(!root);
2683
2684                 if (upper->eb && !upper->locked) {
2685                         if (!lowest) {
2686                                 ret = btrfs_bin_search(upper->eb, key,
2687                                                        upper->level, &slot);
2688                                 BUG_ON(ret);
2689                                 bytenr = btrfs_node_blockptr(upper->eb, slot);
2690                                 if (node->eb->start == bytenr)
2691                                         goto next;
2692                         }
2693                         drop_node_buffer(upper);
2694                 }
2695
2696                 if (!upper->eb) {
2697                         ret = btrfs_search_slot(trans, root, key, path, 0, 1);
2698                         if (ret) {
2699                                 if (ret < 0)
2700                                         err = ret;
2701                                 else
2702                                         err = -ENOENT;
2703
2704                                 btrfs_release_path(path);
2705                                 break;
2706                         }
2707
2708                         if (!upper->eb) {
2709                                 upper->eb = path->nodes[upper->level];
2710                                 path->nodes[upper->level] = NULL;
2711                         } else {
2712                                 BUG_ON(upper->eb != path->nodes[upper->level]);
2713                         }
2714
2715                         upper->locked = 1;
2716                         path->locks[upper->level] = 0;
2717
2718                         slot = path->slots[upper->level];
2719                         btrfs_release_path(path);
2720                 } else {
2721                         ret = btrfs_bin_search(upper->eb, key, upper->level,
2722                                                &slot);
2723                         BUG_ON(ret);
2724                 }
2725
2726                 bytenr = btrfs_node_blockptr(upper->eb, slot);
2727                 if (lowest) {
2728                         if (bytenr != node->bytenr) {
2729                                 btrfs_err(root->fs_info,
2730                 "lowest leaf/node mismatch: bytenr %llu node->bytenr %llu slot %d upper %llu",
2731                                           bytenr, node->bytenr, slot,
2732                                           upper->eb->start);
2733                                 err = -EIO;
2734                                 goto next;
2735                         }
2736                 } else {
2737                         if (node->eb->start == bytenr)
2738                                 goto next;
2739                 }
2740
2741                 blocksize = root->fs_info->nodesize;
2742                 generation = btrfs_node_ptr_generation(upper->eb, slot);
2743                 btrfs_node_key_to_cpu(upper->eb, &first_key, slot);
2744                 eb = read_tree_block(fs_info, bytenr, generation,
2745                                      upper->level - 1, &first_key);
2746                 if (IS_ERR(eb)) {
2747                         err = PTR_ERR(eb);
2748                         goto next;
2749                 } else if (!extent_buffer_uptodate(eb)) {
2750                         free_extent_buffer(eb);
2751                         err = -EIO;
2752                         goto next;
2753                 }
2754                 btrfs_tree_lock(eb);
2755                 btrfs_set_lock_blocking(eb);
2756
2757                 if (!node->eb) {
2758                         ret = btrfs_cow_block(trans, root, eb, upper->eb,
2759                                               slot, &eb);
2760                         btrfs_tree_unlock(eb);
2761                         free_extent_buffer(eb);
2762                         if (ret < 0) {
2763                                 err = ret;
2764                                 goto next;
2765                         }
2766                         BUG_ON(node->eb != eb);
2767                 } else {
2768                         btrfs_set_node_blockptr(upper->eb, slot,
2769                                                 node->eb->start);
2770                         btrfs_set_node_ptr_generation(upper->eb, slot,
2771                                                       trans->transid);
2772                         btrfs_mark_buffer_dirty(upper->eb);
2773
2774                         ret = btrfs_inc_extent_ref(trans, root,
2775                                                 node->eb->start, blocksize,
2776                                                 upper->eb->start,
2777                                                 btrfs_header_owner(upper->eb),
2778                                                 node->level, 0);
2779                         BUG_ON(ret);
2780
2781                         ret = btrfs_drop_subtree(trans, root, eb, upper->eb);
2782                         BUG_ON(ret);
2783                 }
2784 next:
2785                 if (!upper->pending)
2786                         drop_node_buffer(upper);
2787                 else
2788                         unlock_node_buffer(upper);
2789                 if (err)
2790                         break;
2791         }
2792
2793         if (!err && node->pending) {
2794                 drop_node_buffer(node);
2795                 list_move_tail(&node->list, &rc->backref_cache.changed);
2796                 node->pending = 0;
2797         }
2798
2799         path->lowest_level = 0;
2800         BUG_ON(err == -ENOSPC);
2801         return err;
2802 }
2803
2804 static int link_to_upper(struct btrfs_trans_handle *trans,
2805                          struct reloc_control *rc,
2806                          struct backref_node *node,
2807                          struct btrfs_path *path)
2808 {
2809         struct btrfs_key key;
2810
2811         btrfs_node_key_to_cpu(node->eb, &key, 0);
2812         return do_relocation(trans, rc, node, &key, path, 0);
2813 }
2814
2815 static int finish_pending_nodes(struct btrfs_trans_handle *trans,
2816                                 struct reloc_control *rc,
2817                                 struct btrfs_path *path, int err)
2818 {
2819         LIST_HEAD(list);
2820         struct backref_cache *cache = &rc->backref_cache;
2821         struct backref_node *node;
2822         int level;
2823         int ret;
2824
2825         for (level = 0; level < BTRFS_MAX_LEVEL; level++) {
2826                 while (!list_empty(&cache->pending[level])) {
2827                         node = list_entry(cache->pending[level].next,
2828                                           struct backref_node, list);
2829                         list_move_tail(&node->list, &list);
2830                         BUG_ON(!node->pending);
2831
2832                         if (!err) {
2833                                 ret = link_to_upper(trans, rc, node, path);
2834                                 if (ret < 0)
2835                                         err = ret;
2836                         }
2837                 }
2838                 list_splice_init(&list, &cache->pending[level]);
2839         }
2840         return err;
2841 }
2842
2843 static void mark_block_processed(struct reloc_control *rc,
2844                                  u64 bytenr, u32 blocksize)
2845 {
2846         set_extent_bits(&rc->processed_blocks, bytenr, bytenr + blocksize - 1,
2847                         EXTENT_DIRTY);
2848 }
2849
2850 static void __mark_block_processed(struct reloc_control *rc,
2851                                    struct backref_node *node)
2852 {
2853         u32 blocksize;
2854         if (node->level == 0 ||
2855             in_block_group(node->bytenr, rc->block_group)) {
2856                 blocksize = rc->extent_root->fs_info->nodesize;
2857                 mark_block_processed(rc, node->bytenr, blocksize);
2858         }
2859         node->processed = 1;
2860 }
2861
2862 /*
2863  * mark a block and all blocks directly/indirectly reference the block
2864  * as processed.
2865  */
2866 static void update_processed_blocks(struct reloc_control *rc,
2867                                     struct backref_node *node)
2868 {
2869         struct backref_node *next = node;
2870         struct backref_edge *edge;
2871         struct backref_edge *edges[BTRFS_MAX_LEVEL - 1];
2872         int index = 0;
2873
2874         while (next) {
2875                 cond_resched();
2876                 while (1) {
2877                         if (next->processed)
2878                                 break;
2879
2880                         __mark_block_processed(rc, next);
2881
2882                         if (list_empty(&next->upper))
2883                                 break;
2884
2885                         edge = list_entry(next->upper.next,
2886                                           struct backref_edge, list[LOWER]);
2887                         edges[index++] = edge;
2888                         next = edge->node[UPPER];
2889                 }
2890                 next = walk_down_backref(edges, &index);
2891         }
2892 }
2893
2894 static int tree_block_processed(u64 bytenr, struct reloc_control *rc)
2895 {
2896         u32 blocksize = rc->extent_root->fs_info->nodesize;
2897
2898         if (test_range_bit(&rc->processed_blocks, bytenr,
2899                            bytenr + blocksize - 1, EXTENT_DIRTY, 1, NULL))
2900                 return 1;
2901         return 0;
2902 }
2903
2904 static int get_tree_block_key(struct btrfs_fs_info *fs_info,
2905                               struct tree_block *block)
2906 {
2907         struct extent_buffer *eb;
2908
2909         BUG_ON(block->key_ready);
2910         eb = read_tree_block(fs_info, block->bytenr, block->key.offset,
2911                              block->level, NULL);
2912         if (IS_ERR(eb)) {
2913                 return PTR_ERR(eb);
2914         } else if (!extent_buffer_uptodate(eb)) {
2915                 free_extent_buffer(eb);
2916                 return -EIO;
2917         }
2918         if (block->level == 0)
2919                 btrfs_item_key_to_cpu(eb, &block->key, 0);
2920         else
2921                 btrfs_node_key_to_cpu(eb, &block->key, 0);
2922         free_extent_buffer(eb);
2923         block->key_ready = 1;
2924         return 0;
2925 }
2926
2927 /*
2928  * helper function to relocate a tree block
2929  */
2930 static int relocate_tree_block(struct btrfs_trans_handle *trans,
2931                                 struct reloc_control *rc,
2932                                 struct backref_node *node,
2933                                 struct btrfs_key *key,
2934                                 struct btrfs_path *path)
2935 {
2936         struct btrfs_root *root;
2937         int ret = 0;
2938
2939         if (!node)
2940                 return 0;
2941
2942         BUG_ON(node->processed);
2943         root = select_one_root(node);
2944         if (root == ERR_PTR(-ENOENT)) {
2945                 update_processed_blocks(rc, node);
2946                 goto out;
2947         }
2948
2949         if (!root || test_bit(BTRFS_ROOT_REF_COWS, &root->state)) {
2950                 ret = reserve_metadata_space(trans, rc, node);
2951                 if (ret)
2952                         goto out;
2953         }
2954
2955         if (root) {
2956                 if (test_bit(BTRFS_ROOT_REF_COWS, &root->state)) {
2957                         BUG_ON(node->new_bytenr);
2958                         BUG_ON(!list_empty(&node->list));
2959                         btrfs_record_root_in_trans(trans, root);
2960                         root = root->reloc_root;
2961                         node->new_bytenr = root->node->start;
2962                         node->root = root;
2963                         list_add_tail(&node->list, &rc->backref_cache.changed);
2964                 } else {
2965                         path->lowest_level = node->level;
2966                         ret = btrfs_search_slot(trans, root, key, path, 0, 1);
2967                         btrfs_release_path(path);
2968                         if (ret > 0)
2969                                 ret = 0;
2970                 }
2971                 if (!ret)
2972                         update_processed_blocks(rc, node);
2973         } else {
2974                 ret = do_relocation(trans, rc, node, key, path, 1);
2975         }
2976 out:
2977         if (ret || node->level == 0 || node->cowonly)
2978                 remove_backref_node(&rc->backref_cache, node);
2979         return ret;
2980 }
2981
2982 /*
2983  * relocate a list of blocks
2984  */
2985 static noinline_for_stack
2986 int relocate_tree_blocks(struct btrfs_trans_handle *trans,
2987                          struct reloc_control *rc, struct rb_root *blocks)
2988 {
2989         struct btrfs_fs_info *fs_info = rc->extent_root->fs_info;
2990         struct backref_node *node;
2991         struct btrfs_path *path;
2992         struct tree_block *block;
2993         struct tree_block *next;
2994         int ret;
2995         int err = 0;
2996
2997         path = btrfs_alloc_path();
2998         if (!path) {
2999                 err = -ENOMEM;
3000                 goto out_free_blocks;
3001         }
3002
3003         /* Kick in readahead for tree blocks with missing keys */
3004         rbtree_postorder_for_each_entry_safe(block, next, blocks, rb_node) {
3005                 if (!block->key_ready)
3006                         readahead_tree_block(fs_info, block->bytenr);
3007         }
3008
3009         /* Get first keys */
3010         rbtree_postorder_for_each_entry_safe(block, next, blocks, rb_node) {
3011                 if (!block->key_ready) {
3012                         err = get_tree_block_key(fs_info, block);
3013                         if (err)
3014                                 goto out_free_path;
3015                 }
3016         }
3017
3018         /* Do tree relocation */
3019         rbtree_postorder_for_each_entry_safe(block, next, blocks, rb_node) {
3020                 node = build_backref_tree(rc, &block->key,
3021                                           block->level, block->bytenr);
3022                 if (IS_ERR(node)) {
3023                         err = PTR_ERR(node);
3024                         goto out;
3025                 }
3026
3027                 ret = relocate_tree_block(trans, rc, node, &block->key,
3028                                           path);
3029                 if (ret < 0) {
3030                         if (ret != -EAGAIN || &block->rb_node == rb_first(blocks))
3031                                 err = ret;
3032                         goto out;
3033                 }
3034         }
3035 out:
3036         err = finish_pending_nodes(trans, rc, path, err);
3037
3038 out_free_path:
3039         btrfs_free_path(path);
3040 out_free_blocks:
3041         free_block_list(blocks);
3042         return err;
3043 }
3044
3045 static noinline_for_stack
3046 int prealloc_file_extent_cluster(struct inode *inode,
3047                                  struct file_extent_cluster *cluster)
3048 {
3049         u64 alloc_hint = 0;
3050         u64 start;
3051         u64 end;
3052         u64 offset = BTRFS_I(inode)->index_cnt;
3053         u64 num_bytes;
3054         int nr = 0;
3055         int ret = 0;
3056         u64 prealloc_start = cluster->start - offset;
3057         u64 prealloc_end = cluster->end - offset;
3058         u64 cur_offset;
3059         struct extent_changeset *data_reserved = NULL;
3060
3061         BUG_ON(cluster->start != cluster->boundary[0]);
3062         inode_lock(inode);
3063
3064         ret = btrfs_check_data_free_space(inode, &data_reserved, prealloc_start,
3065                                           prealloc_end + 1 - prealloc_start);
3066         if (ret)
3067                 goto out;
3068
3069         cur_offset = prealloc_start;
3070         while (nr < cluster->nr) {
3071                 start = cluster->boundary[nr] - offset;
3072                 if (nr + 1 < cluster->nr)
3073                         end = cluster->boundary[nr + 1] - 1 - offset;
3074                 else
3075                         end = cluster->end - offset;
3076
3077                 lock_extent(&BTRFS_I(inode)->io_tree, start, end);
3078                 num_bytes = end + 1 - start;
3079                 if (cur_offset < start)
3080                         btrfs_free_reserved_data_space(inode, data_reserved,
3081                                         cur_offset, start - cur_offset);
3082                 ret = btrfs_prealloc_file_range(inode, 0, start,
3083                                                 num_bytes, num_bytes,
3084                                                 end + 1, &alloc_hint);
3085                 cur_offset = end + 1;
3086                 unlock_extent(&BTRFS_I(inode)->io_tree, start, end);
3087                 if (ret)
3088                         break;
3089                 nr++;
3090         }
3091         if (cur_offset < prealloc_end)
3092                 btrfs_free_reserved_data_space(inode, data_reserved,
3093                                 cur_offset, prealloc_end + 1 - cur_offset);
3094 out:
3095         inode_unlock(inode);
3096         extent_changeset_free(data_reserved);
3097         return ret;
3098 }
3099
3100 static noinline_for_stack
3101 int setup_extent_mapping(struct inode *inode, u64 start, u64 end,
3102                          u64 block_start)
3103 {
3104         struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
3105         struct extent_map_tree *em_tree = &BTRFS_I(inode)->extent_tree;
3106         struct extent_map *em;
3107         int ret = 0;
3108
3109         em = alloc_extent_map();
3110         if (!em)
3111                 return -ENOMEM;
3112
3113         em->start = start;
3114         em->len = end + 1 - start;
3115         em->block_len = em->len;
3116         em->block_start = block_start;
3117         em->bdev = fs_info->fs_devices->latest_bdev;
3118         set_bit(EXTENT_FLAG_PINNED, &em->flags);
3119
3120         lock_extent(&BTRFS_I(inode)->io_tree, start, end);
3121         while (1) {
3122                 write_lock(&em_tree->lock);
3123                 ret = add_extent_mapping(em_tree, em, 0);
3124                 write_unlock(&em_tree->lock);
3125                 if (ret != -EEXIST) {
3126                         free_extent_map(em);
3127                         break;
3128                 }
3129                 btrfs_drop_extent_cache(BTRFS_I(inode), start, end, 0);
3130         }
3131         unlock_extent(&BTRFS_I(inode)->io_tree, start, end);
3132         return ret;
3133 }
3134
3135 static int relocate_file_extent_cluster(struct inode *inode,
3136                                         struct file_extent_cluster *cluster)
3137 {
3138         struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
3139         u64 page_start;
3140         u64 page_end;
3141         u64 offset = BTRFS_I(inode)->index_cnt;
3142         unsigned long index;
3143         unsigned long last_index;
3144         struct page *page;
3145         struct file_ra_state *ra;
3146         gfp_t mask = btrfs_alloc_write_mask(inode->i_mapping);
3147         int nr = 0;
3148         int ret = 0;
3149
3150         if (!cluster->nr)
3151                 return 0;
3152
3153         ra = kzalloc(sizeof(*ra), GFP_NOFS);
3154         if (!ra)
3155                 return -ENOMEM;
3156
3157         ret = prealloc_file_extent_cluster(inode, cluster);
3158         if (ret)
3159                 goto out;
3160
3161         file_ra_state_init(ra, inode->i_mapping);
3162
3163         ret = setup_extent_mapping(inode, cluster->start - offset,
3164                                    cluster->end - offset, cluster->start);
3165         if (ret)
3166                 goto out;
3167
3168         index = (cluster->start - offset) >> PAGE_SHIFT;
3169         last_index = (cluster->end - offset) >> PAGE_SHIFT;
3170         while (index <= last_index) {
3171                 ret = btrfs_delalloc_reserve_metadata(BTRFS_I(inode),
3172                                 PAGE_SIZE);
3173                 if (ret)
3174                         goto out;
3175
3176                 page = find_lock_page(inode->i_mapping, index);
3177                 if (!page) {
3178                         page_cache_sync_readahead(inode->i_mapping,
3179                                                   ra, NULL, index,
3180                                                   last_index + 1 - index);
3181                         page = find_or_create_page(inode->i_mapping, index,
3182                                                    mask);
3183                         if (!page) {
3184                                 btrfs_delalloc_release_metadata(BTRFS_I(inode),
3185                                                         PAGE_SIZE, true);
3186                                 ret = -ENOMEM;
3187                                 goto out;
3188                         }
3189                 }
3190
3191                 if (PageReadahead(page)) {
3192                         page_cache_async_readahead(inode->i_mapping,
3193                                                    ra, NULL, page, index,
3194                                                    last_index + 1 - index);
3195                 }
3196
3197                 if (!PageUptodate(page)) {
3198                         btrfs_readpage(NULL, page);
3199                         lock_page(page);
3200                         if (!PageUptodate(page)) {
3201                                 unlock_page(page);
3202                                 put_page(page);
3203                                 btrfs_delalloc_release_metadata(BTRFS_I(inode),
3204                                                         PAGE_SIZE, true);
3205                                 btrfs_delalloc_release_extents(BTRFS_I(inode),
3206                                                                PAGE_SIZE, true);
3207                                 ret = -EIO;
3208                                 goto out;
3209                         }
3210                 }
3211
3212                 page_start = page_offset(page);
3213                 page_end = page_start + PAGE_SIZE - 1;
3214
3215                 lock_extent(&BTRFS_I(inode)->io_tree, page_start, page_end);
3216
3217                 set_page_extent_mapped(page);
3218
3219                 if (nr < cluster->nr &&
3220                     page_start + offset == cluster->boundary[nr]) {
3221                         set_extent_bits(&BTRFS_I(inode)->io_tree,
3222                                         page_start, page_end,
3223                                         EXTENT_BOUNDARY);
3224                         nr++;
3225                 }
3226
3227                 ret = btrfs_set_extent_delalloc(inode, page_start, page_end, 0,
3228                                                 NULL, 0);
3229                 if (ret) {
3230                         unlock_page(page);
3231                         put_page(page);
3232                         btrfs_delalloc_release_metadata(BTRFS_I(inode),
3233                                                          PAGE_SIZE, true);
3234                         btrfs_delalloc_release_extents(BTRFS_I(inode),
3235                                                        PAGE_SIZE, true);
3236
3237                         clear_extent_bits(&BTRFS_I(inode)->io_tree,
3238                                           page_start, page_end,
3239                                           EXTENT_LOCKED | EXTENT_BOUNDARY);
3240                         goto out;
3241
3242                 }
3243                 set_page_dirty(page);
3244
3245                 unlock_extent(&BTRFS_I(inode)->io_tree,
3246                               page_start, page_end);
3247                 unlock_page(page);
3248                 put_page(page);
3249
3250                 index++;
3251                 btrfs_delalloc_release_extents(BTRFS_I(inode), PAGE_SIZE,
3252                                                false);
3253                 balance_dirty_pages_ratelimited(inode->i_mapping);
3254                 btrfs_throttle(fs_info);
3255         }
3256         WARN_ON(nr != cluster->nr);
3257 out:
3258         kfree(ra);
3259         return ret;
3260 }
3261
3262 static noinline_for_stack
3263 int relocate_data_extent(struct inode *inode, struct btrfs_key *extent_key,
3264                          struct file_extent_cluster *cluster)
3265 {
3266         int ret;
3267
3268         if (cluster->nr > 0 && extent_key->objectid != cluster->end + 1) {
3269                 ret = relocate_file_extent_cluster(inode, cluster);
3270                 if (ret)
3271                         return ret;
3272                 cluster->nr = 0;
3273         }
3274
3275         if (!cluster->nr)
3276                 cluster->start = extent_key->objectid;
3277         else
3278                 BUG_ON(cluster->nr >= MAX_EXTENTS);
3279         cluster->end = extent_key->objectid + extent_key->offset - 1;
3280         cluster->boundary[cluster->nr] = extent_key->objectid;
3281         cluster->nr++;
3282
3283         if (cluster->nr >= MAX_EXTENTS) {
3284                 ret = relocate_file_extent_cluster(inode, cluster);
3285                 if (ret)
3286                         return ret;
3287                 cluster->nr = 0;
3288         }
3289         return 0;
3290 }
3291
3292 /*
3293  * helper to add a tree block to the list.
3294  * the major work is getting the generation and level of the block
3295  */
3296 static int add_tree_block(struct reloc_control *rc,
3297                           struct btrfs_key *extent_key,
3298                           struct btrfs_path *path,
3299                           struct rb_root *blocks)
3300 {
3301         struct extent_buffer *eb;
3302         struct btrfs_extent_item *ei;
3303         struct btrfs_tree_block_info *bi;
3304         struct tree_block *block;
3305         struct rb_node *rb_node;
3306         u32 item_size;
3307         int level = -1;
3308         u64 generation;
3309
3310         eb =  path->nodes[0];
3311         item_size = btrfs_item_size_nr(eb, path->slots[0]);
3312
3313         if (extent_key->type == BTRFS_METADATA_ITEM_KEY ||
3314             item_size >= sizeof(*ei) + sizeof(*bi)) {
3315                 ei = btrfs_item_ptr(eb, path->slots[0],
3316                                 struct btrfs_extent_item);
3317                 if (extent_key->type == BTRFS_EXTENT_ITEM_KEY) {
3318                         bi = (struct btrfs_tree_block_info *)(ei + 1);
3319                         level = btrfs_tree_block_level(eb, bi);
3320                 } else {
3321                         level = (int)extent_key->offset;
3322                 }
3323                 generation = btrfs_extent_generation(eb, ei);
3324         } else if (unlikely(item_size == sizeof(struct btrfs_extent_item_v0))) {
3325                 btrfs_print_v0_err(eb->fs_info);
3326                 btrfs_handle_fs_error(eb->fs_info, -EINVAL, NULL);
3327                 return -EINVAL;
3328         } else {
3329                 BUG();
3330         }
3331
3332         btrfs_release_path(path);
3333
3334         BUG_ON(level == -1);
3335
3336         block = kmalloc(sizeof(*block), GFP_NOFS);
3337         if (!block)
3338                 return -ENOMEM;
3339
3340         block->bytenr = extent_key->objectid;
3341         block->key.objectid = rc->extent_root->fs_info->nodesize;
3342         block->key.offset = generation;
3343         block->level = level;
3344         block->key_ready = 0;
3345
3346         rb_node = tree_insert(blocks, block->bytenr, &block->rb_node);
3347         if (rb_node)
3348                 backref_tree_panic(rb_node, -EEXIST, block->bytenr);
3349
3350         return 0;
3351 }
3352
3353 /*
3354  * helper to add tree blocks for backref of type BTRFS_SHARED_DATA_REF_KEY
3355  */
3356 static int __add_tree_block(struct reloc_control *rc,
3357                             u64 bytenr, u32 blocksize,
3358                             struct rb_root *blocks)
3359 {
3360         struct btrfs_fs_info *fs_info = rc->extent_root->fs_info;
3361         struct btrfs_path *path;
3362         struct btrfs_key key;
3363         int ret;
3364         bool skinny = btrfs_fs_incompat(fs_info, SKINNY_METADATA);
3365
3366         if (tree_block_processed(bytenr, rc))
3367                 return 0;
3368
3369         if (tree_search(blocks, bytenr))
3370                 return 0;
3371
3372         path = btrfs_alloc_path();
3373         if (!path)
3374                 return -ENOMEM;
3375 again:
3376         key.objectid = bytenr;
3377         if (skinny) {
3378                 key.type = BTRFS_METADATA_ITEM_KEY;
3379                 key.offset = (u64)-1;
3380         } else {
3381                 key.type = BTRFS_EXTENT_ITEM_KEY;
3382                 key.offset = blocksize;
3383         }
3384
3385         path->search_commit_root = 1;
3386         path->skip_locking = 1;
3387         ret = btrfs_search_slot(NULL, rc->extent_root, &key, path, 0, 0);
3388         if (ret < 0)
3389                 goto out;
3390
3391         if (ret > 0 && skinny) {
3392                 if (path->slots[0]) {
3393                         path->slots[0]--;
3394                         btrfs_item_key_to_cpu(path->nodes[0], &key,
3395                                               path->slots[0]);
3396                         if (key.objectid == bytenr &&
3397                             (key.type == BTRFS_METADATA_ITEM_KEY ||
3398                              (key.type == BTRFS_EXTENT_ITEM_KEY &&
3399                               key.offset == blocksize)))
3400                                 ret = 0;
3401                 }
3402
3403                 if (ret) {
3404                         skinny = false;
3405                         btrfs_release_path(path);
3406                         goto again;
3407                 }
3408         }
3409         if (ret) {
3410                 ASSERT(ret == 1);
3411                 btrfs_print_leaf(path->nodes[0]);
3412                 btrfs_err(fs_info,
3413              "tree block extent item (%llu) is not found in extent tree",
3414                      bytenr);
3415                 WARN_ON(1);
3416                 ret = -EINVAL;
3417                 goto out;
3418         }
3419
3420         ret = add_tree_block(rc, &key, path, blocks);
3421 out:
3422         btrfs_free_path(path);
3423         return ret;
3424 }
3425
3426 /*
3427  * helper to check if the block use full backrefs for pointers in it
3428  */
3429 static int block_use_full_backref(struct reloc_control *rc,
3430                                   struct extent_buffer *eb)
3431 {
3432         u64 flags;
3433         int ret;
3434
3435         if (btrfs_header_flag(eb, BTRFS_HEADER_FLAG_RELOC) ||
3436             btrfs_header_backref_rev(eb) < BTRFS_MIXED_BACKREF_REV)
3437                 return 1;
3438
3439         ret = btrfs_lookup_extent_info(NULL, rc->extent_root->fs_info,
3440                                        eb->start, btrfs_header_level(eb), 1,
3441                                        NULL, &flags);
3442         BUG_ON(ret);
3443
3444         if (flags & BTRFS_BLOCK_FLAG_FULL_BACKREF)
3445                 ret = 1;
3446         else
3447                 ret = 0;
3448         return ret;
3449 }
3450
3451 static int delete_block_group_cache(struct btrfs_fs_info *fs_info,
3452                                     struct btrfs_block_group_cache *block_group,
3453                                     struct inode *inode,
3454                                     u64 ino)
3455 {
3456         struct btrfs_key key;
3457         struct btrfs_root *root = fs_info->tree_root;
3458         struct btrfs_trans_handle *trans;
3459         int ret = 0;
3460
3461         if (inode)
3462                 goto truncate;
3463
3464         key.objectid = ino;
3465         key.type = BTRFS_INODE_ITEM_KEY;
3466         key.offset = 0;
3467
3468         inode = btrfs_iget(fs_info->sb, &key, root, NULL);
3469         if (IS_ERR(inode))
3470                 return -ENOENT;
3471
3472 truncate:
3473         ret = btrfs_check_trunc_cache_free_space(fs_info,
3474                                                  &fs_info->global_block_rsv);
3475         if (ret)
3476                 goto out;
3477
3478         trans = btrfs_join_transaction(root);
3479         if (IS_ERR(trans)) {
3480                 ret = PTR_ERR(trans);
3481                 goto out;
3482         }
3483
3484         ret = btrfs_truncate_free_space_cache(trans, block_group, inode);
3485
3486         btrfs_end_transaction(trans);
3487         btrfs_btree_balance_dirty(fs_info);
3488 out:
3489         iput(inode);
3490         return ret;
3491 }
3492
3493 /*
3494  * helper to add tree blocks for backref of type BTRFS_EXTENT_DATA_REF_KEY
3495  * this function scans fs tree to find blocks reference the data extent
3496  */
3497 static int find_data_references(struct reloc_control *rc,
3498                                 struct btrfs_key *extent_key,
3499                                 struct extent_buffer *leaf,
3500                                 struct btrfs_extent_data_ref *ref,
3501                                 struct rb_root *blocks)
3502 {
3503         struct btrfs_fs_info *fs_info = rc->extent_root->fs_info;
3504         struct btrfs_path *path;
3505         struct tree_block *block;
3506         struct btrfs_root *root;
3507         struct btrfs_file_extent_item *fi;
3508         struct rb_node *rb_node;
3509         struct btrfs_key key;
3510         u64 ref_root;
3511         u64 ref_objectid;
3512         u64 ref_offset;
3513         u32 ref_count;
3514         u32 nritems;
3515         int err = 0;
3516         int added = 0;
3517         int counted;
3518         int ret;
3519
3520         ref_root = btrfs_extent_data_ref_root(leaf, ref);
3521         ref_objectid = btrfs_extent_data_ref_objectid(leaf, ref);
3522         ref_offset = btrfs_extent_data_ref_offset(leaf, ref);
3523         ref_count = btrfs_extent_data_ref_count(leaf, ref);
3524
3525         /*
3526          * This is an extent belonging to the free space cache, lets just delete
3527          * it and redo the search.
3528          */
3529         if (ref_root == BTRFS_ROOT_TREE_OBJECTID) {
3530                 ret = delete_block_group_cache(fs_info, rc->block_group,
3531                                                NULL, ref_objectid);
3532                 if (ret != -ENOENT)
3533                         return ret;
3534                 ret = 0;
3535         }
3536
3537         path = btrfs_alloc_path();
3538         if (!path)
3539                 return -ENOMEM;
3540         path->reada = READA_FORWARD;
3541
3542         root = read_fs_root(fs_info, ref_root);
3543         if (IS_ERR(root)) {
3544                 err = PTR_ERR(root);
3545                 goto out;
3546         }
3547
3548         key.objectid = ref_objectid;
3549         key.type = BTRFS_EXTENT_DATA_KEY;
3550         if (ref_offset > ((u64)-1 << 32))
3551                 key.offset = 0;
3552         else
3553                 key.offset = ref_offset;
3554
3555         path->search_commit_root = 1;
3556         path->skip_locking = 1;
3557         ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
3558         if (ret < 0) {
3559                 err = ret;
3560                 goto out;
3561         }
3562
3563         leaf = path->nodes[0];
3564         nritems = btrfs_header_nritems(leaf);
3565         /*
3566          * the references in tree blocks that use full backrefs
3567          * are not counted in
3568          */
3569         if (block_use_full_backref(rc, leaf))
3570                 counted = 0;
3571         else
3572                 counted = 1;
3573         rb_node = tree_search(blocks, leaf->start);
3574         if (rb_node) {
3575                 if (counted)
3576                         added = 1;
3577                 else
3578                         path->slots[0] = nritems;
3579         }
3580
3581         while (ref_count > 0) {
3582                 while (path->slots[0] >= nritems) {
3583                         ret = btrfs_next_leaf(root, path);
3584                         if (ret < 0) {
3585                                 err = ret;
3586                                 goto out;
3587                         }
3588                         if (WARN_ON(ret > 0))
3589                                 goto out;
3590
3591                         leaf = path->nodes[0];
3592                         nritems = btrfs_header_nritems(leaf);
3593                         added = 0;
3594
3595                         if (block_use_full_backref(rc, leaf))
3596                                 counted = 0;
3597                         else
3598                                 counted = 1;
3599                         rb_node = tree_search(blocks, leaf->start);
3600                         if (rb_node) {
3601                                 if (counted)
3602                                         added = 1;
3603                                 else
3604                                         path->slots[0] = nritems;
3605                         }
3606                 }
3607
3608                 btrfs_item_key_to_cpu(leaf, &key, path->slots[0]);
3609                 if (WARN_ON(key.objectid != ref_objectid ||
3610                     key.type != BTRFS_EXTENT_DATA_KEY))
3611                         break;
3612
3613                 fi = btrfs_item_ptr(leaf, path->slots[0],
3614                                     struct btrfs_file_extent_item);
3615
3616                 if (btrfs_file_extent_type(leaf, fi) ==
3617                     BTRFS_FILE_EXTENT_INLINE)
3618                         goto next;
3619
3620                 if (btrfs_file_extent_disk_bytenr(leaf, fi) !=
3621                     extent_key->objectid)
3622                         goto next;
3623
3624                 key.offset -= btrfs_file_extent_offset(leaf, fi);
3625                 if (key.offset != ref_offset)
3626                         goto next;
3627
3628                 if (counted)
3629                         ref_count--;
3630                 if (added)
3631                         goto next;
3632
3633                 if (!tree_block_processed(leaf->start, rc)) {
3634                         block = kmalloc(sizeof(*block), GFP_NOFS);
3635                         if (!block) {
3636                                 err = -ENOMEM;
3637                                 break;
3638                         }
3639                         block->bytenr = leaf->start;
3640                         btrfs_item_key_to_cpu(leaf, &block->key, 0);
3641                         block->level = 0;
3642                         block->key_ready = 1;
3643                         rb_node = tree_insert(blocks, block->bytenr,
3644                                               &block->rb_node);
3645                         if (rb_node)
3646                                 backref_tree_panic(rb_node, -EEXIST,
3647                                                    block->bytenr);
3648                 }
3649                 if (counted)
3650                         added = 1;
3651                 else
3652                         path->slots[0] = nritems;
3653 next:
3654                 path->slots[0]++;
3655
3656         }
3657 out:
3658         btrfs_free_path(path);
3659         return err;
3660 }
3661
3662 /*
3663  * helper to find all tree blocks that reference a given data extent
3664  */
3665 static noinline_for_stack
3666 int add_data_references(struct reloc_control *rc,
3667                         struct btrfs_key *extent_key,
3668                         struct btrfs_path *path,
3669                         struct rb_root *blocks)
3670 {
3671         struct btrfs_key key;
3672         struct extent_buffer *eb;
3673         struct btrfs_extent_data_ref *dref;
3674         struct btrfs_extent_inline_ref *iref;
3675         unsigned long ptr;
3676         unsigned long end;
3677         u32 blocksize = rc->extent_root->fs_info->nodesize;
3678         int ret = 0;
3679         int err = 0;
3680
3681         eb = path->nodes[0];
3682         ptr = btrfs_item_ptr_offset(eb, path->slots[0]);
3683         end = ptr + btrfs_item_size_nr(eb, path->slots[0]);
3684         ptr += sizeof(struct btrfs_extent_item);
3685
3686         while (ptr < end) {
3687                 iref = (struct btrfs_extent_inline_ref *)ptr;
3688                 key.type = btrfs_get_extent_inline_ref_type(eb, iref,
3689                                                         BTRFS_REF_TYPE_DATA);
3690                 if (key.type == BTRFS_SHARED_DATA_REF_KEY) {
3691                         key.offset = btrfs_extent_inline_ref_offset(eb, iref);
3692                         ret = __add_tree_block(rc, key.offset, blocksize,
3693                                                blocks);
3694                 } else if (key.type == BTRFS_EXTENT_DATA_REF_KEY) {
3695                         dref = (struct btrfs_extent_data_ref *)(&iref->offset);
3696                         ret = find_data_references(rc, extent_key,
3697                                                    eb, dref, blocks);
3698                 } else {
3699                         ret = -EUCLEAN;
3700                         btrfs_err(rc->extent_root->fs_info,
3701                      "extent %llu slot %d has an invalid inline ref type",
3702                              eb->start, path->slots[0]);
3703                 }
3704                 if (ret) {
3705                         err = ret;
3706                         goto out;
3707                 }
3708                 ptr += btrfs_extent_inline_ref_size(key.type);
3709         }
3710         WARN_ON(ptr > end);
3711
3712         while (1) {
3713                 cond_resched();
3714                 eb = path->nodes[0];
3715                 if (path->slots[0] >= btrfs_header_nritems(eb)) {
3716                         ret = btrfs_next_leaf(rc->extent_root, path);
3717                         if (ret < 0) {
3718                                 err = ret;
3719                                 break;
3720                         }
3721                         if (ret > 0)
3722                                 break;
3723                         eb = path->nodes[0];
3724                 }
3725
3726                 btrfs_item_key_to_cpu(eb, &key, path->slots[0]);
3727                 if (key.objectid != extent_key->objectid)
3728                         break;
3729
3730                 if (key.type == BTRFS_SHARED_DATA_REF_KEY) {
3731                         ret = __add_tree_block(rc, key.offset, blocksize,
3732                                                blocks);
3733                 } else if (key.type == BTRFS_EXTENT_DATA_REF_KEY) {
3734                         dref = btrfs_item_ptr(eb, path->slots[0],
3735                                               struct btrfs_extent_data_ref);
3736                         ret = find_data_references(rc, extent_key,
3737                                                    eb, dref, blocks);
3738                 } else if (unlikely(key.type == BTRFS_EXTENT_REF_V0_KEY)) {
3739                         btrfs_print_v0_err(eb->fs_info);
3740                         btrfs_handle_fs_error(eb->fs_info, -EINVAL, NULL);
3741                         ret = -EINVAL;
3742                 } else {
3743                         ret = 0;
3744                 }
3745                 if (ret) {
3746                         err = ret;
3747                         break;
3748                 }
3749                 path->slots[0]++;
3750         }
3751 out:
3752         btrfs_release_path(path);
3753         if (err)
3754                 free_block_list(blocks);
3755         return err;
3756 }
3757
3758 /*
3759  * helper to find next unprocessed extent
3760  */
3761 static noinline_for_stack
3762 int find_next_extent(struct reloc_control *rc, struct btrfs_path *path,
3763                      struct btrfs_key *extent_key)
3764 {
3765         struct btrfs_fs_info *fs_info = rc->extent_root->fs_info;
3766         struct btrfs_key key;
3767         struct extent_buffer *leaf;
3768         u64 start, end, last;
3769         int ret;
3770
3771         last = rc->block_group->key.objectid + rc->block_group->key.offset;
3772         while (1) {
3773                 cond_resched();
3774                 if (rc->search_start >= last) {
3775                         ret = 1;
3776                         break;
3777                 }
3778
3779                 key.objectid = rc->search_start;
3780                 key.type = BTRFS_EXTENT_ITEM_KEY;
3781                 key.offset = 0;
3782
3783                 path->search_commit_root = 1;
3784                 path->skip_locking = 1;
3785                 ret = btrfs_search_slot(NULL, rc->extent_root, &key, path,
3786                                         0, 0);
3787                 if (ret < 0)
3788                         break;
3789 next:
3790                 leaf = path->nodes[0];
3791                 if (path->slots[0] >= btrfs_header_nritems(leaf)) {
3792                         ret = btrfs_next_leaf(rc->extent_root, path);
3793                         if (ret != 0)
3794                                 break;
3795                         leaf = path->nodes[0];
3796                 }
3797
3798                 btrfs_item_key_to_cpu(leaf, &key, path->slots[0]);
3799                 if (key.objectid >= last) {
3800                         ret = 1;
3801                         break;
3802                 }
3803
3804                 if (key.type != BTRFS_EXTENT_ITEM_KEY &&
3805                     key.type != BTRFS_METADATA_ITEM_KEY) {
3806                         path->slots[0]++;
3807                         goto next;
3808                 }
3809
3810                 if (key.type == BTRFS_EXTENT_ITEM_KEY &&
3811                     key.objectid + key.offset <= rc->search_start) {
3812                         path->slots[0]++;
3813                         goto next;
3814                 }
3815
3816                 if (key.type == BTRFS_METADATA_ITEM_KEY &&
3817                     key.objectid + fs_info->nodesize <=
3818                     rc->search_start) {
3819                         path->slots[0]++;
3820                         goto next;
3821                 }
3822
3823                 ret = find_first_extent_bit(&rc->processed_blocks,
3824                                             key.objectid, &start, &end,
3825                                             EXTENT_DIRTY, NULL);
3826
3827                 if (ret == 0 && start <= key.objectid) {
3828                         btrfs_release_path(path);
3829                         rc->search_start = end + 1;
3830                 } else {
3831                         if (key.type == BTRFS_EXTENT_ITEM_KEY)
3832                                 rc->search_start = key.objectid + key.offset;
3833                         else
3834                                 rc->search_start = key.objectid +
3835                                         fs_info->nodesize;
3836                         memcpy(extent_key, &key, sizeof(key));
3837                         return 0;
3838                 }
3839         }
3840         btrfs_release_path(path);
3841         return ret;
3842 }
3843
3844 static void set_reloc_control(struct reloc_control *rc)
3845 {
3846         struct btrfs_fs_info *fs_info = rc->extent_root->fs_info;
3847
3848         mutex_lock(&fs_info->reloc_mutex);
3849         fs_info->reloc_ctl = rc;
3850         mutex_unlock(&fs_info->reloc_mutex);
3851 }
3852
3853 static void unset_reloc_control(struct reloc_control *rc)
3854 {
3855         struct btrfs_fs_info *fs_info = rc->extent_root->fs_info;
3856
3857         mutex_lock(&fs_info->reloc_mutex);
3858         fs_info->reloc_ctl = NULL;
3859         mutex_unlock(&fs_info->reloc_mutex);
3860 }
3861
3862 static int check_extent_flags(u64 flags)
3863 {
3864         if ((flags & BTRFS_EXTENT_FLAG_DATA) &&
3865             (flags & BTRFS_EXTENT_FLAG_TREE_BLOCK))
3866                 return 1;
3867         if (!(flags & BTRFS_EXTENT_FLAG_DATA) &&
3868             !(flags & BTRFS_EXTENT_FLAG_TREE_BLOCK))
3869                 return 1;
3870         if ((flags & BTRFS_EXTENT_FLAG_DATA) &&
3871             (flags & BTRFS_BLOCK_FLAG_FULL_BACKREF))
3872                 return 1;
3873         return 0;
3874 }
3875
3876 static noinline_for_stack
3877 int prepare_to_relocate(struct reloc_control *rc)
3878 {
3879         struct btrfs_trans_handle *trans;
3880         int ret;
3881
3882         rc->block_rsv = btrfs_alloc_block_rsv(rc->extent_root->fs_info,
3883                                               BTRFS_BLOCK_RSV_TEMP);
3884         if (!rc->block_rsv)
3885                 return -ENOMEM;
3886
3887         memset(&rc->cluster, 0, sizeof(rc->cluster));
3888         rc->search_start = rc->block_group->key.objectid;
3889         rc->extents_found = 0;
3890         rc->nodes_relocated = 0;
3891         rc->merging_rsv_size = 0;
3892         rc->reserved_bytes = 0;
3893         rc->block_rsv->size = rc->extent_root->fs_info->nodesize *
3894                               RELOCATION_RESERVED_NODES;
3895         ret = btrfs_block_rsv_refill(rc->extent_root,
3896                                      rc->block_rsv, rc->block_rsv->size,
3897                                      BTRFS_RESERVE_FLUSH_ALL);
3898         if (ret)
3899                 return ret;
3900
3901         rc->create_reloc_tree = 1;
3902         set_reloc_control(rc);
3903
3904         trans = btrfs_join_transaction(rc->extent_root);
3905         if (IS_ERR(trans)) {
3906                 unset_reloc_control(rc);
3907                 /*
3908                  * extent tree is not a ref_cow tree and has no reloc_root to
3909                  * cleanup.  And callers are responsible to free the above
3910                  * block rsv.
3911                  */
3912                 return PTR_ERR(trans);
3913         }
3914         btrfs_commit_transaction(trans);
3915         return 0;
3916 }
3917
3918 static noinline_for_stack int relocate_block_group(struct reloc_control *rc)
3919 {
3920         struct btrfs_fs_info *fs_info = rc->extent_root->fs_info;
3921         struct rb_root blocks = RB_ROOT;
3922         struct btrfs_key key;
3923         struct btrfs_trans_handle *trans = NULL;
3924         struct btrfs_path *path;
3925         struct btrfs_extent_item *ei;
3926         u64 flags;
3927         u32 item_size;
3928         int ret;
3929         int err = 0;
3930         int progress = 0;
3931
3932         path = btrfs_alloc_path();
3933         if (!path)
3934                 return -ENOMEM;
3935         path->reada = READA_FORWARD;
3936
3937         ret = prepare_to_relocate(rc);
3938         if (ret) {
3939                 err = ret;
3940                 goto out_free;
3941         }
3942
3943         while (1) {
3944                 rc->reserved_bytes = 0;
3945                 ret = btrfs_block_rsv_refill(rc->extent_root,
3946                                         rc->block_rsv, rc->block_rsv->size,
3947                                         BTRFS_RESERVE_FLUSH_ALL);
3948                 if (ret) {
3949                         err = ret;
3950                         break;
3951                 }
3952                 progress++;
3953                 trans = btrfs_start_transaction(rc->extent_root, 0);
3954                 if (IS_ERR(trans)) {
3955                         err = PTR_ERR(trans);
3956                         trans = NULL;
3957                         break;
3958                 }
3959 restart:
3960                 if (update_backref_cache(trans, &rc->backref_cache)) {
3961                         btrfs_end_transaction(trans);
3962                         continue;
3963                 }
3964
3965                 ret = find_next_extent(rc, path, &key);
3966                 if (ret < 0)
3967                         err = ret;
3968                 if (ret != 0)
3969                         break;
3970
3971                 rc->extents_found++;
3972
3973                 ei = btrfs_item_ptr(path->nodes[0], path->slots[0],
3974                                     struct btrfs_extent_item);
3975                 item_size = btrfs_item_size_nr(path->nodes[0], path->slots[0]);
3976                 if (item_size >= sizeof(*ei)) {
3977                         flags = btrfs_extent_flags(path->nodes[0], ei);
3978                         ret = check_extent_flags(flags);
3979                         BUG_ON(ret);
3980                 } else if (unlikely(item_size == sizeof(struct btrfs_extent_item_v0))) {
3981                         err = -EINVAL;
3982                         btrfs_print_v0_err(trans->fs_info);
3983                         btrfs_abort_transaction(trans, err);
3984                         break;
3985                 } else {
3986                         BUG();
3987                 }
3988
3989                 if (flags & BTRFS_EXTENT_FLAG_TREE_BLOCK) {
3990                         ret = add_tree_block(rc, &key, path, &blocks);
3991                 } else if (rc->stage == UPDATE_DATA_PTRS &&
3992                            (flags & BTRFS_EXTENT_FLAG_DATA)) {
3993                         ret = add_data_references(rc, &key, path, &blocks);
3994                 } else {
3995                         btrfs_release_path(path);
3996                         ret = 0;
3997                 }
3998                 if (ret < 0) {
3999                         err = ret;
4000                         break;
4001                 }
4002
4003                 if (!RB_EMPTY_ROOT(&blocks)) {
4004                         ret = relocate_tree_blocks(trans, rc, &blocks);
4005                         if (ret < 0) {
4006                                 /*
4007                                  * if we fail to relocate tree blocks, force to update
4008                                  * backref cache when committing transaction.
4009                                  */
4010                                 rc->backref_cache.last_trans = trans->transid - 1;
4011
4012                                 if (ret != -EAGAIN) {
4013                                         err = ret;
4014                                         break;
4015                                 }
4016                                 rc->extents_found--;
4017                                 rc->search_start = key.objectid;
4018                         }
4019                 }
4020
4021                 btrfs_end_transaction_throttle(trans);
4022                 btrfs_btree_balance_dirty(fs_info);
4023                 trans = NULL;
4024
4025                 if (rc->stage == MOVE_DATA_EXTENTS &&
4026                     (flags & BTRFS_EXTENT_FLAG_DATA)) {
4027                         rc->found_file_extent = 1;
4028                         ret = relocate_data_extent(rc->data_inode,
4029                                                    &key, &rc->cluster);
4030                         if (ret < 0) {
4031                                 err = ret;
4032                                 break;
4033                         }
4034                 }
4035         }
4036         if (trans && progress && err == -ENOSPC) {
4037                 ret = btrfs_force_chunk_alloc(trans, rc->block_group->flags);
4038                 if (ret == 1) {
4039                         err = 0;
4040                         progress = 0;
4041                         goto restart;
4042                 }
4043         }
4044
4045         btrfs_release_path(path);
4046         clear_extent_bits(&rc->processed_blocks, 0, (u64)-1, EXTENT_DIRTY);
4047
4048         if (trans) {
4049                 btrfs_end_transaction_throttle(trans);
4050                 btrfs_btree_balance_dirty(fs_info);
4051         }
4052
4053         if (!err) {
4054                 ret = relocate_file_extent_cluster(rc->data_inode,
4055                                                    &rc->cluster);
4056                 if (ret < 0)
4057                         err = ret;
4058         }
4059
4060         rc->create_reloc_tree = 0;
4061         set_reloc_control(rc);
4062
4063         backref_cache_cleanup(&rc->backref_cache);
4064         btrfs_block_rsv_release(fs_info, rc->block_rsv, (u64)-1);
4065
4066         err = prepare_to_merge(rc, err);
4067
4068         merge_reloc_roots(rc);
4069
4070         rc->merge_reloc_tree = 0;
4071         unset_reloc_control(rc);
4072         btrfs_block_rsv_release(fs_info, rc->block_rsv, (u64)-1);
4073
4074         /* get rid of pinned extents */
4075         trans = btrfs_join_transaction(rc->extent_root);
4076         if (IS_ERR(trans)) {
4077                 err = PTR_ERR(trans);
4078                 goto out_free;
4079         }
4080         btrfs_commit_transaction(trans);
4081 out_free:
4082         btrfs_free_block_rsv(fs_info, rc->block_rsv);
4083         btrfs_free_path(path);
4084         return err;
4085 }
4086
4087 static int __insert_orphan_inode(struct btrfs_trans_handle *trans,
4088                                  struct btrfs_root *root, u64 objectid)
4089 {
4090         struct btrfs_path *path;
4091         struct btrfs_inode_item *item;
4092         struct extent_buffer *leaf;
4093         int ret;
4094
4095         path = btrfs_alloc_path();
4096         if (!path)
4097                 return -ENOMEM;
4098
4099         ret = btrfs_insert_empty_inode(trans, root, path, objectid);
4100         if (ret)
4101                 goto out;
4102
4103         leaf = path->nodes[0];
4104         item = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_inode_item);
4105         memzero_extent_buffer(leaf, (unsigned long)item, sizeof(*item));
4106         btrfs_set_inode_generation(leaf, item, 1);
4107         btrfs_set_inode_size(leaf, item, 0);
4108         btrfs_set_inode_mode(leaf, item, S_IFREG | 0600);
4109         btrfs_set_inode_flags(leaf, item, BTRFS_INODE_NOCOMPRESS |
4110                                           BTRFS_INODE_PREALLOC);
4111         btrfs_mark_buffer_dirty(leaf);
4112 out:
4113         btrfs_free_path(path);
4114         return ret;
4115 }
4116
4117 /*
4118  * helper to create inode for data relocation.
4119  * the inode is in data relocation tree and its link count is 0
4120  */
4121 static noinline_for_stack
4122 struct inode *create_reloc_inode(struct btrfs_fs_info *fs_info,
4123                                  struct btrfs_block_group_cache *group)
4124 {
4125         struct inode *inode = NULL;
4126         struct btrfs_trans_handle *trans;
4127         struct btrfs_root *root;
4128         struct btrfs_key key;
4129         u64 objectid;
4130         int err = 0;
4131
4132         root = read_fs_root(fs_info, BTRFS_DATA_RELOC_TREE_OBJECTID);
4133         if (IS_ERR(root))
4134                 return ERR_CAST(root);
4135
4136         trans = btrfs_start_transaction(root, 6);
4137         if (IS_ERR(trans))
4138                 return ERR_CAST(trans);
4139
4140         err = btrfs_find_free_objectid(root, &objectid);
4141         if (err)
4142                 goto out;
4143
4144         err = __insert_orphan_inode(trans, root, objectid);
4145         BUG_ON(err);
4146
4147         key.objectid = objectid;
4148         key.type = BTRFS_INODE_ITEM_KEY;
4149         key.offset = 0;
4150         inode = btrfs_iget(fs_info->sb, &key, root, NULL);
4151         BUG_ON(IS_ERR(inode));
4152         BTRFS_I(inode)->index_cnt = group->key.objectid;
4153
4154         err = btrfs_orphan_add(trans, BTRFS_I(inode));
4155 out:
4156         btrfs_end_transaction(trans);
4157         btrfs_btree_balance_dirty(fs_info);
4158         if (err) {
4159                 if (inode)
4160                         iput(inode);
4161                 inode = ERR_PTR(err);
4162         }
4163         return inode;
4164 }
4165
4166 static struct reloc_control *alloc_reloc_control(void)
4167 {
4168         struct reloc_control *rc;
4169
4170         rc = kzalloc(sizeof(*rc), GFP_NOFS);
4171         if (!rc)
4172                 return NULL;
4173
4174         INIT_LIST_HEAD(&rc->reloc_roots);
4175         backref_cache_init(&rc->backref_cache);
4176         mapping_tree_init(&rc->reloc_root_tree);
4177         extent_io_tree_init(&rc->processed_blocks, NULL);
4178         return rc;
4179 }
4180
4181 /*
4182  * Print the block group being relocated
4183  */
4184 static void describe_relocation(struct btrfs_fs_info *fs_info,
4185                                 struct btrfs_block_group_cache *block_group)
4186 {
4187         char buf[128];          /* prefixed by a '|' that'll be dropped */
4188         u64 flags = block_group->flags;
4189
4190         /* Shouldn't happen */
4191         if (!flags) {
4192                 strcpy(buf, "|NONE");
4193         } else {
4194                 char *bp = buf;
4195
4196 #define DESCRIBE_FLAG(f, d) \
4197                 if (flags & BTRFS_BLOCK_GROUP_##f) { \
4198                         bp += snprintf(bp, buf - bp + sizeof(buf), "|%s", d); \
4199                         flags &= ~BTRFS_BLOCK_GROUP_##f; \
4200                 }
4201                 DESCRIBE_FLAG(DATA,     "data");
4202                 DESCRIBE_FLAG(SYSTEM,   "system");
4203                 DESCRIBE_FLAG(METADATA, "metadata");
4204                 DESCRIBE_FLAG(RAID0,    "raid0");
4205                 DESCRIBE_FLAG(RAID1,    "raid1");
4206                 DESCRIBE_FLAG(DUP,      "dup");
4207                 DESCRIBE_FLAG(RAID10,   "raid10");
4208                 DESCRIBE_FLAG(RAID5,    "raid5");
4209                 DESCRIBE_FLAG(RAID6,    "raid6");
4210                 if (flags)
4211                         snprintf(bp, buf - bp + sizeof(buf), "|0x%llx", flags);
4212 #undef DESCRIBE_FLAG
4213         }
4214
4215         btrfs_info(fs_info,
4216                    "relocating block group %llu flags %s",
4217                    block_group->key.objectid, buf + 1);
4218 }
4219
4220 /*
4221  * function to relocate all extents in a block group.
4222  */
4223 int btrfs_relocate_block_group(struct btrfs_fs_info *fs_info, u64 group_start)
4224 {
4225         struct btrfs_root *extent_root = fs_info->extent_root;
4226         struct reloc_control *rc;
4227         struct inode *inode;
4228         struct btrfs_path *path;
4229         int ret;
4230         int rw = 0;
4231         int err = 0;
4232
4233         rc = alloc_reloc_control();
4234         if (!rc)
4235                 return -ENOMEM;
4236
4237         rc->extent_root = extent_root;
4238
4239         rc->block_group = btrfs_lookup_block_group(fs_info, group_start);
4240         BUG_ON(!rc->block_group);
4241
4242         ret = btrfs_inc_block_group_ro(rc->block_group);
4243         if (ret) {
4244                 err = ret;
4245                 goto out;
4246         }
4247         rw = 1;
4248
4249         path = btrfs_alloc_path();
4250         if (!path) {
4251                 err = -ENOMEM;
4252                 goto out;
4253         }
4254
4255         inode = lookup_free_space_inode(fs_info, rc->block_group, path);
4256         btrfs_free_path(path);
4257
4258         if (!IS_ERR(inode))
4259                 ret = delete_block_group_cache(fs_info, rc->block_group, inode, 0);
4260         else
4261                 ret = PTR_ERR(inode);
4262
4263         if (ret && ret != -ENOENT) {
4264                 err = ret;
4265                 goto out;
4266         }
4267
4268         rc->data_inode = create_reloc_inode(fs_info, rc->block_group);
4269         if (IS_ERR(rc->data_inode)) {
4270                 err = PTR_ERR(rc->data_inode);
4271                 rc->data_inode = NULL;
4272                 goto out;
4273         }
4274
4275         describe_relocation(fs_info, rc->block_group);
4276
4277         btrfs_wait_block_group_reservations(rc->block_group);
4278         btrfs_wait_nocow_writers(rc->block_group);
4279         btrfs_wait_ordered_roots(fs_info, U64_MAX,
4280                                  rc->block_group->key.objectid,
4281                                  rc->block_group->key.offset);
4282
4283         while (1) {
4284                 mutex_lock(&fs_info->cleaner_mutex);
4285                 ret = relocate_block_group(rc);
4286                 mutex_unlock(&fs_info->cleaner_mutex);
4287                 if (ret < 0) {
4288                         err = ret;
4289                         goto out;
4290                 }
4291
4292                 if (rc->extents_found == 0)
4293                         break;
4294
4295                 btrfs_info(fs_info, "found %llu extents", rc->extents_found);
4296
4297                 if (rc->stage == MOVE_DATA_EXTENTS && rc->found_file_extent) {
4298                         ret = btrfs_wait_ordered_range(rc->data_inode, 0,
4299                                                        (u64)-1);
4300                         if (ret) {
4301                                 err = ret;
4302                                 goto out;
4303                         }
4304                         invalidate_mapping_pages(rc->data_inode->i_mapping,
4305                                                  0, -1);
4306                         rc->stage = UPDATE_DATA_PTRS;
4307                 }
4308         }
4309
4310         WARN_ON(rc->block_group->pinned > 0);
4311         WARN_ON(rc->block_group->reserved > 0);
4312         WARN_ON(btrfs_block_group_used(&rc->block_group->item) > 0);
4313 out:
4314         if (err && rw)
4315                 btrfs_dec_block_group_ro(rc->block_group);
4316         iput(rc->data_inode);
4317         btrfs_put_block_group(rc->block_group);
4318         kfree(rc);
4319         return err;
4320 }
4321
4322 static noinline_for_stack int mark_garbage_root(struct btrfs_root *root)
4323 {
4324         struct btrfs_fs_info *fs_info = root->fs_info;
4325         struct btrfs_trans_handle *trans;
4326         int ret, err;
4327
4328         trans = btrfs_start_transaction(fs_info->tree_root, 0);
4329         if (IS_ERR(trans))
4330                 return PTR_ERR(trans);
4331
4332         memset(&root->root_item.drop_progress, 0,
4333                 sizeof(root->root_item.drop_progress));
4334         root->root_item.drop_level = 0;
4335         btrfs_set_root_refs(&root->root_item, 0);
4336         ret = btrfs_update_root(trans, fs_info->tree_root,
4337                                 &root->root_key, &root->root_item);
4338
4339         err = btrfs_end_transaction(trans);
4340         if (err)
4341                 return err;
4342         return ret;
4343 }
4344
4345 /*
4346  * recover relocation interrupted by system crash.
4347  *
4348  * this function resumes merging reloc trees with corresponding fs trees.
4349  * this is important for keeping the sharing of tree blocks
4350  */
4351 int btrfs_recover_relocation(struct btrfs_root *root)
4352 {
4353         struct btrfs_fs_info *fs_info = root->fs_info;
4354         LIST_HEAD(reloc_roots);
4355         struct btrfs_key key;
4356         struct btrfs_root *fs_root;
4357         struct btrfs_root *reloc_root;
4358         struct btrfs_path *path;
4359         struct extent_buffer *leaf;
4360         struct reloc_control *rc = NULL;
4361         struct btrfs_trans_handle *trans;
4362         int ret;
4363         int err = 0;
4364
4365         path = btrfs_alloc_path();
4366         if (!path)
4367                 return -ENOMEM;
4368         path->reada = READA_BACK;
4369
4370         key.objectid = BTRFS_TREE_RELOC_OBJECTID;
4371         key.type = BTRFS_ROOT_ITEM_KEY;
4372         key.offset = (u64)-1;
4373
4374         while (1) {
4375                 ret = btrfs_search_slot(NULL, fs_info->tree_root, &key,
4376                                         path, 0, 0);
4377                 if (ret < 0) {
4378                         err = ret;
4379                         goto out;
4380                 }
4381                 if (ret > 0) {
4382                         if (path->slots[0] == 0)
4383                                 break;
4384                         path->slots[0]--;
4385                 }
4386                 leaf = path->nodes[0];
4387                 btrfs_item_key_to_cpu(leaf, &key, path->slots[0]);
4388                 btrfs_release_path(path);
4389
4390                 if (key.objectid != BTRFS_TREE_RELOC_OBJECTID ||
4391                     key.type != BTRFS_ROOT_ITEM_KEY)
4392                         break;
4393
4394                 reloc_root = btrfs_read_fs_root(root, &key);
4395                 if (IS_ERR(reloc_root)) {
4396                         err = PTR_ERR(reloc_root);
4397                         goto out;
4398                 }
4399
4400                 list_add(&reloc_root->root_list, &reloc_roots);
4401
4402                 if (btrfs_root_refs(&reloc_root->root_item) > 0) {
4403                         fs_root = read_fs_root(fs_info,
4404                                                reloc_root->root_key.offset);
4405                         if (IS_ERR(fs_root)) {
4406                                 ret = PTR_ERR(fs_root);
4407                                 if (ret != -ENOENT) {
4408                                         err = ret;
4409                                         goto out;
4410                                 }
4411                                 ret = mark_garbage_root(reloc_root);
4412                                 if (ret < 0) {
4413                                         err = ret;
4414                                         goto out;
4415                                 }
4416                         }
4417                 }
4418
4419                 if (key.offset == 0)
4420                         break;
4421
4422                 key.offset--;
4423         }
4424         btrfs_release_path(path);
4425
4426         if (list_empty(&reloc_roots))
4427                 goto out;
4428
4429         rc = alloc_reloc_control();
4430         if (!rc) {
4431                 err = -ENOMEM;
4432                 goto out;
4433         }
4434
4435         rc->extent_root = fs_info->extent_root;
4436
4437         set_reloc_control(rc);
4438
4439         trans = btrfs_join_transaction(rc->extent_root);
4440         if (IS_ERR(trans)) {
4441                 unset_reloc_control(rc);
4442                 err = PTR_ERR(trans);
4443                 goto out_free;
4444         }
4445
4446         rc->merge_reloc_tree = 1;
4447
4448         while (!list_empty(&reloc_roots)) {
4449                 reloc_root = list_entry(reloc_roots.next,
4450                                         struct btrfs_root, root_list);
4451                 list_del(&reloc_root->root_list);
4452
4453                 if (btrfs_root_refs(&reloc_root->root_item) == 0) {
4454                         list_add_tail(&reloc_root->root_list,
4455                                       &rc->reloc_roots);
4456                         continue;
4457                 }
4458
4459                 fs_root = read_fs_root(fs_info, reloc_root->root_key.offset);
4460                 if (IS_ERR(fs_root)) {
4461                         err = PTR_ERR(fs_root);
4462                         goto out_free;
4463                 }
4464
4465                 err = __add_reloc_root(reloc_root);
4466                 BUG_ON(err < 0); /* -ENOMEM or logic error */
4467                 fs_root->reloc_root = reloc_root;
4468         }
4469
4470         err = btrfs_commit_transaction(trans);
4471         if (err)
4472                 goto out_free;
4473
4474         merge_reloc_roots(rc);
4475
4476         unset_reloc_control(rc);
4477
4478         trans = btrfs_join_transaction(rc->extent_root);
4479         if (IS_ERR(trans)) {
4480                 err = PTR_ERR(trans);
4481                 goto out_free;
4482         }
4483         err = btrfs_commit_transaction(trans);
4484 out_free:
4485         kfree(rc);
4486 out:
4487         if (!list_empty(&reloc_roots))
4488                 free_reloc_roots(&reloc_roots);
4489
4490         btrfs_free_path(path);
4491
4492         if (err == 0) {
4493                 /* cleanup orphan inode in data relocation tree */
4494                 fs_root = read_fs_root(fs_info, BTRFS_DATA_RELOC_TREE_OBJECTID);
4495                 if (IS_ERR(fs_root))
4496                         err = PTR_ERR(fs_root);
4497                 else
4498                         err = btrfs_orphan_cleanup(fs_root);
4499         }
4500         return err;
4501 }
4502
4503 /*
4504  * helper to add ordered checksum for data relocation.
4505  *
4506  * cloning checksum properly handles the nodatasum extents.
4507  * it also saves CPU time to re-calculate the checksum.
4508  */
4509 int btrfs_reloc_clone_csums(struct inode *inode, u64 file_pos, u64 len)
4510 {
4511         struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
4512         struct btrfs_ordered_sum *sums;
4513         struct btrfs_ordered_extent *ordered;
4514         int ret;
4515         u64 disk_bytenr;
4516         u64 new_bytenr;
4517         LIST_HEAD(list);
4518
4519         ordered = btrfs_lookup_ordered_extent(inode, file_pos);
4520         BUG_ON(ordered->file_offset != file_pos || ordered->len != len);
4521
4522         disk_bytenr = file_pos + BTRFS_I(inode)->index_cnt;
4523         ret = btrfs_lookup_csums_range(fs_info->csum_root, disk_bytenr,
4524                                        disk_bytenr + len - 1, &list, 0);
4525         if (ret)
4526                 goto out;
4527
4528         while (!list_empty(&list)) {
4529                 sums = list_entry(list.next, struct btrfs_ordered_sum, list);
4530                 list_del_init(&sums->list);
4531
4532                 /*
4533                  * We need to offset the new_bytenr based on where the csum is.
4534                  * We need to do this because we will read in entire prealloc
4535                  * extents but we may have written to say the middle of the
4536                  * prealloc extent, so we need to make sure the csum goes with
4537                  * the right disk offset.
4538                  *
4539                  * We can do this because the data reloc inode refers strictly
4540                  * to the on disk bytes, so we don't have to worry about
4541                  * disk_len vs real len like with real inodes since it's all
4542                  * disk length.
4543                  */
4544                 new_bytenr = ordered->start + (sums->bytenr - disk_bytenr);
4545                 sums->bytenr = new_bytenr;
4546
4547                 btrfs_add_ordered_sum(inode, ordered, sums);
4548         }
4549 out:
4550         btrfs_put_ordered_extent(ordered);
4551         return ret;
4552 }
4553
4554 int btrfs_reloc_cow_block(struct btrfs_trans_handle *trans,
4555                           struct btrfs_root *root, struct extent_buffer *buf,
4556                           struct extent_buffer *cow)
4557 {
4558         struct btrfs_fs_info *fs_info = root->fs_info;
4559         struct reloc_control *rc;
4560         struct backref_node *node;
4561         int first_cow = 0;
4562         int level;
4563         int ret = 0;
4564
4565         rc = fs_info->reloc_ctl;
4566         if (!rc)
4567                 return 0;
4568
4569         BUG_ON(rc->stage == UPDATE_DATA_PTRS &&
4570                root->root_key.objectid == BTRFS_DATA_RELOC_TREE_OBJECTID);
4571
4572         if (root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID) {
4573                 if (buf == root->node)
4574                         __update_reloc_root(root, cow->start);
4575         }
4576
4577         level = btrfs_header_level(buf);
4578         if (btrfs_header_generation(buf) <=
4579             btrfs_root_last_snapshot(&root->root_item))
4580                 first_cow = 1;
4581
4582         if (root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID &&
4583             rc->create_reloc_tree) {
4584                 WARN_ON(!first_cow && level == 0);
4585
4586                 node = rc->backref_cache.path[level];
4587                 BUG_ON(node->bytenr != buf->start &&
4588                        node->new_bytenr != buf->start);
4589
4590                 drop_node_buffer(node);
4591                 extent_buffer_get(cow);
4592                 node->eb = cow;
4593                 node->new_bytenr = cow->start;
4594
4595                 if (!node->pending) {
4596                         list_move_tail(&node->list,
4597                                        &rc->backref_cache.pending[level]);
4598                         node->pending = 1;
4599                 }
4600
4601                 if (first_cow)
4602                         __mark_block_processed(rc, node);
4603
4604                 if (first_cow && level > 0)
4605                         rc->nodes_relocated += buf->len;
4606         }
4607
4608         if (level == 0 && first_cow && rc->stage == UPDATE_DATA_PTRS)
4609                 ret = replace_file_extents(trans, rc, root, cow);
4610         return ret;
4611 }
4612
4613 /*
4614  * called before creating snapshot. it calculates metadata reservation
4615  * required for relocating tree blocks in the snapshot
4616  */
4617 void btrfs_reloc_pre_snapshot(struct btrfs_pending_snapshot *pending,
4618                               u64 *bytes_to_reserve)
4619 {
4620         struct btrfs_root *root;
4621         struct reloc_control *rc;
4622
4623         root = pending->root;
4624         if (!root->reloc_root)
4625                 return;
4626
4627         rc = root->fs_info->reloc_ctl;
4628         if (!rc->merge_reloc_tree)
4629                 return;
4630
4631         root = root->reloc_root;
4632         BUG_ON(btrfs_root_refs(&root->root_item) == 0);
4633         /*
4634          * relocation is in the stage of merging trees. the space
4635          * used by merging a reloc tree is twice the size of
4636          * relocated tree nodes in the worst case. half for cowing
4637          * the reloc tree, half for cowing the fs tree. the space
4638          * used by cowing the reloc tree will be freed after the
4639          * tree is dropped. if we create snapshot, cowing the fs
4640          * tree may use more space than it frees. so we need
4641          * reserve extra space.
4642          */
4643         *bytes_to_reserve += rc->nodes_relocated;
4644 }
4645
4646 /*
4647  * called after snapshot is created. migrate block reservation
4648  * and create reloc root for the newly created snapshot
4649  */
4650 int btrfs_reloc_post_snapshot(struct btrfs_trans_handle *trans,
4651                                struct btrfs_pending_snapshot *pending)
4652 {
4653         struct btrfs_root *root = pending->root;
4654         struct btrfs_root *reloc_root;
4655         struct btrfs_root *new_root;
4656         struct reloc_control *rc;
4657         int ret;
4658
4659         if (!root->reloc_root)
4660                 return 0;
4661
4662         rc = root->fs_info->reloc_ctl;
4663         rc->merging_rsv_size += rc->nodes_relocated;
4664
4665         if (rc->merge_reloc_tree) {
4666                 ret = btrfs_block_rsv_migrate(&pending->block_rsv,
4667                                               rc->block_rsv,
4668                                               rc->nodes_relocated, true);
4669                 if (ret)
4670                         return ret;
4671         }
4672
4673         new_root = pending->snap;
4674         reloc_root = create_reloc_root(trans, root->reloc_root,
4675                                        new_root->root_key.objectid);
4676         if (IS_ERR(reloc_root))
4677                 return PTR_ERR(reloc_root);
4678
4679         ret = __add_reloc_root(reloc_root);
4680         BUG_ON(ret < 0);
4681         new_root->reloc_root = reloc_root;
4682
4683         if (rc->create_reloc_tree)
4684                 ret = clone_backref_node(trans, rc, root, reloc_root);
4685         return ret;
4686 }