Btrfs: Support reading/writing on disk free ino cache
[pandora-kernel.git] / fs / btrfs / transaction.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
19 #include <linux/fs.h>
20 #include <linux/slab.h>
21 #include <linux/sched.h>
22 #include <linux/writeback.h>
23 #include <linux/pagemap.h>
24 #include <linux/blkdev.h>
25 #include "ctree.h"
26 #include "disk-io.h"
27 #include "transaction.h"
28 #include "locking.h"
29 #include "tree-log.h"
30 #include "inode-map.h"
31
32 #define BTRFS_ROOT_TRANS_TAG 0
33
34 static noinline void put_transaction(struct btrfs_transaction *transaction)
35 {
36         WARN_ON(atomic_read(&transaction->use_count) == 0);
37         if (atomic_dec_and_test(&transaction->use_count)) {
38                 memset(transaction, 0, sizeof(*transaction));
39                 kmem_cache_free(btrfs_transaction_cachep, transaction);
40         }
41 }
42
43 static noinline void switch_commit_root(struct btrfs_root *root)
44 {
45         free_extent_buffer(root->commit_root);
46         root->commit_root = btrfs_root_node(root);
47 }
48
49 /*
50  * either allocate a new transaction or hop into the existing one
51  */
52 static noinline int join_transaction(struct btrfs_root *root)
53 {
54         struct btrfs_transaction *cur_trans;
55         cur_trans = root->fs_info->running_transaction;
56         if (!cur_trans) {
57                 cur_trans = kmem_cache_alloc(btrfs_transaction_cachep,
58                                              GFP_NOFS);
59                 if (!cur_trans)
60                         return -ENOMEM;
61                 root->fs_info->generation++;
62                 atomic_set(&cur_trans->num_writers, 1);
63                 cur_trans->num_joined = 0;
64                 cur_trans->transid = root->fs_info->generation;
65                 init_waitqueue_head(&cur_trans->writer_wait);
66                 init_waitqueue_head(&cur_trans->commit_wait);
67                 cur_trans->in_commit = 0;
68                 cur_trans->blocked = 0;
69                 atomic_set(&cur_trans->use_count, 1);
70                 cur_trans->commit_done = 0;
71                 cur_trans->start_time = get_seconds();
72
73                 cur_trans->delayed_refs.root = RB_ROOT;
74                 cur_trans->delayed_refs.num_entries = 0;
75                 cur_trans->delayed_refs.num_heads_ready = 0;
76                 cur_trans->delayed_refs.num_heads = 0;
77                 cur_trans->delayed_refs.flushing = 0;
78                 cur_trans->delayed_refs.run_delayed_start = 0;
79                 spin_lock_init(&cur_trans->delayed_refs.lock);
80
81                 INIT_LIST_HEAD(&cur_trans->pending_snapshots);
82                 list_add_tail(&cur_trans->list, &root->fs_info->trans_list);
83                 extent_io_tree_init(&cur_trans->dirty_pages,
84                                      root->fs_info->btree_inode->i_mapping,
85                                      GFP_NOFS);
86                 spin_lock(&root->fs_info->new_trans_lock);
87                 root->fs_info->running_transaction = cur_trans;
88                 spin_unlock(&root->fs_info->new_trans_lock);
89         } else {
90                 atomic_inc(&cur_trans->num_writers);
91                 cur_trans->num_joined++;
92         }
93
94         return 0;
95 }
96
97 /*
98  * this does all the record keeping required to make sure that a reference
99  * counted root is properly recorded in a given transaction.  This is required
100  * to make sure the old root from before we joined the transaction is deleted
101  * when the transaction commits
102  */
103 static noinline int record_root_in_trans(struct btrfs_trans_handle *trans,
104                                          struct btrfs_root *root)
105 {
106         if (root->ref_cows && root->last_trans < trans->transid) {
107                 WARN_ON(root == root->fs_info->extent_root);
108                 WARN_ON(root->commit_root != root->node);
109
110                 radix_tree_tag_set(&root->fs_info->fs_roots_radix,
111                            (unsigned long)root->root_key.objectid,
112                            BTRFS_ROOT_TRANS_TAG);
113                 root->last_trans = trans->transid;
114                 btrfs_init_reloc_root(trans, root);
115         }
116         return 0;
117 }
118
119 int btrfs_record_root_in_trans(struct btrfs_trans_handle *trans,
120                                struct btrfs_root *root)
121 {
122         if (!root->ref_cows)
123                 return 0;
124
125         mutex_lock(&root->fs_info->trans_mutex);
126         if (root->last_trans == trans->transid) {
127                 mutex_unlock(&root->fs_info->trans_mutex);
128                 return 0;
129         }
130
131         record_root_in_trans(trans, root);
132         mutex_unlock(&root->fs_info->trans_mutex);
133         return 0;
134 }
135
136 /* wait for commit against the current transaction to become unblocked
137  * when this is done, it is safe to start a new transaction, but the current
138  * transaction might not be fully on disk.
139  */
140 static void wait_current_trans(struct btrfs_root *root)
141 {
142         struct btrfs_transaction *cur_trans;
143
144         cur_trans = root->fs_info->running_transaction;
145         if (cur_trans && cur_trans->blocked) {
146                 DEFINE_WAIT(wait);
147                 atomic_inc(&cur_trans->use_count);
148                 while (1) {
149                         prepare_to_wait(&root->fs_info->transaction_wait, &wait,
150                                         TASK_UNINTERRUPTIBLE);
151                         if (!cur_trans->blocked)
152                                 break;
153                         mutex_unlock(&root->fs_info->trans_mutex);
154                         schedule();
155                         mutex_lock(&root->fs_info->trans_mutex);
156                 }
157                 finish_wait(&root->fs_info->transaction_wait, &wait);
158                 put_transaction(cur_trans);
159         }
160 }
161
162 enum btrfs_trans_type {
163         TRANS_START,
164         TRANS_JOIN,
165         TRANS_USERSPACE,
166         TRANS_JOIN_NOLOCK,
167 };
168
169 static int may_wait_transaction(struct btrfs_root *root, int type)
170 {
171         if (!root->fs_info->log_root_recovering &&
172             ((type == TRANS_START && !root->fs_info->open_ioctl_trans) ||
173              type == TRANS_USERSPACE))
174                 return 1;
175         return 0;
176 }
177
178 static struct btrfs_trans_handle *start_transaction(struct btrfs_root *root,
179                                                     u64 num_items, int type)
180 {
181         struct btrfs_trans_handle *h;
182         struct btrfs_transaction *cur_trans;
183         int retries = 0;
184         int ret;
185
186         if (root->fs_info->fs_state & BTRFS_SUPER_FLAG_ERROR)
187                 return ERR_PTR(-EROFS);
188 again:
189         h = kmem_cache_alloc(btrfs_trans_handle_cachep, GFP_NOFS);
190         if (!h)
191                 return ERR_PTR(-ENOMEM);
192
193         if (type != TRANS_JOIN_NOLOCK)
194                 mutex_lock(&root->fs_info->trans_mutex);
195         if (may_wait_transaction(root, type))
196                 wait_current_trans(root);
197
198         ret = join_transaction(root);
199         if (ret < 0) {
200                 kmem_cache_free(btrfs_trans_handle_cachep, h);
201                 if (type != TRANS_JOIN_NOLOCK)
202                         mutex_unlock(&root->fs_info->trans_mutex);
203                 return ERR_PTR(ret);
204         }
205
206         cur_trans = root->fs_info->running_transaction;
207         atomic_inc(&cur_trans->use_count);
208         if (type != TRANS_JOIN_NOLOCK)
209                 mutex_unlock(&root->fs_info->trans_mutex);
210
211         h->transid = cur_trans->transid;
212         h->transaction = cur_trans;
213         h->blocks_used = 0;
214         h->block_group = 0;
215         h->bytes_reserved = 0;
216         h->delayed_ref_updates = 0;
217         h->block_rsv = NULL;
218
219         smp_mb();
220         if (cur_trans->blocked && may_wait_transaction(root, type)) {
221                 btrfs_commit_transaction(h, root);
222                 goto again;
223         }
224
225         if (num_items > 0) {
226                 ret = btrfs_trans_reserve_metadata(h, root, num_items);
227                 if (ret == -EAGAIN && !retries) {
228                         retries++;
229                         btrfs_commit_transaction(h, root);
230                         goto again;
231                 } else if (ret == -EAGAIN) {
232                         /*
233                          * We have already retried and got EAGAIN, so really we
234                          * don't have space, so set ret to -ENOSPC.
235                          */
236                         ret = -ENOSPC;
237                 }
238
239                 if (ret < 0) {
240                         btrfs_end_transaction(h, root);
241                         return ERR_PTR(ret);
242                 }
243         }
244
245         if (type != TRANS_JOIN_NOLOCK)
246                 mutex_lock(&root->fs_info->trans_mutex);
247         record_root_in_trans(h, root);
248         if (type != TRANS_JOIN_NOLOCK)
249                 mutex_unlock(&root->fs_info->trans_mutex);
250
251         if (!current->journal_info && type != TRANS_USERSPACE)
252                 current->journal_info = h;
253         return h;
254 }
255
256 struct btrfs_trans_handle *btrfs_start_transaction(struct btrfs_root *root,
257                                                    int num_items)
258 {
259         return start_transaction(root, num_items, TRANS_START);
260 }
261 struct btrfs_trans_handle *btrfs_join_transaction(struct btrfs_root *root,
262                                                    int num_blocks)
263 {
264         return start_transaction(root, 0, TRANS_JOIN);
265 }
266
267 struct btrfs_trans_handle *btrfs_join_transaction_nolock(struct btrfs_root *root,
268                                                           int num_blocks)
269 {
270         return start_transaction(root, 0, TRANS_JOIN_NOLOCK);
271 }
272
273 struct btrfs_trans_handle *btrfs_start_ioctl_transaction(struct btrfs_root *r,
274                                                          int num_blocks)
275 {
276         return start_transaction(r, 0, TRANS_USERSPACE);
277 }
278
279 /* wait for a transaction commit to be fully complete */
280 static noinline int wait_for_commit(struct btrfs_root *root,
281                                     struct btrfs_transaction *commit)
282 {
283         DEFINE_WAIT(wait);
284         mutex_lock(&root->fs_info->trans_mutex);
285         while (!commit->commit_done) {
286                 prepare_to_wait(&commit->commit_wait, &wait,
287                                 TASK_UNINTERRUPTIBLE);
288                 if (commit->commit_done)
289                         break;
290                 mutex_unlock(&root->fs_info->trans_mutex);
291                 schedule();
292                 mutex_lock(&root->fs_info->trans_mutex);
293         }
294         mutex_unlock(&root->fs_info->trans_mutex);
295         finish_wait(&commit->commit_wait, &wait);
296         return 0;
297 }
298
299 int btrfs_wait_for_commit(struct btrfs_root *root, u64 transid)
300 {
301         struct btrfs_transaction *cur_trans = NULL, *t;
302         int ret;
303
304         mutex_lock(&root->fs_info->trans_mutex);
305
306         ret = 0;
307         if (transid) {
308                 if (transid <= root->fs_info->last_trans_committed)
309                         goto out_unlock;
310
311                 /* find specified transaction */
312                 list_for_each_entry(t, &root->fs_info->trans_list, list) {
313                         if (t->transid == transid) {
314                                 cur_trans = t;
315                                 break;
316                         }
317                         if (t->transid > transid)
318                                 break;
319                 }
320                 ret = -EINVAL;
321                 if (!cur_trans)
322                         goto out_unlock;  /* bad transid */
323         } else {
324                 /* find newest transaction that is committing | committed */
325                 list_for_each_entry_reverse(t, &root->fs_info->trans_list,
326                                             list) {
327                         if (t->in_commit) {
328                                 if (t->commit_done)
329                                         goto out_unlock;
330                                 cur_trans = t;
331                                 break;
332                         }
333                 }
334                 if (!cur_trans)
335                         goto out_unlock;  /* nothing committing|committed */
336         }
337
338         atomic_inc(&cur_trans->use_count);
339         mutex_unlock(&root->fs_info->trans_mutex);
340
341         wait_for_commit(root, cur_trans);
342
343         mutex_lock(&root->fs_info->trans_mutex);
344         put_transaction(cur_trans);
345         ret = 0;
346 out_unlock:
347         mutex_unlock(&root->fs_info->trans_mutex);
348         return ret;
349 }
350
351 #if 0
352 /*
353  * rate limit against the drop_snapshot code.  This helps to slow down new
354  * operations if the drop_snapshot code isn't able to keep up.
355  */
356 static void throttle_on_drops(struct btrfs_root *root)
357 {
358         struct btrfs_fs_info *info = root->fs_info;
359         int harder_count = 0;
360
361 harder:
362         if (atomic_read(&info->throttles)) {
363                 DEFINE_WAIT(wait);
364                 int thr;
365                 thr = atomic_read(&info->throttle_gen);
366
367                 do {
368                         prepare_to_wait(&info->transaction_throttle,
369                                         &wait, TASK_UNINTERRUPTIBLE);
370                         if (!atomic_read(&info->throttles)) {
371                                 finish_wait(&info->transaction_throttle, &wait);
372                                 break;
373                         }
374                         schedule();
375                         finish_wait(&info->transaction_throttle, &wait);
376                 } while (thr == atomic_read(&info->throttle_gen));
377                 harder_count++;
378
379                 if (root->fs_info->total_ref_cache_size > 1 * 1024 * 1024 &&
380                     harder_count < 2)
381                         goto harder;
382
383                 if (root->fs_info->total_ref_cache_size > 5 * 1024 * 1024 &&
384                     harder_count < 10)
385                         goto harder;
386
387                 if (root->fs_info->total_ref_cache_size > 10 * 1024 * 1024 &&
388                     harder_count < 20)
389                         goto harder;
390         }
391 }
392 #endif
393
394 void btrfs_throttle(struct btrfs_root *root)
395 {
396         mutex_lock(&root->fs_info->trans_mutex);
397         if (!root->fs_info->open_ioctl_trans)
398                 wait_current_trans(root);
399         mutex_unlock(&root->fs_info->trans_mutex);
400 }
401
402 static int should_end_transaction(struct btrfs_trans_handle *trans,
403                                   struct btrfs_root *root)
404 {
405         int ret;
406         ret = btrfs_block_rsv_check(trans, root,
407                                     &root->fs_info->global_block_rsv, 0, 5);
408         return ret ? 1 : 0;
409 }
410
411 int btrfs_should_end_transaction(struct btrfs_trans_handle *trans,
412                                  struct btrfs_root *root)
413 {
414         struct btrfs_transaction *cur_trans = trans->transaction;
415         int updates;
416
417         if (cur_trans->blocked || cur_trans->delayed_refs.flushing)
418                 return 1;
419
420         updates = trans->delayed_ref_updates;
421         trans->delayed_ref_updates = 0;
422         if (updates)
423                 btrfs_run_delayed_refs(trans, root, updates);
424
425         return should_end_transaction(trans, root);
426 }
427
428 static int __btrfs_end_transaction(struct btrfs_trans_handle *trans,
429                           struct btrfs_root *root, int throttle, int lock)
430 {
431         struct btrfs_transaction *cur_trans = trans->transaction;
432         struct btrfs_fs_info *info = root->fs_info;
433         int count = 0;
434
435         while (count < 4) {
436                 unsigned long cur = trans->delayed_ref_updates;
437                 trans->delayed_ref_updates = 0;
438                 if (cur &&
439                     trans->transaction->delayed_refs.num_heads_ready > 64) {
440                         trans->delayed_ref_updates = 0;
441
442                         /*
443                          * do a full flush if the transaction is trying
444                          * to close
445                          */
446                         if (trans->transaction->delayed_refs.flushing)
447                                 cur = 0;
448                         btrfs_run_delayed_refs(trans, root, cur);
449                 } else {
450                         break;
451                 }
452                 count++;
453         }
454
455         btrfs_trans_release_metadata(trans, root);
456
457         if (lock && !root->fs_info->open_ioctl_trans &&
458             should_end_transaction(trans, root))
459                 trans->transaction->blocked = 1;
460
461         if (lock && cur_trans->blocked && !cur_trans->in_commit) {
462                 if (throttle)
463                         return btrfs_commit_transaction(trans, root);
464                 else
465                         wake_up_process(info->transaction_kthread);
466         }
467
468         WARN_ON(cur_trans != info->running_transaction);
469         WARN_ON(atomic_read(&cur_trans->num_writers) < 1);
470         atomic_dec(&cur_trans->num_writers);
471
472         smp_mb();
473         if (waitqueue_active(&cur_trans->writer_wait))
474                 wake_up(&cur_trans->writer_wait);
475         put_transaction(cur_trans);
476
477         if (current->journal_info == trans)
478                 current->journal_info = NULL;
479         memset(trans, 0, sizeof(*trans));
480         kmem_cache_free(btrfs_trans_handle_cachep, trans);
481
482         if (throttle)
483                 btrfs_run_delayed_iputs(root);
484
485         return 0;
486 }
487
488 int btrfs_end_transaction(struct btrfs_trans_handle *trans,
489                           struct btrfs_root *root)
490 {
491         return __btrfs_end_transaction(trans, root, 0, 1);
492 }
493
494 int btrfs_end_transaction_throttle(struct btrfs_trans_handle *trans,
495                                    struct btrfs_root *root)
496 {
497         return __btrfs_end_transaction(trans, root, 1, 1);
498 }
499
500 int btrfs_end_transaction_nolock(struct btrfs_trans_handle *trans,
501                                  struct btrfs_root *root)
502 {
503         return __btrfs_end_transaction(trans, root, 0, 0);
504 }
505
506 /*
507  * when btree blocks are allocated, they have some corresponding bits set for
508  * them in one of two extent_io trees.  This is used to make sure all of
509  * those extents are sent to disk but does not wait on them
510  */
511 int btrfs_write_marked_extents(struct btrfs_root *root,
512                                struct extent_io_tree *dirty_pages, int mark)
513 {
514         int ret;
515         int err = 0;
516         int werr = 0;
517         struct page *page;
518         struct inode *btree_inode = root->fs_info->btree_inode;
519         u64 start = 0;
520         u64 end;
521         unsigned long index;
522
523         while (1) {
524                 ret = find_first_extent_bit(dirty_pages, start, &start, &end,
525                                             mark);
526                 if (ret)
527                         break;
528                 while (start <= end) {
529                         cond_resched();
530
531                         index = start >> PAGE_CACHE_SHIFT;
532                         start = (u64)(index + 1) << PAGE_CACHE_SHIFT;
533                         page = find_get_page(btree_inode->i_mapping, index);
534                         if (!page)
535                                 continue;
536
537                         btree_lock_page_hook(page);
538                         if (!page->mapping) {
539                                 unlock_page(page);
540                                 page_cache_release(page);
541                                 continue;
542                         }
543
544                         if (PageWriteback(page)) {
545                                 if (PageDirty(page))
546                                         wait_on_page_writeback(page);
547                                 else {
548                                         unlock_page(page);
549                                         page_cache_release(page);
550                                         continue;
551                                 }
552                         }
553                         err = write_one_page(page, 0);
554                         if (err)
555                                 werr = err;
556                         page_cache_release(page);
557                 }
558         }
559         if (err)
560                 werr = err;
561         return werr;
562 }
563
564 /*
565  * when btree blocks are allocated, they have some corresponding bits set for
566  * them in one of two extent_io trees.  This is used to make sure all of
567  * those extents are on disk for transaction or log commit.  We wait
568  * on all the pages and clear them from the dirty pages state tree
569  */
570 int btrfs_wait_marked_extents(struct btrfs_root *root,
571                               struct extent_io_tree *dirty_pages, int mark)
572 {
573         int ret;
574         int err = 0;
575         int werr = 0;
576         struct page *page;
577         struct inode *btree_inode = root->fs_info->btree_inode;
578         u64 start = 0;
579         u64 end;
580         unsigned long index;
581
582         while (1) {
583                 ret = find_first_extent_bit(dirty_pages, start, &start, &end,
584                                             mark);
585                 if (ret)
586                         break;
587
588                 clear_extent_bits(dirty_pages, start, end, mark, GFP_NOFS);
589                 while (start <= end) {
590                         index = start >> PAGE_CACHE_SHIFT;
591                         start = (u64)(index + 1) << PAGE_CACHE_SHIFT;
592                         page = find_get_page(btree_inode->i_mapping, index);
593                         if (!page)
594                                 continue;
595                         if (PageDirty(page)) {
596                                 btree_lock_page_hook(page);
597                                 wait_on_page_writeback(page);
598                                 err = write_one_page(page, 0);
599                                 if (err)
600                                         werr = err;
601                         }
602                         wait_on_page_writeback(page);
603                         page_cache_release(page);
604                         cond_resched();
605                 }
606         }
607         if (err)
608                 werr = err;
609         return werr;
610 }
611
612 /*
613  * when btree blocks are allocated, they have some corresponding bits set for
614  * them in one of two extent_io trees.  This is used to make sure all of
615  * those extents are on disk for transaction or log commit
616  */
617 int btrfs_write_and_wait_marked_extents(struct btrfs_root *root,
618                                 struct extent_io_tree *dirty_pages, int mark)
619 {
620         int ret;
621         int ret2;
622
623         ret = btrfs_write_marked_extents(root, dirty_pages, mark);
624         ret2 = btrfs_wait_marked_extents(root, dirty_pages, mark);
625         return ret || ret2;
626 }
627
628 int btrfs_write_and_wait_transaction(struct btrfs_trans_handle *trans,
629                                      struct btrfs_root *root)
630 {
631         if (!trans || !trans->transaction) {
632                 struct inode *btree_inode;
633                 btree_inode = root->fs_info->btree_inode;
634                 return filemap_write_and_wait(btree_inode->i_mapping);
635         }
636         return btrfs_write_and_wait_marked_extents(root,
637                                            &trans->transaction->dirty_pages,
638                                            EXTENT_DIRTY);
639 }
640
641 /*
642  * this is used to update the root pointer in the tree of tree roots.
643  *
644  * But, in the case of the extent allocation tree, updating the root
645  * pointer may allocate blocks which may change the root of the extent
646  * allocation tree.
647  *
648  * So, this loops and repeats and makes sure the cowonly root didn't
649  * change while the root pointer was being updated in the metadata.
650  */
651 static int update_cowonly_root(struct btrfs_trans_handle *trans,
652                                struct btrfs_root *root)
653 {
654         int ret;
655         u64 old_root_bytenr;
656         u64 old_root_used;
657         struct btrfs_root *tree_root = root->fs_info->tree_root;
658
659         old_root_used = btrfs_root_used(&root->root_item);
660         btrfs_write_dirty_block_groups(trans, root);
661
662         while (1) {
663                 old_root_bytenr = btrfs_root_bytenr(&root->root_item);
664                 if (old_root_bytenr == root->node->start &&
665                     old_root_used == btrfs_root_used(&root->root_item))
666                         break;
667
668                 btrfs_set_root_node(&root->root_item, root->node);
669                 ret = btrfs_update_root(trans, tree_root,
670                                         &root->root_key,
671                                         &root->root_item);
672                 BUG_ON(ret);
673
674                 old_root_used = btrfs_root_used(&root->root_item);
675                 ret = btrfs_write_dirty_block_groups(trans, root);
676                 BUG_ON(ret);
677         }
678
679         if (root != root->fs_info->extent_root)
680                 switch_commit_root(root);
681
682         return 0;
683 }
684
685 /*
686  * update all the cowonly tree roots on disk
687  */
688 static noinline int commit_cowonly_roots(struct btrfs_trans_handle *trans,
689                                          struct btrfs_root *root)
690 {
691         struct btrfs_fs_info *fs_info = root->fs_info;
692         struct list_head *next;
693         struct extent_buffer *eb;
694         int ret;
695
696         ret = btrfs_run_delayed_refs(trans, root, (unsigned long)-1);
697         BUG_ON(ret);
698
699         eb = btrfs_lock_root_node(fs_info->tree_root);
700         btrfs_cow_block(trans, fs_info->tree_root, eb, NULL, 0, &eb);
701         btrfs_tree_unlock(eb);
702         free_extent_buffer(eb);
703
704         ret = btrfs_run_delayed_refs(trans, root, (unsigned long)-1);
705         BUG_ON(ret);
706
707         while (!list_empty(&fs_info->dirty_cowonly_roots)) {
708                 next = fs_info->dirty_cowonly_roots.next;
709                 list_del_init(next);
710                 root = list_entry(next, struct btrfs_root, dirty_list);
711
712                 update_cowonly_root(trans, root);
713         }
714
715         down_write(&fs_info->extent_commit_sem);
716         switch_commit_root(fs_info->extent_root);
717         up_write(&fs_info->extent_commit_sem);
718
719         return 0;
720 }
721
722 /*
723  * dead roots are old snapshots that need to be deleted.  This allocates
724  * a dirty root struct and adds it into the list of dead roots that need to
725  * be deleted
726  */
727 int btrfs_add_dead_root(struct btrfs_root *root)
728 {
729         mutex_lock(&root->fs_info->trans_mutex);
730         list_add(&root->root_list, &root->fs_info->dead_roots);
731         mutex_unlock(&root->fs_info->trans_mutex);
732         return 0;
733 }
734
735 /*
736  * update all the cowonly tree roots on disk
737  */
738 static noinline int commit_fs_roots(struct btrfs_trans_handle *trans,
739                                     struct btrfs_root *root)
740 {
741         struct btrfs_root *gang[8];
742         struct btrfs_fs_info *fs_info = root->fs_info;
743         int i;
744         int ret;
745         int err = 0;
746
747         while (1) {
748                 ret = radix_tree_gang_lookup_tag(&fs_info->fs_roots_radix,
749                                                  (void **)gang, 0,
750                                                  ARRAY_SIZE(gang),
751                                                  BTRFS_ROOT_TRANS_TAG);
752                 if (ret == 0)
753                         break;
754                 for (i = 0; i < ret; i++) {
755                         root = gang[i];
756                         radix_tree_tag_clear(&fs_info->fs_roots_radix,
757                                         (unsigned long)root->root_key.objectid,
758                                         BTRFS_ROOT_TRANS_TAG);
759
760                         btrfs_free_log(trans, root);
761                         btrfs_update_reloc_root(trans, root);
762                         btrfs_orphan_commit_root(trans, root);
763
764                         btrfs_save_ino_cache(root, trans);
765
766                         if (root->commit_root != root->node) {
767                                 mutex_lock(&root->fs_commit_mutex);
768                                 switch_commit_root(root);
769                                 btrfs_unpin_free_ino(root);
770                                 mutex_unlock(&root->fs_commit_mutex);
771
772                                 btrfs_set_root_node(&root->root_item,
773                                                     root->node);
774                         }
775
776                         err = btrfs_update_root(trans, fs_info->tree_root,
777                                                 &root->root_key,
778                                                 &root->root_item);
779                         if (err)
780                                 break;
781                 }
782         }
783         return err;
784 }
785
786 /*
787  * defrag a given btree.  If cacheonly == 1, this won't read from the disk,
788  * otherwise every leaf in the btree is read and defragged.
789  */
790 int btrfs_defrag_root(struct btrfs_root *root, int cacheonly)
791 {
792         struct btrfs_fs_info *info = root->fs_info;
793         struct btrfs_trans_handle *trans;
794         int ret;
795         unsigned long nr;
796
797         if (xchg(&root->defrag_running, 1))
798                 return 0;
799
800         while (1) {
801                 trans = btrfs_start_transaction(root, 0);
802                 if (IS_ERR(trans))
803                         return PTR_ERR(trans);
804
805                 ret = btrfs_defrag_leaves(trans, root, cacheonly);
806
807                 nr = trans->blocks_used;
808                 btrfs_end_transaction(trans, root);
809                 btrfs_btree_balance_dirty(info->tree_root, nr);
810                 cond_resched();
811
812                 if (root->fs_info->closing || ret != -EAGAIN)
813                         break;
814         }
815         root->defrag_running = 0;
816         return ret;
817 }
818
819 #if 0
820 /*
821  * when dropping snapshots, we generate a ton of delayed refs, and it makes
822  * sense not to join the transaction while it is trying to flush the current
823  * queue of delayed refs out.
824  *
825  * This is used by the drop snapshot code only
826  */
827 static noinline int wait_transaction_pre_flush(struct btrfs_fs_info *info)
828 {
829         DEFINE_WAIT(wait);
830
831         mutex_lock(&info->trans_mutex);
832         while (info->running_transaction &&
833                info->running_transaction->delayed_refs.flushing) {
834                 prepare_to_wait(&info->transaction_wait, &wait,
835                                 TASK_UNINTERRUPTIBLE);
836                 mutex_unlock(&info->trans_mutex);
837
838                 schedule();
839
840                 mutex_lock(&info->trans_mutex);
841                 finish_wait(&info->transaction_wait, &wait);
842         }
843         mutex_unlock(&info->trans_mutex);
844         return 0;
845 }
846
847 /*
848  * Given a list of roots that need to be deleted, call btrfs_drop_snapshot on
849  * all of them
850  */
851 int btrfs_drop_dead_root(struct btrfs_root *root)
852 {
853         struct btrfs_trans_handle *trans;
854         struct btrfs_root *tree_root = root->fs_info->tree_root;
855         unsigned long nr;
856         int ret;
857
858         while (1) {
859                 /*
860                  * we don't want to jump in and create a bunch of
861                  * delayed refs if the transaction is starting to close
862                  */
863                 wait_transaction_pre_flush(tree_root->fs_info);
864                 trans = btrfs_start_transaction(tree_root, 1);
865
866                 /*
867                  * we've joined a transaction, make sure it isn't
868                  * closing right now
869                  */
870                 if (trans->transaction->delayed_refs.flushing) {
871                         btrfs_end_transaction(trans, tree_root);
872                         continue;
873                 }
874
875                 ret = btrfs_drop_snapshot(trans, root);
876                 if (ret != -EAGAIN)
877                         break;
878
879                 ret = btrfs_update_root(trans, tree_root,
880                                         &root->root_key,
881                                         &root->root_item);
882                 if (ret)
883                         break;
884
885                 nr = trans->blocks_used;
886                 ret = btrfs_end_transaction(trans, tree_root);
887                 BUG_ON(ret);
888
889                 btrfs_btree_balance_dirty(tree_root, nr);
890                 cond_resched();
891         }
892         BUG_ON(ret);
893
894         ret = btrfs_del_root(trans, tree_root, &root->root_key);
895         BUG_ON(ret);
896
897         nr = trans->blocks_used;
898         ret = btrfs_end_transaction(trans, tree_root);
899         BUG_ON(ret);
900
901         free_extent_buffer(root->node);
902         free_extent_buffer(root->commit_root);
903         kfree(root);
904
905         btrfs_btree_balance_dirty(tree_root, nr);
906         return ret;
907 }
908 #endif
909
910 /*
911  * new snapshots need to be created at a very specific time in the
912  * transaction commit.  This does the actual creation
913  */
914 static noinline int create_pending_snapshot(struct btrfs_trans_handle *trans,
915                                    struct btrfs_fs_info *fs_info,
916                                    struct btrfs_pending_snapshot *pending)
917 {
918         struct btrfs_key key;
919         struct btrfs_root_item *new_root_item;
920         struct btrfs_root *tree_root = fs_info->tree_root;
921         struct btrfs_root *root = pending->root;
922         struct btrfs_root *parent_root;
923         struct inode *parent_inode;
924         struct dentry *parent;
925         struct dentry *dentry;
926         struct extent_buffer *tmp;
927         struct extent_buffer *old;
928         int ret;
929         u64 to_reserve = 0;
930         u64 index = 0;
931         u64 objectid;
932         u64 root_flags;
933
934         new_root_item = kmalloc(sizeof(*new_root_item), GFP_NOFS);
935         if (!new_root_item) {
936                 pending->error = -ENOMEM;
937                 goto fail;
938         }
939
940         ret = btrfs_find_free_objectid(tree_root, &objectid);
941         if (ret) {
942                 pending->error = ret;
943                 goto fail;
944         }
945
946         btrfs_reloc_pre_snapshot(trans, pending, &to_reserve);
947         btrfs_orphan_pre_snapshot(trans, pending, &to_reserve);
948
949         if (to_reserve > 0) {
950                 ret = btrfs_block_rsv_add(trans, root, &pending->block_rsv,
951                                           to_reserve);
952                 if (ret) {
953                         pending->error = ret;
954                         goto fail;
955                 }
956         }
957
958         key.objectid = objectid;
959         key.offset = (u64)-1;
960         key.type = BTRFS_ROOT_ITEM_KEY;
961
962         trans->block_rsv = &pending->block_rsv;
963
964         dentry = pending->dentry;
965         parent = dget_parent(dentry);
966         parent_inode = parent->d_inode;
967         parent_root = BTRFS_I(parent_inode)->root;
968         record_root_in_trans(trans, parent_root);
969
970         /*
971          * insert the directory item
972          */
973         ret = btrfs_set_inode_index(parent_inode, &index);
974         BUG_ON(ret);
975         ret = btrfs_insert_dir_item(trans, parent_root,
976                                 dentry->d_name.name, dentry->d_name.len,
977                                 btrfs_ino(parent_inode), &key,
978                                 BTRFS_FT_DIR, index);
979         BUG_ON(ret);
980
981         btrfs_i_size_write(parent_inode, parent_inode->i_size +
982                                          dentry->d_name.len * 2);
983         ret = btrfs_update_inode(trans, parent_root, parent_inode);
984         BUG_ON(ret);
985
986         record_root_in_trans(trans, root);
987         btrfs_set_root_last_snapshot(&root->root_item, trans->transid);
988         memcpy(new_root_item, &root->root_item, sizeof(*new_root_item));
989         btrfs_check_and_init_root_item(new_root_item);
990
991         root_flags = btrfs_root_flags(new_root_item);
992         if (pending->readonly)
993                 root_flags |= BTRFS_ROOT_SUBVOL_RDONLY;
994         else
995                 root_flags &= ~BTRFS_ROOT_SUBVOL_RDONLY;
996         btrfs_set_root_flags(new_root_item, root_flags);
997
998         old = btrfs_lock_root_node(root);
999         btrfs_cow_block(trans, root, old, NULL, 0, &old);
1000         btrfs_set_lock_blocking(old);
1001
1002         btrfs_copy_root(trans, root, old, &tmp, objectid);
1003         btrfs_tree_unlock(old);
1004         free_extent_buffer(old);
1005
1006         btrfs_set_root_node(new_root_item, tmp);
1007         /* record when the snapshot was created in key.offset */
1008         key.offset = trans->transid;
1009         ret = btrfs_insert_root(trans, tree_root, &key, new_root_item);
1010         btrfs_tree_unlock(tmp);
1011         free_extent_buffer(tmp);
1012         BUG_ON(ret);
1013
1014         /*
1015          * insert root back/forward references
1016          */
1017         ret = btrfs_add_root_ref(trans, tree_root, objectid,
1018                                  parent_root->root_key.objectid,
1019                                  btrfs_ino(parent_inode), index,
1020                                  dentry->d_name.name, dentry->d_name.len);
1021         BUG_ON(ret);
1022         dput(parent);
1023
1024         key.offset = (u64)-1;
1025         pending->snap = btrfs_read_fs_root_no_name(root->fs_info, &key);
1026         BUG_ON(IS_ERR(pending->snap));
1027
1028         btrfs_reloc_post_snapshot(trans, pending);
1029         btrfs_orphan_post_snapshot(trans, pending);
1030 fail:
1031         kfree(new_root_item);
1032         btrfs_block_rsv_release(root, &pending->block_rsv, (u64)-1);
1033         return 0;
1034 }
1035
1036 /*
1037  * create all the snapshots we've scheduled for creation
1038  */
1039 static noinline int create_pending_snapshots(struct btrfs_trans_handle *trans,
1040                                              struct btrfs_fs_info *fs_info)
1041 {
1042         struct btrfs_pending_snapshot *pending;
1043         struct list_head *head = &trans->transaction->pending_snapshots;
1044         int ret;
1045
1046         list_for_each_entry(pending, head, list) {
1047                 ret = create_pending_snapshot(trans, fs_info, pending);
1048                 BUG_ON(ret);
1049         }
1050         return 0;
1051 }
1052
1053 static void update_super_roots(struct btrfs_root *root)
1054 {
1055         struct btrfs_root_item *root_item;
1056         struct btrfs_super_block *super;
1057
1058         super = &root->fs_info->super_copy;
1059
1060         root_item = &root->fs_info->chunk_root->root_item;
1061         super->chunk_root = root_item->bytenr;
1062         super->chunk_root_generation = root_item->generation;
1063         super->chunk_root_level = root_item->level;
1064
1065         root_item = &root->fs_info->tree_root->root_item;
1066         super->root = root_item->bytenr;
1067         super->generation = root_item->generation;
1068         super->root_level = root_item->level;
1069         if (super->cache_generation != 0 || btrfs_test_opt(root, SPACE_CACHE))
1070                 super->cache_generation = root_item->generation;
1071 }
1072
1073 int btrfs_transaction_in_commit(struct btrfs_fs_info *info)
1074 {
1075         int ret = 0;
1076         spin_lock(&info->new_trans_lock);
1077         if (info->running_transaction)
1078                 ret = info->running_transaction->in_commit;
1079         spin_unlock(&info->new_trans_lock);
1080         return ret;
1081 }
1082
1083 int btrfs_transaction_blocked(struct btrfs_fs_info *info)
1084 {
1085         int ret = 0;
1086         spin_lock(&info->new_trans_lock);
1087         if (info->running_transaction)
1088                 ret = info->running_transaction->blocked;
1089         spin_unlock(&info->new_trans_lock);
1090         return ret;
1091 }
1092
1093 /*
1094  * wait for the current transaction commit to start and block subsequent
1095  * transaction joins
1096  */
1097 static void wait_current_trans_commit_start(struct btrfs_root *root,
1098                                             struct btrfs_transaction *trans)
1099 {
1100         DEFINE_WAIT(wait);
1101
1102         if (trans->in_commit)
1103                 return;
1104
1105         while (1) {
1106                 prepare_to_wait(&root->fs_info->transaction_blocked_wait, &wait,
1107                                 TASK_UNINTERRUPTIBLE);
1108                 if (trans->in_commit) {
1109                         finish_wait(&root->fs_info->transaction_blocked_wait,
1110                                     &wait);
1111                         break;
1112                 }
1113                 mutex_unlock(&root->fs_info->trans_mutex);
1114                 schedule();
1115                 mutex_lock(&root->fs_info->trans_mutex);
1116                 finish_wait(&root->fs_info->transaction_blocked_wait, &wait);
1117         }
1118 }
1119
1120 /*
1121  * wait for the current transaction to start and then become unblocked.
1122  * caller holds ref.
1123  */
1124 static void wait_current_trans_commit_start_and_unblock(struct btrfs_root *root,
1125                                          struct btrfs_transaction *trans)
1126 {
1127         DEFINE_WAIT(wait);
1128
1129         if (trans->commit_done || (trans->in_commit && !trans->blocked))
1130                 return;
1131
1132         while (1) {
1133                 prepare_to_wait(&root->fs_info->transaction_wait, &wait,
1134                                 TASK_UNINTERRUPTIBLE);
1135                 if (trans->commit_done ||
1136                     (trans->in_commit && !trans->blocked)) {
1137                         finish_wait(&root->fs_info->transaction_wait,
1138                                     &wait);
1139                         break;
1140                 }
1141                 mutex_unlock(&root->fs_info->trans_mutex);
1142                 schedule();
1143                 mutex_lock(&root->fs_info->trans_mutex);
1144                 finish_wait(&root->fs_info->transaction_wait,
1145                             &wait);
1146         }
1147 }
1148
1149 /*
1150  * commit transactions asynchronously. once btrfs_commit_transaction_async
1151  * returns, any subsequent transaction will not be allowed to join.
1152  */
1153 struct btrfs_async_commit {
1154         struct btrfs_trans_handle *newtrans;
1155         struct btrfs_root *root;
1156         struct delayed_work work;
1157 };
1158
1159 static void do_async_commit(struct work_struct *work)
1160 {
1161         struct btrfs_async_commit *ac =
1162                 container_of(work, struct btrfs_async_commit, work.work);
1163
1164         btrfs_commit_transaction(ac->newtrans, ac->root);
1165         kfree(ac);
1166 }
1167
1168 int btrfs_commit_transaction_async(struct btrfs_trans_handle *trans,
1169                                    struct btrfs_root *root,
1170                                    int wait_for_unblock)
1171 {
1172         struct btrfs_async_commit *ac;
1173         struct btrfs_transaction *cur_trans;
1174
1175         ac = kmalloc(sizeof(*ac), GFP_NOFS);
1176         if (!ac)
1177                 return -ENOMEM;
1178
1179         INIT_DELAYED_WORK(&ac->work, do_async_commit);
1180         ac->root = root;
1181         ac->newtrans = btrfs_join_transaction(root, 0);
1182         if (IS_ERR(ac->newtrans)) {
1183                 int err = PTR_ERR(ac->newtrans);
1184                 kfree(ac);
1185                 return err;
1186         }
1187
1188         /* take transaction reference */
1189         mutex_lock(&root->fs_info->trans_mutex);
1190         cur_trans = trans->transaction;
1191         atomic_inc(&cur_trans->use_count);
1192         mutex_unlock(&root->fs_info->trans_mutex);
1193
1194         btrfs_end_transaction(trans, root);
1195         schedule_delayed_work(&ac->work, 0);
1196
1197         /* wait for transaction to start and unblock */
1198         mutex_lock(&root->fs_info->trans_mutex);
1199         if (wait_for_unblock)
1200                 wait_current_trans_commit_start_and_unblock(root, cur_trans);
1201         else
1202                 wait_current_trans_commit_start(root, cur_trans);
1203         put_transaction(cur_trans);
1204         mutex_unlock(&root->fs_info->trans_mutex);
1205
1206         return 0;
1207 }
1208
1209 /*
1210  * btrfs_transaction state sequence:
1211  *    in_commit = 0, blocked = 0  (initial)
1212  *    in_commit = 1, blocked = 1
1213  *    blocked = 0
1214  *    commit_done = 1
1215  */
1216 int btrfs_commit_transaction(struct btrfs_trans_handle *trans,
1217                              struct btrfs_root *root)
1218 {
1219         unsigned long joined = 0;
1220         struct btrfs_transaction *cur_trans;
1221         struct btrfs_transaction *prev_trans = NULL;
1222         DEFINE_WAIT(wait);
1223         int ret;
1224         int should_grow = 0;
1225         unsigned long now = get_seconds();
1226         int flush_on_commit = btrfs_test_opt(root, FLUSHONCOMMIT);
1227
1228         btrfs_run_ordered_operations(root, 0);
1229
1230         /* make a pass through all the delayed refs we have so far
1231          * any runnings procs may add more while we are here
1232          */
1233         ret = btrfs_run_delayed_refs(trans, root, 0);
1234         BUG_ON(ret);
1235
1236         btrfs_trans_release_metadata(trans, root);
1237
1238         cur_trans = trans->transaction;
1239         /*
1240          * set the flushing flag so procs in this transaction have to
1241          * start sending their work down.
1242          */
1243         cur_trans->delayed_refs.flushing = 1;
1244
1245         ret = btrfs_run_delayed_refs(trans, root, 0);
1246         BUG_ON(ret);
1247
1248         mutex_lock(&root->fs_info->trans_mutex);
1249         if (cur_trans->in_commit) {
1250                 atomic_inc(&cur_trans->use_count);
1251                 mutex_unlock(&root->fs_info->trans_mutex);
1252                 btrfs_end_transaction(trans, root);
1253
1254                 ret = wait_for_commit(root, cur_trans);
1255                 BUG_ON(ret);
1256
1257                 mutex_lock(&root->fs_info->trans_mutex);
1258                 put_transaction(cur_trans);
1259                 mutex_unlock(&root->fs_info->trans_mutex);
1260
1261                 return 0;
1262         }
1263
1264         trans->transaction->in_commit = 1;
1265         trans->transaction->blocked = 1;
1266         wake_up(&root->fs_info->transaction_blocked_wait);
1267
1268         if (cur_trans->list.prev != &root->fs_info->trans_list) {
1269                 prev_trans = list_entry(cur_trans->list.prev,
1270                                         struct btrfs_transaction, list);
1271                 if (!prev_trans->commit_done) {
1272                         atomic_inc(&prev_trans->use_count);
1273                         mutex_unlock(&root->fs_info->trans_mutex);
1274
1275                         wait_for_commit(root, prev_trans);
1276
1277                         mutex_lock(&root->fs_info->trans_mutex);
1278                         put_transaction(prev_trans);
1279                 }
1280         }
1281
1282         if (now < cur_trans->start_time || now - cur_trans->start_time < 1)
1283                 should_grow = 1;
1284
1285         do {
1286                 int snap_pending = 0;
1287                 joined = cur_trans->num_joined;
1288                 if (!list_empty(&trans->transaction->pending_snapshots))
1289                         snap_pending = 1;
1290
1291                 WARN_ON(cur_trans != trans->transaction);
1292                 mutex_unlock(&root->fs_info->trans_mutex);
1293
1294                 if (flush_on_commit || snap_pending) {
1295                         btrfs_start_delalloc_inodes(root, 1);
1296                         ret = btrfs_wait_ordered_extents(root, 0, 1);
1297                         BUG_ON(ret);
1298                 }
1299
1300                 /*
1301                  * rename don't use btrfs_join_transaction, so, once we
1302                  * set the transaction to blocked above, we aren't going
1303                  * to get any new ordered operations.  We can safely run
1304                  * it here and no for sure that nothing new will be added
1305                  * to the list
1306                  */
1307                 btrfs_run_ordered_operations(root, 1);
1308
1309                 prepare_to_wait(&cur_trans->writer_wait, &wait,
1310                                 TASK_UNINTERRUPTIBLE);
1311
1312                 smp_mb();
1313                 if (atomic_read(&cur_trans->num_writers) > 1)
1314                         schedule_timeout(MAX_SCHEDULE_TIMEOUT);
1315                 else if (should_grow)
1316                         schedule_timeout(1);
1317
1318                 mutex_lock(&root->fs_info->trans_mutex);
1319                 finish_wait(&cur_trans->writer_wait, &wait);
1320         } while (atomic_read(&cur_trans->num_writers) > 1 ||
1321                  (should_grow && cur_trans->num_joined != joined));
1322
1323         ret = create_pending_snapshots(trans, root->fs_info);
1324         BUG_ON(ret);
1325
1326         ret = btrfs_run_delayed_refs(trans, root, (unsigned long)-1);
1327         BUG_ON(ret);
1328
1329         WARN_ON(cur_trans != trans->transaction);
1330
1331         /* btrfs_commit_tree_roots is responsible for getting the
1332          * various roots consistent with each other.  Every pointer
1333          * in the tree of tree roots has to point to the most up to date
1334          * root for every subvolume and other tree.  So, we have to keep
1335          * the tree logging code from jumping in and changing any
1336          * of the trees.
1337          *
1338          * At this point in the commit, there can't be any tree-log
1339          * writers, but a little lower down we drop the trans mutex
1340          * and let new people in.  By holding the tree_log_mutex
1341          * from now until after the super is written, we avoid races
1342          * with the tree-log code.
1343          */
1344         mutex_lock(&root->fs_info->tree_log_mutex);
1345
1346         ret = commit_fs_roots(trans, root);
1347         BUG_ON(ret);
1348
1349         /* commit_fs_roots gets rid of all the tree log roots, it is now
1350          * safe to free the root of tree log roots
1351          */
1352         btrfs_free_log_root_tree(trans, root->fs_info);
1353
1354         ret = commit_cowonly_roots(trans, root);
1355         BUG_ON(ret);
1356
1357         btrfs_prepare_extent_commit(trans, root);
1358
1359         cur_trans = root->fs_info->running_transaction;
1360         spin_lock(&root->fs_info->new_trans_lock);
1361         root->fs_info->running_transaction = NULL;
1362         spin_unlock(&root->fs_info->new_trans_lock);
1363
1364         btrfs_set_root_node(&root->fs_info->tree_root->root_item,
1365                             root->fs_info->tree_root->node);
1366         switch_commit_root(root->fs_info->tree_root);
1367
1368         btrfs_set_root_node(&root->fs_info->chunk_root->root_item,
1369                             root->fs_info->chunk_root->node);
1370         switch_commit_root(root->fs_info->chunk_root);
1371
1372         update_super_roots(root);
1373
1374         if (!root->fs_info->log_root_recovering) {
1375                 btrfs_set_super_log_root(&root->fs_info->super_copy, 0);
1376                 btrfs_set_super_log_root_level(&root->fs_info->super_copy, 0);
1377         }
1378
1379         memcpy(&root->fs_info->super_for_commit, &root->fs_info->super_copy,
1380                sizeof(root->fs_info->super_copy));
1381
1382         trans->transaction->blocked = 0;
1383
1384         wake_up(&root->fs_info->transaction_wait);
1385
1386         mutex_unlock(&root->fs_info->trans_mutex);
1387         ret = btrfs_write_and_wait_transaction(trans, root);
1388         BUG_ON(ret);
1389         write_ctree_super(trans, root, 0);
1390
1391         /*
1392          * the super is written, we can safely allow the tree-loggers
1393          * to go about their business
1394          */
1395         mutex_unlock(&root->fs_info->tree_log_mutex);
1396
1397         btrfs_finish_extent_commit(trans, root);
1398
1399         mutex_lock(&root->fs_info->trans_mutex);
1400
1401         cur_trans->commit_done = 1;
1402
1403         root->fs_info->last_trans_committed = cur_trans->transid;
1404
1405         wake_up(&cur_trans->commit_wait);
1406
1407         list_del_init(&cur_trans->list);
1408         put_transaction(cur_trans);
1409         put_transaction(cur_trans);
1410
1411         trace_btrfs_transaction_commit(root);
1412
1413         mutex_unlock(&root->fs_info->trans_mutex);
1414
1415         if (current->journal_info == trans)
1416                 current->journal_info = NULL;
1417
1418         kmem_cache_free(btrfs_trans_handle_cachep, trans);
1419
1420         if (current != root->fs_info->transaction_kthread)
1421                 btrfs_run_delayed_iputs(root);
1422
1423         return ret;
1424 }
1425
1426 /*
1427  * interface function to delete all the snapshots we have scheduled for deletion
1428  */
1429 int btrfs_clean_old_snapshots(struct btrfs_root *root)
1430 {
1431         LIST_HEAD(list);
1432         struct btrfs_fs_info *fs_info = root->fs_info;
1433
1434         mutex_lock(&fs_info->trans_mutex);
1435         list_splice_init(&fs_info->dead_roots, &list);
1436         mutex_unlock(&fs_info->trans_mutex);
1437
1438         while (!list_empty(&list)) {
1439                 root = list_entry(list.next, struct btrfs_root, root_list);
1440                 list_del(&root->root_list);
1441
1442                 if (btrfs_header_backref_rev(root->node) <
1443                     BTRFS_MIXED_BACKREF_REV)
1444                         btrfs_drop_snapshot(root, NULL, 0);
1445                 else
1446                         btrfs_drop_snapshot(root, NULL, 1);
1447         }
1448         return 0;
1449 }