btrfs: qgroup: Only trace data extents in leaves if we're relocating data block group
[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         WARN_ON(btrfs_header_level(eb) != block->level);
2919         if (block->level == 0)
2920                 btrfs_item_key_to_cpu(eb, &block->key, 0);
2921         else
2922                 btrfs_node_key_to_cpu(eb, &block->key, 0);
2923         free_extent_buffer(eb);
2924         block->key_ready = 1;
2925         return 0;
2926 }
2927
2928 /*
2929  * helper function to relocate a tree block
2930  */
2931 static int relocate_tree_block(struct btrfs_trans_handle *trans,
2932                                 struct reloc_control *rc,
2933                                 struct backref_node *node,
2934                                 struct btrfs_key *key,
2935                                 struct btrfs_path *path)
2936 {
2937         struct btrfs_root *root;
2938         int ret = 0;
2939
2940         if (!node)
2941                 return 0;
2942
2943         BUG_ON(node->processed);
2944         root = select_one_root(node);
2945         if (root == ERR_PTR(-ENOENT)) {
2946                 update_processed_blocks(rc, node);
2947                 goto out;
2948         }
2949
2950         if (!root || test_bit(BTRFS_ROOT_REF_COWS, &root->state)) {
2951                 ret = reserve_metadata_space(trans, rc, node);
2952                 if (ret)
2953                         goto out;
2954         }
2955
2956         if (root) {
2957                 if (test_bit(BTRFS_ROOT_REF_COWS, &root->state)) {
2958                         BUG_ON(node->new_bytenr);
2959                         BUG_ON(!list_empty(&node->list));
2960                         btrfs_record_root_in_trans(trans, root);
2961                         root = root->reloc_root;
2962                         node->new_bytenr = root->node->start;
2963                         node->root = root;
2964                         list_add_tail(&node->list, &rc->backref_cache.changed);
2965                 } else {
2966                         path->lowest_level = node->level;
2967                         ret = btrfs_search_slot(trans, root, key, path, 0, 1);
2968                         btrfs_release_path(path);
2969                         if (ret > 0)
2970                                 ret = 0;
2971                 }
2972                 if (!ret)
2973                         update_processed_blocks(rc, node);
2974         } else {
2975                 ret = do_relocation(trans, rc, node, key, path, 1);
2976         }
2977 out:
2978         if (ret || node->level == 0 || node->cowonly)
2979                 remove_backref_node(&rc->backref_cache, node);
2980         return ret;
2981 }
2982
2983 /*
2984  * relocate a list of blocks
2985  */
2986 static noinline_for_stack
2987 int relocate_tree_blocks(struct btrfs_trans_handle *trans,
2988                          struct reloc_control *rc, struct rb_root *blocks)
2989 {
2990         struct btrfs_fs_info *fs_info = rc->extent_root->fs_info;
2991         struct backref_node *node;
2992         struct btrfs_path *path;
2993         struct tree_block *block;
2994         struct rb_node *rb_node;
2995         int ret;
2996         int err = 0;
2997
2998         path = btrfs_alloc_path();
2999         if (!path) {
3000                 err = -ENOMEM;
3001                 goto out_free_blocks;
3002         }
3003
3004         rb_node = rb_first(blocks);
3005         while (rb_node) {
3006                 block = rb_entry(rb_node, struct tree_block, rb_node);
3007                 if (!block->key_ready)
3008                         readahead_tree_block(fs_info, block->bytenr);
3009                 rb_node = rb_next(rb_node);
3010         }
3011
3012         rb_node = rb_first(blocks);
3013         while (rb_node) {
3014                 block = rb_entry(rb_node, struct tree_block, rb_node);
3015                 if (!block->key_ready) {
3016                         err = get_tree_block_key(fs_info, block);
3017                         if (err)
3018                                 goto out_free_path;
3019                 }
3020                 rb_node = rb_next(rb_node);
3021         }
3022
3023         rb_node = rb_first(blocks);
3024         while (rb_node) {
3025                 block = rb_entry(rb_node, struct tree_block, rb_node);
3026
3027                 node = build_backref_tree(rc, &block->key,
3028                                           block->level, block->bytenr);
3029                 if (IS_ERR(node)) {
3030                         err = PTR_ERR(node);
3031                         goto out;
3032                 }
3033
3034                 ret = relocate_tree_block(trans, rc, node, &block->key,
3035                                           path);
3036                 if (ret < 0) {
3037                         if (ret != -EAGAIN || rb_node == rb_first(blocks))
3038                                 err = ret;
3039                         goto out;
3040                 }
3041                 rb_node = rb_next(rb_node);
3042         }
3043 out:
3044         err = finish_pending_nodes(trans, rc, path, err);
3045
3046 out_free_path:
3047         btrfs_free_path(path);
3048 out_free_blocks:
3049         free_block_list(blocks);
3050         return err;
3051 }
3052
3053 static noinline_for_stack
3054 int prealloc_file_extent_cluster(struct inode *inode,
3055                                  struct file_extent_cluster *cluster)
3056 {
3057         u64 alloc_hint = 0;
3058         u64 start;
3059         u64 end;
3060         u64 offset = BTRFS_I(inode)->index_cnt;
3061         u64 num_bytes;
3062         int nr = 0;
3063         int ret = 0;
3064         u64 prealloc_start = cluster->start - offset;
3065         u64 prealloc_end = cluster->end - offset;
3066         u64 cur_offset;
3067         struct extent_changeset *data_reserved = NULL;
3068
3069         BUG_ON(cluster->start != cluster->boundary[0]);
3070         inode_lock(inode);
3071
3072         ret = btrfs_check_data_free_space(inode, &data_reserved, prealloc_start,
3073                                           prealloc_end + 1 - prealloc_start);
3074         if (ret)
3075                 goto out;
3076
3077         cur_offset = prealloc_start;
3078         while (nr < cluster->nr) {
3079                 start = cluster->boundary[nr] - offset;
3080                 if (nr + 1 < cluster->nr)
3081                         end = cluster->boundary[nr + 1] - 1 - offset;
3082                 else
3083                         end = cluster->end - offset;
3084
3085                 lock_extent(&BTRFS_I(inode)->io_tree, start, end);
3086                 num_bytes = end + 1 - start;
3087                 if (cur_offset < start)
3088                         btrfs_free_reserved_data_space(inode, data_reserved,
3089                                         cur_offset, start - cur_offset);
3090                 ret = btrfs_prealloc_file_range(inode, 0, start,
3091                                                 num_bytes, num_bytes,
3092                                                 end + 1, &alloc_hint);
3093                 cur_offset = end + 1;
3094                 unlock_extent(&BTRFS_I(inode)->io_tree, start, end);
3095                 if (ret)
3096                         break;
3097                 nr++;
3098         }
3099         if (cur_offset < prealloc_end)
3100                 btrfs_free_reserved_data_space(inode, data_reserved,
3101                                 cur_offset, prealloc_end + 1 - cur_offset);
3102 out:
3103         inode_unlock(inode);
3104         extent_changeset_free(data_reserved);
3105         return ret;
3106 }
3107
3108 static noinline_for_stack
3109 int setup_extent_mapping(struct inode *inode, u64 start, u64 end,
3110                          u64 block_start)
3111 {
3112         struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
3113         struct extent_map_tree *em_tree = &BTRFS_I(inode)->extent_tree;
3114         struct extent_map *em;
3115         int ret = 0;
3116
3117         em = alloc_extent_map();
3118         if (!em)
3119                 return -ENOMEM;
3120
3121         em->start = start;
3122         em->len = end + 1 - start;
3123         em->block_len = em->len;
3124         em->block_start = block_start;
3125         em->bdev = fs_info->fs_devices->latest_bdev;
3126         set_bit(EXTENT_FLAG_PINNED, &em->flags);
3127
3128         lock_extent(&BTRFS_I(inode)->io_tree, start, end);
3129         while (1) {
3130                 write_lock(&em_tree->lock);
3131                 ret = add_extent_mapping(em_tree, em, 0);
3132                 write_unlock(&em_tree->lock);
3133                 if (ret != -EEXIST) {
3134                         free_extent_map(em);
3135                         break;
3136                 }
3137                 btrfs_drop_extent_cache(BTRFS_I(inode), start, end, 0);
3138         }
3139         unlock_extent(&BTRFS_I(inode)->io_tree, start, end);
3140         return ret;
3141 }
3142
3143 static int relocate_file_extent_cluster(struct inode *inode,
3144                                         struct file_extent_cluster *cluster)
3145 {
3146         struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
3147         u64 page_start;
3148         u64 page_end;
3149         u64 offset = BTRFS_I(inode)->index_cnt;
3150         unsigned long index;
3151         unsigned long last_index;
3152         struct page *page;
3153         struct file_ra_state *ra;
3154         gfp_t mask = btrfs_alloc_write_mask(inode->i_mapping);
3155         int nr = 0;
3156         int ret = 0;
3157
3158         if (!cluster->nr)
3159                 return 0;
3160
3161         ra = kzalloc(sizeof(*ra), GFP_NOFS);
3162         if (!ra)
3163                 return -ENOMEM;
3164
3165         ret = prealloc_file_extent_cluster(inode, cluster);
3166         if (ret)
3167                 goto out;
3168
3169         file_ra_state_init(ra, inode->i_mapping);
3170
3171         ret = setup_extent_mapping(inode, cluster->start - offset,
3172                                    cluster->end - offset, cluster->start);
3173         if (ret)
3174                 goto out;
3175
3176         index = (cluster->start - offset) >> PAGE_SHIFT;
3177         last_index = (cluster->end - offset) >> PAGE_SHIFT;
3178         while (index <= last_index) {
3179                 ret = btrfs_delalloc_reserve_metadata(BTRFS_I(inode),
3180                                 PAGE_SIZE);
3181                 if (ret)
3182                         goto out;
3183
3184                 page = find_lock_page(inode->i_mapping, index);
3185                 if (!page) {
3186                         page_cache_sync_readahead(inode->i_mapping,
3187                                                   ra, NULL, index,
3188                                                   last_index + 1 - index);
3189                         page = find_or_create_page(inode->i_mapping, index,
3190                                                    mask);
3191                         if (!page) {
3192                                 btrfs_delalloc_release_metadata(BTRFS_I(inode),
3193                                                         PAGE_SIZE, true);
3194                                 ret = -ENOMEM;
3195                                 goto out;
3196                         }
3197                 }
3198
3199                 if (PageReadahead(page)) {
3200                         page_cache_async_readahead(inode->i_mapping,
3201                                                    ra, NULL, page, index,
3202                                                    last_index + 1 - index);
3203                 }
3204
3205                 if (!PageUptodate(page)) {
3206                         btrfs_readpage(NULL, page);
3207                         lock_page(page);
3208                         if (!PageUptodate(page)) {
3209                                 unlock_page(page);
3210                                 put_page(page);
3211                                 btrfs_delalloc_release_metadata(BTRFS_I(inode),
3212                                                         PAGE_SIZE, true);
3213                                 btrfs_delalloc_release_extents(BTRFS_I(inode),
3214                                                                PAGE_SIZE, true);
3215                                 ret = -EIO;
3216                                 goto out;
3217                         }
3218                 }
3219
3220                 page_start = page_offset(page);
3221                 page_end = page_start + PAGE_SIZE - 1;
3222
3223                 lock_extent(&BTRFS_I(inode)->io_tree, page_start, page_end);
3224
3225                 set_page_extent_mapped(page);
3226
3227                 if (nr < cluster->nr &&
3228                     page_start + offset == cluster->boundary[nr]) {
3229                         set_extent_bits(&BTRFS_I(inode)->io_tree,
3230                                         page_start, page_end,
3231                                         EXTENT_BOUNDARY);
3232                         nr++;
3233                 }
3234
3235                 ret = btrfs_set_extent_delalloc(inode, page_start, page_end, 0,
3236                                                 NULL, 0);
3237                 if (ret) {
3238                         unlock_page(page);
3239                         put_page(page);
3240                         btrfs_delalloc_release_metadata(BTRFS_I(inode),
3241                                                          PAGE_SIZE, true);
3242                         btrfs_delalloc_release_extents(BTRFS_I(inode),
3243                                                        PAGE_SIZE, true);
3244
3245                         clear_extent_bits(&BTRFS_I(inode)->io_tree,
3246                                           page_start, page_end,
3247                                           EXTENT_LOCKED | EXTENT_BOUNDARY);
3248                         goto out;
3249
3250                 }
3251                 set_page_dirty(page);
3252
3253                 unlock_extent(&BTRFS_I(inode)->io_tree,
3254                               page_start, page_end);
3255                 unlock_page(page);
3256                 put_page(page);
3257
3258                 index++;
3259                 btrfs_delalloc_release_extents(BTRFS_I(inode), PAGE_SIZE,
3260                                                false);
3261                 balance_dirty_pages_ratelimited(inode->i_mapping);
3262                 btrfs_throttle(fs_info);
3263         }
3264         WARN_ON(nr != cluster->nr);
3265 out:
3266         kfree(ra);
3267         return ret;
3268 }
3269
3270 static noinline_for_stack
3271 int relocate_data_extent(struct inode *inode, struct btrfs_key *extent_key,
3272                          struct file_extent_cluster *cluster)
3273 {
3274         int ret;
3275
3276         if (cluster->nr > 0 && extent_key->objectid != cluster->end + 1) {
3277                 ret = relocate_file_extent_cluster(inode, cluster);
3278                 if (ret)
3279                         return ret;
3280                 cluster->nr = 0;
3281         }
3282
3283         if (!cluster->nr)
3284                 cluster->start = extent_key->objectid;
3285         else
3286                 BUG_ON(cluster->nr >= MAX_EXTENTS);
3287         cluster->end = extent_key->objectid + extent_key->offset - 1;
3288         cluster->boundary[cluster->nr] = extent_key->objectid;
3289         cluster->nr++;
3290
3291         if (cluster->nr >= MAX_EXTENTS) {
3292                 ret = relocate_file_extent_cluster(inode, cluster);
3293                 if (ret)
3294                         return ret;
3295                 cluster->nr = 0;
3296         }
3297         return 0;
3298 }
3299
3300 /*
3301  * helper to add a tree block to the list.
3302  * the major work is getting the generation and level of the block
3303  */
3304 static int add_tree_block(struct reloc_control *rc,
3305                           struct btrfs_key *extent_key,
3306                           struct btrfs_path *path,
3307                           struct rb_root *blocks)
3308 {
3309         struct extent_buffer *eb;
3310         struct btrfs_extent_item *ei;
3311         struct btrfs_tree_block_info *bi;
3312         struct tree_block *block;
3313         struct rb_node *rb_node;
3314         u32 item_size;
3315         int level = -1;
3316         u64 generation;
3317
3318         eb =  path->nodes[0];
3319         item_size = btrfs_item_size_nr(eb, path->slots[0]);
3320
3321         if (extent_key->type == BTRFS_METADATA_ITEM_KEY ||
3322             item_size >= sizeof(*ei) + sizeof(*bi)) {
3323                 ei = btrfs_item_ptr(eb, path->slots[0],
3324                                 struct btrfs_extent_item);
3325                 if (extent_key->type == BTRFS_EXTENT_ITEM_KEY) {
3326                         bi = (struct btrfs_tree_block_info *)(ei + 1);
3327                         level = btrfs_tree_block_level(eb, bi);
3328                 } else {
3329                         level = (int)extent_key->offset;
3330                 }
3331                 generation = btrfs_extent_generation(eb, ei);
3332         } else if (unlikely(item_size == sizeof(struct btrfs_extent_item_v0))) {
3333                 btrfs_print_v0_err(eb->fs_info);
3334                 btrfs_handle_fs_error(eb->fs_info, -EINVAL, NULL);
3335                 return -EINVAL;
3336         } else {
3337                 BUG();
3338         }
3339
3340         btrfs_release_path(path);
3341
3342         BUG_ON(level == -1);
3343
3344         block = kmalloc(sizeof(*block), GFP_NOFS);
3345         if (!block)
3346                 return -ENOMEM;
3347
3348         block->bytenr = extent_key->objectid;
3349         block->key.objectid = rc->extent_root->fs_info->nodesize;
3350         block->key.offset = generation;
3351         block->level = level;
3352         block->key_ready = 0;
3353
3354         rb_node = tree_insert(blocks, block->bytenr, &block->rb_node);
3355         if (rb_node)
3356                 backref_tree_panic(rb_node, -EEXIST, block->bytenr);
3357
3358         return 0;
3359 }
3360
3361 /*
3362  * helper to add tree blocks for backref of type BTRFS_SHARED_DATA_REF_KEY
3363  */
3364 static int __add_tree_block(struct reloc_control *rc,
3365                             u64 bytenr, u32 blocksize,
3366                             struct rb_root *blocks)
3367 {
3368         struct btrfs_fs_info *fs_info = rc->extent_root->fs_info;
3369         struct btrfs_path *path;
3370         struct btrfs_key key;
3371         int ret;
3372         bool skinny = btrfs_fs_incompat(fs_info, SKINNY_METADATA);
3373
3374         if (tree_block_processed(bytenr, rc))
3375                 return 0;
3376
3377         if (tree_search(blocks, bytenr))
3378                 return 0;
3379
3380         path = btrfs_alloc_path();
3381         if (!path)
3382                 return -ENOMEM;
3383 again:
3384         key.objectid = bytenr;
3385         if (skinny) {
3386                 key.type = BTRFS_METADATA_ITEM_KEY;
3387                 key.offset = (u64)-1;
3388         } else {
3389                 key.type = BTRFS_EXTENT_ITEM_KEY;
3390                 key.offset = blocksize;
3391         }
3392
3393         path->search_commit_root = 1;
3394         path->skip_locking = 1;
3395         ret = btrfs_search_slot(NULL, rc->extent_root, &key, path, 0, 0);
3396         if (ret < 0)
3397                 goto out;
3398
3399         if (ret > 0 && skinny) {
3400                 if (path->slots[0]) {
3401                         path->slots[0]--;
3402                         btrfs_item_key_to_cpu(path->nodes[0], &key,
3403                                               path->slots[0]);
3404                         if (key.objectid == bytenr &&
3405                             (key.type == BTRFS_METADATA_ITEM_KEY ||
3406                              (key.type == BTRFS_EXTENT_ITEM_KEY &&
3407                               key.offset == blocksize)))
3408                                 ret = 0;
3409                 }
3410
3411                 if (ret) {
3412                         skinny = false;
3413                         btrfs_release_path(path);
3414                         goto again;
3415                 }
3416         }
3417         if (ret) {
3418                 ASSERT(ret == 1);
3419                 btrfs_print_leaf(path->nodes[0]);
3420                 btrfs_err(fs_info,
3421              "tree block extent item (%llu) is not found in extent tree",
3422                      bytenr);
3423                 WARN_ON(1);
3424                 ret = -EINVAL;
3425                 goto out;
3426         }
3427
3428         ret = add_tree_block(rc, &key, path, blocks);
3429 out:
3430         btrfs_free_path(path);
3431         return ret;
3432 }
3433
3434 /*
3435  * helper to check if the block use full backrefs for pointers in it
3436  */
3437 static int block_use_full_backref(struct reloc_control *rc,
3438                                   struct extent_buffer *eb)
3439 {
3440         u64 flags;
3441         int ret;
3442
3443         if (btrfs_header_flag(eb, BTRFS_HEADER_FLAG_RELOC) ||
3444             btrfs_header_backref_rev(eb) < BTRFS_MIXED_BACKREF_REV)
3445                 return 1;
3446
3447         ret = btrfs_lookup_extent_info(NULL, rc->extent_root->fs_info,
3448                                        eb->start, btrfs_header_level(eb), 1,
3449                                        NULL, &flags);
3450         BUG_ON(ret);
3451
3452         if (flags & BTRFS_BLOCK_FLAG_FULL_BACKREF)
3453                 ret = 1;
3454         else
3455                 ret = 0;
3456         return ret;
3457 }
3458
3459 static int delete_block_group_cache(struct btrfs_fs_info *fs_info,
3460                                     struct btrfs_block_group_cache *block_group,
3461                                     struct inode *inode,
3462                                     u64 ino)
3463 {
3464         struct btrfs_key key;
3465         struct btrfs_root *root = fs_info->tree_root;
3466         struct btrfs_trans_handle *trans;
3467         int ret = 0;
3468
3469         if (inode)
3470                 goto truncate;
3471
3472         key.objectid = ino;
3473         key.type = BTRFS_INODE_ITEM_KEY;
3474         key.offset = 0;
3475
3476         inode = btrfs_iget(fs_info->sb, &key, root, NULL);
3477         if (IS_ERR(inode))
3478                 return -ENOENT;
3479
3480 truncate:
3481         ret = btrfs_check_trunc_cache_free_space(fs_info,
3482                                                  &fs_info->global_block_rsv);
3483         if (ret)
3484                 goto out;
3485
3486         trans = btrfs_join_transaction(root);
3487         if (IS_ERR(trans)) {
3488                 ret = PTR_ERR(trans);
3489                 goto out;
3490         }
3491
3492         ret = btrfs_truncate_free_space_cache(trans, block_group, inode);
3493
3494         btrfs_end_transaction(trans);
3495         btrfs_btree_balance_dirty(fs_info);
3496 out:
3497         iput(inode);
3498         return ret;
3499 }
3500
3501 /*
3502  * helper to add tree blocks for backref of type BTRFS_EXTENT_DATA_REF_KEY
3503  * this function scans fs tree to find blocks reference the data extent
3504  */
3505 static int find_data_references(struct reloc_control *rc,
3506                                 struct btrfs_key *extent_key,
3507                                 struct extent_buffer *leaf,
3508                                 struct btrfs_extent_data_ref *ref,
3509                                 struct rb_root *blocks)
3510 {
3511         struct btrfs_fs_info *fs_info = rc->extent_root->fs_info;
3512         struct btrfs_path *path;
3513         struct tree_block *block;
3514         struct btrfs_root *root;
3515         struct btrfs_file_extent_item *fi;
3516         struct rb_node *rb_node;
3517         struct btrfs_key key;
3518         u64 ref_root;
3519         u64 ref_objectid;
3520         u64 ref_offset;
3521         u32 ref_count;
3522         u32 nritems;
3523         int err = 0;
3524         int added = 0;
3525         int counted;
3526         int ret;
3527
3528         ref_root = btrfs_extent_data_ref_root(leaf, ref);
3529         ref_objectid = btrfs_extent_data_ref_objectid(leaf, ref);
3530         ref_offset = btrfs_extent_data_ref_offset(leaf, ref);
3531         ref_count = btrfs_extent_data_ref_count(leaf, ref);
3532
3533         /*
3534          * This is an extent belonging to the free space cache, lets just delete
3535          * it and redo the search.
3536          */
3537         if (ref_root == BTRFS_ROOT_TREE_OBJECTID) {
3538                 ret = delete_block_group_cache(fs_info, rc->block_group,
3539                                                NULL, ref_objectid);
3540                 if (ret != -ENOENT)
3541                         return ret;
3542                 ret = 0;
3543         }
3544
3545         path = btrfs_alloc_path();
3546         if (!path)
3547                 return -ENOMEM;
3548         path->reada = READA_FORWARD;
3549
3550         root = read_fs_root(fs_info, ref_root);
3551         if (IS_ERR(root)) {
3552                 err = PTR_ERR(root);
3553                 goto out;
3554         }
3555
3556         key.objectid = ref_objectid;
3557         key.type = BTRFS_EXTENT_DATA_KEY;
3558         if (ref_offset > ((u64)-1 << 32))
3559                 key.offset = 0;
3560         else
3561                 key.offset = ref_offset;
3562
3563         path->search_commit_root = 1;
3564         path->skip_locking = 1;
3565         ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
3566         if (ret < 0) {
3567                 err = ret;
3568                 goto out;
3569         }
3570
3571         leaf = path->nodes[0];
3572         nritems = btrfs_header_nritems(leaf);
3573         /*
3574          * the references in tree blocks that use full backrefs
3575          * are not counted in
3576          */
3577         if (block_use_full_backref(rc, leaf))
3578                 counted = 0;
3579         else
3580                 counted = 1;
3581         rb_node = tree_search(blocks, leaf->start);
3582         if (rb_node) {
3583                 if (counted)
3584                         added = 1;
3585                 else
3586                         path->slots[0] = nritems;
3587         }
3588
3589         while (ref_count > 0) {
3590                 while (path->slots[0] >= nritems) {
3591                         ret = btrfs_next_leaf(root, path);
3592                         if (ret < 0) {
3593                                 err = ret;
3594                                 goto out;
3595                         }
3596                         if (WARN_ON(ret > 0))
3597                                 goto out;
3598
3599                         leaf = path->nodes[0];
3600                         nritems = btrfs_header_nritems(leaf);
3601                         added = 0;
3602
3603                         if (block_use_full_backref(rc, leaf))
3604                                 counted = 0;
3605                         else
3606                                 counted = 1;
3607                         rb_node = tree_search(blocks, leaf->start);
3608                         if (rb_node) {
3609                                 if (counted)
3610                                         added = 1;
3611                                 else
3612                                         path->slots[0] = nritems;
3613                         }
3614                 }
3615
3616                 btrfs_item_key_to_cpu(leaf, &key, path->slots[0]);
3617                 if (WARN_ON(key.objectid != ref_objectid ||
3618                     key.type != BTRFS_EXTENT_DATA_KEY))
3619                         break;
3620
3621                 fi = btrfs_item_ptr(leaf, path->slots[0],
3622                                     struct btrfs_file_extent_item);
3623
3624                 if (btrfs_file_extent_type(leaf, fi) ==
3625                     BTRFS_FILE_EXTENT_INLINE)
3626                         goto next;
3627
3628                 if (btrfs_file_extent_disk_bytenr(leaf, fi) !=
3629                     extent_key->objectid)
3630                         goto next;
3631
3632                 key.offset -= btrfs_file_extent_offset(leaf, fi);
3633                 if (key.offset != ref_offset)
3634                         goto next;
3635
3636                 if (counted)
3637                         ref_count--;
3638                 if (added)
3639                         goto next;
3640
3641                 if (!tree_block_processed(leaf->start, rc)) {
3642                         block = kmalloc(sizeof(*block), GFP_NOFS);
3643                         if (!block) {
3644                                 err = -ENOMEM;
3645                                 break;
3646                         }
3647                         block->bytenr = leaf->start;
3648                         btrfs_item_key_to_cpu(leaf, &block->key, 0);
3649                         block->level = 0;
3650                         block->key_ready = 1;
3651                         rb_node = tree_insert(blocks, block->bytenr,
3652                                               &block->rb_node);
3653                         if (rb_node)
3654                                 backref_tree_panic(rb_node, -EEXIST,
3655                                                    block->bytenr);
3656                 }
3657                 if (counted)
3658                         added = 1;
3659                 else
3660                         path->slots[0] = nritems;
3661 next:
3662                 path->slots[0]++;
3663
3664         }
3665 out:
3666         btrfs_free_path(path);
3667         return err;
3668 }
3669
3670 /*
3671  * helper to find all tree blocks that reference a given data extent
3672  */
3673 static noinline_for_stack
3674 int add_data_references(struct reloc_control *rc,
3675                         struct btrfs_key *extent_key,
3676                         struct btrfs_path *path,
3677                         struct rb_root *blocks)
3678 {
3679         struct btrfs_key key;
3680         struct extent_buffer *eb;
3681         struct btrfs_extent_data_ref *dref;
3682         struct btrfs_extent_inline_ref *iref;
3683         unsigned long ptr;
3684         unsigned long end;
3685         u32 blocksize = rc->extent_root->fs_info->nodesize;
3686         int ret = 0;
3687         int err = 0;
3688
3689         eb = path->nodes[0];
3690         ptr = btrfs_item_ptr_offset(eb, path->slots[0]);
3691         end = ptr + btrfs_item_size_nr(eb, path->slots[0]);
3692         ptr += sizeof(struct btrfs_extent_item);
3693
3694         while (ptr < end) {
3695                 iref = (struct btrfs_extent_inline_ref *)ptr;
3696                 key.type = btrfs_get_extent_inline_ref_type(eb, iref,
3697                                                         BTRFS_REF_TYPE_DATA);
3698                 if (key.type == BTRFS_SHARED_DATA_REF_KEY) {
3699                         key.offset = btrfs_extent_inline_ref_offset(eb, iref);
3700                         ret = __add_tree_block(rc, key.offset, blocksize,
3701                                                blocks);
3702                 } else if (key.type == BTRFS_EXTENT_DATA_REF_KEY) {
3703                         dref = (struct btrfs_extent_data_ref *)(&iref->offset);
3704                         ret = find_data_references(rc, extent_key,
3705                                                    eb, dref, blocks);
3706                 } else {
3707                         ret = -EUCLEAN;
3708                         btrfs_err(rc->extent_root->fs_info,
3709                      "extent %llu slot %d has an invalid inline ref type",
3710                              eb->start, path->slots[0]);
3711                 }
3712                 if (ret) {
3713                         err = ret;
3714                         goto out;
3715                 }
3716                 ptr += btrfs_extent_inline_ref_size(key.type);
3717         }
3718         WARN_ON(ptr > end);
3719
3720         while (1) {
3721                 cond_resched();
3722                 eb = path->nodes[0];
3723                 if (path->slots[0] >= btrfs_header_nritems(eb)) {
3724                         ret = btrfs_next_leaf(rc->extent_root, path);
3725                         if (ret < 0) {
3726                                 err = ret;
3727                                 break;
3728                         }
3729                         if (ret > 0)
3730                                 break;
3731                         eb = path->nodes[0];
3732                 }
3733
3734                 btrfs_item_key_to_cpu(eb, &key, path->slots[0]);
3735                 if (key.objectid != extent_key->objectid)
3736                         break;
3737
3738                 if (key.type == BTRFS_SHARED_DATA_REF_KEY) {
3739                         ret = __add_tree_block(rc, key.offset, blocksize,
3740                                                blocks);
3741                 } else if (key.type == BTRFS_EXTENT_DATA_REF_KEY) {
3742                         dref = btrfs_item_ptr(eb, path->slots[0],
3743                                               struct btrfs_extent_data_ref);
3744                         ret = find_data_references(rc, extent_key,
3745                                                    eb, dref, blocks);
3746                 } else if (unlikely(key.type == BTRFS_EXTENT_REF_V0_KEY)) {
3747                         btrfs_print_v0_err(eb->fs_info);
3748                         btrfs_handle_fs_error(eb->fs_info, -EINVAL, NULL);
3749                         ret = -EINVAL;
3750                 } else {
3751                         ret = 0;
3752                 }
3753                 if (ret) {
3754                         err = ret;
3755                         break;
3756                 }
3757                 path->slots[0]++;
3758         }
3759 out:
3760         btrfs_release_path(path);
3761         if (err)
3762                 free_block_list(blocks);
3763         return err;
3764 }
3765
3766 /*
3767  * helper to find next unprocessed extent
3768  */
3769 static noinline_for_stack
3770 int find_next_extent(struct reloc_control *rc, struct btrfs_path *path,
3771                      struct btrfs_key *extent_key)
3772 {
3773         struct btrfs_fs_info *fs_info = rc->extent_root->fs_info;
3774         struct btrfs_key key;
3775         struct extent_buffer *leaf;
3776         u64 start, end, last;
3777         int ret;
3778
3779         last = rc->block_group->key.objectid + rc->block_group->key.offset;
3780         while (1) {
3781                 cond_resched();
3782                 if (rc->search_start >= last) {
3783                         ret = 1;
3784                         break;
3785                 }
3786
3787                 key.objectid = rc->search_start;
3788                 key.type = BTRFS_EXTENT_ITEM_KEY;
3789                 key.offset = 0;
3790
3791                 path->search_commit_root = 1;
3792                 path->skip_locking = 1;
3793                 ret = btrfs_search_slot(NULL, rc->extent_root, &key, path,
3794                                         0, 0);
3795                 if (ret < 0)
3796                         break;
3797 next:
3798                 leaf = path->nodes[0];
3799                 if (path->slots[0] >= btrfs_header_nritems(leaf)) {
3800                         ret = btrfs_next_leaf(rc->extent_root, path);
3801                         if (ret != 0)
3802                                 break;
3803                         leaf = path->nodes[0];
3804                 }
3805
3806                 btrfs_item_key_to_cpu(leaf, &key, path->slots[0]);
3807                 if (key.objectid >= last) {
3808                         ret = 1;
3809                         break;
3810                 }
3811
3812                 if (key.type != BTRFS_EXTENT_ITEM_KEY &&
3813                     key.type != BTRFS_METADATA_ITEM_KEY) {
3814                         path->slots[0]++;
3815                         goto next;
3816                 }
3817
3818                 if (key.type == BTRFS_EXTENT_ITEM_KEY &&
3819                     key.objectid + key.offset <= rc->search_start) {
3820                         path->slots[0]++;
3821                         goto next;
3822                 }
3823
3824                 if (key.type == BTRFS_METADATA_ITEM_KEY &&
3825                     key.objectid + fs_info->nodesize <=
3826                     rc->search_start) {
3827                         path->slots[0]++;
3828                         goto next;
3829                 }
3830
3831                 ret = find_first_extent_bit(&rc->processed_blocks,
3832                                             key.objectid, &start, &end,
3833                                             EXTENT_DIRTY, NULL);
3834
3835                 if (ret == 0 && start <= key.objectid) {
3836                         btrfs_release_path(path);
3837                         rc->search_start = end + 1;
3838                 } else {
3839                         if (key.type == BTRFS_EXTENT_ITEM_KEY)
3840                                 rc->search_start = key.objectid + key.offset;
3841                         else
3842                                 rc->search_start = key.objectid +
3843                                         fs_info->nodesize;
3844                         memcpy(extent_key, &key, sizeof(key));
3845                         return 0;
3846                 }
3847         }
3848         btrfs_release_path(path);
3849         return ret;
3850 }
3851
3852 static void set_reloc_control(struct reloc_control *rc)
3853 {
3854         struct btrfs_fs_info *fs_info = rc->extent_root->fs_info;
3855
3856         mutex_lock(&fs_info->reloc_mutex);
3857         fs_info->reloc_ctl = rc;
3858         mutex_unlock(&fs_info->reloc_mutex);
3859 }
3860
3861 static void unset_reloc_control(struct reloc_control *rc)
3862 {
3863         struct btrfs_fs_info *fs_info = rc->extent_root->fs_info;
3864
3865         mutex_lock(&fs_info->reloc_mutex);
3866         fs_info->reloc_ctl = NULL;
3867         mutex_unlock(&fs_info->reloc_mutex);
3868 }
3869
3870 static int check_extent_flags(u64 flags)
3871 {
3872         if ((flags & BTRFS_EXTENT_FLAG_DATA) &&
3873             (flags & BTRFS_EXTENT_FLAG_TREE_BLOCK))
3874                 return 1;
3875         if (!(flags & BTRFS_EXTENT_FLAG_DATA) &&
3876             !(flags & BTRFS_EXTENT_FLAG_TREE_BLOCK))
3877                 return 1;
3878         if ((flags & BTRFS_EXTENT_FLAG_DATA) &&
3879             (flags & BTRFS_BLOCK_FLAG_FULL_BACKREF))
3880                 return 1;
3881         return 0;
3882 }
3883
3884 static noinline_for_stack
3885 int prepare_to_relocate(struct reloc_control *rc)
3886 {
3887         struct btrfs_trans_handle *trans;
3888         int ret;
3889
3890         rc->block_rsv = btrfs_alloc_block_rsv(rc->extent_root->fs_info,
3891                                               BTRFS_BLOCK_RSV_TEMP);
3892         if (!rc->block_rsv)
3893                 return -ENOMEM;
3894
3895         memset(&rc->cluster, 0, sizeof(rc->cluster));
3896         rc->search_start = rc->block_group->key.objectid;
3897         rc->extents_found = 0;
3898         rc->nodes_relocated = 0;
3899         rc->merging_rsv_size = 0;
3900         rc->reserved_bytes = 0;
3901         rc->block_rsv->size = rc->extent_root->fs_info->nodesize *
3902                               RELOCATION_RESERVED_NODES;
3903         ret = btrfs_block_rsv_refill(rc->extent_root,
3904                                      rc->block_rsv, rc->block_rsv->size,
3905                                      BTRFS_RESERVE_FLUSH_ALL);
3906         if (ret)
3907                 return ret;
3908
3909         rc->create_reloc_tree = 1;
3910         set_reloc_control(rc);
3911
3912         trans = btrfs_join_transaction(rc->extent_root);
3913         if (IS_ERR(trans)) {
3914                 unset_reloc_control(rc);
3915                 /*
3916                  * extent tree is not a ref_cow tree and has no reloc_root to
3917                  * cleanup.  And callers are responsible to free the above
3918                  * block rsv.
3919                  */
3920                 return PTR_ERR(trans);
3921         }
3922         btrfs_commit_transaction(trans);
3923         return 0;
3924 }
3925
3926 static noinline_for_stack int relocate_block_group(struct reloc_control *rc)
3927 {
3928         struct btrfs_fs_info *fs_info = rc->extent_root->fs_info;
3929         struct rb_root blocks = RB_ROOT;
3930         struct btrfs_key key;
3931         struct btrfs_trans_handle *trans = NULL;
3932         struct btrfs_path *path;
3933         struct btrfs_extent_item *ei;
3934         u64 flags;
3935         u32 item_size;
3936         int ret;
3937         int err = 0;
3938         int progress = 0;
3939
3940         path = btrfs_alloc_path();
3941         if (!path)
3942                 return -ENOMEM;
3943         path->reada = READA_FORWARD;
3944
3945         ret = prepare_to_relocate(rc);
3946         if (ret) {
3947                 err = ret;
3948                 goto out_free;
3949         }
3950
3951         while (1) {
3952                 rc->reserved_bytes = 0;
3953                 ret = btrfs_block_rsv_refill(rc->extent_root,
3954                                         rc->block_rsv, rc->block_rsv->size,
3955                                         BTRFS_RESERVE_FLUSH_ALL);
3956                 if (ret) {
3957                         err = ret;
3958                         break;
3959                 }
3960                 progress++;
3961                 trans = btrfs_start_transaction(rc->extent_root, 0);
3962                 if (IS_ERR(trans)) {
3963                         err = PTR_ERR(trans);
3964                         trans = NULL;
3965                         break;
3966                 }
3967 restart:
3968                 if (update_backref_cache(trans, &rc->backref_cache)) {
3969                         btrfs_end_transaction(trans);
3970                         continue;
3971                 }
3972
3973                 ret = find_next_extent(rc, path, &key);
3974                 if (ret < 0)
3975                         err = ret;
3976                 if (ret != 0)
3977                         break;
3978
3979                 rc->extents_found++;
3980
3981                 ei = btrfs_item_ptr(path->nodes[0], path->slots[0],
3982                                     struct btrfs_extent_item);
3983                 item_size = btrfs_item_size_nr(path->nodes[0], path->slots[0]);
3984                 if (item_size >= sizeof(*ei)) {
3985                         flags = btrfs_extent_flags(path->nodes[0], ei);
3986                         ret = check_extent_flags(flags);
3987                         BUG_ON(ret);
3988                 } else if (unlikely(item_size == sizeof(struct btrfs_extent_item_v0))) {
3989                         err = -EINVAL;
3990                         btrfs_print_v0_err(trans->fs_info);
3991                         btrfs_abort_transaction(trans, err);
3992                         break;
3993                 } else {
3994                         BUG();
3995                 }
3996
3997                 if (flags & BTRFS_EXTENT_FLAG_TREE_BLOCK) {
3998                         ret = add_tree_block(rc, &key, path, &blocks);
3999                 } else if (rc->stage == UPDATE_DATA_PTRS &&
4000                            (flags & BTRFS_EXTENT_FLAG_DATA)) {
4001                         ret = add_data_references(rc, &key, path, &blocks);
4002                 } else {
4003                         btrfs_release_path(path);
4004                         ret = 0;
4005                 }
4006                 if (ret < 0) {
4007                         err = ret;
4008                         break;
4009                 }
4010
4011                 if (!RB_EMPTY_ROOT(&blocks)) {
4012                         ret = relocate_tree_blocks(trans, rc, &blocks);
4013                         if (ret < 0) {
4014                                 /*
4015                                  * if we fail to relocate tree blocks, force to update
4016                                  * backref cache when committing transaction.
4017                                  */
4018                                 rc->backref_cache.last_trans = trans->transid - 1;
4019
4020                                 if (ret != -EAGAIN) {
4021                                         err = ret;
4022                                         break;
4023                                 }
4024                                 rc->extents_found--;
4025                                 rc->search_start = key.objectid;
4026                         }
4027                 }
4028
4029                 btrfs_end_transaction_throttle(trans);
4030                 btrfs_btree_balance_dirty(fs_info);
4031                 trans = NULL;
4032
4033                 if (rc->stage == MOVE_DATA_EXTENTS &&
4034                     (flags & BTRFS_EXTENT_FLAG_DATA)) {
4035                         rc->found_file_extent = 1;
4036                         ret = relocate_data_extent(rc->data_inode,
4037                                                    &key, &rc->cluster);
4038                         if (ret < 0) {
4039                                 err = ret;
4040                                 break;
4041                         }
4042                 }
4043         }
4044         if (trans && progress && err == -ENOSPC) {
4045                 ret = btrfs_force_chunk_alloc(trans, rc->block_group->flags);
4046                 if (ret == 1) {
4047                         err = 0;
4048                         progress = 0;
4049                         goto restart;
4050                 }
4051         }
4052
4053         btrfs_release_path(path);
4054         clear_extent_bits(&rc->processed_blocks, 0, (u64)-1, EXTENT_DIRTY);
4055
4056         if (trans) {
4057                 btrfs_end_transaction_throttle(trans);
4058                 btrfs_btree_balance_dirty(fs_info);
4059         }
4060
4061         if (!err) {
4062                 ret = relocate_file_extent_cluster(rc->data_inode,
4063                                                    &rc->cluster);
4064                 if (ret < 0)
4065                         err = ret;
4066         }
4067
4068         rc->create_reloc_tree = 0;
4069         set_reloc_control(rc);
4070
4071         backref_cache_cleanup(&rc->backref_cache);
4072         btrfs_block_rsv_release(fs_info, rc->block_rsv, (u64)-1);
4073
4074         err = prepare_to_merge(rc, err);
4075
4076         merge_reloc_roots(rc);
4077
4078         rc->merge_reloc_tree = 0;
4079         unset_reloc_control(rc);
4080         btrfs_block_rsv_release(fs_info, rc->block_rsv, (u64)-1);
4081
4082         /* get rid of pinned extents */
4083         trans = btrfs_join_transaction(rc->extent_root);
4084         if (IS_ERR(trans)) {
4085                 err = PTR_ERR(trans);
4086                 goto out_free;
4087         }
4088         btrfs_commit_transaction(trans);
4089 out_free:
4090         btrfs_free_block_rsv(fs_info, rc->block_rsv);
4091         btrfs_free_path(path);
4092         return err;
4093 }
4094
4095 static int __insert_orphan_inode(struct btrfs_trans_handle *trans,
4096                                  struct btrfs_root *root, u64 objectid)
4097 {
4098         struct btrfs_path *path;
4099         struct btrfs_inode_item *item;
4100         struct extent_buffer *leaf;
4101         int ret;
4102
4103         path = btrfs_alloc_path();
4104         if (!path)
4105                 return -ENOMEM;
4106
4107         ret = btrfs_insert_empty_inode(trans, root, path, objectid);
4108         if (ret)
4109                 goto out;
4110
4111         leaf = path->nodes[0];
4112         item = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_inode_item);
4113         memzero_extent_buffer(leaf, (unsigned long)item, sizeof(*item));
4114         btrfs_set_inode_generation(leaf, item, 1);
4115         btrfs_set_inode_size(leaf, item, 0);
4116         btrfs_set_inode_mode(leaf, item, S_IFREG | 0600);
4117         btrfs_set_inode_flags(leaf, item, BTRFS_INODE_NOCOMPRESS |
4118                                           BTRFS_INODE_PREALLOC);
4119         btrfs_mark_buffer_dirty(leaf);
4120 out:
4121         btrfs_free_path(path);
4122         return ret;
4123 }
4124
4125 /*
4126  * helper to create inode for data relocation.
4127  * the inode is in data relocation tree and its link count is 0
4128  */
4129 static noinline_for_stack
4130 struct inode *create_reloc_inode(struct btrfs_fs_info *fs_info,
4131                                  struct btrfs_block_group_cache *group)
4132 {
4133         struct inode *inode = NULL;
4134         struct btrfs_trans_handle *trans;
4135         struct btrfs_root *root;
4136         struct btrfs_key key;
4137         u64 objectid;
4138         int err = 0;
4139
4140         root = read_fs_root(fs_info, BTRFS_DATA_RELOC_TREE_OBJECTID);
4141         if (IS_ERR(root))
4142                 return ERR_CAST(root);
4143
4144         trans = btrfs_start_transaction(root, 6);
4145         if (IS_ERR(trans))
4146                 return ERR_CAST(trans);
4147
4148         err = btrfs_find_free_objectid(root, &objectid);
4149         if (err)
4150                 goto out;
4151
4152         err = __insert_orphan_inode(trans, root, objectid);
4153         BUG_ON(err);
4154
4155         key.objectid = objectid;
4156         key.type = BTRFS_INODE_ITEM_KEY;
4157         key.offset = 0;
4158         inode = btrfs_iget(fs_info->sb, &key, root, NULL);
4159         BUG_ON(IS_ERR(inode));
4160         BTRFS_I(inode)->index_cnt = group->key.objectid;
4161
4162         err = btrfs_orphan_add(trans, BTRFS_I(inode));
4163 out:
4164         btrfs_end_transaction(trans);
4165         btrfs_btree_balance_dirty(fs_info);
4166         if (err) {
4167                 if (inode)
4168                         iput(inode);
4169                 inode = ERR_PTR(err);
4170         }
4171         return inode;
4172 }
4173
4174 static struct reloc_control *alloc_reloc_control(void)
4175 {
4176         struct reloc_control *rc;
4177
4178         rc = kzalloc(sizeof(*rc), GFP_NOFS);
4179         if (!rc)
4180                 return NULL;
4181
4182         INIT_LIST_HEAD(&rc->reloc_roots);
4183         backref_cache_init(&rc->backref_cache);
4184         mapping_tree_init(&rc->reloc_root_tree);
4185         extent_io_tree_init(&rc->processed_blocks, NULL);
4186         return rc;
4187 }
4188
4189 /*
4190  * Print the block group being relocated
4191  */
4192 static void describe_relocation(struct btrfs_fs_info *fs_info,
4193                                 struct btrfs_block_group_cache *block_group)
4194 {
4195         char buf[128];          /* prefixed by a '|' that'll be dropped */
4196         u64 flags = block_group->flags;
4197
4198         /* Shouldn't happen */
4199         if (!flags) {
4200                 strcpy(buf, "|NONE");
4201         } else {
4202                 char *bp = buf;
4203
4204 #define DESCRIBE_FLAG(f, d) \
4205                 if (flags & BTRFS_BLOCK_GROUP_##f) { \
4206                         bp += snprintf(bp, buf - bp + sizeof(buf), "|%s", d); \
4207                         flags &= ~BTRFS_BLOCK_GROUP_##f; \
4208                 }
4209                 DESCRIBE_FLAG(DATA,     "data");
4210                 DESCRIBE_FLAG(SYSTEM,   "system");
4211                 DESCRIBE_FLAG(METADATA, "metadata");
4212                 DESCRIBE_FLAG(RAID0,    "raid0");
4213                 DESCRIBE_FLAG(RAID1,    "raid1");
4214                 DESCRIBE_FLAG(DUP,      "dup");
4215                 DESCRIBE_FLAG(RAID10,   "raid10");
4216                 DESCRIBE_FLAG(RAID5,    "raid5");
4217                 DESCRIBE_FLAG(RAID6,    "raid6");
4218                 if (flags)
4219                         snprintf(bp, buf - bp + sizeof(buf), "|0x%llx", flags);
4220 #undef DESCRIBE_FLAG
4221         }
4222
4223         btrfs_info(fs_info,
4224                    "relocating block group %llu flags %s",
4225                    block_group->key.objectid, buf + 1);
4226 }
4227
4228 /*
4229  * function to relocate all extents in a block group.
4230  */
4231 int btrfs_relocate_block_group(struct btrfs_fs_info *fs_info, u64 group_start)
4232 {
4233         struct btrfs_root *extent_root = fs_info->extent_root;
4234         struct reloc_control *rc;
4235         struct inode *inode;
4236         struct btrfs_path *path;
4237         int ret;
4238         int rw = 0;
4239         int err = 0;
4240
4241         rc = alloc_reloc_control();
4242         if (!rc)
4243                 return -ENOMEM;
4244
4245         rc->extent_root = extent_root;
4246
4247         rc->block_group = btrfs_lookup_block_group(fs_info, group_start);
4248         BUG_ON(!rc->block_group);
4249
4250         ret = btrfs_inc_block_group_ro(rc->block_group);
4251         if (ret) {
4252                 err = ret;
4253                 goto out;
4254         }
4255         rw = 1;
4256
4257         path = btrfs_alloc_path();
4258         if (!path) {
4259                 err = -ENOMEM;
4260                 goto out;
4261         }
4262
4263         inode = lookup_free_space_inode(fs_info, rc->block_group, path);
4264         btrfs_free_path(path);
4265
4266         if (!IS_ERR(inode))
4267                 ret = delete_block_group_cache(fs_info, rc->block_group, inode, 0);
4268         else
4269                 ret = PTR_ERR(inode);
4270
4271         if (ret && ret != -ENOENT) {
4272                 err = ret;
4273                 goto out;
4274         }
4275
4276         rc->data_inode = create_reloc_inode(fs_info, rc->block_group);
4277         if (IS_ERR(rc->data_inode)) {
4278                 err = PTR_ERR(rc->data_inode);
4279                 rc->data_inode = NULL;
4280                 goto out;
4281         }
4282
4283         describe_relocation(fs_info, rc->block_group);
4284
4285         btrfs_wait_block_group_reservations(rc->block_group);
4286         btrfs_wait_nocow_writers(rc->block_group);
4287         btrfs_wait_ordered_roots(fs_info, U64_MAX,
4288                                  rc->block_group->key.objectid,
4289                                  rc->block_group->key.offset);
4290
4291         while (1) {
4292                 mutex_lock(&fs_info->cleaner_mutex);
4293                 ret = relocate_block_group(rc);
4294                 mutex_unlock(&fs_info->cleaner_mutex);
4295                 if (ret < 0) {
4296                         err = ret;
4297                         goto out;
4298                 }
4299
4300                 if (rc->extents_found == 0)
4301                         break;
4302
4303                 btrfs_info(fs_info, "found %llu extents", rc->extents_found);
4304
4305                 if (rc->stage == MOVE_DATA_EXTENTS && rc->found_file_extent) {
4306                         ret = btrfs_wait_ordered_range(rc->data_inode, 0,
4307                                                        (u64)-1);
4308                         if (ret) {
4309                                 err = ret;
4310                                 goto out;
4311                         }
4312                         invalidate_mapping_pages(rc->data_inode->i_mapping,
4313                                                  0, -1);
4314                         rc->stage = UPDATE_DATA_PTRS;
4315                 }
4316         }
4317
4318         WARN_ON(rc->block_group->pinned > 0);
4319         WARN_ON(rc->block_group->reserved > 0);
4320         WARN_ON(btrfs_block_group_used(&rc->block_group->item) > 0);
4321 out:
4322         if (err && rw)
4323                 btrfs_dec_block_group_ro(rc->block_group);
4324         iput(rc->data_inode);
4325         btrfs_put_block_group(rc->block_group);
4326         kfree(rc);
4327         return err;
4328 }
4329
4330 static noinline_for_stack int mark_garbage_root(struct btrfs_root *root)
4331 {
4332         struct btrfs_fs_info *fs_info = root->fs_info;
4333         struct btrfs_trans_handle *trans;
4334         int ret, err;
4335
4336         trans = btrfs_start_transaction(fs_info->tree_root, 0);
4337         if (IS_ERR(trans))
4338                 return PTR_ERR(trans);
4339
4340         memset(&root->root_item.drop_progress, 0,
4341                 sizeof(root->root_item.drop_progress));
4342         root->root_item.drop_level = 0;
4343         btrfs_set_root_refs(&root->root_item, 0);
4344         ret = btrfs_update_root(trans, fs_info->tree_root,
4345                                 &root->root_key, &root->root_item);
4346
4347         err = btrfs_end_transaction(trans);
4348         if (err)
4349                 return err;
4350         return ret;
4351 }
4352
4353 /*
4354  * recover relocation interrupted by system crash.
4355  *
4356  * this function resumes merging reloc trees with corresponding fs trees.
4357  * this is important for keeping the sharing of tree blocks
4358  */
4359 int btrfs_recover_relocation(struct btrfs_root *root)
4360 {
4361         struct btrfs_fs_info *fs_info = root->fs_info;
4362         LIST_HEAD(reloc_roots);
4363         struct btrfs_key key;
4364         struct btrfs_root *fs_root;
4365         struct btrfs_root *reloc_root;
4366         struct btrfs_path *path;
4367         struct extent_buffer *leaf;
4368         struct reloc_control *rc = NULL;
4369         struct btrfs_trans_handle *trans;
4370         int ret;
4371         int err = 0;
4372
4373         path = btrfs_alloc_path();
4374         if (!path)
4375                 return -ENOMEM;
4376         path->reada = READA_BACK;
4377
4378         key.objectid = BTRFS_TREE_RELOC_OBJECTID;
4379         key.type = BTRFS_ROOT_ITEM_KEY;
4380         key.offset = (u64)-1;
4381
4382         while (1) {
4383                 ret = btrfs_search_slot(NULL, fs_info->tree_root, &key,
4384                                         path, 0, 0);
4385                 if (ret < 0) {
4386                         err = ret;
4387                         goto out;
4388                 }
4389                 if (ret > 0) {
4390                         if (path->slots[0] == 0)
4391                                 break;
4392                         path->slots[0]--;
4393                 }
4394                 leaf = path->nodes[0];
4395                 btrfs_item_key_to_cpu(leaf, &key, path->slots[0]);
4396                 btrfs_release_path(path);
4397
4398                 if (key.objectid != BTRFS_TREE_RELOC_OBJECTID ||
4399                     key.type != BTRFS_ROOT_ITEM_KEY)
4400                         break;
4401
4402                 reloc_root = btrfs_read_fs_root(root, &key);
4403                 if (IS_ERR(reloc_root)) {
4404                         err = PTR_ERR(reloc_root);
4405                         goto out;
4406                 }
4407
4408                 list_add(&reloc_root->root_list, &reloc_roots);
4409
4410                 if (btrfs_root_refs(&reloc_root->root_item) > 0) {
4411                         fs_root = read_fs_root(fs_info,
4412                                                reloc_root->root_key.offset);
4413                         if (IS_ERR(fs_root)) {
4414                                 ret = PTR_ERR(fs_root);
4415                                 if (ret != -ENOENT) {
4416                                         err = ret;
4417                                         goto out;
4418                                 }
4419                                 ret = mark_garbage_root(reloc_root);
4420                                 if (ret < 0) {
4421                                         err = ret;
4422                                         goto out;
4423                                 }
4424                         }
4425                 }
4426
4427                 if (key.offset == 0)
4428                         break;
4429
4430                 key.offset--;
4431         }
4432         btrfs_release_path(path);
4433
4434         if (list_empty(&reloc_roots))
4435                 goto out;
4436
4437         rc = alloc_reloc_control();
4438         if (!rc) {
4439                 err = -ENOMEM;
4440                 goto out;
4441         }
4442
4443         rc->extent_root = fs_info->extent_root;
4444
4445         set_reloc_control(rc);
4446
4447         trans = btrfs_join_transaction(rc->extent_root);
4448         if (IS_ERR(trans)) {
4449                 unset_reloc_control(rc);
4450                 err = PTR_ERR(trans);
4451                 goto out_free;
4452         }
4453
4454         rc->merge_reloc_tree = 1;
4455
4456         while (!list_empty(&reloc_roots)) {
4457                 reloc_root = list_entry(reloc_roots.next,
4458                                         struct btrfs_root, root_list);
4459                 list_del(&reloc_root->root_list);
4460
4461                 if (btrfs_root_refs(&reloc_root->root_item) == 0) {
4462                         list_add_tail(&reloc_root->root_list,
4463                                       &rc->reloc_roots);
4464                         continue;
4465                 }
4466
4467                 fs_root = read_fs_root(fs_info, reloc_root->root_key.offset);
4468                 if (IS_ERR(fs_root)) {
4469                         err = PTR_ERR(fs_root);
4470                         goto out_free;
4471                 }
4472
4473                 err = __add_reloc_root(reloc_root);
4474                 BUG_ON(err < 0); /* -ENOMEM or logic error */
4475                 fs_root->reloc_root = reloc_root;
4476         }
4477
4478         err = btrfs_commit_transaction(trans);
4479         if (err)
4480                 goto out_free;
4481
4482         merge_reloc_roots(rc);
4483
4484         unset_reloc_control(rc);
4485
4486         trans = btrfs_join_transaction(rc->extent_root);
4487         if (IS_ERR(trans)) {
4488                 err = PTR_ERR(trans);
4489                 goto out_free;
4490         }
4491         err = btrfs_commit_transaction(trans);
4492 out_free:
4493         kfree(rc);
4494 out:
4495         if (!list_empty(&reloc_roots))
4496                 free_reloc_roots(&reloc_roots);
4497
4498         btrfs_free_path(path);
4499
4500         if (err == 0) {
4501                 /* cleanup orphan inode in data relocation tree */
4502                 fs_root = read_fs_root(fs_info, BTRFS_DATA_RELOC_TREE_OBJECTID);
4503                 if (IS_ERR(fs_root))
4504                         err = PTR_ERR(fs_root);
4505                 else
4506                         err = btrfs_orphan_cleanup(fs_root);
4507         }
4508         return err;
4509 }
4510
4511 /*
4512  * helper to add ordered checksum for data relocation.
4513  *
4514  * cloning checksum properly handles the nodatasum extents.
4515  * it also saves CPU time to re-calculate the checksum.
4516  */
4517 int btrfs_reloc_clone_csums(struct inode *inode, u64 file_pos, u64 len)
4518 {
4519         struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
4520         struct btrfs_ordered_sum *sums;
4521         struct btrfs_ordered_extent *ordered;
4522         int ret;
4523         u64 disk_bytenr;
4524         u64 new_bytenr;
4525         LIST_HEAD(list);
4526
4527         ordered = btrfs_lookup_ordered_extent(inode, file_pos);
4528         BUG_ON(ordered->file_offset != file_pos || ordered->len != len);
4529
4530         disk_bytenr = file_pos + BTRFS_I(inode)->index_cnt;
4531         ret = btrfs_lookup_csums_range(fs_info->csum_root, disk_bytenr,
4532                                        disk_bytenr + len - 1, &list, 0);
4533         if (ret)
4534                 goto out;
4535
4536         while (!list_empty(&list)) {
4537                 sums = list_entry(list.next, struct btrfs_ordered_sum, list);
4538                 list_del_init(&sums->list);
4539
4540                 /*
4541                  * We need to offset the new_bytenr based on where the csum is.
4542                  * We need to do this because we will read in entire prealloc
4543                  * extents but we may have written to say the middle of the
4544                  * prealloc extent, so we need to make sure the csum goes with
4545                  * the right disk offset.
4546                  *
4547                  * We can do this because the data reloc inode refers strictly
4548                  * to the on disk bytes, so we don't have to worry about
4549                  * disk_len vs real len like with real inodes since it's all
4550                  * disk length.
4551                  */
4552                 new_bytenr = ordered->start + (sums->bytenr - disk_bytenr);
4553                 sums->bytenr = new_bytenr;
4554
4555                 btrfs_add_ordered_sum(inode, ordered, sums);
4556         }
4557 out:
4558         btrfs_put_ordered_extent(ordered);
4559         return ret;
4560 }
4561
4562 int btrfs_reloc_cow_block(struct btrfs_trans_handle *trans,
4563                           struct btrfs_root *root, struct extent_buffer *buf,
4564                           struct extent_buffer *cow)
4565 {
4566         struct btrfs_fs_info *fs_info = root->fs_info;
4567         struct reloc_control *rc;
4568         struct backref_node *node;
4569         int first_cow = 0;
4570         int level;
4571         int ret = 0;
4572
4573         rc = fs_info->reloc_ctl;
4574         if (!rc)
4575                 return 0;
4576
4577         BUG_ON(rc->stage == UPDATE_DATA_PTRS &&
4578                root->root_key.objectid == BTRFS_DATA_RELOC_TREE_OBJECTID);
4579
4580         if (root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID) {
4581                 if (buf == root->node)
4582                         __update_reloc_root(root, cow->start);
4583         }
4584
4585         level = btrfs_header_level(buf);
4586         if (btrfs_header_generation(buf) <=
4587             btrfs_root_last_snapshot(&root->root_item))
4588                 first_cow = 1;
4589
4590         if (root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID &&
4591             rc->create_reloc_tree) {
4592                 WARN_ON(!first_cow && level == 0);
4593
4594                 node = rc->backref_cache.path[level];
4595                 BUG_ON(node->bytenr != buf->start &&
4596                        node->new_bytenr != buf->start);
4597
4598                 drop_node_buffer(node);
4599                 extent_buffer_get(cow);
4600                 node->eb = cow;
4601                 node->new_bytenr = cow->start;
4602
4603                 if (!node->pending) {
4604                         list_move_tail(&node->list,
4605                                        &rc->backref_cache.pending[level]);
4606                         node->pending = 1;
4607                 }
4608
4609                 if (first_cow)
4610                         __mark_block_processed(rc, node);
4611
4612                 if (first_cow && level > 0)
4613                         rc->nodes_relocated += buf->len;
4614         }
4615
4616         if (level == 0 && first_cow && rc->stage == UPDATE_DATA_PTRS)
4617                 ret = replace_file_extents(trans, rc, root, cow);
4618         return ret;
4619 }
4620
4621 /*
4622  * called before creating snapshot. it calculates metadata reservation
4623  * required for relocating tree blocks in the snapshot
4624  */
4625 void btrfs_reloc_pre_snapshot(struct btrfs_pending_snapshot *pending,
4626                               u64 *bytes_to_reserve)
4627 {
4628         struct btrfs_root *root;
4629         struct reloc_control *rc;
4630
4631         root = pending->root;
4632         if (!root->reloc_root)
4633                 return;
4634
4635         rc = root->fs_info->reloc_ctl;
4636         if (!rc->merge_reloc_tree)
4637                 return;
4638
4639         root = root->reloc_root;
4640         BUG_ON(btrfs_root_refs(&root->root_item) == 0);
4641         /*
4642          * relocation is in the stage of merging trees. the space
4643          * used by merging a reloc tree is twice the size of
4644          * relocated tree nodes in the worst case. half for cowing
4645          * the reloc tree, half for cowing the fs tree. the space
4646          * used by cowing the reloc tree will be freed after the
4647          * tree is dropped. if we create snapshot, cowing the fs
4648          * tree may use more space than it frees. so we need
4649          * reserve extra space.
4650          */
4651         *bytes_to_reserve += rc->nodes_relocated;
4652 }
4653
4654 /*
4655  * called after snapshot is created. migrate block reservation
4656  * and create reloc root for the newly created snapshot
4657  */
4658 int btrfs_reloc_post_snapshot(struct btrfs_trans_handle *trans,
4659                                struct btrfs_pending_snapshot *pending)
4660 {
4661         struct btrfs_root *root = pending->root;
4662         struct btrfs_root *reloc_root;
4663         struct btrfs_root *new_root;
4664         struct reloc_control *rc;
4665         int ret;
4666
4667         if (!root->reloc_root)
4668                 return 0;
4669
4670         rc = root->fs_info->reloc_ctl;
4671         rc->merging_rsv_size += rc->nodes_relocated;
4672
4673         if (rc->merge_reloc_tree) {
4674                 ret = btrfs_block_rsv_migrate(&pending->block_rsv,
4675                                               rc->block_rsv,
4676                                               rc->nodes_relocated, true);
4677                 if (ret)
4678                         return ret;
4679         }
4680
4681         new_root = pending->snap;
4682         reloc_root = create_reloc_root(trans, root->reloc_root,
4683                                        new_root->root_key.objectid);
4684         if (IS_ERR(reloc_root))
4685                 return PTR_ERR(reloc_root);
4686
4687         ret = __add_reloc_root(reloc_root);
4688         BUG_ON(ret < 0);
4689         new_root->reloc_root = reloc_root;
4690
4691         if (rc->create_reloc_tree)
4692                 ret = clone_backref_node(trans, rc, root, reloc_root);
4693         return ret;
4694 }