71de435a291ebc974bdc931dfd8c2756cacdbfb8
[firefly-linux-kernel-4.4.55.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 <linux/uuid.h>
26 #include "ctree.h"
27 #include "disk-io.h"
28 #include "transaction.h"
29 #include "locking.h"
30 #include "tree-log.h"
31 #include "inode-map.h"
32 #include "volumes.h"
33 #include "dev-replace.h"
34
35 #define BTRFS_ROOT_TRANS_TAG 0
36
37 void put_transaction(struct btrfs_transaction *transaction)
38 {
39         WARN_ON(atomic_read(&transaction->use_count) == 0);
40         if (atomic_dec_and_test(&transaction->use_count)) {
41                 BUG_ON(!list_empty(&transaction->list));
42                 WARN_ON(transaction->delayed_refs.root.rb_node);
43                 kmem_cache_free(btrfs_transaction_cachep, transaction);
44         }
45 }
46
47 static noinline void switch_commit_root(struct btrfs_root *root)
48 {
49         free_extent_buffer(root->commit_root);
50         root->commit_root = btrfs_root_node(root);
51 }
52
53 static inline int can_join_transaction(struct btrfs_transaction *trans,
54                                        int type)
55 {
56         return !(trans->in_commit &&
57                  type != TRANS_JOIN &&
58                  type != TRANS_JOIN_NOLOCK);
59 }
60
61 /*
62  * either allocate a new transaction or hop into the existing one
63  */
64 static noinline int join_transaction(struct btrfs_root *root, int type)
65 {
66         struct btrfs_transaction *cur_trans;
67         struct btrfs_fs_info *fs_info = root->fs_info;
68
69         spin_lock(&fs_info->trans_lock);
70 loop:
71         /* The file system has been taken offline. No new transactions. */
72         if (test_bit(BTRFS_FS_STATE_ERROR, &fs_info->fs_state)) {
73                 spin_unlock(&fs_info->trans_lock);
74                 return -EROFS;
75         }
76
77         if (fs_info->trans_no_join) {
78                 /* 
79                  * If we are JOIN_NOLOCK we're already committing a current
80                  * transaction, we just need a handle to deal with something
81                  * when committing the transaction, such as inode cache and
82                  * space cache. It is a special case.
83                  */
84                 if (type != TRANS_JOIN_NOLOCK) {
85                         spin_unlock(&fs_info->trans_lock);
86                         return -EBUSY;
87                 }
88         }
89
90         cur_trans = fs_info->running_transaction;
91         if (cur_trans) {
92                 if (cur_trans->aborted) {
93                         spin_unlock(&fs_info->trans_lock);
94                         return cur_trans->aborted;
95                 }
96                 if (!can_join_transaction(cur_trans, type)) {
97                         spin_unlock(&fs_info->trans_lock);
98                         return -EBUSY;
99                 }
100                 atomic_inc(&cur_trans->use_count);
101                 atomic_inc(&cur_trans->num_writers);
102                 cur_trans->num_joined++;
103                 spin_unlock(&fs_info->trans_lock);
104                 return 0;
105         }
106         spin_unlock(&fs_info->trans_lock);
107
108         /*
109          * If we are ATTACH, we just want to catch the current transaction,
110          * and commit it. If there is no transaction, just return ENOENT.
111          */
112         if (type == TRANS_ATTACH)
113                 return -ENOENT;
114
115         cur_trans = kmem_cache_alloc(btrfs_transaction_cachep, GFP_NOFS);
116         if (!cur_trans)
117                 return -ENOMEM;
118
119         spin_lock(&fs_info->trans_lock);
120         if (fs_info->running_transaction) {
121                 /*
122                  * someone started a transaction after we unlocked.  Make sure
123                  * to redo the trans_no_join checks above
124                  */
125                 kmem_cache_free(btrfs_transaction_cachep, cur_trans);
126                 cur_trans = fs_info->running_transaction;
127                 goto loop;
128         } else if (test_bit(BTRFS_FS_STATE_ERROR, &fs_info->fs_state)) {
129                 spin_unlock(&fs_info->trans_lock);
130                 kmem_cache_free(btrfs_transaction_cachep, cur_trans);
131                 return -EROFS;
132         }
133
134         atomic_set(&cur_trans->num_writers, 1);
135         cur_trans->num_joined = 0;
136         init_waitqueue_head(&cur_trans->writer_wait);
137         init_waitqueue_head(&cur_trans->commit_wait);
138         cur_trans->in_commit = 0;
139         cur_trans->blocked = 0;
140         /*
141          * One for this trans handle, one so it will live on until we
142          * commit the transaction.
143          */
144         atomic_set(&cur_trans->use_count, 2);
145         cur_trans->commit_done = 0;
146         cur_trans->start_time = get_seconds();
147
148         cur_trans->delayed_refs.root = RB_ROOT;
149         cur_trans->delayed_refs.num_entries = 0;
150         cur_trans->delayed_refs.num_heads_ready = 0;
151         cur_trans->delayed_refs.num_heads = 0;
152         cur_trans->delayed_refs.flushing = 0;
153         cur_trans->delayed_refs.run_delayed_start = 0;
154
155         /*
156          * although the tree mod log is per file system and not per transaction,
157          * the log must never go across transaction boundaries.
158          */
159         smp_mb();
160         if (!list_empty(&fs_info->tree_mod_seq_list))
161                 WARN(1, KERN_ERR "btrfs: tree_mod_seq_list not empty when "
162                         "creating a fresh transaction\n");
163         if (!RB_EMPTY_ROOT(&fs_info->tree_mod_log))
164                 WARN(1, KERN_ERR "btrfs: tree_mod_log rb tree not empty when "
165                         "creating a fresh transaction\n");
166         atomic_set(&fs_info->tree_mod_seq, 0);
167
168         spin_lock_init(&cur_trans->commit_lock);
169         spin_lock_init(&cur_trans->delayed_refs.lock);
170         atomic_set(&cur_trans->delayed_refs.procs_running_refs, 0);
171         atomic_set(&cur_trans->delayed_refs.ref_seq, 0);
172         init_waitqueue_head(&cur_trans->delayed_refs.wait);
173
174         INIT_LIST_HEAD(&cur_trans->pending_snapshots);
175         INIT_LIST_HEAD(&cur_trans->ordered_operations);
176         list_add_tail(&cur_trans->list, &fs_info->trans_list);
177         extent_io_tree_init(&cur_trans->dirty_pages,
178                              fs_info->btree_inode->i_mapping);
179         fs_info->generation++;
180         cur_trans->transid = fs_info->generation;
181         fs_info->running_transaction = cur_trans;
182         cur_trans->aborted = 0;
183         spin_unlock(&fs_info->trans_lock);
184
185         return 0;
186 }
187
188 /*
189  * this does all the record keeping required to make sure that a reference
190  * counted root is properly recorded in a given transaction.  This is required
191  * to make sure the old root from before we joined the transaction is deleted
192  * when the transaction commits
193  */
194 static int record_root_in_trans(struct btrfs_trans_handle *trans,
195                                struct btrfs_root *root)
196 {
197         if (root->ref_cows && root->last_trans < trans->transid) {
198                 WARN_ON(root == root->fs_info->extent_root);
199                 WARN_ON(root->commit_root != root->node);
200
201                 /*
202                  * see below for in_trans_setup usage rules
203                  * we have the reloc mutex held now, so there
204                  * is only one writer in this function
205                  */
206                 root->in_trans_setup = 1;
207
208                 /* make sure readers find in_trans_setup before
209                  * they find our root->last_trans update
210                  */
211                 smp_wmb();
212
213                 spin_lock(&root->fs_info->fs_roots_radix_lock);
214                 if (root->last_trans == trans->transid) {
215                         spin_unlock(&root->fs_info->fs_roots_radix_lock);
216                         return 0;
217                 }
218                 radix_tree_tag_set(&root->fs_info->fs_roots_radix,
219                            (unsigned long)root->root_key.objectid,
220                            BTRFS_ROOT_TRANS_TAG);
221                 spin_unlock(&root->fs_info->fs_roots_radix_lock);
222                 root->last_trans = trans->transid;
223
224                 /* this is pretty tricky.  We don't want to
225                  * take the relocation lock in btrfs_record_root_in_trans
226                  * unless we're really doing the first setup for this root in
227                  * this transaction.
228                  *
229                  * Normally we'd use root->last_trans as a flag to decide
230                  * if we want to take the expensive mutex.
231                  *
232                  * But, we have to set root->last_trans before we
233                  * init the relocation root, otherwise, we trip over warnings
234                  * in ctree.c.  The solution used here is to flag ourselves
235                  * with root->in_trans_setup.  When this is 1, we're still
236                  * fixing up the reloc trees and everyone must wait.
237                  *
238                  * When this is zero, they can trust root->last_trans and fly
239                  * through btrfs_record_root_in_trans without having to take the
240                  * lock.  smp_wmb() makes sure that all the writes above are
241                  * done before we pop in the zero below
242                  */
243                 btrfs_init_reloc_root(trans, root);
244                 smp_wmb();
245                 root->in_trans_setup = 0;
246         }
247         return 0;
248 }
249
250
251 int btrfs_record_root_in_trans(struct btrfs_trans_handle *trans,
252                                struct btrfs_root *root)
253 {
254         if (!root->ref_cows)
255                 return 0;
256
257         /*
258          * see record_root_in_trans for comments about in_trans_setup usage
259          * and barriers
260          */
261         smp_rmb();
262         if (root->last_trans == trans->transid &&
263             !root->in_trans_setup)
264                 return 0;
265
266         mutex_lock(&root->fs_info->reloc_mutex);
267         record_root_in_trans(trans, root);
268         mutex_unlock(&root->fs_info->reloc_mutex);
269
270         return 0;
271 }
272
273 /* wait for commit against the current transaction to become unblocked
274  * when this is done, it is safe to start a new transaction, but the current
275  * transaction might not be fully on disk.
276  */
277 static void wait_current_trans(struct btrfs_root *root)
278 {
279         struct btrfs_transaction *cur_trans;
280
281         spin_lock(&root->fs_info->trans_lock);
282         cur_trans = root->fs_info->running_transaction;
283         if (cur_trans && cur_trans->blocked) {
284                 atomic_inc(&cur_trans->use_count);
285                 spin_unlock(&root->fs_info->trans_lock);
286
287                 wait_event(root->fs_info->transaction_wait,
288                            !cur_trans->blocked);
289                 put_transaction(cur_trans);
290         } else {
291                 spin_unlock(&root->fs_info->trans_lock);
292         }
293 }
294
295 static int may_wait_transaction(struct btrfs_root *root, int type)
296 {
297         if (root->fs_info->log_root_recovering)
298                 return 0;
299
300         if (type == TRANS_USERSPACE)
301                 return 1;
302
303         if (type == TRANS_START &&
304             !atomic_read(&root->fs_info->open_ioctl_trans))
305                 return 1;
306
307         return 0;
308 }
309
310 static struct btrfs_trans_handle *
311 start_transaction(struct btrfs_root *root, u64 num_items, int type,
312                   enum btrfs_reserve_flush_enum flush)
313 {
314         struct btrfs_trans_handle *h;
315         struct btrfs_transaction *cur_trans;
316         u64 num_bytes = 0;
317         int ret;
318         u64 qgroup_reserved = 0;
319
320         if (test_bit(BTRFS_FS_STATE_ERROR, &root->fs_info->fs_state))
321                 return ERR_PTR(-EROFS);
322
323         if (current->journal_info) {
324                 WARN_ON(type != TRANS_JOIN && type != TRANS_JOIN_NOLOCK);
325                 h = current->journal_info;
326                 h->use_count++;
327                 WARN_ON(h->use_count > 2);
328                 h->orig_rsv = h->block_rsv;
329                 h->block_rsv = NULL;
330                 goto got_it;
331         }
332
333         /*
334          * Do the reservation before we join the transaction so we can do all
335          * the appropriate flushing if need be.
336          */
337         if (num_items > 0 && root != root->fs_info->chunk_root) {
338                 if (root->fs_info->quota_enabled &&
339                     is_fstree(root->root_key.objectid)) {
340                         qgroup_reserved = num_items * root->leafsize;
341                         ret = btrfs_qgroup_reserve(root, qgroup_reserved);
342                         if (ret)
343                                 return ERR_PTR(ret);
344                 }
345
346                 num_bytes = btrfs_calc_trans_metadata_size(root, num_items);
347                 ret = btrfs_block_rsv_add(root,
348                                           &root->fs_info->trans_block_rsv,
349                                           num_bytes, flush);
350                 if (ret)
351                         goto reserve_fail;
352         }
353 again:
354         h = kmem_cache_alloc(btrfs_trans_handle_cachep, GFP_NOFS);
355         if (!h) {
356                 ret = -ENOMEM;
357                 goto alloc_fail;
358         }
359
360         /*
361          * If we are JOIN_NOLOCK we're already committing a transaction and
362          * waiting on this guy, so we don't need to do the sb_start_intwrite
363          * because we're already holding a ref.  We need this because we could
364          * have raced in and did an fsync() on a file which can kick a commit
365          * and then we deadlock with somebody doing a freeze.
366          *
367          * If we are ATTACH, it means we just want to catch the current
368          * transaction and commit it, so we needn't do sb_start_intwrite(). 
369          */
370         if (type < TRANS_JOIN_NOLOCK)
371                 sb_start_intwrite(root->fs_info->sb);
372
373         if (may_wait_transaction(root, type))
374                 wait_current_trans(root);
375
376         do {
377                 ret = join_transaction(root, type);
378                 if (ret == -EBUSY) {
379                         wait_current_trans(root);
380                         if (unlikely(type == TRANS_ATTACH))
381                                 ret = -ENOENT;
382                 }
383         } while (ret == -EBUSY);
384
385         if (ret < 0) {
386                 /* We must get the transaction if we are JOIN_NOLOCK. */
387                 BUG_ON(type == TRANS_JOIN_NOLOCK);
388                 goto join_fail;
389         }
390
391         cur_trans = root->fs_info->running_transaction;
392
393         h->transid = cur_trans->transid;
394         h->transaction = cur_trans;
395         h->blocks_used = 0;
396         h->bytes_reserved = 0;
397         h->root = root;
398         h->delayed_ref_updates = 0;
399         h->use_count = 1;
400         h->adding_csums = 0;
401         h->block_rsv = NULL;
402         h->orig_rsv = NULL;
403         h->aborted = 0;
404         h->qgroup_reserved = 0;
405         h->delayed_ref_elem.seq = 0;
406         h->type = type;
407         h->allocating_chunk = false;
408         INIT_LIST_HEAD(&h->qgroup_ref_list);
409         INIT_LIST_HEAD(&h->new_bgs);
410
411         smp_mb();
412         if (cur_trans->blocked && may_wait_transaction(root, type)) {
413                 btrfs_commit_transaction(h, root);
414                 goto again;
415         }
416
417         if (num_bytes) {
418                 trace_btrfs_space_reservation(root->fs_info, "transaction",
419                                               h->transid, num_bytes, 1);
420                 h->block_rsv = &root->fs_info->trans_block_rsv;
421                 h->bytes_reserved = num_bytes;
422         }
423         h->qgroup_reserved = qgroup_reserved;
424
425 got_it:
426         btrfs_record_root_in_trans(h, root);
427
428         if (!current->journal_info && type != TRANS_USERSPACE)
429                 current->journal_info = h;
430         return h;
431
432 join_fail:
433         if (type < TRANS_JOIN_NOLOCK)
434                 sb_end_intwrite(root->fs_info->sb);
435         kmem_cache_free(btrfs_trans_handle_cachep, h);
436 alloc_fail:
437         if (num_bytes)
438                 btrfs_block_rsv_release(root, &root->fs_info->trans_block_rsv,
439                                         num_bytes);
440 reserve_fail:
441         if (qgroup_reserved)
442                 btrfs_qgroup_free(root, qgroup_reserved);
443         return ERR_PTR(ret);
444 }
445
446 struct btrfs_trans_handle *btrfs_start_transaction(struct btrfs_root *root,
447                                                    int num_items)
448 {
449         return start_transaction(root, num_items, TRANS_START,
450                                  BTRFS_RESERVE_FLUSH_ALL);
451 }
452
453 struct btrfs_trans_handle *btrfs_start_transaction_lflush(
454                                         struct btrfs_root *root, int num_items)
455 {
456         return start_transaction(root, num_items, TRANS_START,
457                                  BTRFS_RESERVE_FLUSH_LIMIT);
458 }
459
460 struct btrfs_trans_handle *btrfs_join_transaction(struct btrfs_root *root)
461 {
462         return start_transaction(root, 0, TRANS_JOIN, 0);
463 }
464
465 struct btrfs_trans_handle *btrfs_join_transaction_nolock(struct btrfs_root *root)
466 {
467         return start_transaction(root, 0, TRANS_JOIN_NOLOCK, 0);
468 }
469
470 struct btrfs_trans_handle *btrfs_start_ioctl_transaction(struct btrfs_root *root)
471 {
472         return start_transaction(root, 0, TRANS_USERSPACE, 0);
473 }
474
475 /*
476  * btrfs_attach_transaction() - catch the running transaction
477  *
478  * It is used when we want to commit the current the transaction, but
479  * don't want to start a new one.
480  *
481  * Note: If this function return -ENOENT, it just means there is no
482  * running transaction. But it is possible that the inactive transaction
483  * is still in the memory, not fully on disk. If you hope there is no
484  * inactive transaction in the fs when -ENOENT is returned, you should
485  * invoke
486  *     btrfs_attach_transaction_barrier()
487  */
488 struct btrfs_trans_handle *btrfs_attach_transaction(struct btrfs_root *root)
489 {
490         return start_transaction(root, 0, TRANS_ATTACH, 0);
491 }
492
493 /*
494  * btrfs_attach_transaction() - catch the running transaction
495  *
496  * It is similar to the above function, the differentia is this one
497  * will wait for all the inactive transactions until they fully
498  * complete.
499  */
500 struct btrfs_trans_handle *
501 btrfs_attach_transaction_barrier(struct btrfs_root *root)
502 {
503         struct btrfs_trans_handle *trans;
504
505         trans = start_transaction(root, 0, TRANS_ATTACH, 0);
506         if (IS_ERR(trans) && PTR_ERR(trans) == -ENOENT)
507                 btrfs_wait_for_commit(root, 0);
508
509         return trans;
510 }
511
512 /* wait for a transaction commit to be fully complete */
513 static noinline void wait_for_commit(struct btrfs_root *root,
514                                     struct btrfs_transaction *commit)
515 {
516         wait_event(commit->commit_wait, commit->commit_done);
517 }
518
519 int btrfs_wait_for_commit(struct btrfs_root *root, u64 transid)
520 {
521         struct btrfs_transaction *cur_trans = NULL, *t;
522         int ret = 0;
523
524         if (transid) {
525                 if (transid <= root->fs_info->last_trans_committed)
526                         goto out;
527
528                 ret = -EINVAL;
529                 /* find specified transaction */
530                 spin_lock(&root->fs_info->trans_lock);
531                 list_for_each_entry(t, &root->fs_info->trans_list, list) {
532                         if (t->transid == transid) {
533                                 cur_trans = t;
534                                 atomic_inc(&cur_trans->use_count);
535                                 ret = 0;
536                                 break;
537                         }
538                         if (t->transid > transid) {
539                                 ret = 0;
540                                 break;
541                         }
542                 }
543                 spin_unlock(&root->fs_info->trans_lock);
544                 /* The specified transaction doesn't exist */
545                 if (!cur_trans)
546                         goto out;
547         } else {
548                 /* find newest transaction that is committing | committed */
549                 spin_lock(&root->fs_info->trans_lock);
550                 list_for_each_entry_reverse(t, &root->fs_info->trans_list,
551                                             list) {
552                         if (t->in_commit) {
553                                 if (t->commit_done)
554                                         break;
555                                 cur_trans = t;
556                                 atomic_inc(&cur_trans->use_count);
557                                 break;
558                         }
559                 }
560                 spin_unlock(&root->fs_info->trans_lock);
561                 if (!cur_trans)
562                         goto out;  /* nothing committing|committed */
563         }
564
565         wait_for_commit(root, cur_trans);
566         put_transaction(cur_trans);
567 out:
568         return ret;
569 }
570
571 void btrfs_throttle(struct btrfs_root *root)
572 {
573         if (!atomic_read(&root->fs_info->open_ioctl_trans))
574                 wait_current_trans(root);
575 }
576
577 static int should_end_transaction(struct btrfs_trans_handle *trans,
578                                   struct btrfs_root *root)
579 {
580         int ret;
581
582         ret = btrfs_block_rsv_check(root, &root->fs_info->global_block_rsv, 5);
583         return ret ? 1 : 0;
584 }
585
586 int btrfs_should_end_transaction(struct btrfs_trans_handle *trans,
587                                  struct btrfs_root *root)
588 {
589         struct btrfs_transaction *cur_trans = trans->transaction;
590         int updates;
591         int err;
592
593         smp_mb();
594         if (cur_trans->blocked || cur_trans->delayed_refs.flushing)
595                 return 1;
596
597         updates = trans->delayed_ref_updates;
598         trans->delayed_ref_updates = 0;
599         if (updates) {
600                 err = btrfs_run_delayed_refs(trans, root, updates);
601                 if (err) /* Error code will also eval true */
602                         return err;
603         }
604
605         return should_end_transaction(trans, root);
606 }
607
608 static int __btrfs_end_transaction(struct btrfs_trans_handle *trans,
609                           struct btrfs_root *root, int throttle)
610 {
611         struct btrfs_transaction *cur_trans = trans->transaction;
612         struct btrfs_fs_info *info = root->fs_info;
613         int count = 0;
614         int lock = (trans->type != TRANS_JOIN_NOLOCK);
615         int err = 0;
616
617         if (--trans->use_count) {
618                 trans->block_rsv = trans->orig_rsv;
619                 return 0;
620         }
621
622         /*
623          * do the qgroup accounting as early as possible
624          */
625         err = btrfs_delayed_refs_qgroup_accounting(trans, info);
626
627         btrfs_trans_release_metadata(trans, root);
628         trans->block_rsv = NULL;
629         /*
630          * the same root has to be passed to start_transaction and
631          * end_transaction. Subvolume quota depends on this.
632          */
633         WARN_ON(trans->root != root);
634
635         if (trans->qgroup_reserved) {
636                 btrfs_qgroup_free(root, trans->qgroup_reserved);
637                 trans->qgroup_reserved = 0;
638         }
639
640         if (!list_empty(&trans->new_bgs))
641                 btrfs_create_pending_block_groups(trans, root);
642
643         while (count < 1) {
644                 unsigned long cur = trans->delayed_ref_updates;
645                 trans->delayed_ref_updates = 0;
646                 if (cur &&
647                     trans->transaction->delayed_refs.num_heads_ready > 64) {
648                         trans->delayed_ref_updates = 0;
649                         btrfs_run_delayed_refs(trans, root, cur);
650                 } else {
651                         break;
652                 }
653                 count++;
654         }
655
656         btrfs_trans_release_metadata(trans, root);
657         trans->block_rsv = NULL;
658
659         if (!list_empty(&trans->new_bgs))
660                 btrfs_create_pending_block_groups(trans, root);
661
662         if (lock && !atomic_read(&root->fs_info->open_ioctl_trans) &&
663             should_end_transaction(trans, root)) {
664                 trans->transaction->blocked = 1;
665                 smp_wmb();
666         }
667
668         if (lock && cur_trans->blocked && !cur_trans->in_commit) {
669                 if (throttle) {
670                         /*
671                          * We may race with somebody else here so end up having
672                          * to call end_transaction on ourselves again, so inc
673                          * our use_count.
674                          */
675                         trans->use_count++;
676                         return btrfs_commit_transaction(trans, root);
677                 } else {
678                         wake_up_process(info->transaction_kthread);
679                 }
680         }
681
682         if (trans->type < TRANS_JOIN_NOLOCK)
683                 sb_end_intwrite(root->fs_info->sb);
684
685         WARN_ON(cur_trans != info->running_transaction);
686         WARN_ON(atomic_read(&cur_trans->num_writers) < 1);
687         atomic_dec(&cur_trans->num_writers);
688
689         smp_mb();
690         if (waitqueue_active(&cur_trans->writer_wait))
691                 wake_up(&cur_trans->writer_wait);
692         put_transaction(cur_trans);
693
694         if (current->journal_info == trans)
695                 current->journal_info = NULL;
696
697         if (throttle)
698                 btrfs_run_delayed_iputs(root);
699
700         if (trans->aborted ||
701             test_bit(BTRFS_FS_STATE_ERROR, &root->fs_info->fs_state))
702                 err = -EIO;
703         assert_qgroups_uptodate(trans);
704
705         kmem_cache_free(btrfs_trans_handle_cachep, trans);
706         return err;
707 }
708
709 int btrfs_end_transaction(struct btrfs_trans_handle *trans,
710                           struct btrfs_root *root)
711 {
712         int ret;
713
714         ret = __btrfs_end_transaction(trans, root, 0);
715         if (ret)
716                 return ret;
717         return 0;
718 }
719
720 int btrfs_end_transaction_throttle(struct btrfs_trans_handle *trans,
721                                    struct btrfs_root *root)
722 {
723         int ret;
724
725         ret = __btrfs_end_transaction(trans, root, 1);
726         if (ret)
727                 return ret;
728         return 0;
729 }
730
731 int btrfs_end_transaction_dmeta(struct btrfs_trans_handle *trans,
732                                 struct btrfs_root *root)
733 {
734         return __btrfs_end_transaction(trans, root, 1);
735 }
736
737 /*
738  * when btree blocks are allocated, they have some corresponding bits set for
739  * them in one of two extent_io trees.  This is used to make sure all of
740  * those extents are sent to disk but does not wait on them
741  */
742 int btrfs_write_marked_extents(struct btrfs_root *root,
743                                struct extent_io_tree *dirty_pages, int mark)
744 {
745         int err = 0;
746         int werr = 0;
747         struct address_space *mapping = root->fs_info->btree_inode->i_mapping;
748         struct extent_state *cached_state = NULL;
749         u64 start = 0;
750         u64 end;
751         struct blk_plug plug;
752
753         blk_start_plug(&plug);
754         while (!find_first_extent_bit(dirty_pages, start, &start, &end,
755                                       mark, &cached_state)) {
756                 convert_extent_bit(dirty_pages, start, end, EXTENT_NEED_WAIT,
757                                    mark, &cached_state, GFP_NOFS);
758                 cached_state = NULL;
759                 err = filemap_fdatawrite_range(mapping, start, end);
760                 if (err)
761                         werr = err;
762                 cond_resched();
763                 start = end + 1;
764         }
765         if (err)
766                 werr = err;
767         blk_finish_plug(&plug);
768         return werr;
769 }
770
771 /*
772  * when btree blocks are allocated, they have some corresponding bits set for
773  * them in one of two extent_io trees.  This is used to make sure all of
774  * those extents are on disk for transaction or log commit.  We wait
775  * on all the pages and clear them from the dirty pages state tree
776  */
777 int btrfs_wait_marked_extents(struct btrfs_root *root,
778                               struct extent_io_tree *dirty_pages, int mark)
779 {
780         int err = 0;
781         int werr = 0;
782         struct address_space *mapping = root->fs_info->btree_inode->i_mapping;
783         struct extent_state *cached_state = NULL;
784         u64 start = 0;
785         u64 end;
786
787         while (!find_first_extent_bit(dirty_pages, start, &start, &end,
788                                       EXTENT_NEED_WAIT, &cached_state)) {
789                 clear_extent_bit(dirty_pages, start, end, EXTENT_NEED_WAIT,
790                                  0, 0, &cached_state, GFP_NOFS);
791                 err = filemap_fdatawait_range(mapping, start, end);
792                 if (err)
793                         werr = err;
794                 cond_resched();
795                 start = end + 1;
796         }
797         if (err)
798                 werr = err;
799         return werr;
800 }
801
802 /*
803  * when btree blocks are allocated, they have some corresponding bits set for
804  * them in one of two extent_io trees.  This is used to make sure all of
805  * those extents are on disk for transaction or log commit
806  */
807 int btrfs_write_and_wait_marked_extents(struct btrfs_root *root,
808                                 struct extent_io_tree *dirty_pages, int mark)
809 {
810         int ret;
811         int ret2;
812
813         ret = btrfs_write_marked_extents(root, dirty_pages, mark);
814         ret2 = btrfs_wait_marked_extents(root, dirty_pages, mark);
815
816         if (ret)
817                 return ret;
818         if (ret2)
819                 return ret2;
820         return 0;
821 }
822
823 int btrfs_write_and_wait_transaction(struct btrfs_trans_handle *trans,
824                                      struct btrfs_root *root)
825 {
826         if (!trans || !trans->transaction) {
827                 struct inode *btree_inode;
828                 btree_inode = root->fs_info->btree_inode;
829                 return filemap_write_and_wait(btree_inode->i_mapping);
830         }
831         return btrfs_write_and_wait_marked_extents(root,
832                                            &trans->transaction->dirty_pages,
833                                            EXTENT_DIRTY);
834 }
835
836 /*
837  * this is used to update the root pointer in the tree of tree roots.
838  *
839  * But, in the case of the extent allocation tree, updating the root
840  * pointer may allocate blocks which may change the root of the extent
841  * allocation tree.
842  *
843  * So, this loops and repeats and makes sure the cowonly root didn't
844  * change while the root pointer was being updated in the metadata.
845  */
846 static int update_cowonly_root(struct btrfs_trans_handle *trans,
847                                struct btrfs_root *root)
848 {
849         int ret;
850         u64 old_root_bytenr;
851         u64 old_root_used;
852         struct btrfs_root *tree_root = root->fs_info->tree_root;
853
854         old_root_used = btrfs_root_used(&root->root_item);
855         btrfs_write_dirty_block_groups(trans, root);
856
857         while (1) {
858                 old_root_bytenr = btrfs_root_bytenr(&root->root_item);
859                 if (old_root_bytenr == root->node->start &&
860                     old_root_used == btrfs_root_used(&root->root_item))
861                         break;
862
863                 btrfs_set_root_node(&root->root_item, root->node);
864                 ret = btrfs_update_root(trans, tree_root,
865                                         &root->root_key,
866                                         &root->root_item);
867                 if (ret)
868                         return ret;
869
870                 old_root_used = btrfs_root_used(&root->root_item);
871                 ret = btrfs_write_dirty_block_groups(trans, root);
872                 if (ret)
873                         return ret;
874         }
875
876         if (root != root->fs_info->extent_root)
877                 switch_commit_root(root);
878
879         return 0;
880 }
881
882 /*
883  * update all the cowonly tree roots on disk
884  *
885  * The error handling in this function may not be obvious. Any of the
886  * failures will cause the file system to go offline. We still need
887  * to clean up the delayed refs.
888  */
889 static noinline int commit_cowonly_roots(struct btrfs_trans_handle *trans,
890                                          struct btrfs_root *root)
891 {
892         struct btrfs_fs_info *fs_info = root->fs_info;
893         struct list_head *next;
894         struct extent_buffer *eb;
895         int ret;
896
897         ret = btrfs_run_delayed_refs(trans, root, (unsigned long)-1);
898         if (ret)
899                 return ret;
900
901         eb = btrfs_lock_root_node(fs_info->tree_root);
902         ret = btrfs_cow_block(trans, fs_info->tree_root, eb, NULL,
903                               0, &eb);
904         btrfs_tree_unlock(eb);
905         free_extent_buffer(eb);
906
907         if (ret)
908                 return ret;
909
910         ret = btrfs_run_delayed_refs(trans, root, (unsigned long)-1);
911         if (ret)
912                 return ret;
913
914         ret = btrfs_run_dev_stats(trans, root->fs_info);
915         WARN_ON(ret);
916         ret = btrfs_run_dev_replace(trans, root->fs_info);
917         WARN_ON(ret);
918
919         ret = btrfs_run_qgroups(trans, root->fs_info);
920         BUG_ON(ret);
921
922         /* run_qgroups might have added some more refs */
923         ret = btrfs_run_delayed_refs(trans, root, (unsigned long)-1);
924         BUG_ON(ret);
925
926         while (!list_empty(&fs_info->dirty_cowonly_roots)) {
927                 next = fs_info->dirty_cowonly_roots.next;
928                 list_del_init(next);
929                 root = list_entry(next, struct btrfs_root, dirty_list);
930
931                 ret = update_cowonly_root(trans, root);
932                 if (ret)
933                         return ret;
934         }
935
936         down_write(&fs_info->extent_commit_sem);
937         switch_commit_root(fs_info->extent_root);
938         up_write(&fs_info->extent_commit_sem);
939
940         btrfs_after_dev_replace_commit(fs_info);
941
942         return 0;
943 }
944
945 /*
946  * dead roots are old snapshots that need to be deleted.  This allocates
947  * a dirty root struct and adds it into the list of dead roots that need to
948  * be deleted
949  */
950 int btrfs_add_dead_root(struct btrfs_root *root)
951 {
952         spin_lock(&root->fs_info->trans_lock);
953         list_add(&root->root_list, &root->fs_info->dead_roots);
954         spin_unlock(&root->fs_info->trans_lock);
955         return 0;
956 }
957
958 /*
959  * update all the cowonly tree roots on disk
960  */
961 static noinline int commit_fs_roots(struct btrfs_trans_handle *trans,
962                                     struct btrfs_root *root)
963 {
964         struct btrfs_root *gang[8];
965         struct btrfs_fs_info *fs_info = root->fs_info;
966         int i;
967         int ret;
968         int err = 0;
969
970         spin_lock(&fs_info->fs_roots_radix_lock);
971         while (1) {
972                 ret = radix_tree_gang_lookup_tag(&fs_info->fs_roots_radix,
973                                                  (void **)gang, 0,
974                                                  ARRAY_SIZE(gang),
975                                                  BTRFS_ROOT_TRANS_TAG);
976                 if (ret == 0)
977                         break;
978                 for (i = 0; i < ret; i++) {
979                         root = gang[i];
980                         radix_tree_tag_clear(&fs_info->fs_roots_radix,
981                                         (unsigned long)root->root_key.objectid,
982                                         BTRFS_ROOT_TRANS_TAG);
983                         spin_unlock(&fs_info->fs_roots_radix_lock);
984
985                         btrfs_free_log(trans, root);
986                         btrfs_update_reloc_root(trans, root);
987                         btrfs_orphan_commit_root(trans, root);
988
989                         btrfs_save_ino_cache(root, trans);
990
991                         /* see comments in should_cow_block() */
992                         root->force_cow = 0;
993                         smp_wmb();
994
995                         if (root->commit_root != root->node) {
996                                 mutex_lock(&root->fs_commit_mutex);
997                                 switch_commit_root(root);
998                                 btrfs_unpin_free_ino(root);
999                                 mutex_unlock(&root->fs_commit_mutex);
1000
1001                                 btrfs_set_root_node(&root->root_item,
1002                                                     root->node);
1003                         }
1004
1005                         err = btrfs_update_root(trans, fs_info->tree_root,
1006                                                 &root->root_key,
1007                                                 &root->root_item);
1008                         spin_lock(&fs_info->fs_roots_radix_lock);
1009                         if (err)
1010                                 break;
1011                 }
1012         }
1013         spin_unlock(&fs_info->fs_roots_radix_lock);
1014         return err;
1015 }
1016
1017 /*
1018  * defrag a given btree.
1019  * Every leaf in the btree is read and defragged.
1020  */
1021 int btrfs_defrag_root(struct btrfs_root *root)
1022 {
1023         struct btrfs_fs_info *info = root->fs_info;
1024         struct btrfs_trans_handle *trans;
1025         int ret;
1026
1027         if (xchg(&root->defrag_running, 1))
1028                 return 0;
1029
1030         while (1) {
1031                 trans = btrfs_start_transaction(root, 0);
1032                 if (IS_ERR(trans))
1033                         return PTR_ERR(trans);
1034
1035                 ret = btrfs_defrag_leaves(trans, root);
1036
1037                 btrfs_end_transaction(trans, root);
1038                 btrfs_btree_balance_dirty(info->tree_root);
1039                 cond_resched();
1040
1041                 if (btrfs_fs_closing(root->fs_info) || ret != -EAGAIN)
1042                         break;
1043
1044                 if (btrfs_defrag_cancelled(root->fs_info)) {
1045                         printk(KERN_DEBUG "btrfs: defrag_root cancelled\n");
1046                         ret = -EAGAIN;
1047                         break;
1048                 }
1049         }
1050         root->defrag_running = 0;
1051         return ret;
1052 }
1053
1054 /*
1055  * new snapshots need to be created at a very specific time in the
1056  * transaction commit.  This does the actual creation
1057  */
1058 static noinline int create_pending_snapshot(struct btrfs_trans_handle *trans,
1059                                    struct btrfs_fs_info *fs_info,
1060                                    struct btrfs_pending_snapshot *pending)
1061 {
1062         struct btrfs_key key;
1063         struct btrfs_root_item *new_root_item;
1064         struct btrfs_root *tree_root = fs_info->tree_root;
1065         struct btrfs_root *root = pending->root;
1066         struct btrfs_root *parent_root;
1067         struct btrfs_block_rsv *rsv;
1068         struct inode *parent_inode;
1069         struct btrfs_path *path;
1070         struct btrfs_dir_item *dir_item;
1071         struct dentry *dentry;
1072         struct extent_buffer *tmp;
1073         struct extent_buffer *old;
1074         struct timespec cur_time = CURRENT_TIME;
1075         int ret;
1076         u64 to_reserve = 0;
1077         u64 index = 0;
1078         u64 objectid;
1079         u64 root_flags;
1080         uuid_le new_uuid;
1081
1082         path = btrfs_alloc_path();
1083         if (!path) {
1084                 ret = pending->error = -ENOMEM;
1085                 goto path_alloc_fail;
1086         }
1087
1088         new_root_item = kmalloc(sizeof(*new_root_item), GFP_NOFS);
1089         if (!new_root_item) {
1090                 ret = pending->error = -ENOMEM;
1091                 goto root_item_alloc_fail;
1092         }
1093
1094         ret = btrfs_find_free_objectid(tree_root, &objectid);
1095         if (ret) {
1096                 pending->error = ret;
1097                 goto no_free_objectid;
1098         }
1099
1100         btrfs_reloc_pre_snapshot(trans, pending, &to_reserve);
1101
1102         if (to_reserve > 0) {
1103                 ret = btrfs_block_rsv_add(root, &pending->block_rsv,
1104                                           to_reserve,
1105                                           BTRFS_RESERVE_NO_FLUSH);
1106                 if (ret) {
1107                         pending->error = ret;
1108                         goto no_free_objectid;
1109                 }
1110         }
1111
1112         ret = btrfs_qgroup_inherit(trans, fs_info, root->root_key.objectid,
1113                                    objectid, pending->inherit);
1114         if (ret) {
1115                 pending->error = ret;
1116                 goto no_free_objectid;
1117         }
1118
1119         key.objectid = objectid;
1120         key.offset = (u64)-1;
1121         key.type = BTRFS_ROOT_ITEM_KEY;
1122
1123         rsv = trans->block_rsv;
1124         trans->block_rsv = &pending->block_rsv;
1125         trans->bytes_reserved = trans->block_rsv->reserved;
1126
1127         dentry = pending->dentry;
1128         parent_inode = pending->dir;
1129         parent_root = BTRFS_I(parent_inode)->root;
1130         record_root_in_trans(trans, parent_root);
1131
1132         /*
1133          * insert the directory item
1134          */
1135         ret = btrfs_set_inode_index(parent_inode, &index);
1136         BUG_ON(ret); /* -ENOMEM */
1137
1138         /* check if there is a file/dir which has the same name. */
1139         dir_item = btrfs_lookup_dir_item(NULL, parent_root, path,
1140                                          btrfs_ino(parent_inode),
1141                                          dentry->d_name.name,
1142                                          dentry->d_name.len, 0);
1143         if (dir_item != NULL && !IS_ERR(dir_item)) {
1144                 pending->error = -EEXIST;
1145                 goto fail;
1146         } else if (IS_ERR(dir_item)) {
1147                 ret = PTR_ERR(dir_item);
1148                 btrfs_abort_transaction(trans, root, ret);
1149                 goto fail;
1150         }
1151         btrfs_release_path(path);
1152
1153         /*
1154          * pull in the delayed directory update
1155          * and the delayed inode item
1156          * otherwise we corrupt the FS during
1157          * snapshot
1158          */
1159         ret = btrfs_run_delayed_items(trans, root);
1160         if (ret) {      /* Transaction aborted */
1161                 btrfs_abort_transaction(trans, root, ret);
1162                 goto fail;
1163         }
1164
1165         record_root_in_trans(trans, root);
1166         btrfs_set_root_last_snapshot(&root->root_item, trans->transid);
1167         memcpy(new_root_item, &root->root_item, sizeof(*new_root_item));
1168         btrfs_check_and_init_root_item(new_root_item);
1169
1170         root_flags = btrfs_root_flags(new_root_item);
1171         if (pending->readonly)
1172                 root_flags |= BTRFS_ROOT_SUBVOL_RDONLY;
1173         else
1174                 root_flags &= ~BTRFS_ROOT_SUBVOL_RDONLY;
1175         btrfs_set_root_flags(new_root_item, root_flags);
1176
1177         btrfs_set_root_generation_v2(new_root_item,
1178                         trans->transid);
1179         uuid_le_gen(&new_uuid);
1180         memcpy(new_root_item->uuid, new_uuid.b, BTRFS_UUID_SIZE);
1181         memcpy(new_root_item->parent_uuid, root->root_item.uuid,
1182                         BTRFS_UUID_SIZE);
1183         new_root_item->otime.sec = cpu_to_le64(cur_time.tv_sec);
1184         new_root_item->otime.nsec = cpu_to_le32(cur_time.tv_nsec);
1185         btrfs_set_root_otransid(new_root_item, trans->transid);
1186         memset(&new_root_item->stime, 0, sizeof(new_root_item->stime));
1187         memset(&new_root_item->rtime, 0, sizeof(new_root_item->rtime));
1188         btrfs_set_root_stransid(new_root_item, 0);
1189         btrfs_set_root_rtransid(new_root_item, 0);
1190
1191         old = btrfs_lock_root_node(root);
1192         ret = btrfs_cow_block(trans, root, old, NULL, 0, &old);
1193         if (ret) {
1194                 btrfs_tree_unlock(old);
1195                 free_extent_buffer(old);
1196                 btrfs_abort_transaction(trans, root, ret);
1197                 goto fail;
1198         }
1199
1200         btrfs_set_lock_blocking(old);
1201
1202         ret = btrfs_copy_root(trans, root, old, &tmp, objectid);
1203         /* clean up in any case */
1204         btrfs_tree_unlock(old);
1205         free_extent_buffer(old);
1206         if (ret) {
1207                 btrfs_abort_transaction(trans, root, ret);
1208                 goto fail;
1209         }
1210
1211         /* see comments in should_cow_block() */
1212         root->force_cow = 1;
1213         smp_wmb();
1214
1215         btrfs_set_root_node(new_root_item, tmp);
1216         /* record when the snapshot was created in key.offset */
1217         key.offset = trans->transid;
1218         ret = btrfs_insert_root(trans, tree_root, &key, new_root_item);
1219         btrfs_tree_unlock(tmp);
1220         free_extent_buffer(tmp);
1221         if (ret) {
1222                 btrfs_abort_transaction(trans, root, ret);
1223                 goto fail;
1224         }
1225
1226         /*
1227          * insert root back/forward references
1228          */
1229         ret = btrfs_add_root_ref(trans, tree_root, objectid,
1230                                  parent_root->root_key.objectid,
1231                                  btrfs_ino(parent_inode), index,
1232                                  dentry->d_name.name, dentry->d_name.len);
1233         if (ret) {
1234                 btrfs_abort_transaction(trans, root, ret);
1235                 goto fail;
1236         }
1237
1238         key.offset = (u64)-1;
1239         pending->snap = btrfs_read_fs_root_no_name(root->fs_info, &key);
1240         if (IS_ERR(pending->snap)) {
1241                 ret = PTR_ERR(pending->snap);
1242                 btrfs_abort_transaction(trans, root, ret);
1243                 goto fail;
1244         }
1245
1246         ret = btrfs_reloc_post_snapshot(trans, pending);
1247         if (ret) {
1248                 btrfs_abort_transaction(trans, root, ret);
1249                 goto fail;
1250         }
1251
1252         ret = btrfs_run_delayed_refs(trans, root, (unsigned long)-1);
1253         if (ret) {
1254                 btrfs_abort_transaction(trans, root, ret);
1255                 goto fail;
1256         }
1257
1258         ret = btrfs_insert_dir_item(trans, parent_root,
1259                                     dentry->d_name.name, dentry->d_name.len,
1260                                     parent_inode, &key,
1261                                     BTRFS_FT_DIR, index);
1262         /* We have check then name at the beginning, so it is impossible. */
1263         BUG_ON(ret == -EEXIST || ret == -EOVERFLOW);
1264         if (ret) {
1265                 btrfs_abort_transaction(trans, root, ret);
1266                 goto fail;
1267         }
1268
1269         btrfs_i_size_write(parent_inode, parent_inode->i_size +
1270                                          dentry->d_name.len * 2);
1271         parent_inode->i_mtime = parent_inode->i_ctime = CURRENT_TIME;
1272         ret = btrfs_update_inode_fallback(trans, parent_root, parent_inode);
1273         if (ret)
1274                 btrfs_abort_transaction(trans, root, ret);
1275 fail:
1276         trans->block_rsv = rsv;
1277         trans->bytes_reserved = 0;
1278 no_free_objectid:
1279         kfree(new_root_item);
1280 root_item_alloc_fail:
1281         btrfs_free_path(path);
1282 path_alloc_fail:
1283         btrfs_block_rsv_release(root, &pending->block_rsv, (u64)-1);
1284         return ret;
1285 }
1286
1287 /*
1288  * create all the snapshots we've scheduled for creation
1289  */
1290 static noinline int create_pending_snapshots(struct btrfs_trans_handle *trans,
1291                                              struct btrfs_fs_info *fs_info)
1292 {
1293         struct btrfs_pending_snapshot *pending;
1294         struct list_head *head = &trans->transaction->pending_snapshots;
1295
1296         list_for_each_entry(pending, head, list)
1297                 create_pending_snapshot(trans, fs_info, pending);
1298         return 0;
1299 }
1300
1301 static void update_super_roots(struct btrfs_root *root)
1302 {
1303         struct btrfs_root_item *root_item;
1304         struct btrfs_super_block *super;
1305
1306         super = root->fs_info->super_copy;
1307
1308         root_item = &root->fs_info->chunk_root->root_item;
1309         super->chunk_root = root_item->bytenr;
1310         super->chunk_root_generation = root_item->generation;
1311         super->chunk_root_level = root_item->level;
1312
1313         root_item = &root->fs_info->tree_root->root_item;
1314         super->root = root_item->bytenr;
1315         super->generation = root_item->generation;
1316         super->root_level = root_item->level;
1317         if (btrfs_test_opt(root, SPACE_CACHE))
1318                 super->cache_generation = root_item->generation;
1319 }
1320
1321 int btrfs_transaction_in_commit(struct btrfs_fs_info *info)
1322 {
1323         int ret = 0;
1324         spin_lock(&info->trans_lock);
1325         if (info->running_transaction)
1326                 ret = info->running_transaction->in_commit;
1327         spin_unlock(&info->trans_lock);
1328         return ret;
1329 }
1330
1331 int btrfs_transaction_blocked(struct btrfs_fs_info *info)
1332 {
1333         int ret = 0;
1334         spin_lock(&info->trans_lock);
1335         if (info->running_transaction)
1336                 ret = info->running_transaction->blocked;
1337         spin_unlock(&info->trans_lock);
1338         return ret;
1339 }
1340
1341 /*
1342  * wait for the current transaction commit to start and block subsequent
1343  * transaction joins
1344  */
1345 static void wait_current_trans_commit_start(struct btrfs_root *root,
1346                                             struct btrfs_transaction *trans)
1347 {
1348         wait_event(root->fs_info->transaction_blocked_wait, trans->in_commit);
1349 }
1350
1351 /*
1352  * wait for the current transaction to start and then become unblocked.
1353  * caller holds ref.
1354  */
1355 static void wait_current_trans_commit_start_and_unblock(struct btrfs_root *root,
1356                                          struct btrfs_transaction *trans)
1357 {
1358         wait_event(root->fs_info->transaction_wait,
1359                    trans->commit_done || (trans->in_commit && !trans->blocked));
1360 }
1361
1362 /*
1363  * commit transactions asynchronously. once btrfs_commit_transaction_async
1364  * returns, any subsequent transaction will not be allowed to join.
1365  */
1366 struct btrfs_async_commit {
1367         struct btrfs_trans_handle *newtrans;
1368         struct btrfs_root *root;
1369         struct work_struct work;
1370 };
1371
1372 static void do_async_commit(struct work_struct *work)
1373 {
1374         struct btrfs_async_commit *ac =
1375                 container_of(work, struct btrfs_async_commit, work);
1376
1377         /*
1378          * We've got freeze protection passed with the transaction.
1379          * Tell lockdep about it.
1380          */
1381         if (ac->newtrans->type < TRANS_JOIN_NOLOCK)
1382                 rwsem_acquire_read(
1383                      &ac->root->fs_info->sb->s_writers.lock_map[SB_FREEZE_FS-1],
1384                      0, 1, _THIS_IP_);
1385
1386         current->journal_info = ac->newtrans;
1387
1388         btrfs_commit_transaction(ac->newtrans, ac->root);
1389         kfree(ac);
1390 }
1391
1392 int btrfs_commit_transaction_async(struct btrfs_trans_handle *trans,
1393                                    struct btrfs_root *root,
1394                                    int wait_for_unblock)
1395 {
1396         struct btrfs_async_commit *ac;
1397         struct btrfs_transaction *cur_trans;
1398
1399         ac = kmalloc(sizeof(*ac), GFP_NOFS);
1400         if (!ac)
1401                 return -ENOMEM;
1402
1403         INIT_WORK(&ac->work, do_async_commit);
1404         ac->root = root;
1405         ac->newtrans = btrfs_join_transaction(root);
1406         if (IS_ERR(ac->newtrans)) {
1407                 int err = PTR_ERR(ac->newtrans);
1408                 kfree(ac);
1409                 return err;
1410         }
1411
1412         /* take transaction reference */
1413         cur_trans = trans->transaction;
1414         atomic_inc(&cur_trans->use_count);
1415
1416         btrfs_end_transaction(trans, root);
1417
1418         /*
1419          * Tell lockdep we've released the freeze rwsem, since the
1420          * async commit thread will be the one to unlock it.
1421          */
1422         if (trans->type < TRANS_JOIN_NOLOCK)
1423                 rwsem_release(
1424                         &root->fs_info->sb->s_writers.lock_map[SB_FREEZE_FS-1],
1425                         1, _THIS_IP_);
1426
1427         schedule_work(&ac->work);
1428
1429         /* wait for transaction to start and unblock */
1430         if (wait_for_unblock)
1431                 wait_current_trans_commit_start_and_unblock(root, cur_trans);
1432         else
1433                 wait_current_trans_commit_start(root, cur_trans);
1434
1435         if (current->journal_info == trans)
1436                 current->journal_info = NULL;
1437
1438         put_transaction(cur_trans);
1439         return 0;
1440 }
1441
1442
1443 static void cleanup_transaction(struct btrfs_trans_handle *trans,
1444                                 struct btrfs_root *root, int err)
1445 {
1446         struct btrfs_transaction *cur_trans = trans->transaction;
1447         DEFINE_WAIT(wait);
1448
1449         WARN_ON(trans->use_count > 1);
1450
1451         btrfs_abort_transaction(trans, root, err);
1452
1453         spin_lock(&root->fs_info->trans_lock);
1454         list_del_init(&cur_trans->list);
1455         if (cur_trans == root->fs_info->running_transaction) {
1456                 root->fs_info->trans_no_join = 1;
1457                 spin_unlock(&root->fs_info->trans_lock);
1458                 wait_event(cur_trans->writer_wait,
1459                            atomic_read(&cur_trans->num_writers) == 1);
1460
1461                 spin_lock(&root->fs_info->trans_lock);
1462                 root->fs_info->running_transaction = NULL;
1463         }
1464         spin_unlock(&root->fs_info->trans_lock);
1465
1466         btrfs_cleanup_one_transaction(trans->transaction, root);
1467
1468         put_transaction(cur_trans);
1469         put_transaction(cur_trans);
1470
1471         trace_btrfs_transaction_commit(root);
1472
1473         btrfs_scrub_continue(root);
1474
1475         if (current->journal_info == trans)
1476                 current->journal_info = NULL;
1477
1478         kmem_cache_free(btrfs_trans_handle_cachep, trans);
1479 }
1480
1481 static int btrfs_flush_all_pending_stuffs(struct btrfs_trans_handle *trans,
1482                                           struct btrfs_root *root)
1483 {
1484         int flush_on_commit = btrfs_test_opt(root, FLUSHONCOMMIT);
1485         int snap_pending = 0;
1486         int ret;
1487
1488         if (!flush_on_commit) {
1489                 spin_lock(&root->fs_info->trans_lock);
1490                 if (!list_empty(&trans->transaction->pending_snapshots))
1491                         snap_pending = 1;
1492                 spin_unlock(&root->fs_info->trans_lock);
1493         }
1494
1495         if (flush_on_commit || snap_pending) {
1496                 ret = btrfs_start_delalloc_inodes(root, 1);
1497                 if (ret)
1498                         return ret;
1499                 btrfs_wait_ordered_extents(root, 1);
1500         }
1501
1502         ret = btrfs_run_delayed_items(trans, root);
1503         if (ret)
1504                 return ret;
1505
1506         /*
1507          * running the delayed items may have added new refs. account
1508          * them now so that they hinder processing of more delayed refs
1509          * as little as possible.
1510          */
1511         btrfs_delayed_refs_qgroup_accounting(trans, root->fs_info);
1512
1513         /*
1514          * rename don't use btrfs_join_transaction, so, once we
1515          * set the transaction to blocked above, we aren't going
1516          * to get any new ordered operations.  We can safely run
1517          * it here and no for sure that nothing new will be added
1518          * to the list
1519          */
1520         ret = btrfs_run_ordered_operations(trans, root, 1);
1521
1522         return ret;
1523 }
1524
1525 /*
1526  * btrfs_transaction state sequence:
1527  *    in_commit = 0, blocked = 0  (initial)
1528  *    in_commit = 1, blocked = 1
1529  *    blocked = 0
1530  *    commit_done = 1
1531  */
1532 int btrfs_commit_transaction(struct btrfs_trans_handle *trans,
1533                              struct btrfs_root *root)
1534 {
1535         unsigned long joined = 0;
1536         struct btrfs_transaction *cur_trans = trans->transaction;
1537         struct btrfs_transaction *prev_trans = NULL;
1538         DEFINE_WAIT(wait);
1539         int ret;
1540         int should_grow = 0;
1541         unsigned long now = get_seconds();
1542
1543         ret = btrfs_run_ordered_operations(trans, root, 0);
1544         if (ret) {
1545                 btrfs_abort_transaction(trans, root, ret);
1546                 btrfs_end_transaction(trans, root);
1547                 return ret;
1548         }
1549
1550         /* Stop the commit early if ->aborted is set */
1551         if (unlikely(ACCESS_ONCE(cur_trans->aborted))) {
1552                 ret = cur_trans->aborted;
1553                 btrfs_end_transaction(trans, root);
1554                 return ret;
1555         }
1556
1557         /* make a pass through all the delayed refs we have so far
1558          * any runnings procs may add more while we are here
1559          */
1560         ret = btrfs_run_delayed_refs(trans, root, 0);
1561         if (ret) {
1562                 btrfs_end_transaction(trans, root);
1563                 return ret;
1564         }
1565
1566         btrfs_trans_release_metadata(trans, root);
1567         trans->block_rsv = NULL;
1568         if (trans->qgroup_reserved) {
1569                 btrfs_qgroup_free(root, trans->qgroup_reserved);
1570                 trans->qgroup_reserved = 0;
1571         }
1572
1573         cur_trans = trans->transaction;
1574
1575         /*
1576          * set the flushing flag so procs in this transaction have to
1577          * start sending their work down.
1578          */
1579         cur_trans->delayed_refs.flushing = 1;
1580
1581         if (!list_empty(&trans->new_bgs))
1582                 btrfs_create_pending_block_groups(trans, root);
1583
1584         ret = btrfs_run_delayed_refs(trans, root, 0);
1585         if (ret) {
1586                 btrfs_end_transaction(trans, root);
1587                 return ret;
1588         }
1589
1590         spin_lock(&cur_trans->commit_lock);
1591         if (cur_trans->in_commit) {
1592                 spin_unlock(&cur_trans->commit_lock);
1593                 atomic_inc(&cur_trans->use_count);
1594                 ret = btrfs_end_transaction(trans, root);
1595
1596                 wait_for_commit(root, cur_trans);
1597
1598                 put_transaction(cur_trans);
1599
1600                 return ret;
1601         }
1602
1603         trans->transaction->in_commit = 1;
1604         trans->transaction->blocked = 1;
1605         spin_unlock(&cur_trans->commit_lock);
1606         wake_up(&root->fs_info->transaction_blocked_wait);
1607
1608         spin_lock(&root->fs_info->trans_lock);
1609         if (cur_trans->list.prev != &root->fs_info->trans_list) {
1610                 prev_trans = list_entry(cur_trans->list.prev,
1611                                         struct btrfs_transaction, list);
1612                 if (!prev_trans->commit_done) {
1613                         atomic_inc(&prev_trans->use_count);
1614                         spin_unlock(&root->fs_info->trans_lock);
1615
1616                         wait_for_commit(root, prev_trans);
1617
1618                         put_transaction(prev_trans);
1619                 } else {
1620                         spin_unlock(&root->fs_info->trans_lock);
1621                 }
1622         } else {
1623                 spin_unlock(&root->fs_info->trans_lock);
1624         }
1625
1626         if (!btrfs_test_opt(root, SSD) &&
1627             (now < cur_trans->start_time || now - cur_trans->start_time < 1))
1628                 should_grow = 1;
1629
1630         do {
1631                 joined = cur_trans->num_joined;
1632
1633                 WARN_ON(cur_trans != trans->transaction);
1634
1635                 ret = btrfs_flush_all_pending_stuffs(trans, root);
1636                 if (ret)
1637                         goto cleanup_transaction;
1638
1639                 prepare_to_wait(&cur_trans->writer_wait, &wait,
1640                                 TASK_UNINTERRUPTIBLE);
1641
1642                 if (atomic_read(&cur_trans->num_writers) > 1)
1643                         schedule_timeout(MAX_SCHEDULE_TIMEOUT);
1644                 else if (should_grow)
1645                         schedule_timeout(1);
1646
1647                 finish_wait(&cur_trans->writer_wait, &wait);
1648         } while (atomic_read(&cur_trans->num_writers) > 1 ||
1649                  (should_grow && cur_trans->num_joined != joined));
1650
1651         ret = btrfs_flush_all_pending_stuffs(trans, root);
1652         if (ret)
1653                 goto cleanup_transaction;
1654
1655         /*
1656          * Ok now we need to make sure to block out any other joins while we
1657          * commit the transaction.  We could have started a join before setting
1658          * no_join so make sure to wait for num_writers to == 1 again.
1659          */
1660         spin_lock(&root->fs_info->trans_lock);
1661         root->fs_info->trans_no_join = 1;
1662         spin_unlock(&root->fs_info->trans_lock);
1663         wait_event(cur_trans->writer_wait,
1664                    atomic_read(&cur_trans->num_writers) == 1);
1665
1666         /* ->aborted might be set after the previous check, so check it */
1667         if (unlikely(ACCESS_ONCE(cur_trans->aborted))) {
1668                 ret = cur_trans->aborted;
1669                 goto cleanup_transaction;
1670         }
1671         /*
1672          * the reloc mutex makes sure that we stop
1673          * the balancing code from coming in and moving
1674          * extents around in the middle of the commit
1675          */
1676         mutex_lock(&root->fs_info->reloc_mutex);
1677
1678         /*
1679          * We needn't worry about the delayed items because we will
1680          * deal with them in create_pending_snapshot(), which is the
1681          * core function of the snapshot creation.
1682          */
1683         ret = create_pending_snapshots(trans, root->fs_info);
1684         if (ret) {
1685                 mutex_unlock(&root->fs_info->reloc_mutex);
1686                 goto cleanup_transaction;
1687         }
1688
1689         /*
1690          * We insert the dir indexes of the snapshots and update the inode
1691          * of the snapshots' parents after the snapshot creation, so there
1692          * are some delayed items which are not dealt with. Now deal with
1693          * them.
1694          *
1695          * We needn't worry that this operation will corrupt the snapshots,
1696          * because all the tree which are snapshoted will be forced to COW
1697          * the nodes and leaves.
1698          */
1699         ret = btrfs_run_delayed_items(trans, root);
1700         if (ret) {
1701                 mutex_unlock(&root->fs_info->reloc_mutex);
1702                 goto cleanup_transaction;
1703         }
1704
1705         ret = btrfs_run_delayed_refs(trans, root, (unsigned long)-1);
1706         if (ret) {
1707                 mutex_unlock(&root->fs_info->reloc_mutex);
1708                 goto cleanup_transaction;
1709         }
1710
1711         /*
1712          * make sure none of the code above managed to slip in a
1713          * delayed item
1714          */
1715         btrfs_assert_delayed_root_empty(root);
1716
1717         WARN_ON(cur_trans != trans->transaction);
1718
1719         btrfs_scrub_pause(root);
1720         /* btrfs_commit_tree_roots is responsible for getting the
1721          * various roots consistent with each other.  Every pointer
1722          * in the tree of tree roots has to point to the most up to date
1723          * root for every subvolume and other tree.  So, we have to keep
1724          * the tree logging code from jumping in and changing any
1725          * of the trees.
1726          *
1727          * At this point in the commit, there can't be any tree-log
1728          * writers, but a little lower down we drop the trans mutex
1729          * and let new people in.  By holding the tree_log_mutex
1730          * from now until after the super is written, we avoid races
1731          * with the tree-log code.
1732          */
1733         mutex_lock(&root->fs_info->tree_log_mutex);
1734
1735         ret = commit_fs_roots(trans, root);
1736         if (ret) {
1737                 mutex_unlock(&root->fs_info->tree_log_mutex);
1738                 mutex_unlock(&root->fs_info->reloc_mutex);
1739                 goto cleanup_transaction;
1740         }
1741
1742         /* commit_fs_roots gets rid of all the tree log roots, it is now
1743          * safe to free the root of tree log roots
1744          */
1745         btrfs_free_log_root_tree(trans, root->fs_info);
1746
1747         ret = commit_cowonly_roots(trans, root);
1748         if (ret) {
1749                 mutex_unlock(&root->fs_info->tree_log_mutex);
1750                 mutex_unlock(&root->fs_info->reloc_mutex);
1751                 goto cleanup_transaction;
1752         }
1753
1754         /*
1755          * The tasks which save the space cache and inode cache may also
1756          * update ->aborted, check it.
1757          */
1758         if (unlikely(ACCESS_ONCE(cur_trans->aborted))) {
1759                 ret = cur_trans->aborted;
1760                 mutex_unlock(&root->fs_info->tree_log_mutex);
1761                 mutex_unlock(&root->fs_info->reloc_mutex);
1762                 goto cleanup_transaction;
1763         }
1764
1765         btrfs_prepare_extent_commit(trans, root);
1766
1767         cur_trans = root->fs_info->running_transaction;
1768
1769         btrfs_set_root_node(&root->fs_info->tree_root->root_item,
1770                             root->fs_info->tree_root->node);
1771         switch_commit_root(root->fs_info->tree_root);
1772
1773         btrfs_set_root_node(&root->fs_info->chunk_root->root_item,
1774                             root->fs_info->chunk_root->node);
1775         switch_commit_root(root->fs_info->chunk_root);
1776
1777         assert_qgroups_uptodate(trans);
1778         update_super_roots(root);
1779
1780         if (!root->fs_info->log_root_recovering) {
1781                 btrfs_set_super_log_root(root->fs_info->super_copy, 0);
1782                 btrfs_set_super_log_root_level(root->fs_info->super_copy, 0);
1783         }
1784
1785         memcpy(root->fs_info->super_for_commit, root->fs_info->super_copy,
1786                sizeof(*root->fs_info->super_copy));
1787
1788         trans->transaction->blocked = 0;
1789         spin_lock(&root->fs_info->trans_lock);
1790         root->fs_info->running_transaction = NULL;
1791         root->fs_info->trans_no_join = 0;
1792         spin_unlock(&root->fs_info->trans_lock);
1793         mutex_unlock(&root->fs_info->reloc_mutex);
1794
1795         wake_up(&root->fs_info->transaction_wait);
1796
1797         ret = btrfs_write_and_wait_transaction(trans, root);
1798         if (ret) {
1799                 btrfs_error(root->fs_info, ret,
1800                             "Error while writing out transaction.");
1801                 mutex_unlock(&root->fs_info->tree_log_mutex);
1802                 goto cleanup_transaction;
1803         }
1804
1805         ret = write_ctree_super(trans, root, 0);
1806         if (ret) {
1807                 mutex_unlock(&root->fs_info->tree_log_mutex);
1808                 goto cleanup_transaction;
1809         }
1810
1811         /*
1812          * the super is written, we can safely allow the tree-loggers
1813          * to go about their business
1814          */
1815         mutex_unlock(&root->fs_info->tree_log_mutex);
1816
1817         btrfs_finish_extent_commit(trans, root);
1818
1819         cur_trans->commit_done = 1;
1820
1821         root->fs_info->last_trans_committed = cur_trans->transid;
1822
1823         wake_up(&cur_trans->commit_wait);
1824
1825         spin_lock(&root->fs_info->trans_lock);
1826         list_del_init(&cur_trans->list);
1827         spin_unlock(&root->fs_info->trans_lock);
1828
1829         put_transaction(cur_trans);
1830         put_transaction(cur_trans);
1831
1832         if (trans->type < TRANS_JOIN_NOLOCK)
1833                 sb_end_intwrite(root->fs_info->sb);
1834
1835         trace_btrfs_transaction_commit(root);
1836
1837         btrfs_scrub_continue(root);
1838
1839         if (current->journal_info == trans)
1840                 current->journal_info = NULL;
1841
1842         kmem_cache_free(btrfs_trans_handle_cachep, trans);
1843
1844         if (current != root->fs_info->transaction_kthread)
1845                 btrfs_run_delayed_iputs(root);
1846
1847         return ret;
1848
1849 cleanup_transaction:
1850         btrfs_trans_release_metadata(trans, root);
1851         trans->block_rsv = NULL;
1852         if (trans->qgroup_reserved) {
1853                 btrfs_qgroup_free(root, trans->qgroup_reserved);
1854                 trans->qgroup_reserved = 0;
1855         }
1856         btrfs_printk(root->fs_info, "Skipping commit of aborted transaction.\n");
1857 //      WARN_ON(1);
1858         if (current->journal_info == trans)
1859                 current->journal_info = NULL;
1860         cleanup_transaction(trans, root, ret);
1861
1862         return ret;
1863 }
1864
1865 /*
1866  * interface function to delete all the snapshots we have scheduled for deletion
1867  */
1868 int btrfs_clean_old_snapshots(struct btrfs_root *root)
1869 {
1870         LIST_HEAD(list);
1871         struct btrfs_fs_info *fs_info = root->fs_info;
1872
1873         spin_lock(&fs_info->trans_lock);
1874         list_splice_init(&fs_info->dead_roots, &list);
1875         spin_unlock(&fs_info->trans_lock);
1876
1877         while (!list_empty(&list)) {
1878                 int ret;
1879
1880                 root = list_entry(list.next, struct btrfs_root, root_list);
1881                 list_del(&root->root_list);
1882
1883                 btrfs_kill_all_delayed_nodes(root);
1884
1885                 if (btrfs_header_backref_rev(root->node) <
1886                     BTRFS_MIXED_BACKREF_REV)
1887                         ret = btrfs_drop_snapshot(root, NULL, 0, 0);
1888                 else
1889                         ret =btrfs_drop_snapshot(root, NULL, 1, 0);
1890                 BUG_ON(ret < 0);
1891         }
1892         return 0;
1893 }