linux/fs/btrfs/transaction.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2/*
   3 * Copyright (C) 2007 Oracle.  All rights reserved.
   4 */
   5
   6#include <linux/fs.h>
   7#include <linux/slab.h>
   8#include <linux/sched.h>
   9#include <linux/writeback.h>
  10#include <linux/pagemap.h>
  11#include <linux/blkdev.h>
  12#include <linux/uuid.h>
  13#include "misc.h"
  14#include "ctree.h"
  15#include "disk-io.h"
  16#include "transaction.h"
  17#include "locking.h"
  18#include "tree-log.h"
  19#include "volumes.h"
  20#include "dev-replace.h"
  21#include "qgroup.h"
  22#include "block-group.h"
  23#include "space-info.h"
  24#include "zoned.h"
  25
  26#define BTRFS_ROOT_TRANS_TAG 0
  27
  28/*
  29 * Transaction states and transitions
  30 *
  31 * No running transaction (fs tree blocks are not modified)
  32 * |
  33 * | To next stage:
  34 * |  Call start_transaction() variants. Except btrfs_join_transaction_nostart().
  35 * V
  36 * Transaction N [[TRANS_STATE_RUNNING]]
  37 * |
  38 * | New trans handles can be attached to transaction N by calling all
  39 * | start_transaction() variants.
  40 * |
  41 * | To next stage:
  42 * |  Call btrfs_commit_transaction() on any trans handle attached to
  43 * |  transaction N
  44 * V
  45 * Transaction N [[TRANS_STATE_COMMIT_START]]
  46 * |
  47 * | Will wait for previous running transaction to completely finish if there
  48 * | is one
  49 * |
  50 * | Then one of the following happes:
  51 * | - Wait for all other trans handle holders to release.
  52 * |   The btrfs_commit_transaction() caller will do the commit work.
  53 * | - Wait for current transaction to be committed by others.
  54 * |   Other btrfs_commit_transaction() caller will do the commit work.
  55 * |
  56 * | At this stage, only btrfs_join_transaction*() variants can attach
  57 * | to this running transaction.
  58 * | All other variants will wait for current one to finish and attach to
  59 * | transaction N+1.
  60 * |
  61 * | To next stage:
  62 * |  Caller is chosen to commit transaction N, and all other trans handle
  63 * |  haven been released.
  64 * V
  65 * Transaction N [[TRANS_STATE_COMMIT_DOING]]
  66 * |
  67 * | The heavy lifting transaction work is started.
  68 * | From running delayed refs (modifying extent tree) to creating pending
  69 * | snapshots, running qgroups.
  70 * | In short, modify supporting trees to reflect modifications of subvolume
  71 * | trees.
  72 * |
  73 * | At this stage, all start_transaction() calls will wait for this
  74 * | transaction to finish and attach to transaction N+1.
  75 * |
  76 * | To next stage:
  77 * |  Until all supporting trees are updated.
  78 * V
  79 * Transaction N [[TRANS_STATE_UNBLOCKED]]
  80 * |                                                Transaction N+1
  81 * | All needed trees are modified, thus we only    [[TRANS_STATE_RUNNING]]
  82 * | need to write them back to disk and update     |
  83 * | super blocks.                                  |
  84 * |                                                |
  85 * | At this stage, new transaction is allowed to   |
  86 * | start.                                         |
  87 * | All new start_transaction() calls will be      |
  88 * | attached to transid N+1.                       |
  89 * |                                                |
  90 * | To next stage:                                 |
  91 * |  Until all tree blocks are super blocks are    |
  92 * |  written to block devices                      |
  93 * V                                                |
  94 * Transaction N [[TRANS_STATE_COMPLETED]]          V
  95 *   All tree blocks and super blocks are written.  Transaction N+1
  96 *   This transaction is finished and all its       [[TRANS_STATE_COMMIT_START]]
  97 *   data structures will be cleaned up.            | Life goes on
  98 */
  99static const unsigned int btrfs_blocked_trans_types[TRANS_STATE_MAX] = {
 100        [TRANS_STATE_RUNNING]           = 0U,
 101        [TRANS_STATE_COMMIT_START]      = (__TRANS_START | __TRANS_ATTACH),
 102        [TRANS_STATE_COMMIT_DOING]      = (__TRANS_START |
 103                                           __TRANS_ATTACH |
 104                                           __TRANS_JOIN |
 105                                           __TRANS_JOIN_NOSTART),
 106        [TRANS_STATE_UNBLOCKED]         = (__TRANS_START |
 107                                           __TRANS_ATTACH |
 108                                           __TRANS_JOIN |
 109                                           __TRANS_JOIN_NOLOCK |
 110                                           __TRANS_JOIN_NOSTART),
 111        [TRANS_STATE_SUPER_COMMITTED]   = (__TRANS_START |
 112                                           __TRANS_ATTACH |
 113                                           __TRANS_JOIN |
 114                                           __TRANS_JOIN_NOLOCK |
 115                                           __TRANS_JOIN_NOSTART),
 116        [TRANS_STATE_COMPLETED]         = (__TRANS_START |
 117                                           __TRANS_ATTACH |
 118                                           __TRANS_JOIN |
 119                                           __TRANS_JOIN_NOLOCK |
 120                                           __TRANS_JOIN_NOSTART),
 121};
 122
 123void btrfs_put_transaction(struct btrfs_transaction *transaction)
 124{
 125        WARN_ON(refcount_read(&transaction->use_count) == 0);
 126        if (refcount_dec_and_test(&transaction->use_count)) {
 127                BUG_ON(!list_empty(&transaction->list));
 128                WARN_ON(!RB_EMPTY_ROOT(
 129                                &transaction->delayed_refs.href_root.rb_root));
 130                WARN_ON(!RB_EMPTY_ROOT(
 131                                &transaction->delayed_refs.dirty_extent_root));
 132                if (transaction->delayed_refs.pending_csums)
 133                        btrfs_err(transaction->fs_info,
 134                                  "pending csums is %llu",
 135                                  transaction->delayed_refs.pending_csums);
 136                /*
 137                 * If any block groups are found in ->deleted_bgs then it's
 138                 * because the transaction was aborted and a commit did not
 139                 * happen (things failed before writing the new superblock
 140                 * and calling btrfs_finish_extent_commit()), so we can not
 141                 * discard the physical locations of the block groups.
 142                 */
 143                while (!list_empty(&transaction->deleted_bgs)) {
 144                        struct btrfs_block_group *cache;
 145
 146                        cache = list_first_entry(&transaction->deleted_bgs,
 147                                                 struct btrfs_block_group,
 148                                                 bg_list);
 149                        list_del_init(&cache->bg_list);
 150                        btrfs_unfreeze_block_group(cache);
 151                        btrfs_put_block_group(cache);
 152                }
 153                WARN_ON(!list_empty(&transaction->dev_update_list));
 154                kfree(transaction);
 155        }
 156}
 157
 158static noinline void switch_commit_roots(struct btrfs_trans_handle *trans)
 159{
 160        struct btrfs_transaction *cur_trans = trans->transaction;
 161        struct btrfs_fs_info *fs_info = trans->fs_info;
 162        struct btrfs_root *root, *tmp;
 163        struct btrfs_caching_control *caching_ctl, *next;
 164
 165        down_write(&fs_info->commit_root_sem);
 166        list_for_each_entry_safe(root, tmp, &cur_trans->switch_commits,
 167                                 dirty_list) {
 168                list_del_init(&root->dirty_list);
 169                free_extent_buffer(root->commit_root);
 170                root->commit_root = btrfs_root_node(root);
 171                extent_io_tree_release(&root->dirty_log_pages);
 172                btrfs_qgroup_clean_swapped_blocks(root);
 173        }
 174
 175        /* We can free old roots now. */
 176        spin_lock(&cur_trans->dropped_roots_lock);
 177        while (!list_empty(&cur_trans->dropped_roots)) {
 178                root = list_first_entry(&cur_trans->dropped_roots,
 179                                        struct btrfs_root, root_list);
 180                list_del_init(&root->root_list);
 181                spin_unlock(&cur_trans->dropped_roots_lock);
 182                btrfs_free_log(trans, root);
 183                btrfs_drop_and_free_fs_root(fs_info, root);
 184                spin_lock(&cur_trans->dropped_roots_lock);
 185        }
 186        spin_unlock(&cur_trans->dropped_roots_lock);
 187
 188        /*
 189         * We have to update the last_byte_to_unpin under the commit_root_sem,
 190         * at the same time we swap out the commit roots.
 191         *
 192         * This is because we must have a real view of the last spot the caching
 193         * kthreads were while caching.  Consider the following views of the
 194         * extent tree for a block group
 195         *
 196         * commit root
 197         * +----+----+----+----+----+----+----+
 198         * |\\\\|    |\\\\|\\\\|    |\\\\|\\\\|
 199         * +----+----+----+----+----+----+----+
 200         * 0    1    2    3    4    5    6    7
 201         *
 202         * new commit root
 203         * +----+----+----+----+----+----+----+
 204         * |    |    |    |\\\\|    |    |\\\\|
 205         * +----+----+----+----+----+----+----+
 206         * 0    1    2    3    4    5    6    7
 207         *
 208         * If the cache_ctl->progress was at 3, then we are only allowed to
 209         * unpin [0,1) and [2,3], because the caching thread has already
 210         * processed those extents.  We are not allowed to unpin [5,6), because
 211         * the caching thread will re-start it's search from 3, and thus find
 212         * the hole from [4,6) to add to the free space cache.
 213         */
 214        spin_lock(&fs_info->block_group_cache_lock);
 215        list_for_each_entry_safe(caching_ctl, next,
 216                                 &fs_info->caching_block_groups, list) {
 217                struct btrfs_block_group *cache = caching_ctl->block_group;
 218
 219                if (btrfs_block_group_done(cache)) {
 220                        cache->last_byte_to_unpin = (u64)-1;
 221                        list_del_init(&caching_ctl->list);
 222                        btrfs_put_caching_control(caching_ctl);
 223                } else {
 224                        cache->last_byte_to_unpin = caching_ctl->progress;
 225                }
 226        }
 227        spin_unlock(&fs_info->block_group_cache_lock);
 228        up_write(&fs_info->commit_root_sem);
 229}
 230
 231static inline void extwriter_counter_inc(struct btrfs_transaction *trans,
 232                                         unsigned int type)
 233{
 234        if (type & TRANS_EXTWRITERS)
 235                atomic_inc(&trans->num_extwriters);
 236}
 237
 238static inline void extwriter_counter_dec(struct btrfs_transaction *trans,
 239                                         unsigned int type)
 240{
 241        if (type & TRANS_EXTWRITERS)
 242                atomic_dec(&trans->num_extwriters);
 243}
 244
 245static inline void extwriter_counter_init(struct btrfs_transaction *trans,
 246                                          unsigned int type)
 247{
 248        atomic_set(&trans->num_extwriters, ((type & TRANS_EXTWRITERS) ? 1 : 0));
 249}
 250
 251static inline int extwriter_counter_read(struct btrfs_transaction *trans)
 252{
 253        return atomic_read(&trans->num_extwriters);
 254}
 255
 256/*
 257 * To be called after doing the chunk btree updates right after allocating a new
 258 * chunk (after btrfs_chunk_alloc_add_chunk_item() is called), when removing a
 259 * chunk after all chunk btree updates and after finishing the second phase of
 260 * chunk allocation (btrfs_create_pending_block_groups()) in case some block
 261 * group had its chunk item insertion delayed to the second phase.
 262 */
 263void btrfs_trans_release_chunk_metadata(struct btrfs_trans_handle *trans)
 264{
 265        struct btrfs_fs_info *fs_info = trans->fs_info;
 266
 267        if (!trans->chunk_bytes_reserved)
 268                return;
 269
 270        btrfs_block_rsv_release(fs_info, &fs_info->chunk_block_rsv,
 271                                trans->chunk_bytes_reserved, NULL);
 272        trans->chunk_bytes_reserved = 0;
 273}
 274
 275/*
 276 * either allocate a new transaction or hop into the existing one
 277 */
 278static noinline int join_transaction(struct btrfs_fs_info *fs_info,
 279                                     unsigned int type)
 280{
 281        struct btrfs_transaction *cur_trans;
 282
 283        spin_lock(&fs_info->trans_lock);
 284loop:
 285        /* The file system has been taken offline. No new transactions. */
 286        if (BTRFS_FS_ERROR(fs_info)) {
 287                spin_unlock(&fs_info->trans_lock);
 288                return -EROFS;
 289        }
 290
 291        cur_trans = fs_info->running_transaction;
 292        if (cur_trans) {
 293                if (TRANS_ABORTED(cur_trans)) {
 294                        spin_unlock(&fs_info->trans_lock);
 295                        return cur_trans->aborted;
 296                }
 297                if (btrfs_blocked_trans_types[cur_trans->state] & type) {
 298                        spin_unlock(&fs_info->trans_lock);
 299                        return -EBUSY;
 300                }
 301                refcount_inc(&cur_trans->use_count);
 302                atomic_inc(&cur_trans->num_writers);
 303                extwriter_counter_inc(cur_trans, type);
 304                spin_unlock(&fs_info->trans_lock);
 305                return 0;
 306        }
 307        spin_unlock(&fs_info->trans_lock);
 308
 309        /*
 310         * If we are ATTACH, we just want to catch the current transaction,
 311         * and commit it. If there is no transaction, just return ENOENT.
 312         */
 313        if (type == TRANS_ATTACH)
 314                return -ENOENT;
 315
 316        /*
 317         * JOIN_NOLOCK only happens during the transaction commit, so
 318         * it is impossible that ->running_transaction is NULL
 319         */
 320        BUG_ON(type == TRANS_JOIN_NOLOCK);
 321
 322        cur_trans = kmalloc(sizeof(*cur_trans), GFP_NOFS);
 323        if (!cur_trans)
 324                return -ENOMEM;
 325
 326        spin_lock(&fs_info->trans_lock);
 327        if (fs_info->running_transaction) {
 328                /*
 329                 * someone started a transaction after we unlocked.  Make sure
 330                 * to redo the checks above
 331                 */
 332                kfree(cur_trans);
 333                goto loop;
 334        } else if (BTRFS_FS_ERROR(fs_info)) {
 335                spin_unlock(&fs_info->trans_lock);
 336                kfree(cur_trans);
 337                return -EROFS;
 338        }
 339
 340        cur_trans->fs_info = fs_info;
 341        atomic_set(&cur_trans->pending_ordered, 0);
 342        init_waitqueue_head(&cur_trans->pending_wait);
 343        atomic_set(&cur_trans->num_writers, 1);
 344        extwriter_counter_init(cur_trans, type);
 345        init_waitqueue_head(&cur_trans->writer_wait);
 346        init_waitqueue_head(&cur_trans->commit_wait);
 347        cur_trans->state = TRANS_STATE_RUNNING;
 348        /*
 349         * One for this trans handle, one so it will live on until we
 350         * commit the transaction.
 351         */
 352        refcount_set(&cur_trans->use_count, 2);
 353        cur_trans->flags = 0;
 354        cur_trans->start_time = ktime_get_seconds();
 355
 356        memset(&cur_trans->delayed_refs, 0, sizeof(cur_trans->delayed_refs));
 357
 358        cur_trans->delayed_refs.href_root = RB_ROOT_CACHED;
 359        cur_trans->delayed_refs.dirty_extent_root = RB_ROOT;
 360        atomic_set(&cur_trans->delayed_refs.num_entries, 0);
 361
 362        /*
 363         * although the tree mod log is per file system and not per transaction,
 364         * the log must never go across transaction boundaries.
 365         */
 366        smp_mb();
 367        if (!list_empty(&fs_info->tree_mod_seq_list))
 368                WARN(1, KERN_ERR "BTRFS: tree_mod_seq_list not empty when creating a fresh transaction\n");
 369        if (!RB_EMPTY_ROOT(&fs_info->tree_mod_log))
 370                WARN(1, KERN_ERR "BTRFS: tree_mod_log rb tree not empty when creating a fresh transaction\n");
 371        atomic64_set(&fs_info->tree_mod_seq, 0);
 372
 373        spin_lock_init(&cur_trans->delayed_refs.lock);
 374
 375        INIT_LIST_HEAD(&cur_trans->pending_snapshots);
 376        INIT_LIST_HEAD(&cur_trans->dev_update_list);
 377        INIT_LIST_HEAD(&cur_trans->switch_commits);
 378        INIT_LIST_HEAD(&cur_trans->dirty_bgs);
 379        INIT_LIST_HEAD(&cur_trans->io_bgs);
 380        INIT_LIST_HEAD(&cur_trans->dropped_roots);
 381        mutex_init(&cur_trans->cache_write_mutex);
 382        spin_lock_init(&cur_trans->dirty_bgs_lock);
 383        INIT_LIST_HEAD(&cur_trans->deleted_bgs);
 384        spin_lock_init(&cur_trans->dropped_roots_lock);
 385        INIT_LIST_HEAD(&cur_trans->releasing_ebs);
 386        spin_lock_init(&cur_trans->releasing_ebs_lock);
 387        list_add_tail(&cur_trans->list, &fs_info->trans_list);
 388        extent_io_tree_init(fs_info, &cur_trans->dirty_pages,
 389                        IO_TREE_TRANS_DIRTY_PAGES, fs_info->btree_inode);
 390        extent_io_tree_init(fs_info, &cur_trans->pinned_extents,
 391                        IO_TREE_FS_PINNED_EXTENTS, NULL);
 392        fs_info->generation++;
 393        cur_trans->transid = fs_info->generation;
 394        fs_info->running_transaction = cur_trans;
 395        cur_trans->aborted = 0;
 396        spin_unlock(&fs_info->trans_lock);
 397
 398        return 0;
 399}
 400
 401/*
 402 * This does all the record keeping required to make sure that a shareable root
 403 * is properly recorded in a given transaction.  This is required to make sure
 404 * the old root from before we joined the transaction is deleted when the
 405 * transaction commits.
 406 */
 407static int record_root_in_trans(struct btrfs_trans_handle *trans,
 408                               struct btrfs_root *root,
 409                               int force)
 410{
 411        struct btrfs_fs_info *fs_info = root->fs_info;
 412        int ret = 0;
 413
 414        if ((test_bit(BTRFS_ROOT_SHAREABLE, &root->state) &&
 415            root->last_trans < trans->transid) || force) {
 416                WARN_ON(root == fs_info->extent_root);
 417                WARN_ON(!force && root->commit_root != root->node);
 418
 419                /*
 420                 * see below for IN_TRANS_SETUP usage rules
 421                 * we have the reloc mutex held now, so there
 422                 * is only one writer in this function
 423                 */
 424                set_bit(BTRFS_ROOT_IN_TRANS_SETUP, &root->state);
 425
 426                /* make sure readers find IN_TRANS_SETUP before
 427                 * they find our root->last_trans update
 428                 */
 429                smp_wmb();
 430
 431                spin_lock(&fs_info->fs_roots_radix_lock);
 432                if (root->last_trans == trans->transid && !force) {
 433                        spin_unlock(&fs_info->fs_roots_radix_lock);
 434                        return 0;
 435                }
 436                radix_tree_tag_set(&fs_info->fs_roots_radix,
 437                                   (unsigned long)root->root_key.objectid,
 438                                   BTRFS_ROOT_TRANS_TAG);
 439                spin_unlock(&fs_info->fs_roots_radix_lock);
 440                root->last_trans = trans->transid;
 441
 442                /* this is pretty tricky.  We don't want to
 443                 * take the relocation lock in btrfs_record_root_in_trans
 444                 * unless we're really doing the first setup for this root in
 445                 * this transaction.
 446                 *
 447                 * Normally we'd use root->last_trans as a flag to decide
 448                 * if we want to take the expensive mutex.
 449                 *
 450                 * But, we have to set root->last_trans before we
 451                 * init the relocation root, otherwise, we trip over warnings
 452                 * in ctree.c.  The solution used here is to flag ourselves
 453                 * with root IN_TRANS_SETUP.  When this is 1, we're still
 454                 * fixing up the reloc trees and everyone must wait.
 455                 *
 456                 * When this is zero, they can trust root->last_trans and fly
 457                 * through btrfs_record_root_in_trans without having to take the
 458                 * lock.  smp_wmb() makes sure that all the writes above are
 459                 * done before we pop in the zero below
 460                 */
 461                ret = btrfs_init_reloc_root(trans, root);
 462                smp_mb__before_atomic();
 463                clear_bit(BTRFS_ROOT_IN_TRANS_SETUP, &root->state);
 464        }
 465        return ret;
 466}
 467
 468
 469void btrfs_add_dropped_root(struct btrfs_trans_handle *trans,
 470                            struct btrfs_root *root)
 471{
 472        struct btrfs_fs_info *fs_info = root->fs_info;
 473        struct btrfs_transaction *cur_trans = trans->transaction;
 474
 475        /* Add ourselves to the transaction dropped list */
 476        spin_lock(&cur_trans->dropped_roots_lock);
 477        list_add_tail(&root->root_list, &cur_trans->dropped_roots);
 478        spin_unlock(&cur_trans->dropped_roots_lock);
 479
 480        /* Make sure we don't try to update the root at commit time */
 481        spin_lock(&fs_info->fs_roots_radix_lock);
 482        radix_tree_tag_clear(&fs_info->fs_roots_radix,
 483                             (unsigned long)root->root_key.objectid,
 484                             BTRFS_ROOT_TRANS_TAG);
 485        spin_unlock(&fs_info->fs_roots_radix_lock);
 486}
 487
 488int btrfs_record_root_in_trans(struct btrfs_trans_handle *trans,
 489                               struct btrfs_root *root)
 490{
 491        struct btrfs_fs_info *fs_info = root->fs_info;
 492        int ret;
 493
 494        if (!test_bit(BTRFS_ROOT_SHAREABLE, &root->state))
 495                return 0;
 496
 497        /*
 498         * see record_root_in_trans for comments about IN_TRANS_SETUP usage
 499         * and barriers
 500         */
 501        smp_rmb();
 502        if (root->last_trans == trans->transid &&
 503            !test_bit(BTRFS_ROOT_IN_TRANS_SETUP, &root->state))
 504                return 0;
 505
 506        mutex_lock(&fs_info->reloc_mutex);
 507        ret = record_root_in_trans(trans, root, 0);
 508        mutex_unlock(&fs_info->reloc_mutex);
 509
 510        return ret;
 511}
 512
 513static inline int is_transaction_blocked(struct btrfs_transaction *trans)
 514{
 515        return (trans->state >= TRANS_STATE_COMMIT_START &&
 516                trans->state < TRANS_STATE_UNBLOCKED &&
 517                !TRANS_ABORTED(trans));
 518}
 519
 520/* wait for commit against the current transaction to become unblocked
 521 * when this is done, it is safe to start a new transaction, but the current
 522 * transaction might not be fully on disk.
 523 */
 524static void wait_current_trans(struct btrfs_fs_info *fs_info)
 525{
 526        struct btrfs_transaction *cur_trans;
 527
 528        spin_lock(&fs_info->trans_lock);
 529        cur_trans = fs_info->running_transaction;
 530        if (cur_trans && is_transaction_blocked(cur_trans)) {
 531                refcount_inc(&cur_trans->use_count);
 532                spin_unlock(&fs_info->trans_lock);
 533
 534                wait_event(fs_info->transaction_wait,
 535                           cur_trans->state >= TRANS_STATE_UNBLOCKED ||
 536                           TRANS_ABORTED(cur_trans));
 537                btrfs_put_transaction(cur_trans);
 538        } else {
 539                spin_unlock(&fs_info->trans_lock);
 540        }
 541}
 542
 543static int may_wait_transaction(struct btrfs_fs_info *fs_info, int type)
 544{
 545        if (test_bit(BTRFS_FS_LOG_RECOVERING, &fs_info->flags))
 546                return 0;
 547
 548        if (type == TRANS_START)
 549                return 1;
 550
 551        return 0;
 552}
 553
 554static inline bool need_reserve_reloc_root(struct btrfs_root *root)
 555{
 556        struct btrfs_fs_info *fs_info = root->fs_info;
 557
 558        if (!fs_info->reloc_ctl ||
 559            !test_bit(BTRFS_ROOT_SHAREABLE, &root->state) ||
 560            root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID ||
 561            root->reloc_root)
 562                return false;
 563
 564        return true;
 565}
 566
 567static struct btrfs_trans_handle *
 568start_transaction(struct btrfs_root *root, unsigned int num_items,
 569                  unsigned int type, enum btrfs_reserve_flush_enum flush,
 570                  bool enforce_qgroups)
 571{
 572        struct btrfs_fs_info *fs_info = root->fs_info;
 573        struct btrfs_block_rsv *delayed_refs_rsv = &fs_info->delayed_refs_rsv;
 574        struct btrfs_trans_handle *h;
 575        struct btrfs_transaction *cur_trans;
 576        u64 num_bytes = 0;
 577        u64 qgroup_reserved = 0;
 578        bool reloc_reserved = false;
 579        bool do_chunk_alloc = false;
 580        int ret;
 581
 582        if (BTRFS_FS_ERROR(fs_info))
 583                return ERR_PTR(-EROFS);
 584
 585        if (current->journal_info) {
 586                WARN_ON(type & TRANS_EXTWRITERS);
 587                h = current->journal_info;
 588                refcount_inc(&h->use_count);
 589                WARN_ON(refcount_read(&h->use_count) > 2);
 590                h->orig_rsv = h->block_rsv;
 591                h->block_rsv = NULL;
 592                goto got_it;
 593        }
 594
 595        /*
 596         * Do the reservation before we join the transaction so we can do all
 597         * the appropriate flushing if need be.
 598         */
 599        if (num_items && root != fs_info->chunk_root) {
 600                struct btrfs_block_rsv *rsv = &fs_info->trans_block_rsv;
 601                u64 delayed_refs_bytes = 0;
 602
 603                qgroup_reserved = num_items * fs_info->nodesize;
 604                ret = btrfs_qgroup_reserve_meta_pertrans(root, qgroup_reserved,
 605                                enforce_qgroups);
 606                if (ret)
 607                        return ERR_PTR(ret);
 608
 609                /*
 610                 * We want to reserve all the bytes we may need all at once, so
 611                 * we only do 1 enospc flushing cycle per transaction start.  We
 612                 * accomplish this by simply assuming we'll do 2 x num_items
 613                 * worth of delayed refs updates in this trans handle, and
 614                 * refill that amount for whatever is missing in the reserve.
 615                 */
 616                num_bytes = btrfs_calc_insert_metadata_size(fs_info, num_items);
 617                if (flush == BTRFS_RESERVE_FLUSH_ALL &&
 618                    delayed_refs_rsv->full == 0) {
 619                        delayed_refs_bytes = num_bytes;
 620                        num_bytes <<= 1;
 621                }
 622
 623                /*
 624                 * Do the reservation for the relocation root creation
 625                 */
 626                if (need_reserve_reloc_root(root)) {
 627                        num_bytes += fs_info->nodesize;
 628                        reloc_reserved = true;
 629                }
 630
 631                ret = btrfs_block_rsv_add(root, rsv, num_bytes, flush);
 632                if (ret)
 633                        goto reserve_fail;
 634                if (delayed_refs_bytes) {
 635                        btrfs_migrate_to_delayed_refs_rsv(fs_info, rsv,
 636                                                          delayed_refs_bytes);
 637                        num_bytes -= delayed_refs_bytes;
 638                }
 639
 640                if (rsv->space_info->force_alloc)
 641                        do_chunk_alloc = true;
 642        } else if (num_items == 0 && flush == BTRFS_RESERVE_FLUSH_ALL &&
 643                   !delayed_refs_rsv->full) {
 644                /*
 645                 * Some people call with btrfs_start_transaction(root, 0)
 646                 * because they can be throttled, but have some other mechanism
 647                 * for reserving space.  We still want these guys to refill the
 648                 * delayed block_rsv so just add 1 items worth of reservation
 649                 * here.
 650                 */
 651                ret = btrfs_delayed_refs_rsv_refill(fs_info, flush);
 652                if (ret)
 653                        goto reserve_fail;
 654        }
 655again:
 656        h = kmem_cache_zalloc(btrfs_trans_handle_cachep, GFP_NOFS);
 657        if (!h) {
 658                ret = -ENOMEM;
 659                goto alloc_fail;
 660        }
 661
 662        /*
 663         * If we are JOIN_NOLOCK we're already committing a transaction and
 664         * waiting on this guy, so we don't need to do the sb_start_intwrite
 665         * because we're already holding a ref.  We need this because we could
 666         * have raced in and did an fsync() on a file which can kick a commit
 667         * and then we deadlock with somebody doing a freeze.
 668         *
 669         * If we are ATTACH, it means we just want to catch the current
 670         * transaction and commit it, so we needn't do sb_start_intwrite(). 
 671         */
 672        if (type & __TRANS_FREEZABLE)
 673                sb_start_intwrite(fs_info->sb);
 674
 675        if (may_wait_transaction(fs_info, type))
 676                wait_current_trans(fs_info);
 677
 678        do {
 679                ret = join_transaction(fs_info, type);
 680                if (ret == -EBUSY) {
 681                        wait_current_trans(fs_info);
 682                        if (unlikely(type == TRANS_ATTACH ||
 683                                     type == TRANS_JOIN_NOSTART))
 684                                ret = -ENOENT;
 685                }
 686        } while (ret == -EBUSY);
 687
 688        if (ret < 0)
 689                goto join_fail;
 690
 691        cur_trans = fs_info->running_transaction;
 692
 693        h->transid = cur_trans->transid;
 694        h->transaction = cur_trans;
 695        h->root = root;
 696        refcount_set(&h->use_count, 1);
 697        h->fs_info = root->fs_info;
 698
 699        h->type = type;
 700        INIT_LIST_HEAD(&h->new_bgs);
 701
 702        smp_mb();
 703        if (cur_trans->state >= TRANS_STATE_COMMIT_START &&
 704            may_wait_transaction(fs_info, type)) {
 705                current->journal_info = h;
 706                btrfs_commit_transaction(h);
 707                goto again;
 708        }
 709
 710        if (num_bytes) {
 711                trace_btrfs_space_reservation(fs_info, "transaction",
 712                                              h->transid, num_bytes, 1);
 713                h->block_rsv = &fs_info->trans_block_rsv;
 714                h->bytes_reserved = num_bytes;
 715                h->reloc_reserved = reloc_reserved;
 716        }
 717
 718got_it:
 719        if (!current->journal_info)
 720                current->journal_info = h;
 721
 722        /*
 723         * If the space_info is marked ALLOC_FORCE then we'll get upgraded to
 724         * ALLOC_FORCE the first run through, and then we won't allocate for
 725         * anybody else who races in later.  We don't care about the return
 726         * value here.
 727         */
 728        if (do_chunk_alloc && num_bytes) {
 729                u64 flags = h->block_rsv->space_info->flags;
 730
 731                btrfs_chunk_alloc(h, btrfs_get_alloc_profile(fs_info, flags),
 732                                  CHUNK_ALLOC_NO_FORCE);
 733        }
 734
 735        /*
 736         * btrfs_record_root_in_trans() needs to alloc new extents, and may
 737         * call btrfs_join_transaction() while we're also starting a
 738         * transaction.
 739         *
 740         * Thus it need to be called after current->journal_info initialized,
 741         * or we can deadlock.
 742         */
 743        ret = btrfs_record_root_in_trans(h, root);
 744        if (ret) {
 745                /*
 746                 * The transaction handle is fully initialized and linked with
 747                 * other structures so it needs to be ended in case of errors,
 748                 * not just freed.
 749                 */
 750                btrfs_end_transaction(h);
 751                return ERR_PTR(ret);
 752        }
 753
 754        return h;
 755
 756join_fail:
 757        if (type & __TRANS_FREEZABLE)
 758                sb_end_intwrite(fs_info->sb);
 759        kmem_cache_free(btrfs_trans_handle_cachep, h);
 760alloc_fail:
 761        if (num_bytes)
 762                btrfs_block_rsv_release(fs_info, &fs_info->trans_block_rsv,
 763                                        num_bytes, NULL);
 764reserve_fail:
 765        btrfs_qgroup_free_meta_pertrans(root, qgroup_reserved);
 766        return ERR_PTR(ret);
 767}
 768
 769struct btrfs_trans_handle *btrfs_start_transaction(struct btrfs_root *root,
 770                                                   unsigned int num_items)
 771{
 772        return start_transaction(root, num_items, TRANS_START,
 773                                 BTRFS_RESERVE_FLUSH_ALL, true);
 774}
 775
 776struct btrfs_trans_handle *btrfs_start_transaction_fallback_global_rsv(
 777                                        struct btrfs_root *root,
 778                                        unsigned int num_items)
 779{
 780        return start_transaction(root, num_items, TRANS_START,
 781                                 BTRFS_RESERVE_FLUSH_ALL_STEAL, false);
 782}
 783
 784struct btrfs_trans_handle *btrfs_join_transaction(struct btrfs_root *root)
 785{
 786        return start_transaction(root, 0, TRANS_JOIN, BTRFS_RESERVE_NO_FLUSH,
 787                                 true);
 788}
 789
 790struct btrfs_trans_handle *btrfs_join_transaction_spacecache(struct btrfs_root *root)
 791{
 792        return start_transaction(root, 0, TRANS_JOIN_NOLOCK,
 793                                 BTRFS_RESERVE_NO_FLUSH, true);
 794}
 795
 796/*
 797 * Similar to regular join but it never starts a transaction when none is
 798 * running or after waiting for the current one to finish.
 799 */
 800struct btrfs_trans_handle *btrfs_join_transaction_nostart(struct btrfs_root *root)
 801{
 802        return start_transaction(root, 0, TRANS_JOIN_NOSTART,
 803                                 BTRFS_RESERVE_NO_FLUSH, true);
 804}
 805
 806/*
 807 * btrfs_attach_transaction() - catch the running transaction
 808 *
 809 * It is used when we want to commit the current the transaction, but
 810 * don't want to start a new one.
 811 *
 812 * Note: If this function return -ENOENT, it just means there is no
 813 * running transaction. But it is possible that the inactive transaction
 814 * is still in the memory, not fully on disk. If you hope there is no
 815 * inactive transaction in the fs when -ENOENT is returned, you should
 816 * invoke
 817 *     btrfs_attach_transaction_barrier()
 818 */
 819struct btrfs_trans_handle *btrfs_attach_transaction(struct btrfs_root *root)
 820{
 821        return start_transaction(root, 0, TRANS_ATTACH,
 822                                 BTRFS_RESERVE_NO_FLUSH, true);
 823}
 824
 825/*
 826 * btrfs_attach_transaction_barrier() - catch the running transaction
 827 *
 828 * It is similar to the above function, the difference is this one
 829 * will wait for all the inactive transactions until they fully
 830 * complete.
 831 */
 832struct btrfs_trans_handle *
 833btrfs_attach_transaction_barrier(struct btrfs_root *root)
 834{
 835        struct btrfs_trans_handle *trans;
 836
 837        trans = start_transaction(root, 0, TRANS_ATTACH,
 838                                  BTRFS_RESERVE_NO_FLUSH, true);
 839        if (trans == ERR_PTR(-ENOENT))
 840                btrfs_wait_for_commit(root->fs_info, 0);
 841
 842        return trans;
 843}
 844
 845/* Wait for a transaction commit to reach at least the given state. */
 846static noinline void wait_for_commit(struct btrfs_transaction *commit,
 847                                     const enum btrfs_trans_state min_state)
 848{
 849        wait_event(commit->commit_wait, commit->state >= min_state);
 850}
 851
 852int btrfs_wait_for_commit(struct btrfs_fs_info *fs_info, u64 transid)
 853{
 854        struct btrfs_transaction *cur_trans = NULL, *t;
 855        int ret = 0;
 856
 857        if (transid) {
 858                if (transid <= fs_info->last_trans_committed)
 859                        goto out;
 860
 861                /* find specified transaction */
 862                spin_lock(&fs_info->trans_lock);
 863                list_for_each_entry(t, &fs_info->trans_list, list) {
 864                        if (t->transid == transid) {
 865                                cur_trans = t;
 866                                refcount_inc(&cur_trans->use_count);
 867                                ret = 0;
 868                                break;
 869                        }
 870                        if (t->transid > transid) {
 871                                ret = 0;
 872                                break;
 873                        }
 874                }
 875                spin_unlock(&fs_info->trans_lock);
 876
 877                /*
 878                 * The specified transaction doesn't exist, or we
 879                 * raced with btrfs_commit_transaction
 880                 */
 881                if (!cur_trans) {
 882                        if (transid > fs_info->last_trans_committed)
 883                                ret = -EINVAL;
 884                        goto out;
 885                }
 886        } else {
 887                /* find newest transaction that is committing | committed */
 888                spin_lock(&fs_info->trans_lock);
 889                list_for_each_entry_reverse(t, &fs_info->trans_list,
 890                                            list) {
 891                        if (t->state >= TRANS_STATE_COMMIT_START) {
 892                                if (t->state == TRANS_STATE_COMPLETED)
 893                                        break;
 894                                cur_trans = t;
 895                                refcount_inc(&cur_trans->use_count);
 896                                break;
 897                        }
 898                }
 899                spin_unlock(&fs_info->trans_lock);
 900                if (!cur_trans)
 901                        goto out;  /* nothing committing|committed */
 902        }
 903
 904        wait_for_commit(cur_trans, TRANS_STATE_COMPLETED);
 905        btrfs_put_transaction(cur_trans);
 906out:
 907        return ret;
 908}
 909
 910void btrfs_throttle(struct btrfs_fs_info *fs_info)
 911{
 912        wait_current_trans(fs_info);
 913}
 914
 915static bool should_end_transaction(struct btrfs_trans_handle *trans)
 916{
 917        struct btrfs_fs_info *fs_info = trans->fs_info;
 918
 919        if (btrfs_check_space_for_delayed_refs(fs_info))
 920                return true;
 921
 922        return !!btrfs_block_rsv_check(&fs_info->global_block_rsv, 5);
 923}
 924
 925bool btrfs_should_end_transaction(struct btrfs_trans_handle *trans)
 926{
 927        struct btrfs_transaction *cur_trans = trans->transaction;
 928
 929        if (cur_trans->state >= TRANS_STATE_COMMIT_START ||
 930            test_bit(BTRFS_DELAYED_REFS_FLUSHING, &cur_trans->delayed_refs.flags))
 931                return true;
 932
 933        return should_end_transaction(trans);
 934}
 935
 936static void btrfs_trans_release_metadata(struct btrfs_trans_handle *trans)
 937
 938{
 939        struct btrfs_fs_info *fs_info = trans->fs_info;
 940
 941        if (!trans->block_rsv) {
 942                ASSERT(!trans->bytes_reserved);
 943                return;
 944        }
 945
 946        if (!trans->bytes_reserved)
 947                return;
 948
 949        ASSERT(trans->block_rsv == &fs_info->trans_block_rsv);
 950        trace_btrfs_space_reservation(fs_info, "transaction",
 951                                      trans->transid, trans->bytes_reserved, 0);
 952        btrfs_block_rsv_release(fs_info, trans->block_rsv,
 953                                trans->bytes_reserved, NULL);
 954        trans->bytes_reserved = 0;
 955}
 956
 957static int __btrfs_end_transaction(struct btrfs_trans_handle *trans,
 958                                   int throttle)
 959{
 960        struct btrfs_fs_info *info = trans->fs_info;
 961        struct btrfs_transaction *cur_trans = trans->transaction;
 962        int err = 0;
 963
 964        if (refcount_read(&trans->use_count) > 1) {
 965                refcount_dec(&trans->use_count);
 966                trans->block_rsv = trans->orig_rsv;
 967                return 0;
 968        }
 969
 970        btrfs_trans_release_metadata(trans);
 971        trans->block_rsv = NULL;
 972
 973        btrfs_create_pending_block_groups(trans);
 974
 975        btrfs_trans_release_chunk_metadata(trans);
 976
 977        if (trans->type & __TRANS_FREEZABLE)
 978                sb_end_intwrite(info->sb);
 979
 980        WARN_ON(cur_trans != info->running_transaction);
 981        WARN_ON(atomic_read(&cur_trans->num_writers) < 1);
 982        atomic_dec(&cur_trans->num_writers);
 983        extwriter_counter_dec(cur_trans, trans->type);
 984
 985        cond_wake_up(&cur_trans->writer_wait);
 986        btrfs_put_transaction(cur_trans);
 987
 988        if (current->journal_info == trans)
 989                current->journal_info = NULL;
 990
 991        if (throttle)
 992                btrfs_run_delayed_iputs(info);
 993
 994        if (TRANS_ABORTED(trans) || BTRFS_FS_ERROR(info)) {
 995                wake_up_process(info->transaction_kthread);
 996                if (TRANS_ABORTED(trans))
 997                        err = trans->aborted;
 998                else
 999                        err = -EROFS;
1000        }
1001
1002        kmem_cache_free(btrfs_trans_handle_cachep, trans);
1003        return err;
1004}
1005
1006int btrfs_end_transaction(struct btrfs_trans_handle *trans)
1007{
1008        return __btrfs_end_transaction(trans, 0);
1009}
1010
1011int btrfs_end_transaction_throttle(struct btrfs_trans_handle *trans)
1012{
1013        return __btrfs_end_transaction(trans, 1);
1014}
1015
1016/*
1017 * when btree blocks are allocated, they have some corresponding bits set for
1018 * them in one of two extent_io trees.  This is used to make sure all of
1019 * those extents are sent to disk but does not wait on them
1020 */
1021int btrfs_write_marked_extents(struct btrfs_fs_info *fs_info,
1022                               struct extent_io_tree *dirty_pages, int mark)
1023{
1024        int err = 0;
1025        int werr = 0;
1026        struct address_space *mapping = fs_info->btree_inode->i_mapping;
1027        struct extent_state *cached_state = NULL;
1028        u64 start = 0;
1029        u64 end;
1030
1031        atomic_inc(&BTRFS_I(fs_info->btree_inode)->sync_writers);
1032        while (!find_first_extent_bit(dirty_pages, start, &start, &end,
1033                                      mark, &cached_state)) {
1034                bool wait_writeback = false;
1035
1036                err = convert_extent_bit(dirty_pages, start, end,
1037                                         EXTENT_NEED_WAIT,
1038                                         mark, &cached_state);
1039                /*
1040                 * convert_extent_bit can return -ENOMEM, which is most of the
1041                 * time a temporary error. So when it happens, ignore the error
1042                 * and wait for writeback of this range to finish - because we
1043                 * failed to set the bit EXTENT_NEED_WAIT for the range, a call
1044                 * to __btrfs_wait_marked_extents() would not know that
1045                 * writeback for this range started and therefore wouldn't
1046                 * wait for it to finish - we don't want to commit a
1047                 * superblock that points to btree nodes/leafs for which
1048                 * writeback hasn't finished yet (and without errors).
1049                 * We cleanup any entries left in the io tree when committing
1050                 * the transaction (through extent_io_tree_release()).
1051                 */
1052                if (err == -ENOMEM) {
1053                        err = 0;
1054                        wait_writeback = true;
1055                }
1056                if (!err)
1057                        err = filemap_fdatawrite_range(mapping, start, end);
1058                if (err)
1059                        werr = err;
1060                else if (wait_writeback)
1061                        werr = filemap_fdatawait_range(mapping, start, end);
1062                free_extent_state(cached_state);
1063                cached_state = NULL;
1064                cond_resched();
1065                start = end + 1;
1066        }
1067        atomic_dec(&BTRFS_I(fs_info->btree_inode)->sync_writers);
1068        return werr;
1069}
1070
1071/*
1072 * when btree blocks are allocated, they have some corresponding bits set for
1073 * them in one of two extent_io trees.  This is used to make sure all of
1074 * those extents are on disk for transaction or log commit.  We wait
1075 * on all the pages and clear them from the dirty pages state tree
1076 */
1077static int __btrfs_wait_marked_extents(struct btrfs_fs_info *fs_info,
1078                                       struct extent_io_tree *dirty_pages)
1079{
1080        int err = 0;
1081        int werr = 0;
1082        struct address_space *mapping = fs_info->btree_inode->i_mapping;
1083        struct extent_state *cached_state = NULL;
1084        u64 start = 0;
1085        u64 end;
1086
1087        while (!find_first_extent_bit(dirty_pages, start, &start, &end,
1088                                      EXTENT_NEED_WAIT, &cached_state)) {
1089                /*
1090                 * Ignore -ENOMEM errors returned by clear_extent_bit().
1091                 * When committing the transaction, we'll remove any entries
1092                 * left in the io tree. For a log commit, we don't remove them
1093                 * after committing the log because the tree can be accessed
1094                 * concurrently - we do it only at transaction commit time when
1095                 * it's safe to do it (through extent_io_tree_release()).
1096                 */
1097                err = clear_extent_bit(dirty_pages, start, end,
1098                                       EXTENT_NEED_WAIT, 0, 0, &cached_state);
1099                if (err == -ENOMEM)
1100                        err = 0;
1101                if (!err)
1102                        err = filemap_fdatawait_range(mapping, start, end);
1103                if (err)
1104                        werr = err;
1105                free_extent_state(cached_state);
1106                cached_state = NULL;
1107                cond_resched();
1108                start = end + 1;
1109        }
1110        if (err)
1111                werr = err;
1112        return werr;
1113}
1114
1115static int btrfs_wait_extents(struct btrfs_fs_info *fs_info,
1116                       struct extent_io_tree *dirty_pages)
1117{
1118        bool errors = false;
1119        int err;
1120
1121        err = __btrfs_wait_marked_extents(fs_info, dirty_pages);
1122        if (test_and_clear_bit(BTRFS_FS_BTREE_ERR, &fs_info->flags))
1123                errors = true;
1124
1125        if (errors && !err)
1126                err = -EIO;
1127        return err;
1128}
1129
1130int btrfs_wait_tree_log_extents(struct btrfs_root *log_root, int mark)
1131{
1132        struct btrfs_fs_info *fs_info = log_root->fs_info;
1133        struct extent_io_tree *dirty_pages = &log_root->dirty_log_pages;
1134        bool errors = false;
1135        int err;
1136
1137        ASSERT(log_root->root_key.objectid == BTRFS_TREE_LOG_OBJECTID);
1138
1139        err = __btrfs_wait_marked_extents(fs_info, dirty_pages);
1140        if ((mark & EXTENT_DIRTY) &&
1141            test_and_clear_bit(BTRFS_FS_LOG1_ERR, &fs_info->flags))
1142                errors = true;
1143
1144        if ((mark & EXTENT_NEW) &&
1145            test_and_clear_bit(BTRFS_FS_LOG2_ERR, &fs_info->flags))
1146                errors = true;
1147
1148        if (errors && !err)
1149                err = -EIO;
1150        return err;
1151}
1152
1153/*
1154 * When btree blocks are allocated the corresponding extents are marked dirty.
1155 * This function ensures such extents are persisted on disk for transaction or
1156 * log commit.
1157 *
1158 * @trans: transaction whose dirty pages we'd like to write
1159 */
1160static int btrfs_write_and_wait_transaction(struct btrfs_trans_handle *trans)
1161{
1162        int ret;
1163        int ret2;
1164        struct extent_io_tree *dirty_pages = &trans->transaction->dirty_pages;
1165        struct btrfs_fs_info *fs_info = trans->fs_info;
1166        struct blk_plug plug;
1167
1168        blk_start_plug(&plug);
1169        ret = btrfs_write_marked_extents(fs_info, dirty_pages, EXTENT_DIRTY);
1170        blk_finish_plug(&plug);
1171        ret2 = btrfs_wait_extents(fs_info, dirty_pages);
1172
1173        extent_io_tree_release(&trans->transaction->dirty_pages);
1174
1175        if (ret)
1176                return ret;
1177        else if (ret2)
1178                return ret2;
1179        else
1180                return 0;
1181}
1182
1183/*
1184 * this is used to update the root pointer in the tree of tree roots.
1185 *
1186 * But, in the case of the extent allocation tree, updating the root
1187 * pointer may allocate blocks which may change the root of the extent
1188 * allocation tree.
1189 *
1190 * So, this loops and repeats and makes sure the cowonly root didn't
1191 * change while the root pointer was being updated in the metadata.
1192 */
1193static int update_cowonly_root(struct btrfs_trans_handle *trans,
1194                               struct btrfs_root *root)
1195{
1196        int ret;
1197        u64 old_root_bytenr;
1198        u64 old_root_used;
1199        struct btrfs_fs_info *fs_info = root->fs_info;
1200        struct btrfs_root *tree_root = fs_info->tree_root;
1201
1202        old_root_used = btrfs_root_used(&root->root_item);
1203
1204        while (1) {
1205                old_root_bytenr = btrfs_root_bytenr(&root->root_item);
1206                if (old_root_bytenr == root->node->start &&
1207                    old_root_used == btrfs_root_used(&root->root_item))
1208                        break;
1209
1210                btrfs_set_root_node(&root->root_item, root->node);
1211                ret = btrfs_update_root(trans, tree_root,
1212                                        &root->root_key,
1213                                        &root->root_item);
1214                if (ret)
1215                        return ret;
1216
1217                old_root_used = btrfs_root_used(&root->root_item);
1218        }
1219
1220        return 0;
1221}
1222
1223/*
1224 * update all the cowonly tree roots on disk
1225 *
1226 * The error handling in this function may not be obvious. Any of the
1227 * failures will cause the file system to go offline. We still need
1228 * to clean up the delayed refs.
1229 */
1230static noinline int commit_cowonly_roots(struct btrfs_trans_handle *trans)
1231{
1232        struct btrfs_fs_info *fs_info = trans->fs_info;
1233        struct list_head *dirty_bgs = &trans->transaction->dirty_bgs;
1234        struct list_head *io_bgs = &trans->transaction->io_bgs;
1235        struct list_head *next;
1236        struct extent_buffer *eb;
1237        int ret;
1238
1239        eb = btrfs_lock_root_node(fs_info->tree_root);
1240        ret = btrfs_cow_block(trans, fs_info->tree_root, eb, NULL,
1241                              0, &eb, BTRFS_NESTING_COW);
1242        btrfs_tree_unlock(eb);
1243        free_extent_buffer(eb);
1244
1245        if (ret)
1246                return ret;
1247
1248        ret = btrfs_run_dev_stats(trans);
1249        if (ret)
1250                return ret;
1251        ret = btrfs_run_dev_replace(trans);
1252        if (ret)
1253                return ret;
1254        ret = btrfs_run_qgroups(trans);
1255        if (ret)
1256                return ret;
1257
1258        ret = btrfs_setup_space_cache(trans);
1259        if (ret)
1260                return ret;
1261
1262again:
1263        while (!list_empty(&fs_info->dirty_cowonly_roots)) {
1264                struct btrfs_root *root;
1265                next = fs_info->dirty_cowonly_roots.next;
1266                list_del_init(next);
1267                root = list_entry(next, struct btrfs_root, dirty_list);
1268                clear_bit(BTRFS_ROOT_DIRTY, &root->state);
1269
1270                if (root != fs_info->extent_root)
1271                        list_add_tail(&root->dirty_list,
1272                                      &trans->transaction->switch_commits);
1273                ret = update_cowonly_root(trans, root);
1274                if (ret)
1275                        return ret;
1276        }
1277
1278        /* Now flush any delayed refs generated by updating all of the roots */
1279        ret = btrfs_run_delayed_refs(trans, (unsigned long)-1);
1280        if (ret)
1281                return ret;
1282
1283        while (!list_empty(dirty_bgs) || !list_empty(io_bgs)) {
1284                ret = btrfs_write_dirty_block_groups(trans);
1285                if (ret)
1286                        return ret;
1287
1288                /*
1289                 * We're writing the dirty block groups, which could generate
1290                 * delayed refs, which could generate more dirty block groups,
1291                 * so we want to keep this flushing in this loop to make sure
1292                 * everything gets run.
1293                 */
1294                ret = btrfs_run_delayed_refs(trans, (unsigned long)-1);
1295                if (ret)
1296                        return ret;
1297        }
1298
1299        if (!list_empty(&fs_info->dirty_cowonly_roots))
1300                goto again;
1301
1302        list_add_tail(&fs_info->extent_root->dirty_list,
1303                      &trans->transaction->switch_commits);
1304
1305        /* Update dev-replace pointer once everything is committed */
1306        fs_info->dev_replace.committed_cursor_left =
1307                fs_info->dev_replace.cursor_left_last_write_of_item;
1308
1309        return 0;
1310}
1311
1312/*
1313 * dead roots are old snapshots that need to be deleted.  This allocates
1314 * a dirty root struct and adds it into the list of dead roots that need to
1315 * be deleted
1316 */
1317void btrfs_add_dead_root(struct btrfs_root *root)
1318{
1319        struct btrfs_fs_info *fs_info = root->fs_info;
1320
1321        spin_lock(&fs_info->trans_lock);
1322        if (list_empty(&root->root_list)) {
1323                btrfs_grab_root(root);
1324                list_add_tail(&root->root_list, &fs_info->dead_roots);
1325        }
1326        spin_unlock(&fs_info->trans_lock);
1327}
1328
1329/*
1330 * update all the cowonly tree roots on disk
1331 */
1332static noinline int commit_fs_roots(struct btrfs_trans_handle *trans)
1333{
1334        struct btrfs_fs_info *fs_info = trans->fs_info;
1335        struct btrfs_root *gang[8];
1336        int i;
1337        int ret;
1338
1339        spin_lock(&fs_info->fs_roots_radix_lock);
1340        while (1) {
1341                ret = radix_tree_gang_lookup_tag(&fs_info->fs_roots_radix,
1342                                                 (void **)gang, 0,
1343                                                 ARRAY_SIZE(gang),
1344                                                 BTRFS_ROOT_TRANS_TAG);
1345                if (ret == 0)
1346                        break;
1347                for (i = 0; i < ret; i++) {
1348                        struct btrfs_root *root = gang[i];
1349                        int ret2;
1350
1351                        radix_tree_tag_clear(&fs_info->fs_roots_radix,
1352                                        (unsigned long)root->root_key.objectid,
1353                                        BTRFS_ROOT_TRANS_TAG);
1354                        spin_unlock(&fs_info->fs_roots_radix_lock);
1355
1356                        btrfs_free_log(trans, root);
1357                        ret2 = btrfs_update_reloc_root(trans, root);
1358                        if (ret2)
1359                                return ret2;
1360
1361                        /* see comments in should_cow_block() */
1362                        clear_bit(BTRFS_ROOT_FORCE_COW, &root->state);
1363                        smp_mb__after_atomic();
1364
1365                        if (root->commit_root != root->node) {
1366                                list_add_tail(&root->dirty_list,
1367                                        &trans->transaction->switch_commits);
1368                                btrfs_set_root_node(&root->root_item,
1369                                                    root->node);
1370                        }
1371
1372                        ret2 = btrfs_update_root(trans, fs_info->tree_root,
1373                                                &root->root_key,
1374                                                &root->root_item);
1375                        if (ret2)
1376                                return ret2;
1377                        spin_lock(&fs_info->fs_roots_radix_lock);
1378                        btrfs_qgroup_free_meta_all_pertrans(root);
1379                }
1380        }
1381        spin_unlock(&fs_info->fs_roots_radix_lock);
1382        return 0;
1383}
1384
1385/*
1386 * defrag a given btree.
1387 * Every leaf in the btree is read and defragged.
1388 */
1389int btrfs_defrag_root(struct btrfs_root *root)
1390{
1391        struct btrfs_fs_info *info = root->fs_info;
1392        struct btrfs_trans_handle *trans;
1393        int ret;
1394
1395        if (test_and_set_bit(BTRFS_ROOT_DEFRAG_RUNNING, &root->state))
1396                return 0;
1397
1398        while (1) {
1399                trans = btrfs_start_transaction(root, 0);
1400                if (IS_ERR(trans)) {
1401                        ret = PTR_ERR(trans);
1402                        break;
1403                }
1404
1405                ret = btrfs_defrag_leaves(trans, root);
1406
1407                btrfs_end_transaction(trans);
1408                btrfs_btree_balance_dirty(info);
1409                cond_resched();
1410
1411                if (btrfs_fs_closing(info) || ret != -EAGAIN)
1412                        break;
1413
1414                if (btrfs_defrag_cancelled(info)) {
1415                        btrfs_debug(info, "defrag_root cancelled");
1416                        ret = -EAGAIN;
1417                        break;
1418                }
1419        }
1420        clear_bit(BTRFS_ROOT_DEFRAG_RUNNING, &root->state);
1421        return ret;
1422}
1423
1424/*
1425 * Do all special snapshot related qgroup dirty hack.
1426 *
1427 * Will do all needed qgroup inherit and dirty hack like switch commit
1428 * roots inside one transaction and write all btree into disk, to make
1429 * qgroup works.
1430 */
1431static int qgroup_account_snapshot(struct btrfs_trans_handle *trans,
1432                                   struct btrfs_root *src,
1433                                   struct btrfs_root *parent,
1434                                   struct btrfs_qgroup_inherit *inherit,
1435                                   u64 dst_objectid)
1436{
1437        struct btrfs_fs_info *fs_info = src->fs_info;
1438        int ret;
1439
1440        /*
1441         * Save some performance in the case that qgroups are not
1442         * enabled. If this check races with the ioctl, rescan will
1443         * kick in anyway.
1444         */
1445        if (!test_bit(BTRFS_FS_QUOTA_ENABLED, &fs_info->flags))
1446                return 0;
1447
1448        /*
1449         * Ensure dirty @src will be committed.  Or, after coming
1450         * commit_fs_roots() and switch_commit_roots(), any dirty but not
1451         * recorded root will never be updated again, causing an outdated root
1452         * item.
1453         */
1454        ret = record_root_in_trans(trans, src, 1);
1455        if (ret)
1456                return ret;
1457
1458        /*
1459         * btrfs_qgroup_inherit relies on a consistent view of the usage for the
1460         * src root, so we must run the delayed refs here.
1461         *
1462         * However this isn't particularly fool proof, because there's no
1463         * synchronization keeping us from changing the tree after this point
1464         * before we do the qgroup_inherit, or even from making changes while
1465         * we're doing the qgroup_inherit.  But that's a problem for the future,
1466         * for now flush the delayed refs to narrow the race window where the
1467         * qgroup counters could end up wrong.
1468         */
1469        ret = btrfs_run_delayed_refs(trans, (unsigned long)-1);
1470        if (ret) {
1471                btrfs_abort_transaction(trans, ret);
1472                return ret;
1473        }
1474
1475        /*
1476         * We are going to commit transaction, see btrfs_commit_transaction()
1477         * comment for reason locking tree_log_mutex
1478         */
1479        mutex_lock(&fs_info->tree_log_mutex);
1480
1481        ret = commit_fs_roots(trans);
1482        if (ret)
1483                goto out;
1484        ret = btrfs_qgroup_account_extents(trans);
1485        if (ret < 0)
1486                goto out;
1487
1488        /* Now qgroup are all updated, we can inherit it to new qgroups */
1489        ret = btrfs_qgroup_inherit(trans, src->root_key.objectid, dst_objectid,
1490                                   inherit);
1491        if (ret < 0)
1492                goto out;
1493
1494        /*
1495         * Now we do a simplified commit transaction, which will:
1496         * 1) commit all subvolume and extent tree
1497         *    To ensure all subvolume and extent tree have a valid
1498         *    commit_root to accounting later insert_dir_item()
1499         * 2) write all btree blocks onto disk
1500         *    This is to make sure later btree modification will be cowed
1501         *    Or commit_root can be populated and cause wrong qgroup numbers
1502         * In this simplified commit, we don't really care about other trees
1503         * like chunk and root tree, as they won't affect qgroup.
1504         * And we don't write super to avoid half committed status.
1505         */
1506        ret = commit_cowonly_roots(trans);
1507        if (ret)
1508                goto out;
1509        switch_commit_roots(trans);
1510        ret = btrfs_write_and_wait_transaction(trans);
1511        if (ret)
1512                btrfs_handle_fs_error(fs_info, ret,
1513                        "Error while writing out transaction for qgroup");
1514
1515out:
1516        mutex_unlock(&fs_info->tree_log_mutex);
1517
1518        /*
1519         * Force parent root to be updated, as we recorded it before so its
1520         * last_trans == cur_transid.
1521         * Or it won't be committed again onto disk after later
1522         * insert_dir_item()
1523         */
1524        if (!ret)
1525                ret = record_root_in_trans(trans, parent, 1);
1526        return ret;
1527}
1528
1529/*
1530 * new snapshots need to be created at a very specific time in the
1531 * transaction commit.  This does the actual creation.
1532 *
1533 * Note:
1534 * If the error which may affect the commitment of the current transaction
1535 * happens, we should return the error number. If the error which just affect
1536 * the creation of the pending snapshots, just return 0.
1537 */
1538static noinline int create_pending_snapshot(struct btrfs_trans_handle *trans,
1539                                   struct btrfs_pending_snapshot *pending)
1540{
1541
1542        struct btrfs_fs_info *fs_info = trans->fs_info;
1543        struct btrfs_key key;
1544        struct btrfs_root_item *new_root_item;
1545        struct btrfs_root *tree_root = fs_info->tree_root;
1546        struct btrfs_root *root = pending->root;
1547        struct btrfs_root *parent_root;
1548        struct btrfs_block_rsv *rsv;
1549        struct inode *parent_inode;
1550        struct btrfs_path *path;
1551        struct btrfs_dir_item *dir_item;
1552        struct dentry *dentry;
1553        struct extent_buffer *tmp;
1554        struct extent_buffer *old;
1555        struct timespec64 cur_time;
1556        int ret = 0;
1557        u64 to_reserve = 0;
1558        u64 index = 0;
1559        u64 objectid;
1560        u64 root_flags;
1561
1562        ASSERT(pending->path);
1563        path = pending->path;
1564
1565        ASSERT(pending->root_item);
1566        new_root_item = pending->root_item;
1567
1568        pending->error = btrfs_get_free_objectid(tree_root, &objectid);
1569        if (pending->error)
1570                goto no_free_objectid;
1571
1572        /*
1573         * Make qgroup to skip current new snapshot's qgroupid, as it is
1574         * accounted by later btrfs_qgroup_inherit().
1575         */
1576        btrfs_set_skip_qgroup(trans, objectid);
1577
1578        btrfs_reloc_pre_snapshot(pending, &to_reserve);
1579
1580        if (to_reserve > 0) {
1581                pending->error = btrfs_block_rsv_add(root,
1582                                                     &pending->block_rsv,
1583                                                     to_reserve,
1584                                                     BTRFS_RESERVE_NO_FLUSH);
1585                if (pending->error)
1586                        goto clear_skip_qgroup;
1587        }
1588
1589        key.objectid = objectid;
1590        key.offset = (u64)-1;
1591        key.type = BTRFS_ROOT_ITEM_KEY;
1592
1593        rsv = trans->block_rsv;
1594        trans->block_rsv = &pending->block_rsv;
1595        trans->bytes_reserved = trans->block_rsv->reserved;
1596        trace_btrfs_space_reservation(fs_info, "transaction",
1597                                      trans->transid,
1598                                      trans->bytes_reserved, 1);
1599        dentry = pending->dentry;
1600        parent_inode = pending->dir;
1601        parent_root = BTRFS_I(parent_inode)->root;
1602        ret = record_root_in_trans(trans, parent_root, 0);
1603        if (ret)
1604                goto fail;
1605        cur_time = current_time(parent_inode);
1606
1607        /*
1608         * insert the directory item
1609         */
1610        ret = btrfs_set_inode_index(BTRFS_I(parent_inode), &index);
1611        BUG_ON(ret); /* -ENOMEM */
1612
1613        /* check if there is a file/dir which has the same name. */
1614        dir_item = btrfs_lookup_dir_item(NULL, parent_root, path,
1615                                         btrfs_ino(BTRFS_I(parent_inode)),
1616                                         dentry->d_name.name,
1617                                         dentry->d_name.len, 0);
1618        if (dir_item != NULL && !IS_ERR(dir_item)) {
1619                pending->error = -EEXIST;
1620                goto dir_item_existed;
1621        } else if (IS_ERR(dir_item)) {
1622                ret = PTR_ERR(dir_item);
1623                btrfs_abort_transaction(trans, ret);
1624                goto fail;
1625        }
1626        btrfs_release_path(path);
1627
1628        /*
1629         * pull in the delayed directory update
1630         * and the delayed inode item
1631         * otherwise we corrupt the FS during
1632         * snapshot
1633         */
1634        ret = btrfs_run_delayed_items(trans);
1635        if (ret) {      /* Transaction aborted */
1636                btrfs_abort_transaction(trans, ret);
1637                goto fail;
1638        }
1639
1640        ret = record_root_in_trans(trans, root, 0);
1641        if (ret) {
1642                btrfs_abort_transaction(trans, ret);
1643                goto fail;
1644        }
1645        btrfs_set_root_last_snapshot(&root->root_item, trans->transid);
1646        memcpy(new_root_item, &root->root_item, sizeof(*new_root_item));
1647        btrfs_check_and_init_root_item(new_root_item);
1648
1649        root_flags = btrfs_root_flags(new_root_item);
1650        if (pending->readonly)
1651                root_flags |= BTRFS_ROOT_SUBVOL_RDONLY;
1652        else
1653                root_flags &= ~BTRFS_ROOT_SUBVOL_RDONLY;
1654        btrfs_set_root_flags(new_root_item, root_flags);
1655
1656        btrfs_set_root_generation_v2(new_root_item,
1657                        trans->transid);
1658        generate_random_guid(new_root_item->uuid);
1659        memcpy(new_root_item->parent_uuid, root->root_item.uuid,
1660                        BTRFS_UUID_SIZE);
1661        if (!(root_flags & BTRFS_ROOT_SUBVOL_RDONLY)) {
1662                memset(new_root_item->received_uuid, 0,
1663                       sizeof(new_root_item->received_uuid));
1664                memset(&new_root_item->stime, 0, sizeof(new_root_item->stime));
1665                memset(&new_root_item->rtime, 0, sizeof(new_root_item->rtime));
1666                btrfs_set_root_stransid(new_root_item, 0);
1667                btrfs_set_root_rtransid(new_root_item, 0);
1668        }
1669        btrfs_set_stack_timespec_sec(&new_root_item->otime, cur_time.tv_sec);
1670        btrfs_set_stack_timespec_nsec(&new_root_item->otime, cur_time.tv_nsec);
1671        btrfs_set_root_otransid(new_root_item, trans->transid);
1672
1673        old = btrfs_lock_root_node(root);
1674        ret = btrfs_cow_block(trans, root, old, NULL, 0, &old,
1675                              BTRFS_NESTING_COW);
1676        if (ret) {
1677                btrfs_tree_unlock(old);
1678                free_extent_buffer(old);
1679                btrfs_abort_transaction(trans, ret);
1680                goto fail;
1681        }
1682
1683        ret = btrfs_copy_root(trans, root, old, &tmp, objectid);
1684        /* clean up in any case */
1685        btrfs_tree_unlock(old);
1686        free_extent_buffer(old);
1687        if (ret) {
1688                btrfs_abort_transaction(trans, ret);
1689                goto fail;
1690        }
1691        /* see comments in should_cow_block() */
1692        set_bit(BTRFS_ROOT_FORCE_COW, &root->state);
1693        smp_wmb();
1694
1695        btrfs_set_root_node(new_root_item, tmp);
1696        /* record when the snapshot was created in key.offset */
1697        key.offset = trans->transid;
1698        ret = btrfs_insert_root(trans, tree_root, &key, new_root_item);
1699        btrfs_tree_unlock(tmp);
1700        free_extent_buffer(tmp);
1701        if (ret) {
1702                btrfs_abort_transaction(trans, ret);
1703                goto fail;
1704        }
1705
1706        /*
1707         * insert root back/forward references
1708         */
1709        ret = btrfs_add_root_ref(trans, objectid,
1710                                 parent_root->root_key.objectid,
1711                                 btrfs_ino(BTRFS_I(parent_inode)), index,
1712                                 dentry->d_name.name, dentry->d_name.len);
1713        if (ret) {
1714                btrfs_abort_transaction(trans, ret);
1715                goto fail;
1716        }
1717
1718        key.offset = (u64)-1;
1719        pending->snap = btrfs_get_new_fs_root(fs_info, objectid, pending->anon_dev);
1720        if (IS_ERR(pending->snap)) {
1721                ret = PTR_ERR(pending->snap);
1722                pending->snap = NULL;
1723                btrfs_abort_transaction(trans, ret);
1724                goto fail;
1725        }
1726
1727        ret = btrfs_reloc_post_snapshot(trans, pending);
1728        if (ret) {
1729                btrfs_abort_transaction(trans, ret);
1730                goto fail;
1731        }
1732
1733        /*
1734         * Do special qgroup accounting for snapshot, as we do some qgroup
1735         * snapshot hack to do fast snapshot.
1736         * To co-operate with that hack, we do hack again.
1737         * Or snapshot will be greatly slowed down by a subtree qgroup rescan
1738         */
1739        ret = qgroup_account_snapshot(trans, root, parent_root,
1740                                      pending->inherit, objectid);
1741        if (ret < 0)
1742                goto fail;
1743
1744        ret = btrfs_insert_dir_item(trans, dentry->d_name.name,
1745                                    dentry->d_name.len, BTRFS_I(parent_inode),
1746                                    &key, BTRFS_FT_DIR, index);
1747        /* We have check then name at the beginning, so it is impossible. */
1748        BUG_ON(ret == -EEXIST || ret == -EOVERFLOW);
1749        if (ret) {
1750                btrfs_abort_transaction(trans, ret);
1751                goto fail;
1752        }
1753
1754        btrfs_i_size_write(BTRFS_I(parent_inode), parent_inode->i_size +
1755                                         dentry->d_name.len * 2);
1756        parent_inode->i_mtime = parent_inode->i_ctime =
1757                current_time(parent_inode);
1758        ret = btrfs_update_inode_fallback(trans, parent_root, BTRFS_I(parent_inode));
1759        if (ret) {
1760                btrfs_abort_transaction(trans, ret);
1761                goto fail;
1762        }
1763        ret = btrfs_uuid_tree_add(trans, new_root_item->uuid,
1764                                  BTRFS_UUID_KEY_SUBVOL,
1765                                  objectid);
1766        if (ret) {
1767                btrfs_abort_transaction(trans, ret);
1768                goto fail;
1769        }
1770        if (!btrfs_is_empty_uuid(new_root_item->received_uuid)) {
1771                ret = btrfs_uuid_tree_add(trans, new_root_item->received_uuid,
1772                                          BTRFS_UUID_KEY_RECEIVED_SUBVOL,
1773                                          objectid);
1774                if (ret && ret != -EEXIST) {
1775                        btrfs_abort_transaction(trans, ret);
1776                        goto fail;
1777                }
1778        }
1779
1780fail:
1781        pending->error = ret;
1782dir_item_existed:
1783        trans->block_rsv = rsv;
1784        trans->bytes_reserved = 0;
1785clear_skip_qgroup:
1786        btrfs_clear_skip_qgroup(trans);
1787no_free_objectid:
1788        kfree(new_root_item);
1789        pending->root_item = NULL;
1790        btrfs_free_path(path);
1791        pending->path = NULL;
1792
1793        return ret;
1794}
1795
1796/*
1797 * create all the snapshots we've scheduled for creation
1798 */
1799static noinline int create_pending_snapshots(struct btrfs_trans_handle *trans)
1800{
1801        struct btrfs_pending_snapshot *pending, *next;
1802        struct list_head *head = &trans->transaction->pending_snapshots;
1803        int ret = 0;
1804
1805        list_for_each_entry_safe(pending, next, head, list) {
1806                list_del(&pending->list);
1807                ret = create_pending_snapshot(trans, pending);
1808                if (ret)
1809                        break;
1810        }
1811        return ret;
1812}
1813
1814static void update_super_roots(struct btrfs_fs_info *fs_info)
1815{
1816        struct btrfs_root_item *root_item;
1817        struct btrfs_super_block *super;
1818
1819        super = fs_info->super_copy;
1820
1821        root_item = &fs_info->chunk_root->root_item;
1822        super->chunk_root = root_item->bytenr;
1823        super->chunk_root_generation = root_item->generation;
1824        super->chunk_root_level = root_item->level;
1825
1826        root_item = &fs_info->tree_root->root_item;
1827        super->root = root_item->bytenr;
1828        super->generation = root_item->generation;
1829        super->root_level = root_item->level;
1830        if (btrfs_test_opt(fs_info, SPACE_CACHE))
1831                super->cache_generation = root_item->generation;
1832        else if (test_bit(BTRFS_FS_CLEANUP_SPACE_CACHE_V1, &fs_info->flags))
1833                super->cache_generation = 0;
1834        if (test_bit(BTRFS_FS_UPDATE_UUID_TREE_GEN, &fs_info->flags))
1835                super->uuid_tree_generation = root_item->generation;
1836}
1837
1838int btrfs_transaction_in_commit(struct btrfs_fs_info *info)
1839{
1840        struct btrfs_transaction *trans;
1841        int ret = 0;
1842
1843        spin_lock(&info->trans_lock);
1844        trans = info->running_transaction;
1845        if (trans)
1846                ret = (trans->state >= TRANS_STATE_COMMIT_START);
1847        spin_unlock(&info->trans_lock);
1848        return ret;
1849}
1850
1851int btrfs_transaction_blocked(struct btrfs_fs_info *info)
1852{
1853        struct btrfs_transaction *trans;
1854        int ret = 0;
1855
1856        spin_lock(&info->trans_lock);
1857        trans = info->running_transaction;
1858        if (trans)
1859                ret = is_transaction_blocked(trans);
1860        spin_unlock(&info->trans_lock);
1861        return ret;
1862}
1863
1864/*
1865 * commit transactions asynchronously. once btrfs_commit_transaction_async
1866 * returns, any subsequent transaction will not be allowed to join.
1867 */
1868struct btrfs_async_commit {
1869        struct btrfs_trans_handle *newtrans;
1870        struct work_struct work;
1871};
1872
1873static void do_async_commit(struct work_struct *work)
1874{
1875        struct btrfs_async_commit *ac =
1876                container_of(work, struct btrfs_async_commit, work);
1877
1878        /*
1879         * We've got freeze protection passed with the transaction.
1880         * Tell lockdep about it.
1881         */
1882        if (ac->newtrans->type & __TRANS_FREEZABLE)
1883                __sb_writers_acquired(ac->newtrans->fs_info->sb, SB_FREEZE_FS);
1884
1885        current->journal_info = ac->newtrans;
1886
1887        btrfs_commit_transaction(ac->newtrans);
1888        kfree(ac);
1889}
1890
1891int btrfs_commit_transaction_async(struct btrfs_trans_handle *trans)
1892{
1893        struct btrfs_fs_info *fs_info = trans->fs_info;
1894        struct btrfs_async_commit *ac;
1895        struct btrfs_transaction *cur_trans;
1896
1897        ac = kmalloc(sizeof(*ac), GFP_NOFS);
1898        if (!ac)
1899                return -ENOMEM;
1900
1901        INIT_WORK(&ac->work, do_async_commit);
1902        ac->newtrans = btrfs_join_transaction(trans->root);
1903        if (IS_ERR(ac->newtrans)) {
1904                int err = PTR_ERR(ac->newtrans);
1905                kfree(ac);
1906                return err;
1907        }
1908
1909        /* take transaction reference */
1910        cur_trans = trans->transaction;
1911        refcount_inc(&cur_trans->use_count);
1912
1913        btrfs_end_transaction(trans);
1914
1915        /*
1916         * Tell lockdep we've released the freeze rwsem, since the
1917         * async commit thread will be the one to unlock it.
1918         */
1919        if (ac->newtrans->type & __TRANS_FREEZABLE)
1920                __sb_writers_release(fs_info->sb, SB_FREEZE_FS);
1921
1922        schedule_work(&ac->work);
1923        /*
1924         * Wait for the current transaction commit to start and block
1925         * subsequent transaction joins
1926         */
1927        wait_event(fs_info->transaction_blocked_wait,
1928                   cur_trans->state >= TRANS_STATE_COMMIT_START ||
1929                   TRANS_ABORTED(cur_trans));
1930        if (current->journal_info == trans)
1931                current->journal_info = NULL;
1932
1933        btrfs_put_transaction(cur_trans);
1934        return 0;
1935}
1936
1937
1938static void cleanup_transaction(struct btrfs_trans_handle *trans, int err)
1939{
1940        struct btrfs_fs_info *fs_info = trans->fs_info;
1941        struct btrfs_transaction *cur_trans = trans->transaction;
1942
1943        WARN_ON(refcount_read(&trans->use_count) > 1);
1944
1945        btrfs_abort_transaction(trans, err);
1946
1947        spin_lock(&fs_info->trans_lock);
1948
1949        /*
1950         * If the transaction is removed from the list, it means this
1951         * transaction has been committed successfully, so it is impossible
1952         * to call the cleanup function.
1953         */
1954        BUG_ON(list_empty(&cur_trans->list));
1955
1956        if (cur_trans == fs_info->running_transaction) {
1957                cur_trans->state = TRANS_STATE_COMMIT_DOING;
1958                spin_unlock(&fs_info->trans_lock);
1959                wait_event(cur_trans->writer_wait,
1960                           atomic_read(&cur_trans->num_writers) == 1);
1961
1962                spin_lock(&fs_info->trans_lock);
1963        }
1964
1965        /*
1966         * Now that we know no one else is still using the transaction we can
1967         * remove the transaction from the list of transactions. This avoids
1968         * the transaction kthread from cleaning up the transaction while some
1969         * other task is still using it, which could result in a use-after-free
1970         * on things like log trees, as it forces the transaction kthread to
1971         * wait for this transaction to be cleaned up by us.
1972         */
1973        list_del_init(&cur_trans->list);
1974
1975        spin_unlock(&fs_info->trans_lock);
1976
1977        btrfs_cleanup_one_transaction(trans->transaction, fs_info);
1978
1979        spin_lock(&fs_info->trans_lock);
1980        if (cur_trans == fs_info->running_transaction)
1981                fs_info->running_transaction = NULL;
1982        spin_unlock(&fs_info->trans_lock);
1983
1984        if (trans->type & __TRANS_FREEZABLE)
1985                sb_end_intwrite(fs_info->sb);
1986        btrfs_put_transaction(cur_trans);
1987        btrfs_put_transaction(cur_trans);
1988
1989        trace_btrfs_transaction_commit(trans->root);
1990
1991        if (current->journal_info == trans)
1992                current->journal_info = NULL;
1993        btrfs_scrub_cancel(fs_info);
1994
1995        kmem_cache_free(btrfs_trans_handle_cachep, trans);
1996}
1997
1998/*
1999 * Release reserved delayed ref space of all pending block groups of the
2000 * transaction and remove them from the list
2001 */
2002static void btrfs_cleanup_pending_block_groups(struct btrfs_trans_handle *trans)
2003{
2004       struct btrfs_fs_info *fs_info = trans->fs_info;
2005       struct btrfs_block_group *block_group, *tmp;
2006
2007       list_for_each_entry_safe(block_group, tmp, &trans->new_bgs, bg_list) {
2008               btrfs_delayed_refs_rsv_release(fs_info, 1);
2009               list_del_init(&block_group->bg_list);
2010       }
2011}
2012
2013static inline int btrfs_start_delalloc_flush(struct btrfs_fs_info *fs_info)
2014{
2015        /*
2016         * We use writeback_inodes_sb here because if we used
2017         * btrfs_start_delalloc_roots we would deadlock with fs freeze.
2018         * Currently are holding the fs freeze lock, if we do an async flush
2019         * we'll do btrfs_join_transaction() and deadlock because we need to
2020         * wait for the fs freeze lock.  Using the direct flushing we benefit
2021         * from already being in a transaction and our join_transaction doesn't
2022         * have to re-take the fs freeze lock.
2023         */
2024        if (btrfs_test_opt(fs_info, FLUSHONCOMMIT))
2025                writeback_inodes_sb(fs_info->sb, WB_REASON_SYNC);
2026        return 0;
2027}
2028
2029static inline void btrfs_wait_delalloc_flush(struct btrfs_fs_info *fs_info)
2030{
2031        if (btrfs_test_opt(fs_info, FLUSHONCOMMIT))
2032                btrfs_wait_ordered_roots(fs_info, U64_MAX, 0, (u64)-1);
2033}
2034
2035int btrfs_commit_transaction(struct btrfs_trans_handle *trans)
2036{
2037        struct btrfs_fs_info *fs_info = trans->fs_info;
2038        struct btrfs_transaction *cur_trans = trans->transaction;
2039        struct btrfs_transaction *prev_trans = NULL;
2040        int ret;
2041
2042        ASSERT(refcount_read(&trans->use_count) == 1);
2043
2044        /* Stop the commit early if ->aborted is set */
2045        if (TRANS_ABORTED(cur_trans)) {
2046                ret = cur_trans->aborted;
2047                btrfs_end_transaction(trans);
2048                return ret;
2049        }
2050
2051        btrfs_trans_release_metadata(trans);
2052        trans->block_rsv = NULL;
2053
2054        /*
2055         * We only want one transaction commit doing the flushing so we do not
2056         * waste a bunch of time on lock contention on the extent root node.
2057         */
2058        if (!test_and_set_bit(BTRFS_DELAYED_REFS_FLUSHING,
2059                              &cur_trans->delayed_refs.flags)) {
2060                /*
2061                 * Make a pass through all the delayed refs we have so far.
2062                 * Any running threads may add more while we are here.
2063                 */
2064                ret = btrfs_run_delayed_refs(trans, 0);
2065                if (ret) {
2066                        btrfs_end_transaction(trans);
2067                        return ret;
2068                }
2069        }
2070
2071        btrfs_create_pending_block_groups(trans);
2072
2073        if (!test_bit(BTRFS_TRANS_DIRTY_BG_RUN, &cur_trans->flags)) {
2074                int run_it = 0;
2075
2076                /* this mutex is also taken before trying to set
2077                 * block groups readonly.  We need to make sure
2078                 * that nobody has set a block group readonly
2079                 * after a extents from that block group have been
2080                 * allocated for cache files.  btrfs_set_block_group_ro
2081                 * will wait for the transaction to commit if it
2082                 * finds BTRFS_TRANS_DIRTY_BG_RUN set.
2083                 *
2084                 * The BTRFS_TRANS_DIRTY_BG_RUN flag is also used to make sure
2085                 * only one process starts all the block group IO.  It wouldn't
2086                 * hurt to have more than one go through, but there's no
2087                 * real advantage to it either.
2088                 */
2089                mutex_lock(&fs_info->ro_block_group_mutex);
2090                if (!test_and_set_bit(BTRFS_TRANS_DIRTY_BG_RUN,
2091                                      &cur_trans->flags))
2092                        run_it = 1;
2093                mutex_unlock(&fs_info->ro_block_group_mutex);
2094
2095                if (run_it) {
2096                        ret = btrfs_start_dirty_block_groups(trans);
2097                        if (ret) {
2098                                btrfs_end_transaction(trans);
2099                                return ret;
2100                        }
2101                }
2102        }
2103
2104        spin_lock(&fs_info->trans_lock);
2105        if (cur_trans->state >= TRANS_STATE_COMMIT_START) {
2106                enum btrfs_trans_state want_state = TRANS_STATE_COMPLETED;
2107
2108                spin_unlock(&fs_info->trans_lock);
2109                refcount_inc(&cur_trans->use_count);
2110
2111                if (trans->in_fsync)
2112                        want_state = TRANS_STATE_SUPER_COMMITTED;
2113                ret = btrfs_end_transaction(trans);
2114                wait_for_commit(cur_trans, want_state);
2115
2116                if (TRANS_ABORTED(cur_trans))
2117                        ret = cur_trans->aborted;
2118
2119                btrfs_put_transaction(cur_trans);
2120
2121                return ret;
2122        }
2123
2124        cur_trans->state = TRANS_STATE_COMMIT_START;
2125        wake_up(&fs_info->transaction_blocked_wait);
2126
2127        if (cur_trans->list.prev != &fs_info->trans_list) {
2128                enum btrfs_trans_state want_state = TRANS_STATE_COMPLETED;
2129
2130                if (trans->in_fsync)
2131                        want_state = TRANS_STATE_SUPER_COMMITTED;
2132
2133                prev_trans = list_entry(cur_trans->list.prev,
2134                                        struct btrfs_transaction, list);
2135                if (prev_trans->state < want_state) {
2136                        refcount_inc(&prev_trans->use_count);
2137                        spin_unlock(&fs_info->trans_lock);
2138
2139                        wait_for_commit(prev_trans, want_state);
2140
2141                        ret = READ_ONCE(prev_trans->aborted);
2142
2143                        btrfs_put_transaction(prev_trans);
2144                        if (ret)
2145                                goto cleanup_transaction;
2146                } else {
2147                        spin_unlock(&fs_info->trans_lock);
2148                }
2149        } else {
2150                spin_unlock(&fs_info->trans_lock);
2151                /*
2152                 * The previous transaction was aborted and was already removed
2153                 * from the list of transactions at fs_info->trans_list. So we
2154                 * abort to prevent writing a new superblock that reflects a
2155                 * corrupt state (pointing to trees with unwritten nodes/leafs).
2156                 */
2157                if (BTRFS_FS_ERROR(fs_info)) {
2158                        ret = -EROFS;
2159                        goto cleanup_transaction;
2160                }
2161        }
2162
2163        extwriter_counter_dec(cur_trans, trans->type);
2164
2165        ret = btrfs_start_delalloc_flush(fs_info);
2166        if (ret)
2167                goto cleanup_transaction;
2168
2169        ret = btrfs_run_delayed_items(trans);
2170        if (ret)
2171                goto cleanup_transaction;
2172
2173        wait_event(cur_trans->writer_wait,
2174                   extwriter_counter_read(cur_trans) == 0);
2175
2176        /* some pending stuffs might be added after the previous flush. */
2177        ret = btrfs_run_delayed_items(trans);
2178        if (ret)
2179                goto cleanup_transaction;
2180
2181        btrfs_wait_delalloc_flush(fs_info);
2182
2183        /*
2184         * Wait for all ordered extents started by a fast fsync that joined this
2185         * transaction. Otherwise if this transaction commits before the ordered
2186         * extents complete we lose logged data after a power failure.
2187         */
2188        wait_event(cur_trans->pending_wait,
2189                   atomic_read(&cur_trans->pending_ordered) == 0);
2190
2191        btrfs_scrub_pause(fs_info);
2192        /*
2193         * Ok now we need to make sure to block out any other joins while we
2194         * commit the transaction.  We could have started a join before setting
2195         * COMMIT_DOING so make sure to wait for num_writers to == 1 again.
2196         */
2197        spin_lock(&fs_info->trans_lock);
2198        cur_trans->state = TRANS_STATE_COMMIT_DOING;
2199        spin_unlock(&fs_info->trans_lock);
2200        wait_event(cur_trans->writer_wait,
2201                   atomic_read(&cur_trans->num_writers) == 1);
2202
2203        if (TRANS_ABORTED(cur_trans)) {
2204                ret = cur_trans->aborted;
2205                goto scrub_continue;
2206        }
2207        /*
2208         * the reloc mutex makes sure that we stop
2209         * the balancing code from coming in and moving
2210         * extents around in the middle of the commit
2211         */
2212        mutex_lock(&fs_info->reloc_mutex);
2213
2214        /*
2215         * We needn't worry about the delayed items because we will
2216         * deal with them in create_pending_snapshot(), which is the
2217         * core function of the snapshot creation.
2218         */
2219        ret = create_pending_snapshots(trans);
2220        if (ret)
2221                goto unlock_reloc;
2222
2223        /*
2224         * We insert the dir indexes of the snapshots and update the inode
2225         * of the snapshots' parents after the snapshot creation, so there
2226         * are some delayed items which are not dealt with. Now deal with
2227         * them.
2228         *
2229         * We needn't worry that this operation will corrupt the snapshots,
2230         * because all the tree which are snapshoted will be forced to COW
2231         * the nodes and leaves.
2232         */
2233        ret = btrfs_run_delayed_items(trans);
2234        if (ret)
2235                goto unlock_reloc;
2236
2237        ret = btrfs_run_delayed_refs(trans, (unsigned long)-1);
2238        if (ret)
2239                goto unlock_reloc;
2240
2241        /*
2242         * make sure none of the code above managed to slip in a
2243         * delayed item
2244         */
2245        btrfs_assert_delayed_root_empty(fs_info);
2246
2247        WARN_ON(cur_trans != trans->transaction);
2248
2249        /* btrfs_commit_tree_roots is responsible for getting the
2250         * various roots consistent with each other.  Every pointer
2251         * in the tree of tree roots has to point to the most up to date
2252         * root for every subvolume and other tree.  So, we have to keep
2253         * the tree logging code from jumping in and changing any
2254         * of the trees.
2255         *
2256         * At this point in the commit, there can't be any tree-log
2257         * writers, but a little lower down we drop the trans mutex
2258         * and let new people in.  By holding the tree_log_mutex
2259         * from now until after the super is written, we avoid races
2260         * with the tree-log code.
2261         */
2262        mutex_lock(&fs_info->tree_log_mutex);
2263
2264        ret = commit_fs_roots(trans);
2265        if (ret)
2266                goto unlock_tree_log;
2267
2268        /*
2269         * Since the transaction is done, we can apply the pending changes
2270         * before the next transaction.
2271         */
2272        btrfs_apply_pending_changes(fs_info);
2273
2274        /* commit_fs_roots gets rid of all the tree log roots, it is now
2275         * safe to free the root of tree log roots
2276         */
2277        btrfs_free_log_root_tree(trans, fs_info);
2278
2279        /*
2280         * Since fs roots are all committed, we can get a quite accurate
2281         * new_roots. So let's do quota accounting.
2282         */
2283        ret = btrfs_qgroup_account_extents(trans);
2284        if (ret < 0)
2285                goto unlock_tree_log;
2286
2287        ret = commit_cowonly_roots(trans);
2288        if (ret)
2289                goto unlock_tree_log;
2290
2291        /*
2292         * The tasks which save the space cache and inode cache may also
2293         * update ->aborted, check it.
2294         */
2295        if (TRANS_ABORTED(cur_trans)) {
2296                ret = cur_trans->aborted;
2297                goto unlock_tree_log;
2298        }
2299
2300        cur_trans = fs_info->running_transaction;
2301
2302        btrfs_set_root_node(&fs_info->tree_root->root_item,
2303                            fs_info->tree_root->node);
2304        list_add_tail(&fs_info->tree_root->dirty_list,
2305                      &cur_trans->switch_commits);
2306
2307        btrfs_set_root_node(&fs_info->chunk_root->root_item,
2308                            fs_info->chunk_root->node);
2309        list_add_tail(&fs_info->chunk_root->dirty_list,
2310                      &cur_trans->switch_commits);
2311
2312        switch_commit_roots(trans);
2313
2314        ASSERT(list_empty(&cur_trans->dirty_bgs));
2315        ASSERT(list_empty(&cur_trans->io_bgs));
2316        update_super_roots(fs_info);
2317
2318        btrfs_set_super_log_root(fs_info->super_copy, 0);
2319        btrfs_set_super_log_root_level(fs_info->super_copy, 0);
2320        memcpy(fs_info->super_for_commit, fs_info->super_copy,
2321               sizeof(*fs_info->super_copy));
2322
2323        btrfs_commit_device_sizes(cur_trans);
2324
2325        clear_bit(BTRFS_FS_LOG1_ERR, &fs_info->flags);
2326        clear_bit(BTRFS_FS_LOG2_ERR, &fs_info->flags);
2327
2328        btrfs_trans_release_chunk_metadata(trans);
2329
2330        spin_lock(&fs_info->trans_lock);
2331        cur_trans->state = TRANS_STATE_UNBLOCKED;
2332        fs_info->running_transaction = NULL;
2333        spin_unlock(&fs_info->trans_lock);
2334        mutex_unlock(&fs_info->reloc_mutex);
2335
2336        wake_up(&fs_info->transaction_wait);
2337
2338        ret = btrfs_write_and_wait_transaction(trans);
2339        if (ret) {
2340                btrfs_handle_fs_error(fs_info, ret,
2341                                      "Error while writing out transaction");
2342                /*
2343                 * reloc_mutex has been unlocked, tree_log_mutex is still held
2344                 * but we can't jump to unlock_tree_log causing double unlock
2345                 */
2346                mutex_unlock(&fs_info->tree_log_mutex);
2347                goto scrub_continue;
2348        }
2349
2350        /*
2351         * At this point, we should have written all the tree blocks allocated
2352         * in this transaction. So it's now safe to free the redirtyied extent
2353         * buffers.
2354         */
2355        btrfs_free_redirty_list(cur_trans);
2356
2357        ret = write_all_supers(fs_info, 0);
2358        /*
2359         * the super is written, we can safely allow the tree-loggers
2360         * to go about their business
2361         */
2362        mutex_unlock(&fs_info->tree_log_mutex);
2363        if (ret)
2364                goto scrub_continue;
2365
2366        /*
2367         * We needn't acquire the lock here because there is no other task
2368         * which can change it.
2369         */
2370        cur_trans->state = TRANS_STATE_SUPER_COMMITTED;
2371        wake_up(&cur_trans->commit_wait);
2372
2373        btrfs_finish_extent_commit(trans);
2374
2375        if (test_bit(BTRFS_TRANS_HAVE_FREE_BGS, &cur_trans->flags))
2376                btrfs_clear_space_info_full(fs_info);
2377
2378        fs_info->last_trans_committed = cur_trans->transid;
2379        /*
2380         * We needn't acquire the lock here because there is no other task
2381         * which can change it.
2382         */
2383        cur_trans->state = TRANS_STATE_COMPLETED;
2384        wake_up(&cur_trans->commit_wait);
2385
2386        spin_lock(&fs_info->trans_lock);
2387        list_del_init(&cur_trans->list);
2388        spin_unlock(&fs_info->trans_lock);
2389
2390        btrfs_put_transaction(cur_trans);
2391        btrfs_put_transaction(cur_trans);
2392
2393        if (trans->type & __TRANS_FREEZABLE)
2394                sb_end_intwrite(fs_info->sb);
2395
2396        trace_btrfs_transaction_commit(trans->root);
2397
2398        btrfs_scrub_continue(fs_info);
2399
2400        if (current->journal_info == trans)
2401                current->journal_info = NULL;
2402
2403        kmem_cache_free(btrfs_trans_handle_cachep, trans);
2404
2405        return ret;
2406
2407unlock_tree_log:
2408        mutex_unlock(&fs_info->tree_log_mutex);
2409unlock_reloc:
2410        mutex_unlock(&fs_info->reloc_mutex);
2411scrub_continue:
2412        btrfs_scrub_continue(fs_info);
2413cleanup_transaction:
2414        btrfs_trans_release_metadata(trans);
2415        btrfs_cleanup_pending_block_groups(trans);
2416        btrfs_trans_release_chunk_metadata(trans);
2417        trans->block_rsv = NULL;
2418        btrfs_warn(fs_info, "Skipping commit of aborted transaction.");
2419        if (current->journal_info == trans)
2420                current->journal_info = NULL;
2421        cleanup_transaction(trans, ret);
2422
2423        return ret;
2424}
2425
2426/*
2427 * return < 0 if error
2428 * 0 if there are no more dead_roots at the time of call
2429 * 1 there are more to be processed, call me again
2430 *
2431 * The return value indicates there are certainly more snapshots to delete, but
2432 * if there comes a new one during processing, it may return 0. We don't mind,
2433 * because btrfs_commit_super will poke cleaner thread and it will process it a
2434 * few seconds later.
2435 */
2436int btrfs_clean_one_deleted_snapshot(struct btrfs_root *root)
2437{
2438        int ret;
2439        struct btrfs_fs_info *fs_info = root->fs_info;
2440
2441        spin_lock(&fs_info->trans_lock);
2442        if (list_empty(&fs_info->dead_roots)) {
2443                spin_unlock(&fs_info->trans_lock);
2444                return 0;
2445        }
2446        root = list_first_entry(&fs_info->dead_roots,
2447                        struct btrfs_root, root_list);
2448        list_del_init(&root->root_list);
2449        spin_unlock(&fs_info->trans_lock);
2450
2451        btrfs_debug(fs_info, "cleaner removing %llu", root->root_key.objectid);
2452
2453        btrfs_kill_all_delayed_nodes(root);
2454
2455        if (btrfs_header_backref_rev(root->node) <
2456                        BTRFS_MIXED_BACKREF_REV)
2457                ret = btrfs_drop_snapshot(root, 0, 0);
2458        else
2459                ret = btrfs_drop_snapshot(root, 1, 0);
2460
2461        btrfs_put_root(root);
2462        return (ret < 0) ? 0 : 1;
2463}
2464
2465void btrfs_apply_pending_changes(struct btrfs_fs_info *fs_info)
2466{
2467        unsigned long prev;
2468        unsigned long bit;
2469
2470        prev = xchg(&fs_info->pending_changes, 0);
2471        if (!prev)
2472                return;
2473
2474        bit = 1 << BTRFS_PENDING_COMMIT;
2475        if (prev & bit)
2476                btrfs_debug(fs_info, "pending commit done");
2477        prev &= ~bit;
2478
2479        if (prev)
2480                btrfs_warn(fs_info,
2481                        "unknown pending changes left 0x%lx, ignoring", prev);
2482}
2483