btrfs-progs: Make btrfs_header_fsid() return unsigned long
[platform/upstream/btrfs-progs.git] / ctree.c
1 /*
2  * Copyright (C) 2007 Oracle.  All rights reserved.
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public
6  * License v2 as published by the Free Software Foundation.
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11  * General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public
14  * License along with this program; if not, write to the
15  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
16  * Boston, MA 021110-1307, USA.
17  */
18 #include "ctree.h"
19 #include "disk-io.h"
20 #include "transaction.h"
21 #include "print-tree.h"
22 #include "repair.h"
23
24 static int split_node(struct btrfs_trans_handle *trans, struct btrfs_root
25                       *root, struct btrfs_path *path, int level);
26 static int split_leaf(struct btrfs_trans_handle *trans, struct btrfs_root
27                       *root, struct btrfs_key *ins_key,
28                       struct btrfs_path *path, int data_size, int extend);
29 static int push_node_left(struct btrfs_trans_handle *trans,
30                           struct btrfs_root *root, struct extent_buffer *dst,
31                           struct extent_buffer *src, int empty);
32 static int balance_node_right(struct btrfs_trans_handle *trans,
33                               struct btrfs_root *root,
34                               struct extent_buffer *dst_buf,
35                               struct extent_buffer *src_buf);
36
37 inline void btrfs_init_path(struct btrfs_path *p)
38 {
39         memset(p, 0, sizeof(*p));
40 }
41
42 struct btrfs_path *btrfs_alloc_path(void)
43 {
44         struct btrfs_path *path;
45         path = kzalloc(sizeof(struct btrfs_path), GFP_NOFS);
46         return path;
47 }
48
49 void btrfs_free_path(struct btrfs_path *p)
50 {
51         btrfs_release_path(p);
52         kfree(p);
53 }
54
55 void btrfs_release_path(struct btrfs_path *p)
56 {
57         int i;
58         for (i = 0; i < BTRFS_MAX_LEVEL; i++) {
59                 if (!p->nodes[i])
60                         continue;
61                 free_extent_buffer(p->nodes[i]);
62         }
63         memset(p, 0, sizeof(*p));
64 }
65
66 void add_root_to_dirty_list(struct btrfs_root *root)
67 {
68         if (root->track_dirty && list_empty(&root->dirty_list)) {
69                 list_add(&root->dirty_list,
70                          &root->fs_info->dirty_cowonly_roots);
71         }
72 }
73
74 int btrfs_copy_root(struct btrfs_trans_handle *trans,
75                       struct btrfs_root *root,
76                       struct extent_buffer *buf,
77                       struct extent_buffer **cow_ret, u64 new_root_objectid)
78 {
79         struct extent_buffer *cow;
80         int ret = 0;
81         int level;
82         struct btrfs_root *new_root;
83         struct btrfs_disk_key disk_key;
84
85         new_root = kmalloc(sizeof(*new_root), GFP_NOFS);
86         if (!new_root)
87                 return -ENOMEM;
88
89         memcpy(new_root, root, sizeof(*new_root));
90         new_root->root_key.objectid = new_root_objectid;
91
92         WARN_ON(root->ref_cows && trans->transid !=
93                 root->fs_info->running_transaction->transid);
94         WARN_ON(root->ref_cows && trans->transid != root->last_trans);
95
96         level = btrfs_header_level(buf);
97         if (level == 0)
98                 btrfs_item_key(buf, &disk_key, 0);
99         else
100                 btrfs_node_key(buf, &disk_key, 0);
101         cow = btrfs_alloc_free_block(trans, new_root, buf->len,
102                                      new_root_objectid, &disk_key,
103                                      level, buf->start, 0);
104         if (IS_ERR(cow)) {
105                 kfree(new_root);
106                 return PTR_ERR(cow);
107         }
108
109         copy_extent_buffer(cow, buf, 0, 0, cow->len);
110         btrfs_set_header_bytenr(cow, cow->start);
111         btrfs_set_header_generation(cow, trans->transid);
112         btrfs_set_header_backref_rev(cow, BTRFS_MIXED_BACKREF_REV);
113         btrfs_clear_header_flag(cow, BTRFS_HEADER_FLAG_WRITTEN |
114                                      BTRFS_HEADER_FLAG_RELOC);
115         if (new_root_objectid == BTRFS_TREE_RELOC_OBJECTID)
116                 btrfs_set_header_flag(cow, BTRFS_HEADER_FLAG_RELOC);
117         else
118                 btrfs_set_header_owner(cow, new_root_objectid);
119
120         write_extent_buffer(cow, root->fs_info->fsid,
121                             btrfs_header_fsid(), BTRFS_FSID_SIZE);
122
123         WARN_ON(btrfs_header_generation(buf) > trans->transid);
124         ret = btrfs_inc_ref(trans, new_root, cow, 0);
125         kfree(new_root);
126
127         if (ret)
128                 return ret;
129
130         btrfs_mark_buffer_dirty(cow);
131         *cow_ret = cow;
132         return 0;
133 }
134
135 /*
136  * check if the tree block can be shared by multiple trees
137  */
138 static int btrfs_block_can_be_shared(struct btrfs_root *root,
139                                      struct extent_buffer *buf)
140 {
141         /*
142          * Tree blocks not in refernece counted trees and tree roots
143          * are never shared. If a block was allocated after the last
144          * snapshot and the block was not allocated by tree relocation,
145          * we know the block is not shared.
146          */
147         if (root->ref_cows &&
148             buf != root->node && buf != root->commit_root &&
149             (btrfs_header_generation(buf) <=
150              btrfs_root_last_snapshot(&root->root_item) ||
151              btrfs_header_flag(buf, BTRFS_HEADER_FLAG_RELOC)))
152                 return 1;
153 #ifdef BTRFS_COMPAT_EXTENT_TREE_V0
154         if (root->ref_cows &&
155             btrfs_header_backref_rev(buf) < BTRFS_MIXED_BACKREF_REV)
156                 return 1;
157 #endif
158         return 0;
159 }
160
161 static noinline int update_ref_for_cow(struct btrfs_trans_handle *trans,
162                                        struct btrfs_root *root,
163                                        struct extent_buffer *buf,
164                                        struct extent_buffer *cow)
165 {
166         u64 refs;
167         u64 owner;
168         u64 flags;
169         u64 new_flags = 0;
170         int ret;
171
172         /*
173          * Backrefs update rules:
174          *
175          * Always use full backrefs for extent pointers in tree block
176          * allocated by tree relocation.
177          *
178          * If a shared tree block is no longer referenced by its owner
179          * tree (btrfs_header_owner(buf) == root->root_key.objectid),
180          * use full backrefs for extent pointers in tree block.
181          *
182          * If a tree block is been relocating
183          * (root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID),
184          * use full backrefs for extent pointers in tree block.
185          * The reason for this is some operations (such as drop tree)
186          * are only allowed for blocks use full backrefs.
187          */
188
189         if (btrfs_block_can_be_shared(root, buf)) {
190                 ret = btrfs_lookup_extent_info(trans, root, buf->start,
191                                                btrfs_header_level(buf), 1,
192                                                &refs, &flags);
193                 BUG_ON(ret);
194                 BUG_ON(refs == 0);
195         } else {
196                 refs = 1;
197                 if (root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID ||
198                     btrfs_header_backref_rev(buf) < BTRFS_MIXED_BACKREF_REV)
199                         flags = BTRFS_BLOCK_FLAG_FULL_BACKREF;
200                 else
201                         flags = 0;
202         }
203
204         owner = btrfs_header_owner(buf);
205         BUG_ON(!(flags & BTRFS_BLOCK_FLAG_FULL_BACKREF) &&
206                owner == BTRFS_TREE_RELOC_OBJECTID);
207
208         if (refs > 1) {
209                 if ((owner == root->root_key.objectid ||
210                      root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID) &&
211                     !(flags & BTRFS_BLOCK_FLAG_FULL_BACKREF)) {
212                         ret = btrfs_inc_ref(trans, root, buf, 1);
213                         BUG_ON(ret);
214
215                         if (root->root_key.objectid ==
216                             BTRFS_TREE_RELOC_OBJECTID) {
217                                 ret = btrfs_dec_ref(trans, root, buf, 0);
218                                 BUG_ON(ret);
219                                 ret = btrfs_inc_ref(trans, root, cow, 1);
220                                 BUG_ON(ret);
221                         }
222                         new_flags |= BTRFS_BLOCK_FLAG_FULL_BACKREF;
223                 } else {
224
225                         if (root->root_key.objectid ==
226                             BTRFS_TREE_RELOC_OBJECTID)
227                                 ret = btrfs_inc_ref(trans, root, cow, 1);
228                         else
229                                 ret = btrfs_inc_ref(trans, root, cow, 0);
230                         BUG_ON(ret);
231                 }
232                 if (new_flags != 0) {
233                         ret = btrfs_set_block_flags(trans, root, buf->start,
234                                                     btrfs_header_level(buf),
235                                                     new_flags);
236                         BUG_ON(ret);
237                 }
238         } else {
239                 if (flags & BTRFS_BLOCK_FLAG_FULL_BACKREF) {
240                         if (root->root_key.objectid ==
241                             BTRFS_TREE_RELOC_OBJECTID)
242                                 ret = btrfs_inc_ref(trans, root, cow, 1);
243                         else
244                                 ret = btrfs_inc_ref(trans, root, cow, 0);
245                         BUG_ON(ret);
246                         ret = btrfs_dec_ref(trans, root, buf, 1);
247                         BUG_ON(ret);
248                 }
249                 clean_tree_block(trans, root, buf);
250         }
251         return 0;
252 }
253
254 int __btrfs_cow_block(struct btrfs_trans_handle *trans,
255                              struct btrfs_root *root,
256                              struct extent_buffer *buf,
257                              struct extent_buffer *parent, int parent_slot,
258                              struct extent_buffer **cow_ret,
259                              u64 search_start, u64 empty_size)
260 {
261         struct extent_buffer *cow;
262         struct btrfs_disk_key disk_key;
263         int level;
264
265         WARN_ON(root->ref_cows && trans->transid !=
266                 root->fs_info->running_transaction->transid);
267         WARN_ON(root->ref_cows && trans->transid != root->last_trans);
268
269         level = btrfs_header_level(buf);
270
271         if (level == 0)
272                 btrfs_item_key(buf, &disk_key, 0);
273         else
274                 btrfs_node_key(buf, &disk_key, 0);
275
276         cow = btrfs_alloc_free_block(trans, root, buf->len,
277                                      root->root_key.objectid, &disk_key,
278                                      level, search_start, empty_size);
279         if (IS_ERR(cow))
280                 return PTR_ERR(cow);
281
282         copy_extent_buffer(cow, buf, 0, 0, cow->len);
283         btrfs_set_header_bytenr(cow, cow->start);
284         btrfs_set_header_generation(cow, trans->transid);
285         btrfs_set_header_backref_rev(cow, BTRFS_MIXED_BACKREF_REV);
286         btrfs_clear_header_flag(cow, BTRFS_HEADER_FLAG_WRITTEN |
287                                      BTRFS_HEADER_FLAG_RELOC);
288         if (root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID)
289                 btrfs_set_header_flag(cow, BTRFS_HEADER_FLAG_RELOC);
290         else
291                 btrfs_set_header_owner(cow, root->root_key.objectid);
292
293         write_extent_buffer(cow, root->fs_info->fsid,
294                             btrfs_header_fsid(), BTRFS_FSID_SIZE);
295
296         WARN_ON(btrfs_header_generation(buf) > trans->transid);
297
298         update_ref_for_cow(trans, root, buf, cow);
299
300         if (buf == root->node) {
301                 root->node = cow;
302                 extent_buffer_get(cow);
303
304                 btrfs_free_extent(trans, root, buf->start, buf->len,
305                                   0, root->root_key.objectid, level, 0);
306                 free_extent_buffer(buf);
307                 add_root_to_dirty_list(root);
308         } else {
309                 btrfs_set_node_blockptr(parent, parent_slot,
310                                         cow->start);
311                 WARN_ON(trans->transid == 0);
312                 btrfs_set_node_ptr_generation(parent, parent_slot,
313                                               trans->transid);
314                 btrfs_mark_buffer_dirty(parent);
315                 WARN_ON(btrfs_header_generation(parent) != trans->transid);
316
317                 btrfs_free_extent(trans, root, buf->start, buf->len,
318                                   0, root->root_key.objectid, level, 1);
319         }
320         free_extent_buffer(buf);
321         btrfs_mark_buffer_dirty(cow);
322         *cow_ret = cow;
323         return 0;
324 }
325
326 static inline int should_cow_block(struct btrfs_trans_handle *trans,
327                                    struct btrfs_root *root,
328                                    struct extent_buffer *buf)
329 {
330         if (btrfs_header_generation(buf) == trans->transid &&
331             !btrfs_header_flag(buf, BTRFS_HEADER_FLAG_WRITTEN) &&
332             !(root->root_key.objectid != BTRFS_TREE_RELOC_OBJECTID &&
333               btrfs_header_flag(buf, BTRFS_HEADER_FLAG_RELOC)))
334                 return 0;
335         return 1;
336 }
337
338 int btrfs_cow_block(struct btrfs_trans_handle *trans,
339                     struct btrfs_root *root, struct extent_buffer *buf,
340                     struct extent_buffer *parent, int parent_slot,
341                     struct extent_buffer **cow_ret)
342 {
343         u64 search_start;
344         int ret;
345         /*
346         if (trans->transaction != root->fs_info->running_transaction) {
347                 printk(KERN_CRIT "trans %Lu running %Lu\n", trans->transid,
348                        root->fs_info->running_transaction->transid);
349                 WARN_ON(1);
350         }
351         */
352         if (trans->transid != root->fs_info->generation) {
353                 printk(KERN_CRIT "trans %llu running %llu\n",
354                         (unsigned long long)trans->transid,
355                         (unsigned long long)root->fs_info->generation);
356                 WARN_ON(1);
357         }
358         if (!should_cow_block(trans, root, buf)) {
359                 *cow_ret = buf;
360                 return 0;
361         }
362
363         search_start = buf->start & ~((u64)(1024 * 1024 * 1024) - 1);
364         ret = __btrfs_cow_block(trans, root, buf, parent,
365                                  parent_slot, cow_ret, search_start, 0);
366         return ret;
367 }
368
369 /*
370  * compare two keys in a memcmp fashion
371  */
372 static int btrfs_comp_keys(struct btrfs_disk_key *disk, struct btrfs_key *k2)
373 {
374         struct btrfs_key k1;
375
376         btrfs_disk_key_to_cpu(&k1, disk);
377
378         if (k1.objectid > k2->objectid)
379                 return 1;
380         if (k1.objectid < k2->objectid)
381                 return -1;
382         if (k1.type > k2->type)
383                 return 1;
384         if (k1.type < k2->type)
385                 return -1;
386         if (k1.offset > k2->offset)
387                 return 1;
388         if (k1.offset < k2->offset)
389                 return -1;
390         return 0;
391 }
392
393 /*
394  * The leaf data grows from end-to-front in the node.
395  * this returns the address of the start of the last item,
396  * which is the stop of the leaf data stack
397  */
398 static inline unsigned int leaf_data_end(struct btrfs_root *root,
399                                          struct extent_buffer *leaf)
400 {
401         u32 nr = btrfs_header_nritems(leaf);
402         if (nr == 0)
403                 return BTRFS_LEAF_DATA_SIZE(root);
404         return btrfs_item_offset_nr(leaf, nr - 1);
405 }
406
407 int btrfs_check_node(struct btrfs_root *root,
408                       struct btrfs_disk_key *parent_key,
409                       struct extent_buffer *buf)
410 {
411         int i;
412         struct btrfs_key cpukey;
413         struct btrfs_disk_key key;
414         u32 nritems = btrfs_header_nritems(buf);
415
416         if (nritems == 0 || nritems > BTRFS_NODEPTRS_PER_BLOCK(root))
417                 goto fail;
418
419         if (parent_key && parent_key->type) {
420                 btrfs_node_key(buf, &key, 0);
421                 if (memcmp(parent_key, &key, sizeof(key)))
422                         goto fail;
423         }
424         for (i = 0; nritems > 1 && i < nritems - 2; i++) {
425                 btrfs_node_key(buf, &key, i);
426                 btrfs_node_key_to_cpu(buf, &cpukey, i + 1);
427                 if (btrfs_comp_keys(&key, &cpukey) >= 0)
428                         goto fail;
429         }
430         return 0;
431 fail:
432         if (btrfs_header_owner(buf) == BTRFS_EXTENT_TREE_OBJECTID) {
433                 if (parent_key)
434                         btrfs_disk_key_to_cpu(&cpukey, parent_key);
435                 else
436                         btrfs_node_key_to_cpu(buf, &cpukey, 0);
437                 btrfs_add_corrupt_extent_record(root->fs_info, &cpukey,
438                                                 buf->start, buf->len,
439                                                 btrfs_header_level(buf));
440         }
441         return -EIO;
442 }
443
444 int btrfs_check_leaf(struct btrfs_root *root,
445                       struct btrfs_disk_key *parent_key,
446                       struct extent_buffer *buf)
447 {
448         int i;
449         struct btrfs_key cpukey;
450         struct btrfs_disk_key key;
451         u32 nritems = btrfs_header_nritems(buf);
452
453         if (nritems * sizeof(struct btrfs_item) > buf->len)  {
454                 fprintf(stderr, "invalid number of items %llu\n",
455                         (unsigned long long)buf->start);
456                 goto fail;
457         }
458
459         if (btrfs_header_level(buf) != 0) {
460                 fprintf(stderr, "leaf is not a leaf %llu\n",
461                        (unsigned long long)btrfs_header_bytenr(buf));
462                 goto fail;
463         }
464         if (btrfs_leaf_free_space(root, buf) < 0) {
465                 fprintf(stderr, "leaf free space incorrect %llu %d\n",
466                         (unsigned long long)btrfs_header_bytenr(buf),
467                         btrfs_leaf_free_space(root, buf));
468                 goto fail;
469         }
470
471         if (nritems == 0)
472                 return 0;
473
474         btrfs_item_key(buf, &key, 0);
475         if (parent_key && parent_key->type &&
476             memcmp(parent_key, &key, sizeof(key))) {
477                 fprintf(stderr, "leaf parent key incorrect %llu\n",
478                        (unsigned long long)btrfs_header_bytenr(buf));
479                 goto fail;
480         }
481         for (i = 0; nritems > 1 && i < nritems - 2; i++) {
482                 btrfs_item_key(buf, &key, i);
483                 btrfs_item_key_to_cpu(buf, &cpukey, i + 1);
484                 if (btrfs_comp_keys(&key, &cpukey) >= 0) {
485                         fprintf(stderr, "bad key ordering %d %d\n", i, i+1);
486                         goto fail;
487                 }
488                 if (btrfs_item_offset_nr(buf, i) !=
489                         btrfs_item_end_nr(buf, i + 1)) {
490                         fprintf(stderr, "incorrect offsets %u %u\n",
491                                 btrfs_item_offset_nr(buf, i),
492                                 btrfs_item_end_nr(buf, i + 1));
493                         goto fail;
494                 }
495                 if (i == 0 && btrfs_item_end_nr(buf, i) !=
496                     BTRFS_LEAF_DATA_SIZE(root)) {
497                         fprintf(stderr, "bad item end %u wanted %u\n",
498                                 btrfs_item_end_nr(buf, i),
499                                 (unsigned)BTRFS_LEAF_DATA_SIZE(root));
500                         goto fail;
501                 }
502         }
503         return 0;
504 fail:
505         if (btrfs_header_owner(buf) == BTRFS_EXTENT_TREE_OBJECTID) {
506                 if (parent_key)
507                         btrfs_disk_key_to_cpu(&cpukey, parent_key);
508                 else
509                         btrfs_item_key_to_cpu(buf, &cpukey, 0);
510
511                 btrfs_add_corrupt_extent_record(root->fs_info, &cpukey,
512                                                 buf->start, buf->len, 0);
513         }
514         return -EIO;
515 }
516
517 static int noinline check_block(struct btrfs_root *root,
518                                 struct btrfs_path *path, int level)
519 {
520         struct btrfs_disk_key key;
521         struct btrfs_disk_key *key_ptr = NULL;
522         struct extent_buffer *parent;
523
524         if (path->nodes[level + 1]) {
525                 parent = path->nodes[level + 1];
526                 btrfs_node_key(parent, &key, path->slots[level + 1]);
527                 key_ptr = &key;
528         }
529         if (level == 0)
530                 return btrfs_check_leaf(root, key_ptr, path->nodes[0]);
531         return btrfs_check_node(root, key_ptr, path->nodes[level]);
532 }
533
534 /*
535  * search for key in the extent_buffer.  The items start at offset p,
536  * and they are item_size apart.  There are 'max' items in p.
537  *
538  * the slot in the array is returned via slot, and it points to
539  * the place where you would insert key if it is not found in
540  * the array.
541  *
542  * slot may point to max if the key is bigger than all of the keys
543  */
544 static int generic_bin_search(struct extent_buffer *eb, unsigned long p,
545                               int item_size, struct btrfs_key *key,
546                               int max, int *slot)
547 {
548         int low = 0;
549         int high = max;
550         int mid;
551         int ret;
552         unsigned long offset;
553         struct btrfs_disk_key *tmp;
554
555         while(low < high) {
556                 mid = (low + high) / 2;
557                 offset = p + mid * item_size;
558
559                 tmp = (struct btrfs_disk_key *)(eb->data + offset);
560                 ret = btrfs_comp_keys(tmp, key);
561
562                 if (ret < 0)
563                         low = mid + 1;
564                 else if (ret > 0)
565                         high = mid;
566                 else {
567                         *slot = mid;
568                         return 0;
569                 }
570         }
571         *slot = low;
572         return 1;
573 }
574
575 /*
576  * simple bin_search frontend that does the right thing for
577  * leaves vs nodes
578  */
579 static int bin_search(struct extent_buffer *eb, struct btrfs_key *key,
580                       int level, int *slot)
581 {
582         if (level == 0)
583                 return generic_bin_search(eb,
584                                           offsetof(struct btrfs_leaf, items),
585                                           sizeof(struct btrfs_item),
586                                           key, btrfs_header_nritems(eb),
587                                           slot);
588         else
589                 return generic_bin_search(eb,
590                                           offsetof(struct btrfs_node, ptrs),
591                                           sizeof(struct btrfs_key_ptr),
592                                           key, btrfs_header_nritems(eb),
593                                           slot);
594 }
595
596 struct extent_buffer *read_node_slot(struct btrfs_root *root,
597                                    struct extent_buffer *parent, int slot)
598 {
599         int level = btrfs_header_level(parent);
600         if (slot < 0)
601                 return NULL;
602         if (slot >= btrfs_header_nritems(parent))
603                 return NULL;
604
605         if (level == 0)
606                 return NULL;
607
608         return read_tree_block(root, btrfs_node_blockptr(parent, slot),
609                        btrfs_level_size(root, level - 1),
610                        btrfs_node_ptr_generation(parent, slot));
611 }
612
613 static int balance_level(struct btrfs_trans_handle *trans,
614                          struct btrfs_root *root,
615                          struct btrfs_path *path, int level)
616 {
617         struct extent_buffer *right = NULL;
618         struct extent_buffer *mid;
619         struct extent_buffer *left = NULL;
620         struct extent_buffer *parent = NULL;
621         int ret = 0;
622         int wret;
623         int pslot;
624         int orig_slot = path->slots[level];
625         u64 orig_ptr;
626
627         if (level == 0)
628                 return 0;
629
630         mid = path->nodes[level];
631         WARN_ON(btrfs_header_generation(mid) != trans->transid);
632
633         orig_ptr = btrfs_node_blockptr(mid, orig_slot);
634
635         if (level < BTRFS_MAX_LEVEL - 1) {
636                 parent = path->nodes[level + 1];
637                 pslot = path->slots[level + 1];
638         }
639
640         /*
641          * deal with the case where there is only one pointer in the root
642          * by promoting the node below to a root
643          */
644         if (!parent) {
645                 struct extent_buffer *child;
646
647                 if (btrfs_header_nritems(mid) != 1)
648                         return 0;
649
650                 /* promote the child to a root */
651                 child = read_node_slot(root, mid, 0);
652                 BUG_ON(!child);
653                 ret = btrfs_cow_block(trans, root, child, mid, 0, &child);
654                 BUG_ON(ret);
655
656                 root->node = child;
657                 add_root_to_dirty_list(root);
658                 path->nodes[level] = NULL;
659                 clean_tree_block(trans, root, mid);
660                 wait_on_tree_block_writeback(root, mid);
661                 /* once for the path */
662                 free_extent_buffer(mid);
663
664                 ret = btrfs_free_extent(trans, root, mid->start, mid->len,
665                                         0, root->root_key.objectid,
666                                         level, 1);
667                 /* once for the root ptr */
668                 free_extent_buffer(mid);
669                 return ret;
670         }
671         if (btrfs_header_nritems(mid) >
672             BTRFS_NODEPTRS_PER_BLOCK(root) / 4)
673                 return 0;
674
675         left = read_node_slot(root, parent, pslot - 1);
676         if (left) {
677                 wret = btrfs_cow_block(trans, root, left,
678                                        parent, pslot - 1, &left);
679                 if (wret) {
680                         ret = wret;
681                         goto enospc;
682                 }
683         }
684         right = read_node_slot(root, parent, pslot + 1);
685         if (right) {
686                 wret = btrfs_cow_block(trans, root, right,
687                                        parent, pslot + 1, &right);
688                 if (wret) {
689                         ret = wret;
690                         goto enospc;
691                 }
692         }
693
694         /* first, try to make some room in the middle buffer */
695         if (left) {
696                 orig_slot += btrfs_header_nritems(left);
697                 wret = push_node_left(trans, root, left, mid, 1);
698                 if (wret < 0)
699                         ret = wret;
700         }
701
702         /*
703          * then try to empty the right most buffer into the middle
704          */
705         if (right) {
706                 wret = push_node_left(trans, root, mid, right, 1);
707                 if (wret < 0 && wret != -ENOSPC)
708                         ret = wret;
709                 if (btrfs_header_nritems(right) == 0) {
710                         u64 bytenr = right->start;
711                         u32 blocksize = right->len;
712
713                         clean_tree_block(trans, root, right);
714                         wait_on_tree_block_writeback(root, right);
715                         free_extent_buffer(right);
716                         right = NULL;
717                         wret = btrfs_del_ptr(trans, root, path,
718                                              level + 1, pslot + 1);
719                         if (wret)
720                                 ret = wret;
721                         wret = btrfs_free_extent(trans, root, bytenr,
722                                                  blocksize, 0,
723                                                  root->root_key.objectid,
724                                                  level, 0);
725                         if (wret)
726                                 ret = wret;
727                 } else {
728                         struct btrfs_disk_key right_key;
729                         btrfs_node_key(right, &right_key, 0);
730                         btrfs_set_node_key(parent, &right_key, pslot + 1);
731                         btrfs_mark_buffer_dirty(parent);
732                 }
733         }
734         if (btrfs_header_nritems(mid) == 1) {
735                 /*
736                  * we're not allowed to leave a node with one item in the
737                  * tree during a delete.  A deletion from lower in the tree
738                  * could try to delete the only pointer in this node.
739                  * So, pull some keys from the left.
740                  * There has to be a left pointer at this point because
741                  * otherwise we would have pulled some pointers from the
742                  * right
743                  */
744                 BUG_ON(!left);
745                 wret = balance_node_right(trans, root, mid, left);
746                 if (wret < 0) {
747                         ret = wret;
748                         goto enospc;
749                 }
750                 if (wret == 1) {
751                         wret = push_node_left(trans, root, left, mid, 1);
752                         if (wret < 0)
753                                 ret = wret;
754                 }
755                 BUG_ON(wret == 1);
756         }
757         if (btrfs_header_nritems(mid) == 0) {
758                 /* we've managed to empty the middle node, drop it */
759                 u64 bytenr = mid->start;
760                 u32 blocksize = mid->len;
761                 clean_tree_block(trans, root, mid);
762                 wait_on_tree_block_writeback(root, mid);
763                 free_extent_buffer(mid);
764                 mid = NULL;
765                 wret = btrfs_del_ptr(trans, root, path, level + 1, pslot);
766                 if (wret)
767                         ret = wret;
768                 wret = btrfs_free_extent(trans, root, bytenr, blocksize,
769                                          0, root->root_key.objectid,
770                                          level, 0);
771                 if (wret)
772                         ret = wret;
773         } else {
774                 /* update the parent key to reflect our changes */
775                 struct btrfs_disk_key mid_key;
776                 btrfs_node_key(mid, &mid_key, 0);
777                 btrfs_set_node_key(parent, &mid_key, pslot);
778                 btrfs_mark_buffer_dirty(parent);
779         }
780
781         /* update the path */
782         if (left) {
783                 if (btrfs_header_nritems(left) > orig_slot) {
784                         extent_buffer_get(left);
785                         path->nodes[level] = left;
786                         path->slots[level + 1] -= 1;
787                         path->slots[level] = orig_slot;
788                         if (mid)
789                                 free_extent_buffer(mid);
790                 } else {
791                         orig_slot -= btrfs_header_nritems(left);
792                         path->slots[level] = orig_slot;
793                 }
794         }
795         /* double check we haven't messed things up */
796         check_block(root, path, level);
797         if (orig_ptr !=
798             btrfs_node_blockptr(path->nodes[level], path->slots[level]))
799                 BUG();
800 enospc:
801         if (right)
802                 free_extent_buffer(right);
803         if (left)
804                 free_extent_buffer(left);
805         return ret;
806 }
807
808 /* returns zero if the push worked, non-zero otherwise */
809 static int noinline push_nodes_for_insert(struct btrfs_trans_handle *trans,
810                                           struct btrfs_root *root,
811                                           struct btrfs_path *path, int level)
812 {
813         struct extent_buffer *right = NULL;
814         struct extent_buffer *mid;
815         struct extent_buffer *left = NULL;
816         struct extent_buffer *parent = NULL;
817         int ret = 0;
818         int wret;
819         int pslot;
820         int orig_slot = path->slots[level];
821
822         if (level == 0)
823                 return 1;
824
825         mid = path->nodes[level];
826         WARN_ON(btrfs_header_generation(mid) != trans->transid);
827
828         if (level < BTRFS_MAX_LEVEL - 1) {
829                 parent = path->nodes[level + 1];
830                 pslot = path->slots[level + 1];
831         }
832
833         if (!parent)
834                 return 1;
835
836         left = read_node_slot(root, parent, pslot - 1);
837
838         /* first, try to make some room in the middle buffer */
839         if (left) {
840                 u32 left_nr;
841                 left_nr = btrfs_header_nritems(left);
842                 if (left_nr >= BTRFS_NODEPTRS_PER_BLOCK(root) - 1) {
843                         wret = 1;
844                 } else {
845                         ret = btrfs_cow_block(trans, root, left, parent,
846                                               pslot - 1, &left);
847                         if (ret)
848                                 wret = 1;
849                         else {
850                                 wret = push_node_left(trans, root,
851                                                       left, mid, 0);
852                         }
853                 }
854                 if (wret < 0)
855                         ret = wret;
856                 if (wret == 0) {
857                         struct btrfs_disk_key disk_key;
858                         orig_slot += left_nr;
859                         btrfs_node_key(mid, &disk_key, 0);
860                         btrfs_set_node_key(parent, &disk_key, pslot);
861                         btrfs_mark_buffer_dirty(parent);
862                         if (btrfs_header_nritems(left) > orig_slot) {
863                                 path->nodes[level] = left;
864                                 path->slots[level + 1] -= 1;
865                                 path->slots[level] = orig_slot;
866                                 free_extent_buffer(mid);
867                         } else {
868                                 orig_slot -=
869                                         btrfs_header_nritems(left);
870                                 path->slots[level] = orig_slot;
871                                 free_extent_buffer(left);
872                         }
873                         return 0;
874                 }
875                 free_extent_buffer(left);
876         }
877         right= read_node_slot(root, parent, pslot + 1);
878
879         /*
880          * then try to empty the right most buffer into the middle
881          */
882         if (right) {
883                 u32 right_nr;
884                 right_nr = btrfs_header_nritems(right);
885                 if (right_nr >= BTRFS_NODEPTRS_PER_BLOCK(root) - 1) {
886                         wret = 1;
887                 } else {
888                         ret = btrfs_cow_block(trans, root, right,
889                                               parent, pslot + 1,
890                                               &right);
891                         if (ret)
892                                 wret = 1;
893                         else {
894                                 wret = balance_node_right(trans, root,
895                                                           right, mid);
896                         }
897                 }
898                 if (wret < 0)
899                         ret = wret;
900                 if (wret == 0) {
901                         struct btrfs_disk_key disk_key;
902
903                         btrfs_node_key(right, &disk_key, 0);
904                         btrfs_set_node_key(parent, &disk_key, pslot + 1);
905                         btrfs_mark_buffer_dirty(parent);
906
907                         if (btrfs_header_nritems(mid) <= orig_slot) {
908                                 path->nodes[level] = right;
909                                 path->slots[level + 1] += 1;
910                                 path->slots[level] = orig_slot -
911                                         btrfs_header_nritems(mid);
912                                 free_extent_buffer(mid);
913                         } else {
914                                 free_extent_buffer(right);
915                         }
916                         return 0;
917                 }
918                 free_extent_buffer(right);
919         }
920         return 1;
921 }
922
923 /*
924  * readahead one full node of leaves
925  */
926 void reada_for_search(struct btrfs_root *root, struct btrfs_path *path,
927                              int level, int slot, u64 objectid)
928 {
929         struct extent_buffer *node;
930         struct btrfs_disk_key disk_key;
931         u32 nritems;
932         u64 search;
933         u64 lowest_read;
934         u64 highest_read;
935         u64 nread = 0;
936         int direction = path->reada;
937         struct extent_buffer *eb;
938         u32 nr;
939         u32 blocksize;
940         u32 nscan = 0;
941
942         if (level != 1)
943                 return;
944
945         if (!path->nodes[level])
946                 return;
947
948         node = path->nodes[level];
949         search = btrfs_node_blockptr(node, slot);
950         blocksize = btrfs_level_size(root, level - 1);
951         eb = btrfs_find_tree_block(root, search, blocksize);
952         if (eb) {
953                 free_extent_buffer(eb);
954                 return;
955         }
956
957         highest_read = search;
958         lowest_read = search;
959
960         nritems = btrfs_header_nritems(node);
961         nr = slot;
962         while(1) {
963                 if (direction < 0) {
964                         if (nr == 0)
965                                 break;
966                         nr--;
967                 } else if (direction > 0) {
968                         nr++;
969                         if (nr >= nritems)
970                                 break;
971                 }
972                 if (path->reada < 0 && objectid) {
973                         btrfs_node_key(node, &disk_key, nr);
974                         if (btrfs_disk_key_objectid(&disk_key) != objectid)
975                                 break;
976                 }
977                 search = btrfs_node_blockptr(node, nr);
978                 if ((search >= lowest_read && search <= highest_read) ||
979                     (search < lowest_read && lowest_read - search <= 32768) ||
980                     (search > highest_read && search - highest_read <= 32768)) {
981                         readahead_tree_block(root, search, blocksize,
982                                      btrfs_node_ptr_generation(node, nr));
983                         nread += blocksize;
984                 }
985                 nscan++;
986                 if (path->reada < 2 && (nread > (256 * 1024) || nscan > 32))
987                         break;
988                 if(nread > (1024 * 1024) || nscan > 128)
989                         break;
990
991                 if (search < lowest_read)
992                         lowest_read = search;
993                 if (search > highest_read)
994                         highest_read = search;
995         }
996 }
997
998 /*
999  * look for key in the tree.  path is filled in with nodes along the way
1000  * if key is found, we return zero and you can find the item in the leaf
1001  * level of the path (level 0)
1002  *
1003  * If the key isn't found, the path points to the slot where it should
1004  * be inserted, and 1 is returned.  If there are other errors during the
1005  * search a negative error number is returned.
1006  *
1007  * if ins_len > 0, nodes and leaves will be split as we walk down the
1008  * tree.  if ins_len < 0, nodes will be merged as we walk down the tree (if
1009  * possible)
1010  */
1011 int btrfs_search_slot(struct btrfs_trans_handle *trans, struct btrfs_root
1012                       *root, struct btrfs_key *key, struct btrfs_path *p, int
1013                       ins_len, int cow)
1014 {
1015         struct extent_buffer *b;
1016         int slot;
1017         int ret;
1018         int level;
1019         int should_reada = p->reada;
1020         u8 lowest_level = 0;
1021
1022         lowest_level = p->lowest_level;
1023         WARN_ON(lowest_level && ins_len > 0);
1024         WARN_ON(p->nodes[0] != NULL);
1025         /*
1026         WARN_ON(!mutex_is_locked(&root->fs_info->fs_mutex));
1027         */
1028 again:
1029         b = root->node;
1030         extent_buffer_get(b);
1031         while (b) {
1032                 level = btrfs_header_level(b);
1033                 if (cow) {
1034                         int wret;
1035                         wret = btrfs_cow_block(trans, root, b,
1036                                                p->nodes[level + 1],
1037                                                p->slots[level + 1],
1038                                                &b);
1039                         if (wret) {
1040                                 free_extent_buffer(b);
1041                                 return wret;
1042                         }
1043                 }
1044                 BUG_ON(!cow && ins_len);
1045                 if (level != btrfs_header_level(b))
1046                         WARN_ON(1);
1047                 level = btrfs_header_level(b);
1048                 p->nodes[level] = b;
1049                 ret = check_block(root, p, level);
1050                 if (ret)
1051                         return -1;
1052                 ret = bin_search(b, key, level, &slot);
1053                 if (level != 0) {
1054                         if (ret && slot > 0)
1055                                 slot -= 1;
1056                         p->slots[level] = slot;
1057                         if ((p->search_for_split || ins_len > 0) &&
1058                             btrfs_header_nritems(b) >=
1059                             BTRFS_NODEPTRS_PER_BLOCK(root) - 3) {
1060                                 int sret = split_node(trans, root, p, level);
1061                                 BUG_ON(sret > 0);
1062                                 if (sret)
1063                                         return sret;
1064                                 b = p->nodes[level];
1065                                 slot = p->slots[level];
1066                         } else if (ins_len < 0) {
1067                                 int sret = balance_level(trans, root, p,
1068                                                          level);
1069                                 if (sret)
1070                                         return sret;
1071                                 b = p->nodes[level];
1072                                 if (!b) {
1073                                         btrfs_release_path(p);
1074                                         goto again;
1075                                 }
1076                                 slot = p->slots[level];
1077                                 BUG_ON(btrfs_header_nritems(b) == 1);
1078                         }
1079                         /* this is only true while dropping a snapshot */
1080                         if (level == lowest_level)
1081                                 break;
1082
1083                         if (should_reada)
1084                                 reada_for_search(root, p, level, slot,
1085                                                  key->objectid);
1086
1087                         b = read_node_slot(root, b, slot);
1088                         if (!extent_buffer_uptodate(b))
1089                                 return -EIO;
1090                 } else {
1091                         p->slots[level] = slot;
1092                         if (ins_len > 0 &&
1093                             ins_len > btrfs_leaf_free_space(root, b)) {
1094                                 int sret = split_leaf(trans, root, key,
1095                                                       p, ins_len, ret == 0);
1096                                 BUG_ON(sret > 0);
1097                                 if (sret)
1098                                         return sret;
1099                         }
1100                         return ret;
1101                 }
1102         }
1103         return 1;
1104 }
1105
1106 /*
1107  * adjust the pointers going up the tree, starting at level
1108  * making sure the right key of each node is points to 'key'.
1109  * This is used after shifting pointers to the left, so it stops
1110  * fixing up pointers when a given leaf/node is not in slot 0 of the
1111  * higher levels
1112  *
1113  * If this fails to write a tree block, it returns -1, but continues
1114  * fixing up the blocks in ram so the tree is consistent.
1115  */
1116 static int fixup_low_keys(struct btrfs_trans_handle *trans,
1117                           struct btrfs_root *root, struct btrfs_path *path,
1118                           struct btrfs_disk_key *key, int level)
1119 {
1120         int i;
1121         int ret = 0;
1122         struct extent_buffer *t;
1123
1124         for (i = level; i < BTRFS_MAX_LEVEL; i++) {
1125                 int tslot = path->slots[i];
1126                 if (!path->nodes[i])
1127                         break;
1128                 t = path->nodes[i];
1129                 btrfs_set_node_key(t, key, tslot);
1130                 btrfs_mark_buffer_dirty(path->nodes[i]);
1131                 if (tslot != 0)
1132                         break;
1133         }
1134         return ret;
1135 }
1136
1137 /*
1138  * update item key.
1139  *
1140  * This function isn't completely safe. It's the caller's responsibility
1141  * that the new key won't break the order
1142  */
1143 int btrfs_set_item_key_safe(struct btrfs_trans_handle *trans,
1144                             struct btrfs_root *root, struct btrfs_path *path,
1145                             struct btrfs_key *new_key)
1146 {
1147         struct btrfs_disk_key disk_key;
1148         struct extent_buffer *eb;
1149         int slot;
1150
1151         eb = path->nodes[0];
1152         slot = path->slots[0];
1153         if (slot > 0) {
1154                 btrfs_item_key(eb, &disk_key, slot - 1);
1155                 if (btrfs_comp_keys(&disk_key, new_key) >= 0)
1156                         return -1;
1157         }
1158         if (slot < btrfs_header_nritems(eb) - 1) {
1159                 btrfs_item_key(eb, &disk_key, slot + 1);
1160                 if (btrfs_comp_keys(&disk_key, new_key) <= 0)
1161                         return -1;
1162         }
1163
1164         btrfs_cpu_key_to_disk(&disk_key, new_key);
1165         btrfs_set_item_key(eb, &disk_key, slot);
1166         btrfs_mark_buffer_dirty(eb);
1167         if (slot == 0)
1168                 fixup_low_keys(trans, root, path, &disk_key, 1);
1169         return 0;
1170 }
1171
1172 /*
1173  * try to push data from one node into the next node left in the
1174  * tree.
1175  *
1176  * returns 0 if some ptrs were pushed left, < 0 if there was some horrible
1177  * error, and > 0 if there was no room in the left hand block.
1178  */
1179 static int push_node_left(struct btrfs_trans_handle *trans,
1180                           struct btrfs_root *root, struct extent_buffer *dst,
1181                           struct extent_buffer *src, int empty)
1182 {
1183         int push_items = 0;
1184         int src_nritems;
1185         int dst_nritems;
1186         int ret = 0;
1187
1188         src_nritems = btrfs_header_nritems(src);
1189         dst_nritems = btrfs_header_nritems(dst);
1190         push_items = BTRFS_NODEPTRS_PER_BLOCK(root) - dst_nritems;
1191         WARN_ON(btrfs_header_generation(src) != trans->transid);
1192         WARN_ON(btrfs_header_generation(dst) != trans->transid);
1193
1194         if (!empty && src_nritems <= 8)
1195                 return 1;
1196
1197         if (push_items <= 0) {
1198                 return 1;
1199         }
1200
1201         if (empty) {
1202                 push_items = min(src_nritems, push_items);
1203                 if (push_items < src_nritems) {
1204                         /* leave at least 8 pointers in the node if
1205                          * we aren't going to empty it
1206                          */
1207                         if (src_nritems - push_items < 8) {
1208                                 if (push_items <= 8)
1209                                         return 1;
1210                                 push_items -= 8;
1211                         }
1212                 }
1213         } else
1214                 push_items = min(src_nritems - 8, push_items);
1215
1216         copy_extent_buffer(dst, src,
1217                            btrfs_node_key_ptr_offset(dst_nritems),
1218                            btrfs_node_key_ptr_offset(0),
1219                            push_items * sizeof(struct btrfs_key_ptr));
1220
1221         if (push_items < src_nritems) {
1222                 memmove_extent_buffer(src, btrfs_node_key_ptr_offset(0),
1223                                       btrfs_node_key_ptr_offset(push_items),
1224                                       (src_nritems - push_items) *
1225                                       sizeof(struct btrfs_key_ptr));
1226         }
1227         btrfs_set_header_nritems(src, src_nritems - push_items);
1228         btrfs_set_header_nritems(dst, dst_nritems + push_items);
1229         btrfs_mark_buffer_dirty(src);
1230         btrfs_mark_buffer_dirty(dst);
1231
1232         return ret;
1233 }
1234
1235 /*
1236  * try to push data from one node into the next node right in the
1237  * tree.
1238  *
1239  * returns 0 if some ptrs were pushed, < 0 if there was some horrible
1240  * error, and > 0 if there was no room in the right hand block.
1241  *
1242  * this will  only push up to 1/2 the contents of the left node over
1243  */
1244 static int balance_node_right(struct btrfs_trans_handle *trans,
1245                               struct btrfs_root *root,
1246                               struct extent_buffer *dst,
1247                               struct extent_buffer *src)
1248 {
1249         int push_items = 0;
1250         int max_push;
1251         int src_nritems;
1252         int dst_nritems;
1253         int ret = 0;
1254
1255         WARN_ON(btrfs_header_generation(src) != trans->transid);
1256         WARN_ON(btrfs_header_generation(dst) != trans->transid);
1257
1258         src_nritems = btrfs_header_nritems(src);
1259         dst_nritems = btrfs_header_nritems(dst);
1260         push_items = BTRFS_NODEPTRS_PER_BLOCK(root) - dst_nritems;
1261         if (push_items <= 0) {
1262                 return 1;
1263         }
1264
1265         if (src_nritems < 4) {
1266                 return 1;
1267         }
1268
1269         max_push = src_nritems / 2 + 1;
1270         /* don't try to empty the node */
1271         if (max_push >= src_nritems) {
1272                 return 1;
1273         }
1274
1275         if (max_push < push_items)
1276                 push_items = max_push;
1277
1278         memmove_extent_buffer(dst, btrfs_node_key_ptr_offset(push_items),
1279                                       btrfs_node_key_ptr_offset(0),
1280                                       (dst_nritems) *
1281                                       sizeof(struct btrfs_key_ptr));
1282
1283         copy_extent_buffer(dst, src,
1284                            btrfs_node_key_ptr_offset(0),
1285                            btrfs_node_key_ptr_offset(src_nritems - push_items),
1286                            push_items * sizeof(struct btrfs_key_ptr));
1287
1288         btrfs_set_header_nritems(src, src_nritems - push_items);
1289         btrfs_set_header_nritems(dst, dst_nritems + push_items);
1290
1291         btrfs_mark_buffer_dirty(src);
1292         btrfs_mark_buffer_dirty(dst);
1293
1294         return ret;
1295 }
1296
1297 /*
1298  * helper function to insert a new root level in the tree.
1299  * A new node is allocated, and a single item is inserted to
1300  * point to the existing root
1301  *
1302  * returns zero on success or < 0 on failure.
1303  */
1304 static int noinline insert_new_root(struct btrfs_trans_handle *trans,
1305                            struct btrfs_root *root,
1306                            struct btrfs_path *path, int level)
1307 {
1308         u64 lower_gen;
1309         struct extent_buffer *lower;
1310         struct extent_buffer *c;
1311         struct extent_buffer *old;
1312         struct btrfs_disk_key lower_key;
1313
1314         BUG_ON(path->nodes[level]);
1315         BUG_ON(path->nodes[level-1] != root->node);
1316
1317         lower = path->nodes[level-1];
1318         if (level == 1)
1319                 btrfs_item_key(lower, &lower_key, 0);
1320         else
1321                 btrfs_node_key(lower, &lower_key, 0);
1322
1323         c = btrfs_alloc_free_block(trans, root, root->nodesize,
1324                                    root->root_key.objectid, &lower_key, 
1325                                    level, root->node->start, 0);
1326
1327         if (IS_ERR(c))
1328                 return PTR_ERR(c);
1329
1330         memset_extent_buffer(c, 0, 0, sizeof(struct btrfs_header));
1331         btrfs_set_header_nritems(c, 1);
1332         btrfs_set_header_level(c, level);
1333         btrfs_set_header_bytenr(c, c->start);
1334         btrfs_set_header_generation(c, trans->transid);
1335         btrfs_set_header_backref_rev(c, BTRFS_MIXED_BACKREF_REV);
1336         btrfs_set_header_owner(c, root->root_key.objectid);
1337
1338         write_extent_buffer(c, root->fs_info->fsid,
1339                             btrfs_header_fsid(), BTRFS_FSID_SIZE);
1340
1341         write_extent_buffer(c, root->fs_info->chunk_tree_uuid,
1342                             (unsigned long)btrfs_header_chunk_tree_uuid(c),
1343                             BTRFS_UUID_SIZE);
1344
1345         btrfs_set_node_key(c, &lower_key, 0);
1346         btrfs_set_node_blockptr(c, 0, lower->start);
1347         lower_gen = btrfs_header_generation(lower);
1348         WARN_ON(lower_gen != trans->transid);
1349
1350         btrfs_set_node_ptr_generation(c, 0, lower_gen);
1351
1352         btrfs_mark_buffer_dirty(c);
1353
1354         old = root->node;
1355         root->node = c;
1356
1357         /* the super has an extra ref to root->node */
1358         free_extent_buffer(old);
1359
1360         add_root_to_dirty_list(root);
1361         extent_buffer_get(c);
1362         path->nodes[level] = c;
1363         path->slots[level] = 0;
1364         return 0;
1365 }
1366
1367 /*
1368  * worker function to insert a single pointer in a node.
1369  * the node should have enough room for the pointer already
1370  *
1371  * slot and level indicate where you want the key to go, and
1372  * blocknr is the block the key points to.
1373  *
1374  * returns zero on success and < 0 on any error
1375  */
1376 static int insert_ptr(struct btrfs_trans_handle *trans, struct btrfs_root
1377                       *root, struct btrfs_path *path, struct btrfs_disk_key
1378                       *key, u64 bytenr, int slot, int level)
1379 {
1380         struct extent_buffer *lower;
1381         int nritems;
1382
1383         BUG_ON(!path->nodes[level]);
1384         lower = path->nodes[level];
1385         nritems = btrfs_header_nritems(lower);
1386         if (slot > nritems)
1387                 BUG();
1388         if (nritems == BTRFS_NODEPTRS_PER_BLOCK(root))
1389                 BUG();
1390         if (slot != nritems) {
1391                 memmove_extent_buffer(lower,
1392                               btrfs_node_key_ptr_offset(slot + 1),
1393                               btrfs_node_key_ptr_offset(slot),
1394                               (nritems - slot) * sizeof(struct btrfs_key_ptr));
1395         }
1396         btrfs_set_node_key(lower, key, slot);
1397         btrfs_set_node_blockptr(lower, slot, bytenr);
1398         WARN_ON(trans->transid == 0);
1399         btrfs_set_node_ptr_generation(lower, slot, trans->transid);
1400         btrfs_set_header_nritems(lower, nritems + 1);
1401         btrfs_mark_buffer_dirty(lower);
1402         return 0;
1403 }
1404
1405 /*
1406  * split the node at the specified level in path in two.
1407  * The path is corrected to point to the appropriate node after the split
1408  *
1409  * Before splitting this tries to make some room in the node by pushing
1410  * left and right, if either one works, it returns right away.
1411  *
1412  * returns 0 on success and < 0 on failure
1413  */
1414 static int split_node(struct btrfs_trans_handle *trans, struct btrfs_root
1415                       *root, struct btrfs_path *path, int level)
1416 {
1417         struct extent_buffer *c;
1418         struct extent_buffer *split;
1419         struct btrfs_disk_key disk_key;
1420         int mid;
1421         int ret;
1422         int wret;
1423         u32 c_nritems;
1424
1425         c = path->nodes[level];
1426         WARN_ON(btrfs_header_generation(c) != trans->transid);
1427         if (c == root->node) {
1428                 /* trying to split the root, lets make a new one */
1429                 ret = insert_new_root(trans, root, path, level + 1);
1430                 if (ret)
1431                         return ret;
1432         } else {
1433                 ret = push_nodes_for_insert(trans, root, path, level);
1434                 c = path->nodes[level];
1435                 if (!ret && btrfs_header_nritems(c) <
1436                     BTRFS_NODEPTRS_PER_BLOCK(root) - 3)
1437                         return 0;
1438                 if (ret < 0)
1439                         return ret;
1440         }
1441
1442         c_nritems = btrfs_header_nritems(c);
1443         mid = (c_nritems + 1) / 2;
1444         btrfs_node_key(c, &disk_key, mid);
1445
1446         split = btrfs_alloc_free_block(trans, root, root->nodesize,
1447                                         root->root_key.objectid,
1448                                         &disk_key, level, c->start, 0);
1449         if (IS_ERR(split))
1450                 return PTR_ERR(split);
1451
1452         memset_extent_buffer(split, 0, 0, sizeof(struct btrfs_header));
1453         btrfs_set_header_level(split, btrfs_header_level(c));
1454         btrfs_set_header_bytenr(split, split->start);
1455         btrfs_set_header_generation(split, trans->transid);
1456         btrfs_set_header_backref_rev(split, BTRFS_MIXED_BACKREF_REV);
1457         btrfs_set_header_owner(split, root->root_key.objectid);
1458         write_extent_buffer(split, root->fs_info->fsid,
1459                             btrfs_header_fsid(), BTRFS_FSID_SIZE);
1460         write_extent_buffer(split, root->fs_info->chunk_tree_uuid,
1461                             (unsigned long)btrfs_header_chunk_tree_uuid(split),
1462                             BTRFS_UUID_SIZE);
1463
1464
1465         copy_extent_buffer(split, c,
1466                            btrfs_node_key_ptr_offset(0),
1467                            btrfs_node_key_ptr_offset(mid),
1468                            (c_nritems - mid) * sizeof(struct btrfs_key_ptr));
1469         btrfs_set_header_nritems(split, c_nritems - mid);
1470         btrfs_set_header_nritems(c, mid);
1471         ret = 0;
1472
1473         btrfs_mark_buffer_dirty(c);
1474         btrfs_mark_buffer_dirty(split);
1475
1476         wret = insert_ptr(trans, root, path, &disk_key, split->start,
1477                           path->slots[level + 1] + 1,
1478                           level + 1);
1479         if (wret)
1480                 ret = wret;
1481
1482         if (path->slots[level] >= mid) {
1483                 path->slots[level] -= mid;
1484                 free_extent_buffer(c);
1485                 path->nodes[level] = split;
1486                 path->slots[level + 1] += 1;
1487         } else {
1488                 free_extent_buffer(split);
1489         }
1490         return ret;
1491 }
1492
1493 /*
1494  * how many bytes are required to store the items in a leaf.  start
1495  * and nr indicate which items in the leaf to check.  This totals up the
1496  * space used both by the item structs and the item data
1497  */
1498 static int leaf_space_used(struct extent_buffer *l, int start, int nr)
1499 {
1500         int data_len;
1501         int nritems = btrfs_header_nritems(l);
1502         int end = min(nritems, start + nr) - 1;
1503
1504         if (!nr)
1505                 return 0;
1506         data_len = btrfs_item_end_nr(l, start);
1507         data_len = data_len - btrfs_item_offset_nr(l, end);
1508         data_len += sizeof(struct btrfs_item) * nr;
1509         WARN_ON(data_len < 0);
1510         return data_len;
1511 }
1512
1513 /*
1514  * The space between the end of the leaf items and
1515  * the start of the leaf data.  IOW, how much room
1516  * the leaf has left for both items and data
1517  */
1518 int btrfs_leaf_free_space(struct btrfs_root *root, struct extent_buffer *leaf)
1519 {
1520         int nritems = btrfs_header_nritems(leaf);
1521         int ret;
1522         ret = BTRFS_LEAF_DATA_SIZE(root) - leaf_space_used(leaf, 0, nritems);
1523         if (ret < 0) {
1524                 printk("leaf free space ret %d, leaf data size %lu, used %d nritems %d\n",
1525                        ret, (unsigned long) BTRFS_LEAF_DATA_SIZE(root),
1526                        leaf_space_used(leaf, 0, nritems), nritems);
1527         }
1528         return ret;
1529 }
1530
1531 /*
1532  * push some data in the path leaf to the right, trying to free up at
1533  * least data_size bytes.  returns zero if the push worked, nonzero otherwise
1534  *
1535  * returns 1 if the push failed because the other node didn't have enough
1536  * room, 0 if everything worked out and < 0 if there were major errors.
1537  */
1538 static int push_leaf_right(struct btrfs_trans_handle *trans, struct btrfs_root
1539                            *root, struct btrfs_path *path, int data_size,
1540                            int empty)
1541 {
1542         struct extent_buffer *left = path->nodes[0];
1543         struct extent_buffer *right;
1544         struct extent_buffer *upper;
1545         struct btrfs_disk_key disk_key;
1546         int slot;
1547         u32 i;
1548         int free_space;
1549         int push_space = 0;
1550         int push_items = 0;
1551         struct btrfs_item *item;
1552         u32 left_nritems;
1553         u32 nr;
1554         u32 right_nritems;
1555         u32 data_end;
1556         u32 this_item_size;
1557         int ret;
1558
1559         slot = path->slots[1];
1560         if (!path->nodes[1]) {
1561                 return 1;
1562         }
1563         upper = path->nodes[1];
1564         if (slot >= btrfs_header_nritems(upper) - 1)
1565                 return 1;
1566
1567         right = read_node_slot(root, upper, slot + 1);
1568         free_space = btrfs_leaf_free_space(root, right);
1569         if (free_space < data_size) {
1570                 free_extent_buffer(right);
1571                 return 1;
1572         }
1573
1574         /* cow and double check */
1575         ret = btrfs_cow_block(trans, root, right, upper,
1576                               slot + 1, &right);
1577         if (ret) {
1578                 free_extent_buffer(right);
1579                 return 1;
1580         }
1581         free_space = btrfs_leaf_free_space(root, right);
1582         if (free_space < data_size) {
1583                 free_extent_buffer(right);
1584                 return 1;
1585         }
1586
1587         left_nritems = btrfs_header_nritems(left);
1588         if (left_nritems == 0) {
1589                 free_extent_buffer(right);
1590                 return 1;
1591         }
1592
1593         if (empty)
1594                 nr = 0;
1595         else
1596                 nr = 1;
1597
1598         i = left_nritems - 1;
1599         while (i >= nr) {
1600                 item = btrfs_item_nr(i);
1601
1602                 if (path->slots[0] == i)
1603                         push_space += data_size + sizeof(*item);
1604
1605                 this_item_size = btrfs_item_size(left, item);
1606                 if (this_item_size + sizeof(*item) + push_space > free_space)
1607                         break;
1608                 push_items++;
1609                 push_space += this_item_size + sizeof(*item);
1610                 if (i == 0)
1611                         break;
1612                 i--;
1613         }
1614
1615         if (push_items == 0) {
1616                 free_extent_buffer(right);
1617                 return 1;
1618         }
1619
1620         if (!empty && push_items == left_nritems)
1621                 WARN_ON(1);
1622
1623         /* push left to right */
1624         right_nritems = btrfs_header_nritems(right);
1625
1626         push_space = btrfs_item_end_nr(left, left_nritems - push_items);
1627         push_space -= leaf_data_end(root, left);
1628
1629         /* make room in the right data area */
1630         data_end = leaf_data_end(root, right);
1631         memmove_extent_buffer(right,
1632                               btrfs_leaf_data(right) + data_end - push_space,
1633                               btrfs_leaf_data(right) + data_end,
1634                               BTRFS_LEAF_DATA_SIZE(root) - data_end);
1635
1636         /* copy from the left data area */
1637         copy_extent_buffer(right, left, btrfs_leaf_data(right) +
1638                      BTRFS_LEAF_DATA_SIZE(root) - push_space,
1639                      btrfs_leaf_data(left) + leaf_data_end(root, left),
1640                      push_space);
1641
1642         memmove_extent_buffer(right, btrfs_item_nr_offset(push_items),
1643                               btrfs_item_nr_offset(0),
1644                               right_nritems * sizeof(struct btrfs_item));
1645
1646         /* copy the items from left to right */
1647         copy_extent_buffer(right, left, btrfs_item_nr_offset(0),
1648                    btrfs_item_nr_offset(left_nritems - push_items),
1649                    push_items * sizeof(struct btrfs_item));
1650
1651         /* update the item pointers */
1652         right_nritems += push_items;
1653         btrfs_set_header_nritems(right, right_nritems);
1654         push_space = BTRFS_LEAF_DATA_SIZE(root);
1655         for (i = 0; i < right_nritems; i++) {
1656                 item = btrfs_item_nr(i);
1657                 push_space -= btrfs_item_size(right, item);
1658                 btrfs_set_item_offset(right, item, push_space);
1659         }
1660
1661         left_nritems -= push_items;
1662         btrfs_set_header_nritems(left, left_nritems);
1663
1664         if (left_nritems)
1665                 btrfs_mark_buffer_dirty(left);
1666         btrfs_mark_buffer_dirty(right);
1667
1668         btrfs_item_key(right, &disk_key, 0);
1669         btrfs_set_node_key(upper, &disk_key, slot + 1);
1670         btrfs_mark_buffer_dirty(upper);
1671
1672         /* then fixup the leaf pointer in the path */
1673         if (path->slots[0] >= left_nritems) {
1674                 path->slots[0] -= left_nritems;
1675                 free_extent_buffer(path->nodes[0]);
1676                 path->nodes[0] = right;
1677                 path->slots[1] += 1;
1678         } else {
1679                 free_extent_buffer(right);
1680         }
1681         return 0;
1682 }
1683 /*
1684  * push some data in the path leaf to the left, trying to free up at
1685  * least data_size bytes.  returns zero if the push worked, nonzero otherwise
1686  */
1687 static int push_leaf_left(struct btrfs_trans_handle *trans, struct btrfs_root
1688                           *root, struct btrfs_path *path, int data_size,
1689                           int empty)
1690 {
1691         struct btrfs_disk_key disk_key;
1692         struct extent_buffer *right = path->nodes[0];
1693         struct extent_buffer *left;
1694         int slot;
1695         int i;
1696         int free_space;
1697         int push_space = 0;
1698         int push_items = 0;
1699         struct btrfs_item *item;
1700         u32 old_left_nritems;
1701         u32 right_nritems;
1702         u32 nr;
1703         int ret = 0;
1704         int wret;
1705         u32 this_item_size;
1706         u32 old_left_item_size;
1707
1708         slot = path->slots[1];
1709         if (slot == 0)
1710                 return 1;
1711         if (!path->nodes[1])
1712                 return 1;
1713
1714         right_nritems = btrfs_header_nritems(right);
1715         if (right_nritems == 0) {
1716                 return 1;
1717         }
1718
1719         left = read_node_slot(root, path->nodes[1], slot - 1);
1720         free_space = btrfs_leaf_free_space(root, left);
1721         if (free_space < data_size) {
1722                 free_extent_buffer(left);
1723                 return 1;
1724         }
1725
1726         /* cow and double check */
1727         ret = btrfs_cow_block(trans, root, left,
1728                               path->nodes[1], slot - 1, &left);
1729         if (ret) {
1730                 /* we hit -ENOSPC, but it isn't fatal here */
1731                 free_extent_buffer(left);
1732                 return 1;
1733         }
1734
1735         free_space = btrfs_leaf_free_space(root, left);
1736         if (free_space < data_size) {
1737                 free_extent_buffer(left);
1738                 return 1;
1739         }
1740
1741         if (empty)
1742                 nr = right_nritems;
1743         else
1744                 nr = right_nritems - 1;
1745
1746         for (i = 0; i < nr; i++) {
1747                 item = btrfs_item_nr(i);
1748
1749                 if (path->slots[0] == i)
1750                         push_space += data_size + sizeof(*item);
1751
1752                 this_item_size = btrfs_item_size(right, item);
1753                 if (this_item_size + sizeof(*item) + push_space > free_space)
1754                         break;
1755
1756                 push_items++;
1757                 push_space += this_item_size + sizeof(*item);
1758         }
1759
1760         if (push_items == 0) {
1761                 free_extent_buffer(left);
1762                 return 1;
1763         }
1764         if (!empty && push_items == btrfs_header_nritems(right))
1765                 WARN_ON(1);
1766
1767         /* push data from right to left */
1768         copy_extent_buffer(left, right,
1769                            btrfs_item_nr_offset(btrfs_header_nritems(left)),
1770                            btrfs_item_nr_offset(0),
1771                            push_items * sizeof(struct btrfs_item));
1772
1773         push_space = BTRFS_LEAF_DATA_SIZE(root) -
1774                      btrfs_item_offset_nr(right, push_items -1);
1775
1776         copy_extent_buffer(left, right, btrfs_leaf_data(left) +
1777                      leaf_data_end(root, left) - push_space,
1778                      btrfs_leaf_data(right) +
1779                      btrfs_item_offset_nr(right, push_items - 1),
1780                      push_space);
1781         old_left_nritems = btrfs_header_nritems(left);
1782         BUG_ON(old_left_nritems == 0);
1783
1784         old_left_item_size = btrfs_item_offset_nr(left, old_left_nritems - 1);
1785         for (i = old_left_nritems; i < old_left_nritems + push_items; i++) {
1786                 u32 ioff;
1787
1788                 item = btrfs_item_nr(i);
1789                 ioff = btrfs_item_offset(left, item);
1790                 btrfs_set_item_offset(left, item,
1791                       ioff - (BTRFS_LEAF_DATA_SIZE(root) - old_left_item_size));
1792         }
1793         btrfs_set_header_nritems(left, old_left_nritems + push_items);
1794
1795         /* fixup right node */
1796         if (push_items > right_nritems) {
1797                 printk("push items %d nr %u\n", push_items, right_nritems);
1798                 WARN_ON(1);
1799         }
1800
1801         if (push_items < right_nritems) {
1802                 push_space = btrfs_item_offset_nr(right, push_items - 1) -
1803                                                   leaf_data_end(root, right);
1804                 memmove_extent_buffer(right, btrfs_leaf_data(right) +
1805                                       BTRFS_LEAF_DATA_SIZE(root) - push_space,
1806                                       btrfs_leaf_data(right) +
1807                                       leaf_data_end(root, right), push_space);
1808
1809                 memmove_extent_buffer(right, btrfs_item_nr_offset(0),
1810                               btrfs_item_nr_offset(push_items),
1811                              (btrfs_header_nritems(right) - push_items) *
1812                              sizeof(struct btrfs_item));
1813         }
1814         right_nritems -= push_items;
1815         btrfs_set_header_nritems(right, right_nritems);
1816         push_space = BTRFS_LEAF_DATA_SIZE(root);
1817         for (i = 0; i < right_nritems; i++) {
1818                 item = btrfs_item_nr(i);
1819                 push_space = push_space - btrfs_item_size(right, item);
1820                 btrfs_set_item_offset(right, item, push_space);
1821         }
1822
1823         btrfs_mark_buffer_dirty(left);
1824         if (right_nritems)
1825                 btrfs_mark_buffer_dirty(right);
1826
1827         btrfs_item_key(right, &disk_key, 0);
1828         wret = fixup_low_keys(trans, root, path, &disk_key, 1);
1829         if (wret)
1830                 ret = wret;
1831
1832         /* then fixup the leaf pointer in the path */
1833         if (path->slots[0] < push_items) {
1834                 path->slots[0] += old_left_nritems;
1835                 free_extent_buffer(path->nodes[0]);
1836                 path->nodes[0] = left;
1837                 path->slots[1] -= 1;
1838         } else {
1839                 free_extent_buffer(left);
1840                 path->slots[0] -= push_items;
1841         }
1842         BUG_ON(path->slots[0] < 0);
1843         return ret;
1844 }
1845
1846 /*
1847  * split the path's leaf in two, making sure there is at least data_size
1848  * available for the resulting leaf level of the path.
1849  *
1850  * returns 0 if all went well and < 0 on failure.
1851  */
1852 static noinline int copy_for_split(struct btrfs_trans_handle *trans,
1853                                struct btrfs_root *root,
1854                                struct btrfs_path *path,
1855                                struct extent_buffer *l,
1856                                struct extent_buffer *right,
1857                                int slot, int mid, int nritems)
1858 {
1859         int data_copy_size;
1860         int rt_data_off;
1861         int i;
1862         int ret = 0;
1863         int wret;
1864         struct btrfs_disk_key disk_key;
1865
1866         nritems = nritems - mid;
1867         btrfs_set_header_nritems(right, nritems);
1868         data_copy_size = btrfs_item_end_nr(l, mid) - leaf_data_end(root, l);
1869
1870         copy_extent_buffer(right, l, btrfs_item_nr_offset(0),
1871                            btrfs_item_nr_offset(mid),
1872                            nritems * sizeof(struct btrfs_item));
1873
1874         copy_extent_buffer(right, l,
1875                      btrfs_leaf_data(right) + BTRFS_LEAF_DATA_SIZE(root) -
1876                      data_copy_size, btrfs_leaf_data(l) +
1877                      leaf_data_end(root, l), data_copy_size);
1878
1879         rt_data_off = BTRFS_LEAF_DATA_SIZE(root) -
1880                       btrfs_item_end_nr(l, mid);
1881
1882         for (i = 0; i < nritems; i++) {
1883                 struct btrfs_item *item = btrfs_item_nr(i);
1884                 u32 ioff = btrfs_item_offset(right, item);
1885                 btrfs_set_item_offset(right, item, ioff + rt_data_off);
1886         }
1887
1888         btrfs_set_header_nritems(l, mid);
1889         ret = 0;
1890         btrfs_item_key(right, &disk_key, 0);
1891         wret = insert_ptr(trans, root, path, &disk_key, right->start,
1892                           path->slots[1] + 1, 1);
1893         if (wret)
1894                 ret = wret;
1895
1896         btrfs_mark_buffer_dirty(right);
1897         btrfs_mark_buffer_dirty(l);
1898         BUG_ON(path->slots[0] != slot);
1899
1900         if (mid <= slot) {
1901                 free_extent_buffer(path->nodes[0]);
1902                 path->nodes[0] = right;
1903                 path->slots[0] -= mid;
1904                 path->slots[1] += 1;
1905         } else {
1906                 free_extent_buffer(right);
1907         }
1908
1909         BUG_ON(path->slots[0] < 0);
1910
1911         return ret;
1912 }
1913
1914 /*
1915  * split the path's leaf in two, making sure there is at least data_size
1916  * available for the resulting leaf level of the path.
1917  *
1918  * returns 0 if all went well and < 0 on failure.
1919  */
1920 static noinline int split_leaf(struct btrfs_trans_handle *trans,
1921                                struct btrfs_root *root,
1922                                struct btrfs_key *ins_key,
1923                                struct btrfs_path *path, int data_size,
1924                                int extend)
1925 {
1926         struct btrfs_disk_key disk_key;
1927         struct extent_buffer *l;
1928         u32 nritems;
1929         int mid;
1930         int slot;
1931         struct extent_buffer *right;
1932         int ret = 0;
1933         int wret;
1934         int split;
1935         int num_doubles = 0;
1936
1937         /* first try to make some room by pushing left and right */
1938         if (data_size && ins_key->type != BTRFS_DIR_ITEM_KEY) {
1939                 wret = push_leaf_right(trans, root, path, data_size, 0);
1940                 if (wret < 0)
1941                         return wret;
1942                 if (wret) {
1943                         wret = push_leaf_left(trans, root, path, data_size, 0);
1944                         if (wret < 0)
1945                                 return wret;
1946                 }
1947                 l = path->nodes[0];
1948
1949                 /* did the pushes work? */
1950                 if (btrfs_leaf_free_space(root, l) >= data_size)
1951                         return 0;
1952         }
1953
1954         if (!path->nodes[1]) {
1955                 ret = insert_new_root(trans, root, path, 1);
1956                 if (ret)
1957                         return ret;
1958         }
1959 again:
1960         split = 1;
1961         l = path->nodes[0];
1962         slot = path->slots[0];
1963         nritems = btrfs_header_nritems(l);
1964         mid = (nritems + 1) / 2;
1965
1966         if (mid <= slot) {
1967                 if (nritems == 1 ||
1968                     leaf_space_used(l, mid, nritems - mid) + data_size >
1969                         BTRFS_LEAF_DATA_SIZE(root)) {
1970                         if (slot >= nritems) {
1971                                 split = 0;
1972                         } else {
1973                                 mid = slot;
1974                                 if (mid != nritems &&
1975                                     leaf_space_used(l, mid, nritems - mid) +
1976                                     data_size > BTRFS_LEAF_DATA_SIZE(root)) {
1977                                         split = 2;
1978                                 }
1979                         }
1980                 }
1981         } else {
1982                 if (leaf_space_used(l, 0, mid) + data_size >
1983                         BTRFS_LEAF_DATA_SIZE(root)) {
1984                         if (!extend && data_size && slot == 0) {
1985                                 split = 0;
1986                         } else if ((extend || !data_size) && slot == 0) {
1987                                 mid = 1;
1988                         } else {
1989                                 mid = slot;
1990                                 if (mid != nritems &&
1991                                     leaf_space_used(l, mid, nritems - mid) +
1992                                     data_size > BTRFS_LEAF_DATA_SIZE(root)) {
1993                                         split = 2 ;
1994                                 }
1995                         }
1996                 }
1997         }
1998         
1999         if (split == 0)
2000                 btrfs_cpu_key_to_disk(&disk_key, ins_key);
2001         else
2002                 btrfs_item_key(l, &disk_key, mid);
2003
2004         right = btrfs_alloc_free_block(trans, root, root->leafsize,
2005                                         root->root_key.objectid,
2006                                         &disk_key, 0, l->start, 0);
2007         if (IS_ERR(right)) {
2008                 BUG_ON(1);
2009                 return PTR_ERR(right);
2010         }
2011
2012         memset_extent_buffer(right, 0, 0, sizeof(struct btrfs_header));
2013         btrfs_set_header_bytenr(right, right->start);
2014         btrfs_set_header_generation(right, trans->transid);
2015         btrfs_set_header_backref_rev(right, BTRFS_MIXED_BACKREF_REV);
2016         btrfs_set_header_owner(right, root->root_key.objectid);
2017         btrfs_set_header_level(right, 0);
2018         write_extent_buffer(right, root->fs_info->fsid,
2019                             btrfs_header_fsid(), BTRFS_FSID_SIZE);
2020
2021         write_extent_buffer(right, root->fs_info->chunk_tree_uuid,
2022                             (unsigned long)btrfs_header_chunk_tree_uuid(right),
2023                             BTRFS_UUID_SIZE);
2024
2025         if (split == 0) {
2026                 if (mid <= slot) {
2027                         btrfs_set_header_nritems(right, 0);
2028                         wret = insert_ptr(trans, root, path,
2029                                           &disk_key, right->start,
2030                                           path->slots[1] + 1, 1);
2031                         if (wret)
2032                                 ret = wret;
2033
2034                         free_extent_buffer(path->nodes[0]);
2035                         path->nodes[0] = right;
2036                         path->slots[0] = 0;
2037                         path->slots[1] += 1;
2038                 } else {
2039                         btrfs_set_header_nritems(right, 0);
2040                         wret = insert_ptr(trans, root, path,
2041                                           &disk_key,
2042                                           right->start,
2043                                           path->slots[1], 1);
2044                         if (wret)
2045                                 ret = wret;
2046                         free_extent_buffer(path->nodes[0]);
2047                         path->nodes[0] = right;
2048                         path->slots[0] = 0;
2049                         if (path->slots[1] == 0) {
2050                                 wret = fixup_low_keys(trans, root,
2051                                                 path, &disk_key, 1);
2052                                 if (wret)
2053                                         ret = wret;
2054                         }
2055                 }
2056                 btrfs_mark_buffer_dirty(right);
2057                 return ret;
2058         }
2059
2060         ret = copy_for_split(trans, root, path, l, right, slot, mid, nritems);
2061         BUG_ON(ret);
2062
2063         if (split == 2) {
2064                 BUG_ON(num_doubles != 0);
2065                 num_doubles++;
2066                 goto again;
2067         }
2068
2069         return ret;
2070 }
2071
2072 /*
2073  * This function splits a single item into two items,
2074  * giving 'new_key' to the new item and splitting the
2075  * old one at split_offset (from the start of the item).
2076  *
2077  * The path may be released by this operation.  After
2078  * the split, the path is pointing to the old item.  The
2079  * new item is going to be in the same node as the old one.
2080  *
2081  * Note, the item being split must be smaller enough to live alone on
2082  * a tree block with room for one extra struct btrfs_item
2083  *
2084  * This allows us to split the item in place, keeping a lock on the
2085  * leaf the entire time.
2086  */
2087 int btrfs_split_item(struct btrfs_trans_handle *trans,
2088                      struct btrfs_root *root,
2089                      struct btrfs_path *path,
2090                      struct btrfs_key *new_key,
2091                      unsigned long split_offset)
2092 {
2093         u32 item_size;
2094         struct extent_buffer *leaf;
2095         struct btrfs_key orig_key;
2096         struct btrfs_item *item;
2097         struct btrfs_item *new_item;
2098         int ret = 0;
2099         int slot;
2100         u32 nritems;
2101         u32 orig_offset;
2102         struct btrfs_disk_key disk_key;
2103         char *buf;
2104
2105         leaf = path->nodes[0];
2106         btrfs_item_key_to_cpu(leaf, &orig_key, path->slots[0]);
2107         if (btrfs_leaf_free_space(root, leaf) >= sizeof(struct btrfs_item))
2108                 goto split;
2109
2110         item_size = btrfs_item_size_nr(leaf, path->slots[0]);
2111         btrfs_release_path(path);
2112
2113         path->search_for_split = 1;
2114
2115         ret = btrfs_search_slot(trans, root, &orig_key, path, 0, 1);
2116         path->search_for_split = 0;
2117
2118         /* if our item isn't there or got smaller, return now */
2119         if (ret != 0 || item_size != btrfs_item_size_nr(path->nodes[0],
2120                                                         path->slots[0])) {
2121                 return -EAGAIN;
2122         }
2123
2124         ret = split_leaf(trans, root, &orig_key, path, 0, 0);
2125         BUG_ON(ret);
2126
2127         BUG_ON(btrfs_leaf_free_space(root, leaf) < sizeof(struct btrfs_item));
2128         leaf = path->nodes[0];
2129
2130 split:
2131         item = btrfs_item_nr(path->slots[0]);
2132         orig_offset = btrfs_item_offset(leaf, item);
2133         item_size = btrfs_item_size(leaf, item);
2134
2135
2136         buf = kmalloc(item_size, GFP_NOFS);
2137         read_extent_buffer(leaf, buf, btrfs_item_ptr_offset(leaf,
2138                             path->slots[0]), item_size);
2139         slot = path->slots[0] + 1;
2140         leaf = path->nodes[0];
2141
2142         nritems = btrfs_header_nritems(leaf);
2143
2144         if (slot != nritems) {
2145                 /* shift the items */
2146                 memmove_extent_buffer(leaf, btrfs_item_nr_offset(slot + 1),
2147                               btrfs_item_nr_offset(slot),
2148                               (nritems - slot) * sizeof(struct btrfs_item));
2149
2150         }
2151
2152         btrfs_cpu_key_to_disk(&disk_key, new_key);
2153         btrfs_set_item_key(leaf, &disk_key, slot);
2154
2155         new_item = btrfs_item_nr(slot);
2156
2157         btrfs_set_item_offset(leaf, new_item, orig_offset);
2158         btrfs_set_item_size(leaf, new_item, item_size - split_offset);
2159
2160         btrfs_set_item_offset(leaf, item,
2161                               orig_offset + item_size - split_offset);
2162         btrfs_set_item_size(leaf, item, split_offset);
2163
2164         btrfs_set_header_nritems(leaf, nritems + 1);
2165
2166         /* write the data for the start of the original item */
2167         write_extent_buffer(leaf, buf,
2168                             btrfs_item_ptr_offset(leaf, path->slots[0]),
2169                             split_offset);
2170
2171         /* write the data for the new item */
2172         write_extent_buffer(leaf, buf + split_offset,
2173                             btrfs_item_ptr_offset(leaf, slot),
2174                             item_size - split_offset);
2175         btrfs_mark_buffer_dirty(leaf);
2176
2177         ret = 0;
2178         if (btrfs_leaf_free_space(root, leaf) < 0) {
2179                 btrfs_print_leaf(root, leaf);
2180                 BUG();
2181         }
2182         kfree(buf);
2183         return ret;
2184 }
2185
2186 int btrfs_truncate_item(struct btrfs_trans_handle *trans,
2187                         struct btrfs_root *root,
2188                         struct btrfs_path *path,
2189                         u32 new_size, int from_end)
2190 {
2191         int ret = 0;
2192         int slot;
2193         struct extent_buffer *leaf;
2194         struct btrfs_item *item;
2195         u32 nritems;
2196         unsigned int data_end;
2197         unsigned int old_data_start;
2198         unsigned int old_size;
2199         unsigned int size_diff;
2200         int i;
2201
2202         leaf = path->nodes[0];
2203         slot = path->slots[0];
2204
2205         old_size = btrfs_item_size_nr(leaf, slot);
2206         if (old_size == new_size)
2207                 return 0;
2208
2209         nritems = btrfs_header_nritems(leaf);
2210         data_end = leaf_data_end(root, leaf);
2211
2212         old_data_start = btrfs_item_offset_nr(leaf, slot);
2213
2214         size_diff = old_size - new_size;
2215
2216         BUG_ON(slot < 0);
2217         BUG_ON(slot >= nritems);
2218
2219         /*
2220          * item0..itemN ... dataN.offset..dataN.size .. data0.size
2221          */
2222         /* first correct the data pointers */
2223         for (i = slot; i < nritems; i++) {
2224                 u32 ioff;
2225                 item = btrfs_item_nr(i);
2226                 ioff = btrfs_item_offset(leaf, item);
2227                 btrfs_set_item_offset(leaf, item, ioff + size_diff);
2228         }
2229
2230         /* shift the data */
2231         if (from_end) {
2232                 memmove_extent_buffer(leaf, btrfs_leaf_data(leaf) +
2233                               data_end + size_diff, btrfs_leaf_data(leaf) +
2234                               data_end, old_data_start + new_size - data_end);
2235         } else {
2236                 struct btrfs_disk_key disk_key;
2237                 u64 offset;
2238
2239                 btrfs_item_key(leaf, &disk_key, slot);
2240
2241                 if (btrfs_disk_key_type(&disk_key) == BTRFS_EXTENT_DATA_KEY) {
2242                         unsigned long ptr;
2243                         struct btrfs_file_extent_item *fi;
2244
2245                         fi = btrfs_item_ptr(leaf, slot,
2246                                             struct btrfs_file_extent_item);
2247                         fi = (struct btrfs_file_extent_item *)(
2248                              (unsigned long)fi - size_diff);
2249
2250                         if (btrfs_file_extent_type(leaf, fi) ==
2251                             BTRFS_FILE_EXTENT_INLINE) {
2252                                 ptr = btrfs_item_ptr_offset(leaf, slot);
2253                                 memmove_extent_buffer(leaf, ptr,
2254                                         (unsigned long)fi,
2255                                         offsetof(struct btrfs_file_extent_item,
2256                                                  disk_bytenr));
2257                         }
2258                 }
2259
2260                 memmove_extent_buffer(leaf, btrfs_leaf_data(leaf) +
2261                               data_end + size_diff, btrfs_leaf_data(leaf) +
2262                               data_end, old_data_start - data_end);
2263
2264                 offset = btrfs_disk_key_offset(&disk_key);
2265                 btrfs_set_disk_key_offset(&disk_key, offset + size_diff);
2266                 btrfs_set_item_key(leaf, &disk_key, slot);
2267                 if (slot == 0)
2268                         fixup_low_keys(trans, root, path, &disk_key, 1);
2269         }
2270
2271         item = btrfs_item_nr(slot);
2272         btrfs_set_item_size(leaf, item, new_size);
2273         btrfs_mark_buffer_dirty(leaf);
2274
2275         ret = 0;
2276         if (btrfs_leaf_free_space(root, leaf) < 0) {
2277                 btrfs_print_leaf(root, leaf);
2278                 BUG();
2279         }
2280         return ret;
2281 }
2282
2283 int btrfs_extend_item(struct btrfs_trans_handle *trans,
2284                       struct btrfs_root *root, struct btrfs_path *path,
2285                       u32 data_size)
2286 {
2287         int ret = 0;
2288         int slot;
2289         struct extent_buffer *leaf;
2290         struct btrfs_item *item;
2291         u32 nritems;
2292         unsigned int data_end;
2293         unsigned int old_data;
2294         unsigned int old_size;
2295         int i;
2296
2297         leaf = path->nodes[0];
2298
2299         nritems = btrfs_header_nritems(leaf);
2300         data_end = leaf_data_end(root, leaf);
2301
2302         if (btrfs_leaf_free_space(root, leaf) < data_size) {
2303                 btrfs_print_leaf(root, leaf);
2304                 BUG();
2305         }
2306         slot = path->slots[0];
2307         old_data = btrfs_item_end_nr(leaf, slot);
2308
2309         BUG_ON(slot < 0);
2310         if (slot >= nritems) {
2311                 btrfs_print_leaf(root, leaf);
2312                 printk("slot %d too large, nritems %d\n", slot, nritems);
2313                 BUG_ON(1);
2314         }
2315
2316         /*
2317          * item0..itemN ... dataN.offset..dataN.size .. data0.size
2318          */
2319         /* first correct the data pointers */
2320         for (i = slot; i < nritems; i++) {
2321                 u32 ioff;
2322                 item = btrfs_item_nr(i);
2323                 ioff = btrfs_item_offset(leaf, item);
2324                 btrfs_set_item_offset(leaf, item, ioff - data_size);
2325         }
2326
2327         /* shift the data */
2328         memmove_extent_buffer(leaf, btrfs_leaf_data(leaf) +
2329                       data_end - data_size, btrfs_leaf_data(leaf) +
2330                       data_end, old_data - data_end);
2331
2332         data_end = old_data;
2333         old_size = btrfs_item_size_nr(leaf, slot);
2334         item = btrfs_item_nr(slot);
2335         btrfs_set_item_size(leaf, item, old_size + data_size);
2336         btrfs_mark_buffer_dirty(leaf);
2337
2338         ret = 0;
2339         if (btrfs_leaf_free_space(root, leaf) < 0) {
2340                 btrfs_print_leaf(root, leaf);
2341                 BUG();
2342         }
2343         return ret;
2344 }
2345
2346 /*
2347  * Given a key and some data, insert an item into the tree.
2348  * This does all the path init required, making room in the tree if needed.
2349  */
2350 int btrfs_insert_empty_items(struct btrfs_trans_handle *trans,
2351                             struct btrfs_root *root,
2352                             struct btrfs_path *path,
2353                             struct btrfs_key *cpu_key, u32 *data_size,
2354                             int nr)
2355 {
2356         struct extent_buffer *leaf;
2357         struct btrfs_item *item;
2358         int ret = 0;
2359         int slot;
2360         int i;
2361         u32 nritems;
2362         u32 total_size = 0;
2363         u32 total_data = 0;
2364         unsigned int data_end;
2365         struct btrfs_disk_key disk_key;
2366
2367         for (i = 0; i < nr; i++) {
2368                 total_data += data_size[i];
2369         }
2370
2371         /* create a root if there isn't one */
2372         if (!root->node)
2373                 BUG();
2374
2375         total_size = total_data + nr * sizeof(struct btrfs_item);
2376         ret = btrfs_search_slot(trans, root, cpu_key, path, total_size, 1);
2377         if (ret == 0) {
2378                 return -EEXIST;
2379         }
2380         if (ret < 0)
2381                 goto out;
2382
2383         leaf = path->nodes[0];
2384
2385         nritems = btrfs_header_nritems(leaf);
2386         data_end = leaf_data_end(root, leaf);
2387
2388         if (btrfs_leaf_free_space(root, leaf) < total_size) {
2389                 btrfs_print_leaf(root, leaf);
2390                 printk("not enough freespace need %u have %d\n",
2391                        total_size, btrfs_leaf_free_space(root, leaf));
2392                 BUG();
2393         }
2394
2395         slot = path->slots[0];
2396         BUG_ON(slot < 0);
2397
2398         if (slot != nritems) {
2399                 unsigned int old_data = btrfs_item_end_nr(leaf, slot);
2400
2401                 if (old_data < data_end) {
2402                         btrfs_print_leaf(root, leaf);
2403                         printk("slot %d old_data %d data_end %d\n",
2404                                slot, old_data, data_end);
2405                         BUG_ON(1);
2406                 }
2407                 /*
2408                  * item0..itemN ... dataN.offset..dataN.size .. data0.size
2409                  */
2410                 /* first correct the data pointers */
2411                 for (i = slot; i < nritems; i++) {
2412                         u32 ioff;
2413
2414                         item = btrfs_item_nr(i);
2415                         ioff = btrfs_item_offset(leaf, item);
2416                         btrfs_set_item_offset(leaf, item, ioff - total_data);
2417                 }
2418
2419                 /* shift the items */
2420                 memmove_extent_buffer(leaf, btrfs_item_nr_offset(slot + nr),
2421                               btrfs_item_nr_offset(slot),
2422                               (nritems - slot) * sizeof(struct btrfs_item));
2423
2424                 /* shift the data */
2425                 memmove_extent_buffer(leaf, btrfs_leaf_data(leaf) +
2426                               data_end - total_data, btrfs_leaf_data(leaf) +
2427                               data_end, old_data - data_end);
2428                 data_end = old_data;
2429         }
2430
2431         /* setup the item for the new data */
2432         for (i = 0; i < nr; i++) {
2433                 btrfs_cpu_key_to_disk(&disk_key, cpu_key + i);
2434                 btrfs_set_item_key(leaf, &disk_key, slot + i);
2435                 item = btrfs_item_nr(slot + i);
2436                 btrfs_set_item_offset(leaf, item, data_end - data_size[i]);
2437                 data_end -= data_size[i];
2438                 btrfs_set_item_size(leaf, item, data_size[i]);
2439         }
2440         btrfs_set_header_nritems(leaf, nritems + nr);
2441         btrfs_mark_buffer_dirty(leaf);
2442
2443         ret = 0;
2444         if (slot == 0) {
2445                 btrfs_cpu_key_to_disk(&disk_key, cpu_key);
2446                 ret = fixup_low_keys(trans, root, path, &disk_key, 1);
2447         }
2448
2449         if (btrfs_leaf_free_space(root, leaf) < 0) {
2450                 btrfs_print_leaf(root, leaf);
2451                 BUG();
2452         }
2453
2454 out:
2455         return ret;
2456 }
2457
2458 /*
2459  * Given a key and some data, insert an item into the tree.
2460  * This does all the path init required, making room in the tree if needed.
2461  */
2462 int btrfs_insert_item(struct btrfs_trans_handle *trans, struct btrfs_root
2463                       *root, struct btrfs_key *cpu_key, void *data, u32
2464                       data_size)
2465 {
2466         int ret = 0;
2467         struct btrfs_path *path;
2468         struct extent_buffer *leaf;
2469         unsigned long ptr;
2470
2471         path = btrfs_alloc_path();
2472         BUG_ON(!path);
2473         ret = btrfs_insert_empty_item(trans, root, path, cpu_key, data_size);
2474         if (!ret) {
2475                 leaf = path->nodes[0];
2476                 ptr = btrfs_item_ptr_offset(leaf, path->slots[0]);
2477                 write_extent_buffer(leaf, data, ptr, data_size);
2478                 btrfs_mark_buffer_dirty(leaf);
2479         }
2480         btrfs_free_path(path);
2481         return ret;
2482 }
2483
2484 /*
2485  * delete the pointer from a given node.
2486  *
2487  * If the delete empties a node, the node is removed from the tree,
2488  * continuing all the way the root if required.  The root is converted into
2489  * a leaf if all the nodes are emptied.
2490  */
2491 int btrfs_del_ptr(struct btrfs_trans_handle *trans, struct btrfs_root *root,
2492                    struct btrfs_path *path, int level, int slot)
2493 {
2494         struct extent_buffer *parent = path->nodes[level];
2495         u32 nritems;
2496         int ret = 0;
2497         int wret;
2498
2499         nritems = btrfs_header_nritems(parent);
2500         if (slot != nritems -1) {
2501                 memmove_extent_buffer(parent,
2502                               btrfs_node_key_ptr_offset(slot),
2503                               btrfs_node_key_ptr_offset(slot + 1),
2504                               sizeof(struct btrfs_key_ptr) *
2505                               (nritems - slot - 1));
2506         }
2507         nritems--;
2508         btrfs_set_header_nritems(parent, nritems);
2509         if (nritems == 0 && parent == root->node) {
2510                 BUG_ON(btrfs_header_level(root->node) != 1);
2511                 /* just turn the root into a leaf and break */
2512                 btrfs_set_header_level(root->node, 0);
2513         } else if (slot == 0) {
2514                 struct btrfs_disk_key disk_key;
2515
2516                 btrfs_node_key(parent, &disk_key, 0);
2517                 wret = fixup_low_keys(trans, root, path, &disk_key, level + 1);
2518                 if (wret)
2519                         ret = wret;
2520         }
2521         btrfs_mark_buffer_dirty(parent);
2522         return ret;
2523 }
2524
2525 /*
2526  * a helper function to delete the leaf pointed to by path->slots[1] and
2527  * path->nodes[1].
2528  *
2529  * This deletes the pointer in path->nodes[1] and frees the leaf
2530  * block extent.  zero is returned if it all worked out, < 0 otherwise.
2531  *
2532  * The path must have already been setup for deleting the leaf, including
2533  * all the proper balancing.  path->nodes[1] must be locked.
2534  */
2535 static noinline int btrfs_del_leaf(struct btrfs_trans_handle *trans,
2536                                    struct btrfs_root *root,
2537                                    struct btrfs_path *path,
2538                                    struct extent_buffer *leaf)
2539 {
2540         int ret;
2541
2542         WARN_ON(btrfs_header_generation(leaf) != trans->transid);
2543         ret = btrfs_del_ptr(trans, root, path, 1, path->slots[1]);
2544         if (ret)
2545                 return ret;
2546
2547         ret = btrfs_free_extent(trans, root, leaf->start, leaf->len,
2548                                 0, root->root_key.objectid, 0, 0);
2549         return ret;
2550 }
2551
2552 /*
2553  * delete the item at the leaf level in path.  If that empties
2554  * the leaf, remove it from the tree
2555  */
2556 int btrfs_del_items(struct btrfs_trans_handle *trans, struct btrfs_root *root,
2557                     struct btrfs_path *path, int slot, int nr)
2558 {
2559         struct extent_buffer *leaf;
2560         struct btrfs_item *item;
2561         int last_off;
2562         int dsize = 0;
2563         int ret = 0;
2564         int wret;
2565         int i;
2566         u32 nritems;
2567
2568         leaf = path->nodes[0];
2569         last_off = btrfs_item_offset_nr(leaf, slot + nr - 1);
2570
2571         for (i = 0; i < nr; i++)
2572                 dsize += btrfs_item_size_nr(leaf, slot + i);
2573
2574         nritems = btrfs_header_nritems(leaf);
2575
2576         if (slot + nr != nritems) {
2577                 int data_end = leaf_data_end(root, leaf);
2578
2579                 memmove_extent_buffer(leaf, btrfs_leaf_data(leaf) +
2580                               data_end + dsize,
2581                               btrfs_leaf_data(leaf) + data_end,
2582                               last_off - data_end);
2583
2584                 for (i = slot + nr; i < nritems; i++) {
2585                         u32 ioff;
2586
2587                         item = btrfs_item_nr(i);
2588                         ioff = btrfs_item_offset(leaf, item);
2589                         btrfs_set_item_offset(leaf, item, ioff + dsize);
2590                 }
2591
2592                 memmove_extent_buffer(leaf, btrfs_item_nr_offset(slot),
2593                               btrfs_item_nr_offset(slot + nr),
2594                               sizeof(struct btrfs_item) *
2595                               (nritems - slot - nr));
2596         }
2597         btrfs_set_header_nritems(leaf, nritems - nr);
2598         nritems -= nr;
2599
2600         /* delete the leaf if we've emptied it */
2601         if (nritems == 0) {
2602                 if (leaf == root->node) {
2603                         btrfs_set_header_level(leaf, 0);
2604                 } else {
2605                         clean_tree_block(trans, root, leaf);
2606                         wait_on_tree_block_writeback(root, leaf);
2607
2608                         wret = btrfs_del_leaf(trans, root, path, leaf);
2609                         BUG_ON(ret);
2610                         if (wret)
2611                                 ret = wret;
2612                 }
2613         } else {
2614                 int used = leaf_space_used(leaf, 0, nritems);
2615                 if (slot == 0) {
2616                         struct btrfs_disk_key disk_key;
2617
2618                         btrfs_item_key(leaf, &disk_key, 0);
2619                         wret = fixup_low_keys(trans, root, path,
2620                                               &disk_key, 1);
2621                         if (wret)
2622                                 ret = wret;
2623                 }
2624
2625                 /* delete the leaf if it is mostly empty */
2626                 if (used < BTRFS_LEAF_DATA_SIZE(root) / 4) {
2627                         /* push_leaf_left fixes the path.
2628                          * make sure the path still points to our leaf
2629                          * for possible call to del_ptr below
2630                          */
2631                         slot = path->slots[1];
2632                         extent_buffer_get(leaf);
2633
2634                         wret = push_leaf_left(trans, root, path, 1, 1);
2635                         if (wret < 0 && wret != -ENOSPC)
2636                                 ret = wret;
2637
2638                         if (path->nodes[0] == leaf &&
2639                             btrfs_header_nritems(leaf)) {
2640                                 wret = push_leaf_right(trans, root, path, 1, 1);
2641                                 if (wret < 0 && wret != -ENOSPC)
2642                                         ret = wret;
2643                         }
2644
2645                         if (btrfs_header_nritems(leaf) == 0) {
2646                                 clean_tree_block(trans, root, leaf);
2647                                 wait_on_tree_block_writeback(root, leaf);
2648
2649                                 path->slots[1] = slot;
2650                                 ret = btrfs_del_leaf(trans, root, path, leaf);
2651                                 BUG_ON(ret);
2652                                 free_extent_buffer(leaf);
2653
2654                         } else {
2655                                 btrfs_mark_buffer_dirty(leaf);
2656                                 free_extent_buffer(leaf);
2657                         }
2658                 } else {
2659                         btrfs_mark_buffer_dirty(leaf);
2660                 }
2661         }
2662         return ret;
2663 }
2664
2665 /*
2666  * walk up the tree as far as required to find the previous leaf.
2667  * returns 0 if it found something or 1 if there are no lesser leaves.
2668  * returns < 0 on io errors.
2669  */
2670 int btrfs_prev_leaf(struct btrfs_root *root, struct btrfs_path *path)
2671 {
2672         int slot;
2673         int level = 1;
2674         struct extent_buffer *c;
2675         struct extent_buffer *next = NULL;
2676
2677         while(level < BTRFS_MAX_LEVEL) {
2678                 if (!path->nodes[level])
2679                         return 1;
2680
2681                 slot = path->slots[level];
2682                 c = path->nodes[level];
2683                 if (slot == 0) {
2684                         level++;
2685                         if (level == BTRFS_MAX_LEVEL)
2686                                 return 1;
2687                         continue;
2688                 }
2689                 slot--;
2690
2691                 next = read_node_slot(root, c, slot);
2692                 break;
2693         }
2694         path->slots[level] = slot;
2695         while(1) {
2696                 level--;
2697                 c = path->nodes[level];
2698                 free_extent_buffer(c);
2699                 slot = btrfs_header_nritems(next);
2700                 if (slot != 0)
2701                         slot--;
2702                 path->nodes[level] = next;
2703                 path->slots[level] = slot;
2704                 if (!level)
2705                         break;
2706                 next = read_node_slot(root, next, slot);
2707         }
2708         return 0;
2709 }
2710
2711 /*
2712  * walk up the tree as far as required to find the next leaf.
2713  * returns 0 if it found something or 1 if there are no greater leaves.
2714  * returns < 0 on io errors.
2715  */
2716 int btrfs_next_leaf(struct btrfs_root *root, struct btrfs_path *path)
2717 {
2718         int slot;
2719         int level = 1;
2720         struct extent_buffer *c;
2721         struct extent_buffer *next = NULL;
2722
2723         while(level < BTRFS_MAX_LEVEL) {
2724                 if (!path->nodes[level])
2725                         return 1;
2726
2727                 slot = path->slots[level] + 1;
2728                 c = path->nodes[level];
2729                 if (slot >= btrfs_header_nritems(c)) {
2730                         level++;
2731                         if (level == BTRFS_MAX_LEVEL)
2732                                 return 1;
2733                         continue;
2734                 }
2735
2736                 if (path->reada)
2737                         reada_for_search(root, path, level, slot, 0);
2738
2739                 next = read_node_slot(root, c, slot);
2740                 if (!next)
2741                         return -EIO;
2742                 break;
2743         }
2744         path->slots[level] = slot;
2745         while(1) {
2746                 level--;
2747                 c = path->nodes[level];
2748                 free_extent_buffer(c);
2749                 path->nodes[level] = next;
2750                 path->slots[level] = 0;
2751                 if (!level)
2752                         break;
2753                 if (path->reada)
2754                         reada_for_search(root, path, level, 0, 0);
2755                 next = read_node_slot(root, next, 0);
2756                 if (!next)
2757                         return -EIO;
2758         }
2759         return 0;
2760 }
2761
2762 int btrfs_previous_item(struct btrfs_root *root,
2763                         struct btrfs_path *path, u64 min_objectid,
2764                         int type)
2765 {
2766         struct btrfs_key found_key;
2767         struct extent_buffer *leaf;
2768         int ret;
2769
2770         while(1) {
2771                 if (path->slots[0] == 0) {
2772                         ret = btrfs_prev_leaf(root, path);
2773                         if (ret != 0)
2774                                 return ret;
2775                 } else {
2776                         path->slots[0]--;
2777                 }
2778                 leaf = path->nodes[0];
2779                 btrfs_item_key_to_cpu(leaf, &found_key, path->slots[0]);
2780                 if (found_key.type == type)
2781                         return 0;
2782         }
2783         return 1;
2784 }
2785