LCOV - code coverage report
Current view: top level - fs/btrfs - transaction.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 831 0.0 %
Date: 2014-04-16 Functions: 0 44 0.0 %
Branches: 0 488 0.0 %

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

Generated by: LCOV version 1.9