de802ba35a344f36c6e519f5336d300c8eb6f217
[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         struct btrfs_key key;
2132         struct btrfs_key next_key;
2133         struct btrfs_trans_handle *trans = NULL;
2134         struct btrfs_root *reloc_root;
2135         struct btrfs_root_item *root_item;
2136         struct btrfs_path *path;
2137         struct extent_buffer *leaf;
2138         int level;
2139         int max_level;
2140         int replaced = 0;
2141         int ret;
2142         int err = 0;
2143         u32 min_reserved;
2144
2145         path = btrfs_alloc_path();
2146         if (!path)
2147                 return -ENOMEM;
2148         path->reada = READA_FORWARD;
2149
2150         reloc_root = root->reloc_root;
2151         root_item = &reloc_root->root_item;
2152
2153         if (btrfs_disk_key_objectid(&root_item->drop_progress) == 0) {
2154                 level = btrfs_root_level(root_item);
2155                 extent_buffer_get(reloc_root->node);
2156                 path->nodes[level] = reloc_root->node;
2157                 path->slots[level] = 0;
2158         } else {
2159                 btrfs_disk_key_to_cpu(&key, &root_item->drop_progress);
2160
2161                 level = root_item->drop_level;
2162                 BUG_ON(level == 0);
2163                 path->lowest_level = level;
2164                 ret = btrfs_search_slot(NULL, reloc_root, &key, path, 0, 0);
2165                 path->lowest_level = 0;
2166                 if (ret < 0) {
2167                         btrfs_free_path(path);
2168                         return ret;
2169                 }
2170
2171                 btrfs_node_key_to_cpu(path->nodes[level], &next_key,
2172                                       path->slots[level]);
2173                 WARN_ON(memcmp(&key, &next_key, sizeof(key)));
2174
2175                 btrfs_unlock_up_safe(path, 0);
2176         }
2177
2178         min_reserved = fs_info->nodesize * (BTRFS_MAX_LEVEL - 1) * 2;
2179         memset(&next_key, 0, sizeof(next_key));
2180
2181         while (1) {
2182                 ret = btrfs_block_rsv_refill(root, rc->block_rsv, min_reserved,
2183                                              BTRFS_RESERVE_FLUSH_ALL);
2184                 if (ret) {
2185                         err = ret;
2186                         goto out;
2187                 }
2188                 trans = btrfs_start_transaction(root, 0);
2189                 if (IS_ERR(trans)) {
2190                         err = PTR_ERR(trans);
2191                         trans = NULL;
2192                         goto out;
2193                 }
2194                 trans->block_rsv = rc->block_rsv;
2195
2196                 replaced = 0;
2197                 max_level = level;
2198
2199                 ret = walk_down_reloc_tree(reloc_root, path, &level);
2200                 if (ret < 0) {
2201                         err = ret;
2202                         goto out;
2203                 }
2204                 if (ret > 0)
2205                         break;
2206
2207                 if (!find_next_key(path, level, &key) &&
2208                     btrfs_comp_cpu_keys(&next_key, &key) >= 0) {
2209                         ret = 0;
2210                 } else {
2211                         ret = replace_path(trans, rc, root, reloc_root, path,
2212                                            &next_key, level, max_level);
2213                 }
2214                 if (ret < 0) {
2215                         err = ret;
2216                         goto out;
2217                 }
2218
2219                 if (ret > 0) {
2220                         level = ret;
2221                         btrfs_node_key_to_cpu(path->nodes[level], &key,
2222                                               path->slots[level]);
2223                         replaced = 1;
2224                 }
2225
2226                 ret = walk_up_reloc_tree(reloc_root, path, &level);
2227                 if (ret > 0)
2228                         break;
2229
2230                 BUG_ON(level == 0);
2231                 /*
2232                  * save the merging progress in the drop_progress.
2233                  * this is OK since root refs == 1 in this case.
2234                  */
2235                 btrfs_node_key(path->nodes[level], &root_item->drop_progress,
2236                                path->slots[level]);
2237                 root_item->drop_level = level;
2238
2239                 btrfs_end_transaction_throttle(trans);
2240                 trans = NULL;
2241
2242                 btrfs_btree_balance_dirty(fs_info);
2243
2244                 if (replaced && rc->stage == UPDATE_DATA_PTRS)
2245                         invalidate_extent_cache(root, &key, &next_key);
2246         }
2247
2248         /*
2249          * handle the case only one block in the fs tree need to be
2250          * relocated and the block is tree root.
2251          */
2252         leaf = btrfs_lock_root_node(root);
2253         ret = btrfs_cow_block(trans, root, leaf, NULL, 0, &leaf);
2254         btrfs_tree_unlock(leaf);
2255         free_extent_buffer(leaf);
2256         if (ret < 0)
2257                 err = ret;
2258 out:
2259         btrfs_free_path(path);
2260
2261         if (err == 0) {
2262                 memset(&root_item->drop_progress, 0,
2263                        sizeof(root_item->drop_progress));
2264                 root_item->drop_level = 0;
2265                 btrfs_set_root_refs(root_item, 0);
2266                 btrfs_update_reloc_root(trans, root);
2267         }
2268
2269         if (trans)
2270                 btrfs_end_transaction_throttle(trans);
2271
2272         btrfs_btree_balance_dirty(fs_info);
2273
2274         if (replaced && rc->stage == UPDATE_DATA_PTRS)
2275                 invalidate_extent_cache(root, &key, &next_key);
2276
2277         return err;
2278 }
2279
2280 static noinline_for_stack
2281 int prepare_to_merge(struct reloc_control *rc, int err)
2282 {
2283         struct btrfs_root *root = rc->extent_root;
2284         struct btrfs_fs_info *fs_info = root->fs_info;
2285         struct btrfs_root *reloc_root;
2286         struct btrfs_trans_handle *trans;
2287         LIST_HEAD(reloc_roots);
2288         u64 num_bytes = 0;
2289         int ret;
2290
2291         mutex_lock(&fs_info->reloc_mutex);
2292         rc->merging_rsv_size += fs_info->nodesize * (BTRFS_MAX_LEVEL - 1) * 2;
2293         rc->merging_rsv_size += rc->nodes_relocated * 2;
2294         mutex_unlock(&fs_info->reloc_mutex);
2295
2296 again:
2297         if (!err) {
2298                 num_bytes = rc->merging_rsv_size;
2299                 ret = btrfs_block_rsv_add(root, rc->block_rsv, num_bytes,
2300                                           BTRFS_RESERVE_FLUSH_ALL);
2301                 if (ret)
2302                         err = ret;
2303         }
2304
2305         trans = btrfs_join_transaction(rc->extent_root);
2306         if (IS_ERR(trans)) {
2307                 if (!err)
2308                         btrfs_block_rsv_release(fs_info, rc->block_rsv,
2309                                                 num_bytes);
2310                 return PTR_ERR(trans);
2311         }
2312
2313         if (!err) {
2314                 if (num_bytes != rc->merging_rsv_size) {
2315                         btrfs_end_transaction(trans);
2316                         btrfs_block_rsv_release(fs_info, rc->block_rsv,
2317                                                 num_bytes);
2318                         goto again;
2319                 }
2320         }
2321
2322         rc->merge_reloc_tree = 1;
2323
2324         while (!list_empty(&rc->reloc_roots)) {
2325                 reloc_root = list_entry(rc->reloc_roots.next,
2326                                         struct btrfs_root, root_list);
2327                 list_del_init(&reloc_root->root_list);
2328
2329                 root = read_fs_root(fs_info, reloc_root->root_key.offset);
2330                 BUG_ON(IS_ERR(root));
2331                 BUG_ON(root->reloc_root != reloc_root);
2332
2333                 /*
2334                  * set reference count to 1, so btrfs_recover_relocation
2335                  * knows it should resumes merging
2336                  */
2337                 if (!err)
2338                         btrfs_set_root_refs(&reloc_root->root_item, 1);
2339                 btrfs_update_reloc_root(trans, root);
2340
2341                 list_add(&reloc_root->root_list, &reloc_roots);
2342         }
2343
2344         list_splice(&reloc_roots, &rc->reloc_roots);
2345
2346         if (!err)
2347                 btrfs_commit_transaction(trans);
2348         else
2349                 btrfs_end_transaction(trans);
2350         return err;
2351 }
2352
2353 static noinline_for_stack
2354 void free_reloc_roots(struct list_head *list)
2355 {
2356         struct btrfs_root *reloc_root;
2357
2358         while (!list_empty(list)) {
2359                 reloc_root = list_entry(list->next, struct btrfs_root,
2360                                         root_list);
2361                 __del_reloc_root(reloc_root);
2362                 free_extent_buffer(reloc_root->node);
2363                 free_extent_buffer(reloc_root->commit_root);
2364                 reloc_root->node = NULL;
2365                 reloc_root->commit_root = NULL;
2366         }
2367 }
2368
2369 static noinline_for_stack
2370 void merge_reloc_roots(struct reloc_control *rc)
2371 {
2372         struct btrfs_fs_info *fs_info = rc->extent_root->fs_info;
2373         struct btrfs_root *root;
2374         struct btrfs_root *reloc_root;
2375         LIST_HEAD(reloc_roots);
2376         int found = 0;
2377         int ret = 0;
2378 again:
2379         root = rc->extent_root;
2380
2381         /*
2382          * this serializes us with btrfs_record_root_in_transaction,
2383          * we have to make sure nobody is in the middle of
2384          * adding their roots to the list while we are
2385          * doing this splice
2386          */
2387         mutex_lock(&fs_info->reloc_mutex);
2388         list_splice_init(&rc->reloc_roots, &reloc_roots);
2389         mutex_unlock(&fs_info->reloc_mutex);
2390
2391         while (!list_empty(&reloc_roots)) {
2392                 found = 1;
2393                 reloc_root = list_entry(reloc_roots.next,
2394                                         struct btrfs_root, root_list);
2395
2396                 if (btrfs_root_refs(&reloc_root->root_item) > 0) {
2397                         root = read_fs_root(fs_info,
2398                                             reloc_root->root_key.offset);
2399                         BUG_ON(IS_ERR(root));
2400                         BUG_ON(root->reloc_root != reloc_root);
2401
2402                         ret = merge_reloc_root(rc, root);
2403                         if (ret) {
2404                                 if (list_empty(&reloc_root->root_list))
2405                                         list_add_tail(&reloc_root->root_list,
2406                                                       &reloc_roots);
2407                                 goto out;
2408                         }
2409                 } else {
2410                         list_del_init(&reloc_root->root_list);
2411                 }
2412
2413                 ret = btrfs_drop_snapshot(reloc_root, rc->block_rsv, 0, 1);
2414                 if (ret < 0) {
2415                         if (list_empty(&reloc_root->root_list))
2416                                 list_add_tail(&reloc_root->root_list,
2417                                               &reloc_roots);
2418                         goto out;
2419                 }
2420         }
2421
2422         if (found) {
2423                 found = 0;
2424                 goto again;
2425         }
2426 out:
2427         if (ret) {
2428                 btrfs_handle_fs_error(fs_info, ret, NULL);
2429                 if (!list_empty(&reloc_roots))
2430                         free_reloc_roots(&reloc_roots);
2431
2432                 /* new reloc root may be added */
2433                 mutex_lock(&fs_info->reloc_mutex);
2434                 list_splice_init(&rc->reloc_roots, &reloc_roots);
2435                 mutex_unlock(&fs_info->reloc_mutex);
2436                 if (!list_empty(&reloc_roots))
2437                         free_reloc_roots(&reloc_roots);
2438         }
2439
2440         BUG_ON(!RB_EMPTY_ROOT(&rc->reloc_root_tree.rb_root));
2441 }
2442
2443 static void free_block_list(struct rb_root *blocks)
2444 {
2445         struct tree_block *block;
2446         struct rb_node *rb_node;
2447         while ((rb_node = rb_first(blocks))) {
2448                 block = rb_entry(rb_node, struct tree_block, rb_node);
2449                 rb_erase(rb_node, blocks);
2450                 kfree(block);
2451         }
2452 }
2453
2454 static int record_reloc_root_in_trans(struct btrfs_trans_handle *trans,
2455                                       struct btrfs_root *reloc_root)
2456 {
2457         struct btrfs_fs_info *fs_info = reloc_root->fs_info;
2458         struct btrfs_root *root;
2459
2460         if (reloc_root->last_trans == trans->transid)
2461                 return 0;
2462
2463         root = read_fs_root(fs_info, reloc_root->root_key.offset);
2464         BUG_ON(IS_ERR(root));
2465         BUG_ON(root->reloc_root != reloc_root);
2466
2467         return btrfs_record_root_in_trans(trans, root);
2468 }
2469
2470 static noinline_for_stack
2471 struct btrfs_root *select_reloc_root(struct btrfs_trans_handle *trans,
2472                                      struct reloc_control *rc,
2473                                      struct backref_node *node,
2474                                      struct backref_edge *edges[])
2475 {
2476         struct backref_node *next;
2477         struct btrfs_root *root;
2478         int index = 0;
2479
2480         next = node;
2481         while (1) {
2482                 cond_resched();
2483                 next = walk_up_backref(next, edges, &index);
2484                 root = next->root;
2485                 BUG_ON(!root);
2486                 BUG_ON(!test_bit(BTRFS_ROOT_REF_COWS, &root->state));
2487
2488                 if (root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID) {
2489                         record_reloc_root_in_trans(trans, root);
2490                         break;
2491                 }
2492
2493                 btrfs_record_root_in_trans(trans, root);
2494                 root = root->reloc_root;
2495
2496                 if (next->new_bytenr != root->node->start) {
2497                         BUG_ON(next->new_bytenr);
2498                         BUG_ON(!list_empty(&next->list));
2499                         next->new_bytenr = root->node->start;
2500                         next->root = root;
2501                         list_add_tail(&next->list,
2502                                       &rc->backref_cache.changed);
2503                         __mark_block_processed(rc, next);
2504                         break;
2505                 }
2506
2507                 WARN_ON(1);
2508                 root = NULL;
2509                 next = walk_down_backref(edges, &index);
2510                 if (!next || next->level <= node->level)
2511                         break;
2512         }
2513         if (!root)
2514                 return NULL;
2515
2516         next = node;
2517         /* setup backref node path for btrfs_reloc_cow_block */
2518         while (1) {
2519                 rc->backref_cache.path[next->level] = next;
2520                 if (--index < 0)
2521                         break;
2522                 next = edges[index]->node[UPPER];
2523         }
2524         return root;
2525 }
2526
2527 /*
2528  * select a tree root for relocation. return NULL if the block
2529  * is reference counted. we should use do_relocation() in this
2530  * case. return a tree root pointer if the block isn't reference
2531  * counted. return -ENOENT if the block is root of reloc tree.
2532  */
2533 static noinline_for_stack
2534 struct btrfs_root *select_one_root(struct backref_node *node)
2535 {
2536         struct backref_node *next;
2537         struct btrfs_root *root;
2538         struct btrfs_root *fs_root = NULL;
2539         struct backref_edge *edges[BTRFS_MAX_LEVEL - 1];
2540         int index = 0;
2541
2542         next = node;
2543         while (1) {
2544                 cond_resched();
2545                 next = walk_up_backref(next, edges, &index);
2546                 root = next->root;
2547                 BUG_ON(!root);
2548
2549                 /* no other choice for non-references counted tree */
2550                 if (!test_bit(BTRFS_ROOT_REF_COWS, &root->state))
2551                         return root;
2552
2553                 if (root->root_key.objectid != BTRFS_TREE_RELOC_OBJECTID)
2554                         fs_root = root;
2555
2556                 if (next != node)
2557                         return NULL;
2558
2559                 next = walk_down_backref(edges, &index);
2560                 if (!next || next->level <= node->level)
2561                         break;
2562         }
2563
2564         if (!fs_root)
2565                 return ERR_PTR(-ENOENT);
2566         return fs_root;
2567 }
2568
2569 static noinline_for_stack
2570 u64 calcu_metadata_size(struct reloc_control *rc,
2571                         struct backref_node *node, int reserve)
2572 {
2573         struct btrfs_fs_info *fs_info = rc->extent_root->fs_info;
2574         struct backref_node *next = node;
2575         struct backref_edge *edge;
2576         struct backref_edge *edges[BTRFS_MAX_LEVEL - 1];
2577         u64 num_bytes = 0;
2578         int index = 0;
2579
2580         BUG_ON(reserve && node->processed);
2581
2582         while (next) {
2583                 cond_resched();
2584                 while (1) {
2585                         if (next->processed && (reserve || next != node))
2586                                 break;
2587
2588                         num_bytes += fs_info->nodesize;
2589
2590                         if (list_empty(&next->upper))
2591                                 break;
2592
2593                         edge = list_entry(next->upper.next,
2594                                           struct backref_edge, list[LOWER]);
2595                         edges[index++] = edge;
2596                         next = edge->node[UPPER];
2597                 }
2598                 next = walk_down_backref(edges, &index);
2599         }
2600         return num_bytes;
2601 }
2602
2603 static int reserve_metadata_space(struct btrfs_trans_handle *trans,
2604                                   struct reloc_control *rc,
2605                                   struct backref_node *node)
2606 {
2607         struct btrfs_root *root = rc->extent_root;
2608         struct btrfs_fs_info *fs_info = root->fs_info;
2609         u64 num_bytes;
2610         int ret;
2611         u64 tmp;
2612
2613         num_bytes = calcu_metadata_size(rc, node, 1) * 2;
2614
2615         trans->block_rsv = rc->block_rsv;
2616         rc->reserved_bytes += num_bytes;
2617
2618         /*
2619          * We are under a transaction here so we can only do limited flushing.
2620          * If we get an enospc just kick back -EAGAIN so we know to drop the
2621          * transaction and try to refill when we can flush all the things.
2622          */
2623         ret = btrfs_block_rsv_refill(root, rc->block_rsv, num_bytes,
2624                                 BTRFS_RESERVE_FLUSH_LIMIT);
2625         if (ret) {
2626                 tmp = fs_info->nodesize * RELOCATION_RESERVED_NODES;
2627                 while (tmp <= rc->reserved_bytes)
2628                         tmp <<= 1;
2629                 /*
2630                  * only one thread can access block_rsv at this point,
2631                  * so we don't need hold lock to protect block_rsv.
2632                  * we expand more reservation size here to allow enough
2633                  * space for relocation and we will return earlier in
2634                  * enospc case.
2635                  */
2636                 rc->block_rsv->size = tmp + fs_info->nodesize *
2637                                       RELOCATION_RESERVED_NODES;
2638                 return -EAGAIN;
2639         }
2640
2641         return 0;
2642 }
2643
2644 /*
2645  * relocate a block tree, and then update pointers in upper level
2646  * blocks that reference the block to point to the new location.
2647  *
2648  * if called by link_to_upper, the block has already been relocated.
2649  * in that case this function just updates pointers.
2650  */
2651 static int do_relocation(struct btrfs_trans_handle *trans,
2652                          struct reloc_control *rc,
2653                          struct backref_node *node,
2654                          struct btrfs_key *key,
2655                          struct btrfs_path *path, int lowest)
2656 {
2657         struct btrfs_fs_info *fs_info = rc->extent_root->fs_info;
2658         struct backref_node *upper;
2659         struct backref_edge *edge;
2660         struct backref_edge *edges[BTRFS_MAX_LEVEL - 1];
2661         struct btrfs_root *root;
2662         struct extent_buffer *eb;
2663         u32 blocksize;
2664         u64 bytenr;
2665         u64 generation;
2666         int slot;
2667         int ret;
2668         int err = 0;
2669
2670         BUG_ON(lowest && node->eb);
2671
2672         path->lowest_level = node->level + 1;
2673         rc->backref_cache.path[node->level] = node;
2674         list_for_each_entry(edge, &node->upper, list[LOWER]) {
2675                 struct btrfs_key first_key;
2676
2677                 cond_resched();
2678
2679                 upper = edge->node[UPPER];
2680                 root = select_reloc_root(trans, rc, upper, edges);
2681                 BUG_ON(!root);
2682
2683                 if (upper->eb && !upper->locked) {
2684                         if (!lowest) {
2685                                 ret = btrfs_bin_search(upper->eb, key,
2686                                                        upper->level, &slot);
2687                                 BUG_ON(ret);
2688                                 bytenr = btrfs_node_blockptr(upper->eb, slot);
2689                                 if (node->eb->start == bytenr)
2690                                         goto next;
2691                         }
2692                         drop_node_buffer(upper);
2693                 }
2694
2695                 if (!upper->eb) {
2696                         ret = btrfs_search_slot(trans, root, key, path, 0, 1);
2697                         if (ret) {
2698                                 if (ret < 0)
2699                                         err = ret;
2700                                 else
2701                                         err = -ENOENT;
2702
2703                                 btrfs_release_path(path);
2704                                 break;
2705                         }
2706
2707                         if (!upper->eb) {
2708                                 upper->eb = path->nodes[upper->level];
2709                                 path->nodes[upper->level] = NULL;
2710                         } else {
2711                                 BUG_ON(upper->eb != path->nodes[upper->level]);
2712                         }
2713
2714                         upper->locked = 1;
2715                         path->locks[upper->level] = 0;
2716
2717                         slot = path->slots[upper->level];
2718                         btrfs_release_path(path);
2719                 } else {
2720                         ret = btrfs_bin_search(upper->eb, key, upper->level,
2721                                                &slot);
2722                         BUG_ON(ret);
2723                 }
2724
2725                 bytenr = btrfs_node_blockptr(upper->eb, slot);
2726                 if (lowest) {
2727                         if (bytenr != node->bytenr) {
2728                                 btrfs_err(root->fs_info,
2729                 "lowest leaf/node mismatch: bytenr %llu node->bytenr %llu slot %d upper %llu",
2730                                           bytenr, node->bytenr, slot,
2731                                           upper->eb->start);
2732                                 err = -EIO;
2733                                 goto next;
2734                         }
2735                 } else {
2736                         if (node->eb->start == bytenr)
2737                                 goto next;
2738                 }
2739
2740                 blocksize = root->fs_info->nodesize;
2741                 generation = btrfs_node_ptr_generation(upper->eb, slot);
2742                 btrfs_node_key_to_cpu(upper->eb, &first_key, slot);
2743                 eb = read_tree_block(fs_info, bytenr, generation,
2744                                      upper->level - 1, &first_key);
2745                 if (IS_ERR(eb)) {
2746                         err = PTR_ERR(eb);
2747                         goto next;
2748                 } else if (!extent_buffer_uptodate(eb)) {
2749                         free_extent_buffer(eb);
2750                         err = -EIO;
2751                         goto next;
2752                 }
2753                 btrfs_tree_lock(eb);
2754                 btrfs_set_lock_blocking(eb);
2755
2756                 if (!node->eb) {
2757                         ret = btrfs_cow_block(trans, root, eb, upper->eb,
2758                                               slot, &eb);
2759                         btrfs_tree_unlock(eb);
2760                         free_extent_buffer(eb);
2761                         if (ret < 0) {
2762                                 err = ret;
2763                                 goto next;
2764                         }
2765                         BUG_ON(node->eb != eb);
2766                 } else {
2767                         btrfs_set_node_blockptr(upper->eb, slot,
2768                                                 node->eb->start);
2769                         btrfs_set_node_ptr_generation(upper->eb, slot,
2770                                                       trans->transid);
2771                         btrfs_mark_buffer_dirty(upper->eb);
2772
2773                         ret = btrfs_inc_extent_ref(trans, root,
2774                                                 node->eb->start, blocksize,
2775                                                 upper->eb->start,
2776                                                 btrfs_header_owner(upper->eb),
2777                                                 node->level, 0);
2778                         BUG_ON(ret);
2779
2780                         ret = btrfs_drop_subtree(trans, root, eb, upper->eb);
2781                         BUG_ON(ret);
2782                 }
2783 next:
2784                 if (!upper->pending)
2785                         drop_node_buffer(upper);
2786                 else
2787                         unlock_node_buffer(upper);
2788                 if (err)
2789                         break;
2790         }
2791
2792         if (!err && node->pending) {
2793                 drop_node_buffer(node);
2794                 list_move_tail(&node->list, &rc->backref_cache.changed);
2795                 node->pending = 0;
2796         }
2797
2798         path->lowest_level = 0;
2799         BUG_ON(err == -ENOSPC);
2800         return err;
2801 }
2802
2803 static int link_to_upper(struct btrfs_trans_handle *trans,
2804                          struct reloc_control *rc,
2805                          struct backref_node *node,
2806                          struct btrfs_path *path)
2807 {
2808         struct btrfs_key key;
2809
2810         btrfs_node_key_to_cpu(node->eb, &key, 0);
2811         return do_relocation(trans, rc, node, &key, path, 0);
2812 }
2813
2814 static int finish_pending_nodes(struct btrfs_trans_handle *trans,
2815                                 struct reloc_control *rc,
2816                                 struct btrfs_path *path, int err)
2817 {
2818         LIST_HEAD(list);
2819         struct backref_cache *cache = &rc->backref_cache;
2820         struct backref_node *node;
2821         int level;
2822         int ret;
2823
2824         for (level = 0; level < BTRFS_MAX_LEVEL; level++) {
2825                 while (!list_empty(&cache->pending[level])) {
2826                         node = list_entry(cache->pending[level].next,
2827                                           struct backref_node, list);
2828                         list_move_tail(&node->list, &list);
2829                         BUG_ON(!node->pending);
2830
2831                         if (!err) {
2832                                 ret = link_to_upper(trans, rc, node, path);
2833                                 if (ret < 0)
2834                                         err = ret;
2835                         }
2836                 }
2837                 list_splice_init(&list, &cache->pending[level]);
2838         }
2839         return err;
2840 }
2841
2842 static void mark_block_processed(struct reloc_control *rc,
2843                                  u64 bytenr, u32 blocksize)
2844 {
2845         set_extent_bits(&rc->processed_blocks, bytenr, bytenr + blocksize - 1,
2846                         EXTENT_DIRTY);
2847 }
2848
2849 static void __mark_block_processed(struct reloc_control *rc,
2850                                    struct backref_node *node)
2851 {
2852         u32 blocksize;
2853         if (node->level == 0 ||
2854             in_block_group(node->bytenr, rc->block_group)) {
2855                 blocksize = rc->extent_root->fs_info->nodesize;
2856                 mark_block_processed(rc, node->bytenr, blocksize);
2857         }
2858         node->processed = 1;
2859 }
2860
2861 /*
2862  * mark a block and all blocks directly/indirectly reference the block
2863  * as processed.
2864  */
2865 static void update_processed_blocks(struct reloc_control *rc,
2866                                     struct backref_node *node)
2867 {
2868         struct backref_node *next = node;
2869         struct backref_edge *edge;
2870         struct backref_edge *edges[BTRFS_MAX_LEVEL - 1];
2871         int index = 0;
2872
2873         while (next) {
2874                 cond_resched();
2875                 while (1) {
2876                         if (next->processed)
2877                                 break;
2878
2879                         __mark_block_processed(rc, next);
2880
2881                         if (list_empty(&next->upper))
2882                                 break;
2883
2884                         edge = list_entry(next->upper.next,
2885                                           struct backref_edge, list[LOWER]);
2886                         edges[index++] = edge;
2887                         next = edge->node[UPPER];
2888                 }
2889                 next = walk_down_backref(edges, &index);
2890         }
2891 }
2892
2893 static int tree_block_processed(u64 bytenr, struct reloc_control *rc)
2894 {
2895         u32 blocksize = rc->extent_root->fs_info->nodesize;
2896
2897         if (test_range_bit(&rc->processed_blocks, bytenr,
2898                            bytenr + blocksize - 1, EXTENT_DIRTY, 1, NULL))
2899                 return 1;
2900         return 0;
2901 }
2902
2903 static int get_tree_block_key(struct btrfs_fs_info *fs_info,
2904                               struct tree_block *block)
2905 {
2906         struct extent_buffer *eb;
2907
2908         BUG_ON(block->key_ready);
2909         eb = read_tree_block(fs_info, block->bytenr, block->key.offset,
2910                              block->level, NULL);
2911         if (IS_ERR(eb)) {
2912                 return PTR_ERR(eb);
2913         } else if (!extent_buffer_uptodate(eb)) {
2914                 free_extent_buffer(eb);
2915                 return -EIO;
2916         }
2917         if (block->level == 0)
2918                 btrfs_item_key_to_cpu(eb, &block->key, 0);
2919         else
2920                 btrfs_node_key_to_cpu(eb, &block->key, 0);
2921         free_extent_buffer(eb);
2922         block->key_ready = 1;
2923         return 0;
2924 }
2925
2926 /*
2927  * helper function to relocate a tree block
2928  */
2929 static int relocate_tree_block(struct btrfs_trans_handle *trans,
2930                                 struct reloc_control *rc,
2931                                 struct backref_node *node,
2932                                 struct btrfs_key *key,
2933                                 struct btrfs_path *path)
2934 {
2935         struct btrfs_root *root;
2936         int ret = 0;
2937
2938         if (!node)
2939                 return 0;
2940
2941         BUG_ON(node->processed);
2942         root = select_one_root(node);
2943         if (root == ERR_PTR(-ENOENT)) {
2944                 update_processed_blocks(rc, node);
2945                 goto out;
2946         }
2947
2948         if (!root || test_bit(BTRFS_ROOT_REF_COWS, &root->state)) {
2949                 ret = reserve_metadata_space(trans, rc, node);
2950                 if (ret)
2951                         goto out;
2952         }
2953
2954         if (root) {
2955                 if (test_bit(BTRFS_ROOT_REF_COWS, &root->state)) {
2956                         BUG_ON(node->new_bytenr);
2957                         BUG_ON(!list_empty(&node->list));
2958                         btrfs_record_root_in_trans(trans, root);
2959                         root = root->reloc_root;
2960                         node->new_bytenr = root->node->start;
2961                         node->root = root;
2962                         list_add_tail(&node->list, &rc->backref_cache.changed);
2963                 } else {
2964                         path->lowest_level = node->level;
2965                         ret = btrfs_search_slot(trans, root, key, path, 0, 1);
2966                         btrfs_release_path(path);
2967                         if (ret > 0)
2968                                 ret = 0;
2969                 }
2970                 if (!ret)
2971                         update_processed_blocks(rc, node);
2972         } else {
2973                 ret = do_relocation(trans, rc, node, key, path, 1);
2974         }
2975 out:
2976         if (ret || node->level == 0 || node->cowonly)
2977                 remove_backref_node(&rc->backref_cache, node);
2978         return ret;
2979 }
2980
2981 /*
2982  * relocate a list of blocks
2983  */
2984 static noinline_for_stack
2985 int relocate_tree_blocks(struct btrfs_trans_handle *trans,
2986                          struct reloc_control *rc, struct rb_root *blocks)
2987 {
2988         struct btrfs_fs_info *fs_info = rc->extent_root->fs_info;
2989         struct backref_node *node;
2990         struct btrfs_path *path;
2991         struct tree_block *block;
2992         struct tree_block *next;
2993         int ret;
2994         int err = 0;
2995
2996         path = btrfs_alloc_path();
2997         if (!path) {
2998                 err = -ENOMEM;
2999                 goto out_free_blocks;
3000         }
3001
3002         /* Kick in readahead for tree blocks with missing keys */
3003         rbtree_postorder_for_each_entry_safe(block, next, blocks, rb_node) {
3004                 if (!block->key_ready)
3005                         readahead_tree_block(fs_info, block->bytenr);
3006         }
3007
3008         /* Get first keys */
3009         rbtree_postorder_for_each_entry_safe(block, next, blocks, rb_node) {
3010                 if (!block->key_ready) {
3011                         err = get_tree_block_key(fs_info, block);
3012                         if (err)
3013                                 goto out_free_path;
3014                 }
3015         }
3016
3017         /* Do tree relocation */
3018         rbtree_postorder_for_each_entry_safe(block, next, blocks, rb_node) {
3019                 node = build_backref_tree(rc, &block->key,
3020                                           block->level, block->bytenr);
3021                 if (IS_ERR(node)) {
3022                         err = PTR_ERR(node);
3023                         goto out;
3024                 }
3025
3026                 ret = relocate_tree_block(trans, rc, node, &block->key,
3027                                           path);
3028                 if (ret < 0) {
3029                         if (ret != -EAGAIN || &block->rb_node == rb_first(blocks))
3030                                 err = ret;
3031                         goto out;
3032                 }
3033         }
3034 out:
3035         err = finish_pending_nodes(trans, rc, path, err);
3036
3037 out_free_path:
3038         btrfs_free_path(path);
3039 out_free_blocks:
3040         free_block_list(blocks);
3041         return err;
3042 }
3043
3044 static noinline_for_stack
3045 int prealloc_file_extent_cluster(struct inode *inode,
3046                                  struct file_extent_cluster *cluster)
3047 {
3048         u64 alloc_hint = 0;
3049         u64 start;
3050         u64 end;
3051         u64 offset = BTRFS_I(inode)->index_cnt;
3052         u64 num_bytes;
3053         int nr = 0;
3054         int ret = 0;
3055         u64 prealloc_start = cluster->start - offset;
3056         u64 prealloc_end = cluster->end - offset;
3057         u64 cur_offset;
3058         struct extent_changeset *data_reserved = NULL;
3059
3060         BUG_ON(cluster->start != cluster->boundary[0]);
3061         inode_lock(inode);
3062
3063         ret = btrfs_check_data_free_space(inode, &data_reserved, prealloc_start,
3064                                           prealloc_end + 1 - prealloc_start);
3065         if (ret)
3066                 goto out;
3067
3068         cur_offset = prealloc_start;
3069         while (nr < cluster->nr) {
3070                 start = cluster->boundary[nr] - offset;
3071                 if (nr + 1 < cluster->nr)
3072                         end = cluster->boundary[nr + 1] - 1 - offset;
3073                 else
3074                         end = cluster->end - offset;
3075
3076                 lock_extent(&BTRFS_I(inode)->io_tree, start, end);
3077                 num_bytes = end + 1 - start;
3078                 if (cur_offset < start)
3079                         btrfs_free_reserved_data_space(inode, data_reserved,
3080                                         cur_offset, start - cur_offset);
3081                 ret = btrfs_prealloc_file_range(inode, 0, start,
3082                                                 num_bytes, num_bytes,
3083                                                 end + 1, &alloc_hint);
3084                 cur_offset = end + 1;
3085                 unlock_extent(&BTRFS_I(inode)->io_tree, start, end);
3086                 if (ret)
3087                         break;
3088                 nr++;
3089         }
3090         if (cur_offset < prealloc_end)
3091                 btrfs_free_reserved_data_space(inode, data_reserved,
3092                                 cur_offset, prealloc_end + 1 - cur_offset);
3093 out:
3094         inode_unlock(inode);
3095         extent_changeset_free(data_reserved);
3096         return ret;
3097 }
3098
3099 static noinline_for_stack
3100 int setup_extent_mapping(struct inode *inode, u64 start, u64 end,
3101                          u64 block_start)
3102 {
3103         struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
3104         struct extent_map_tree *em_tree = &BTRFS_I(inode)->extent_tree;
3105         struct extent_map *em;
3106         int ret = 0;
3107
3108         em = alloc_extent_map();
3109         if (!em)
3110                 return -ENOMEM;
3111
3112         em->start = start;
3113         em->len = end + 1 - start;
3114         em->block_len = em->len;
3115         em->block_start = block_start;
3116         em->bdev = fs_info->fs_devices->latest_bdev;
3117         set_bit(EXTENT_FLAG_PINNED, &em->flags);
3118
3119         lock_extent(&BTRFS_I(inode)->io_tree, start, end);
3120         while (1) {
3121                 write_lock(&em_tree->lock);
3122                 ret = add_extent_mapping(em_tree, em, 0);
3123                 write_unlock(&em_tree->lock);
3124                 if (ret != -EEXIST) {
3125                         free_extent_map(em);
3126                         break;
3127                 }
3128                 btrfs_drop_extent_cache(BTRFS_I(inode), start, end, 0);
3129         }
3130         unlock_extent(&BTRFS_I(inode)->io_tree, start, end);
3131         return ret;
3132 }
3133
3134 static int relocate_file_extent_cluster(struct inode *inode,
3135                                         struct file_extent_cluster *cluster)
3136 {
3137         struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
3138         u64 page_start;
3139         u64 page_end;
3140         u64 offset = BTRFS_I(inode)->index_cnt;
3141         unsigned long index;
3142         unsigned long last_index;
3143         struct page *page;
3144         struct file_ra_state *ra;
3145         gfp_t mask = btrfs_alloc_write_mask(inode->i_mapping);
3146         int nr = 0;
3147         int ret = 0;
3148
3149         if (!cluster->nr)
3150                 return 0;
3151
3152         ra = kzalloc(sizeof(*ra), GFP_NOFS);
3153         if (!ra)
3154                 return -ENOMEM;
3155
3156         ret = prealloc_file_extent_cluster(inode, cluster);
3157         if (ret)
3158                 goto out;
3159
3160         file_ra_state_init(ra, inode->i_mapping);
3161
3162         ret = setup_extent_mapping(inode, cluster->start - offset,
3163                                    cluster->end - offset, cluster->start);
3164         if (ret)
3165                 goto out;
3166
3167         index = (cluster->start - offset) >> PAGE_SHIFT;
3168         last_index = (cluster->end - offset) >> PAGE_SHIFT;
3169         while (index <= last_index) {
3170                 ret = btrfs_delalloc_reserve_metadata(BTRFS_I(inode),
3171                                 PAGE_SIZE);
3172                 if (ret)
3173                         goto out;
3174
3175                 page = find_lock_page(inode->i_mapping, index);
3176                 if (!page) {
3177                         page_cache_sync_readahead(inode->i_mapping,
3178                                                   ra, NULL, index,
3179                                                   last_index + 1 - index);
3180                         page = find_or_create_page(inode->i_mapping, index,
3181                                                    mask);
3182                         if (!page) {
3183                                 btrfs_delalloc_release_metadata(BTRFS_I(inode),
3184                                                         PAGE_SIZE, true);
3185                                 ret = -ENOMEM;
3186                                 goto out;
3187                         }
3188                 }
3189
3190                 if (PageReadahead(page)) {
3191                         page_cache_async_readahead(inode->i_mapping,
3192                                                    ra, NULL, page, index,
3193                                                    last_index + 1 - index);
3194                 }
3195
3196                 if (!PageUptodate(page)) {
3197                         btrfs_readpage(NULL, page);
3198                         lock_page(page);
3199                         if (!PageUptodate(page)) {
3200                                 unlock_page(page);
3201                                 put_page(page);
3202                                 btrfs_delalloc_release_metadata(BTRFS_I(inode),
3203                                                         PAGE_SIZE, true);
3204                                 btrfs_delalloc_release_extents(BTRFS_I(inode),
3205                                                                PAGE_SIZE, true);
3206                                 ret = -EIO;
3207                                 goto out;
3208                         }
3209                 }
3210
3211                 page_start = page_offset(page);
3212                 page_end = page_start + PAGE_SIZE - 1;
3213
3214                 lock_extent(&BTRFS_I(inode)->io_tree, page_start, page_end);
3215
3216                 set_page_extent_mapped(page);
3217
3218                 if (nr < cluster->nr &&
3219                     page_start + offset == cluster->boundary[nr]) {
3220                         set_extent_bits(&BTRFS_I(inode)->io_tree,
3221                                         page_start, page_end,
3222                                         EXTENT_BOUNDARY);
3223                         nr++;
3224                 }
3225
3226                 ret = btrfs_set_extent_delalloc(inode, page_start, page_end, 0,
3227                                                 NULL, 0);
3228                 if (ret) {
3229                         unlock_page(page);
3230                         put_page(page);
3231                         btrfs_delalloc_release_metadata(BTRFS_I(inode),
3232                                                          PAGE_SIZE, true);
3233                         btrfs_delalloc_release_extents(BTRFS_I(inode),
3234                                                        PAGE_SIZE, true);
3235
3236                         clear_extent_bits(&BTRFS_I(inode)->io_tree,
3237                                           page_start, page_end,
3238                                           EXTENT_LOCKED | EXTENT_BOUNDARY);
3239                         goto out;
3240
3241                 }
3242                 set_page_dirty(page);
3243
3244                 unlock_extent(&BTRFS_I(inode)->io_tree,
3245                               page_start, page_end);
3246                 unlock_page(page);
3247                 put_page(page);
3248
3249                 index++;
3250                 btrfs_delalloc_release_extents(BTRFS_I(inode), PAGE_SIZE,
3251                                                false);
3252                 balance_dirty_pages_ratelimited(inode->i_mapping);
3253                 btrfs_throttle(fs_info);
3254         }
3255         WARN_ON(nr != cluster->nr);
3256 out:
3257         kfree(ra);
3258         return ret;
3259 }
3260
3261 static noinline_for_stack
3262 int relocate_data_extent(struct inode *inode, struct btrfs_key *extent_key,
3263                          struct file_extent_cluster *cluster)
3264 {
3265         int ret;
3266
3267         if (cluster->nr > 0 && extent_key->objectid != cluster->end + 1) {
3268                 ret = relocate_file_extent_cluster(inode, cluster);
3269                 if (ret)
3270                         return ret;
3271                 cluster->nr = 0;
3272         }
3273
3274         if (!cluster->nr)
3275                 cluster->start = extent_key->objectid;
3276         else
3277                 BUG_ON(cluster->nr >= MAX_EXTENTS);
3278         cluster->end = extent_key->objectid + extent_key->offset - 1;
3279         cluster->boundary[cluster->nr] = extent_key->objectid;
3280         cluster->nr++;
3281
3282         if (cluster->nr >= MAX_EXTENTS) {
3283                 ret = relocate_file_extent_cluster(inode, cluster);
3284                 if (ret)
3285                         return ret;
3286                 cluster->nr = 0;
3287         }
3288         return 0;
3289 }
3290
3291 /*
3292  * helper to add a tree block to the list.
3293  * the major work is getting the generation and level of the block
3294  */
3295 static int add_tree_block(struct reloc_control *rc,
3296                           struct btrfs_key *extent_key,
3297                           struct btrfs_path *path,
3298                           struct rb_root *blocks)
3299 {
3300         struct extent_buffer *eb;
3301         struct btrfs_extent_item *ei;
3302         struct btrfs_tree_block_info *bi;
3303         struct tree_block *block;
3304         struct rb_node *rb_node;
3305         u32 item_size;
3306         int level = -1;
3307         u64 generation;
3308
3309         eb =  path->nodes[0];
3310         item_size = btrfs_item_size_nr(eb, path->slots[0]);
3311
3312         if (extent_key->type == BTRFS_METADATA_ITEM_KEY ||
3313             item_size >= sizeof(*ei) + sizeof(*bi)) {
3314                 ei = btrfs_item_ptr(eb, path->slots[0],
3315                                 struct btrfs_extent_item);
3316                 if (extent_key->type == BTRFS_EXTENT_ITEM_KEY) {
3317                         bi = (struct btrfs_tree_block_info *)(ei + 1);
3318                         level = btrfs_tree_block_level(eb, bi);
3319                 } else {
3320                         level = (int)extent_key->offset;
3321                 }
3322                 generation = btrfs_extent_generation(eb, ei);
3323         } else if (unlikely(item_size == sizeof(struct btrfs_extent_item_v0))) {
3324                 btrfs_print_v0_err(eb->fs_info);
3325                 btrfs_handle_fs_error(eb->fs_info, -EINVAL, NULL);
3326                 return -EINVAL;
3327         } else {
3328                 BUG();
3329         }
3330
3331         btrfs_release_path(path);
3332
3333         BUG_ON(level == -1);
3334
3335         block = kmalloc(sizeof(*block), GFP_NOFS);
3336         if (!block)
3337                 return -ENOMEM;
3338
3339         block->bytenr = extent_key->objectid;
3340         block->key.objectid = rc->extent_root->fs_info->nodesize;
3341         block->key.offset = generation;
3342         block->level = level;
3343         block->key_ready = 0;
3344
3345         rb_node = tree_insert(blocks, block->bytenr, &block->rb_node);
3346         if (rb_node)
3347                 backref_tree_panic(rb_node, -EEXIST, block->bytenr);
3348
3349         return 0;
3350 }
3351
3352 /*
3353  * helper to add tree blocks for backref of type BTRFS_SHARED_DATA_REF_KEY
3354  */
3355 static int __add_tree_block(struct reloc_control *rc,
3356                             u64 bytenr, u32 blocksize,
3357                             struct rb_root *blocks)
3358 {
3359         struct btrfs_fs_info *fs_info = rc->extent_root->fs_info;
3360         struct btrfs_path *path;
3361         struct btrfs_key key;
3362         int ret;
3363         bool skinny = btrfs_fs_incompat(fs_info, SKINNY_METADATA);
3364
3365         if (tree_block_processed(bytenr, rc))
3366                 return 0;
3367
3368         if (tree_search(blocks, bytenr))
3369                 return 0;
3370
3371         path = btrfs_alloc_path();
3372         if (!path)
3373                 return -ENOMEM;
3374 again:
3375         key.objectid = bytenr;
3376         if (skinny) {
3377                 key.type = BTRFS_METADATA_ITEM_KEY;
3378                 key.offset = (u64)-1;
3379         } else {
3380                 key.type = BTRFS_EXTENT_ITEM_KEY;
3381                 key.offset = blocksize;
3382         }
3383
3384         path->search_commit_root = 1;
3385         path->skip_locking = 1;
3386         ret = btrfs_search_slot(NULL, rc->extent_root, &key, path, 0, 0);
3387         if (ret < 0)
3388                 goto out;
3389
3390         if (ret > 0 && skinny) {
3391                 if (path->slots[0]) {
3392                         path->slots[0]--;
3393                         btrfs_item_key_to_cpu(path->nodes[0], &key,
3394                                               path->slots[0]);
3395                         if (key.objectid == bytenr &&
3396                             (key.type == BTRFS_METADATA_ITEM_KEY ||
3397                              (key.type == BTRFS_EXTENT_ITEM_KEY &&
3398                               key.offset == blocksize)))
3399                                 ret = 0;
3400                 }
3401
3402                 if (ret) {
3403                         skinny = false;
3404                         btrfs_release_path(path);
3405                         goto again;
3406                 }
3407         }
3408         if (ret) {
3409                 ASSERT(ret == 1);
3410                 btrfs_print_leaf(path->nodes[0]);
3411                 btrfs_err(fs_info,
3412              "tree block extent item (%llu) is not found in extent tree",
3413                      bytenr);
3414                 WARN_ON(1);
3415                 ret = -EINVAL;
3416                 goto out;
3417         }
3418
3419         ret = add_tree_block(rc, &key, path, blocks);
3420 out:
3421         btrfs_free_path(path);
3422         return ret;
3423 }
3424
3425 /*
3426  * helper to check if the block use full backrefs for pointers in it
3427  */
3428 static int block_use_full_backref(struct reloc_control *rc,
3429                                   struct extent_buffer *eb)
3430 {
3431         u64 flags;
3432         int ret;
3433
3434         if (btrfs_header_flag(eb, BTRFS_HEADER_FLAG_RELOC) ||
3435             btrfs_header_backref_rev(eb) < BTRFS_MIXED_BACKREF_REV)
3436                 return 1;
3437
3438         ret = btrfs_lookup_extent_info(NULL, rc->extent_root->fs_info,
3439                                        eb->start, btrfs_header_level(eb), 1,
3440                                        NULL, &flags);
3441         BUG_ON(ret);
3442
3443         if (flags & BTRFS_BLOCK_FLAG_FULL_BACKREF)
3444                 ret = 1;
3445         else
3446                 ret = 0;
3447         return ret;
3448 }
3449
3450 static int delete_block_group_cache(struct btrfs_fs_info *fs_info,
3451                                     struct btrfs_block_group_cache *block_group,
3452                                     struct inode *inode,
3453                                     u64 ino)
3454 {
3455         struct btrfs_key key;
3456         struct btrfs_root *root = fs_info->tree_root;
3457         struct btrfs_trans_handle *trans;
3458         int ret = 0;
3459
3460         if (inode)
3461                 goto truncate;
3462
3463         key.objectid = ino;
3464         key.type = BTRFS_INODE_ITEM_KEY;
3465         key.offset = 0;
3466
3467         inode = btrfs_iget(fs_info->sb, &key, root, NULL);
3468         if (IS_ERR(inode))
3469                 return -ENOENT;
3470
3471 truncate:
3472         ret = btrfs_check_trunc_cache_free_space(fs_info,
3473                                                  &fs_info->global_block_rsv);
3474         if (ret)
3475                 goto out;
3476
3477         trans = btrfs_join_transaction(root);
3478         if (IS_ERR(trans)) {
3479                 ret = PTR_ERR(trans);
3480                 goto out;
3481         }
3482
3483         ret = btrfs_truncate_free_space_cache(trans, block_group, inode);
3484
3485         btrfs_end_transaction(trans);
3486         btrfs_btree_balance_dirty(fs_info);
3487 out:
3488         iput(inode);
3489         return ret;
3490 }
3491
3492 /*
3493  * helper to add tree blocks for backref of type BTRFS_EXTENT_DATA_REF_KEY
3494  * this function scans fs tree to find blocks reference the data extent
3495  */
3496 static int find_data_references(struct reloc_control *rc,
3497                                 struct btrfs_key *extent_key,
3498                                 struct extent_buffer *leaf,
3499                                 struct btrfs_extent_data_ref *ref,
3500                                 struct rb_root *blocks)
3501 {
3502         struct btrfs_fs_info *fs_info = rc->extent_root->fs_info;
3503         struct btrfs_path *path;
3504         struct tree_block *block;
3505         struct btrfs_root *root;
3506         struct btrfs_file_extent_item *fi;
3507         struct rb_node *rb_node;
3508         struct btrfs_key key;
3509         u64 ref_root;
3510         u64 ref_objectid;
3511         u64 ref_offset;
3512         u32 ref_count;
3513         u32 nritems;
3514         int err = 0;
3515         int added = 0;
3516         int counted;
3517         int ret;
3518
3519         ref_root = btrfs_extent_data_ref_root(leaf, ref);
3520         ref_objectid = btrfs_extent_data_ref_objectid(leaf, ref);
3521         ref_offset = btrfs_extent_data_ref_offset(leaf, ref);
3522         ref_count = btrfs_extent_data_ref_count(leaf, ref);
3523
3524         /*
3525          * This is an extent belonging to the free space cache, lets just delete
3526          * it and redo the search.
3527          */
3528         if (ref_root == BTRFS_ROOT_TREE_OBJECTID) {
3529                 ret = delete_block_group_cache(fs_info, rc->block_group,
3530                                                NULL, ref_objectid);
3531                 if (ret != -ENOENT)
3532                         return ret;
3533                 ret = 0;
3534         }
3535
3536         path = btrfs_alloc_path();
3537         if (!path)
3538                 return -ENOMEM;
3539         path->reada = READA_FORWARD;
3540
3541         root = read_fs_root(fs_info, ref_root);
3542         if (IS_ERR(root)) {
3543                 err = PTR_ERR(root);
3544                 goto out;
3545         }
3546
3547         key.objectid = ref_objectid;
3548         key.type = BTRFS_EXTENT_DATA_KEY;
3549         if (ref_offset > ((u64)-1 << 32))
3550                 key.offset = 0;
3551         else
3552                 key.offset = ref_offset;
3553
3554         path->search_commit_root = 1;
3555         path->skip_locking = 1;
3556         ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
3557         if (ret < 0) {
3558                 err = ret;
3559                 goto out;
3560         }
3561
3562         leaf = path->nodes[0];