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