Merge branch 'for-linus-4.9' of git://git.kernel.org/pub/scm/linux/kernel/git/mason...
[cascardo/linux.git] / fs / btrfs / transaction.c
index c294313..9517de0 100644 (file)
@@ -65,8 +65,9 @@ void btrfs_put_transaction(struct btrfs_transaction *transaction)
                BUG_ON(!list_empty(&transaction->list));
                WARN_ON(!RB_EMPTY_ROOT(&transaction->delayed_refs.href_root));
                if (transaction->delayed_refs.pending_csums)
-                       printk(KERN_ERR "pending csums is %llu\n",
-                              transaction->delayed_refs.pending_csums);
+                       btrfs_err(transaction->fs_info,
+                                 "pending csums is %llu",
+                                 transaction->delayed_refs.pending_csums);
                while (!list_empty(&transaction->pending_chunks)) {
                        struct extent_map *em;
 
@@ -245,6 +246,7 @@ loop:
                return -EROFS;
        }
 
+       cur_trans->fs_info = fs_info;
        atomic_set(&cur_trans->num_writers, 1);
        extwriter_counter_init(cur_trans, type);
        init_waitqueue_head(&cur_trans->writer_wait);
@@ -272,11 +274,9 @@ loop:
         */
        smp_mb();
        if (!list_empty(&fs_info->tree_mod_seq_list))
-               WARN(1, KERN_ERR "BTRFS: tree_mod_seq_list not empty when "
-                       "creating a fresh transaction\n");
+               WARN(1, KERN_ERR "BTRFS: tree_mod_seq_list not empty when creating a fresh transaction\n");
        if (!RB_EMPTY_ROOT(&fs_info->tree_mod_log))
-               WARN(1, KERN_ERR "BTRFS: tree_mod_log rb tree not empty when "
-                       "creating a fresh transaction\n");
+               WARN(1, KERN_ERR "BTRFS: tree_mod_log rb tree not empty when creating a fresh transaction\n");
        atomic64_set(&fs_info->tree_mod_seq, 0);
 
        spin_lock_init(&cur_trans->delayed_refs.lock);
@@ -441,7 +441,7 @@ static void wait_current_trans(struct btrfs_root *root)
 
 static int may_wait_transaction(struct btrfs_root *root, int type)
 {
-       if (root->fs_info->log_root_recovering)
+       if (test_bit(BTRFS_FS_LOG_RECOVERING, &root->fs_info->flags))
                return 0;
 
        if (type == TRANS_USERSPACE)
@@ -549,11 +549,8 @@ again:
                }
        } while (ret == -EBUSY);
 
-       if (ret < 0) {
-               /* We must get the transaction if we are JOIN_NOLOCK. */
-               BUG_ON(type == TRANS_JOIN_NOLOCK);
+       if (ret < 0)
                goto join_fail;
-       }
 
        cur_trans = root->fs_info->running_transaction;
 
@@ -993,7 +990,6 @@ int btrfs_wait_marked_extents(struct btrfs_root *root,
        struct extent_state *cached_state = NULL;
        u64 start = 0;
        u64 end;
-       struct btrfs_inode *btree_ino = BTRFS_I(root->fs_info->btree_inode);
        bool errors = false;
 
        while (!find_first_extent_bit(dirty_pages, start, &start, &end,
@@ -1025,17 +1021,17 @@ int btrfs_wait_marked_extents(struct btrfs_root *root,
 
        if (root->root_key.objectid == BTRFS_TREE_LOG_OBJECTID) {
                if ((mark & EXTENT_DIRTY) &&
-                   test_and_clear_bit(BTRFS_INODE_BTREE_LOG1_ERR,
-                                      &btree_ino->runtime_flags))
+                   test_and_clear_bit(BTRFS_FS_LOG1_ERR,
+                                      &root->fs_info->flags))
                        errors = true;
 
                if ((mark & EXTENT_NEW) &&
-                   test_and_clear_bit(BTRFS_INODE_BTREE_LOG2_ERR,
-                                      &btree_ino->runtime_flags))
+                   test_and_clear_bit(BTRFS_FS_LOG2_ERR,
+                                      &root->fs_info->flags))
                        errors = true;
        } else {
-               if (test_and_clear_bit(BTRFS_INODE_BTREE_ERR,
-                                      &btree_ino->runtime_flags))
+               if (test_and_clear_bit(BTRFS_FS_BTREE_ERR,
+                                      &root->fs_info->flags))
                        errors = true;
        }
 
@@ -1300,11 +1296,11 @@ int btrfs_defrag_root(struct btrfs_root *root)
                btrfs_btree_balance_dirty(info->tree_root);
                cond_resched();
 
-               if (btrfs_fs_closing(root->fs_info) || ret != -EAGAIN)
+               if (btrfs_fs_closing(info) || ret != -EAGAIN)
                        break;
 
-               if (btrfs_defrag_cancelled(root->fs_info)) {
-                       pr_debug("BTRFS: defrag_root cancelled\n");
+               if (btrfs_defrag_cancelled(info)) {
+                       btrfs_debug(info, "defrag_root cancelled");
                        ret = -EAGAIN;
                        break;
                }
@@ -1335,7 +1331,7 @@ static int qgroup_account_snapshot(struct btrfs_trans_handle *trans,
         * kick in anyway.
         */
        mutex_lock(&fs_info->qgroup_ioctl_lock);
-       if (!fs_info->quota_enabled) {
+       if (!test_bit(BTRFS_FS_QUOTA_ENABLED, &fs_info->flags)) {
                mutex_unlock(&fs_info->qgroup_ioctl_lock);
                return 0;
        }
@@ -1712,7 +1708,7 @@ static void update_super_roots(struct btrfs_root *root)
        super->root_level = root_item->level;
        if (btrfs_test_opt(root->fs_info, SPACE_CACHE))
                super->cache_generation = root_item->generation;
-       if (root->fs_info->update_uuid_tree_gen)
+       if (test_bit(BTRFS_FS_UPDATE_UUID_TREE_GEN, &root->fs_info->flags))
                super->uuid_tree_generation = root_item->generation;
 }
 
@@ -1919,7 +1915,6 @@ int btrfs_commit_transaction(struct btrfs_trans_handle *trans,
 {
        struct btrfs_transaction *cur_trans = trans->transaction;
        struct btrfs_transaction *prev_trans = NULL;
-       struct btrfs_inode *btree_ino = BTRFS_I(root->fs_info->btree_inode);
        int ret;
 
        /* Stop the commit early if ->aborted is set */
@@ -2213,8 +2208,8 @@ int btrfs_commit_transaction(struct btrfs_trans_handle *trans,
        btrfs_update_commit_device_size(root->fs_info);
        btrfs_update_commit_device_bytes_used(root, cur_trans);
 
-       clear_bit(BTRFS_INODE_BTREE_LOG1_ERR, &btree_ino->runtime_flags);
-       clear_bit(BTRFS_INODE_BTREE_LOG2_ERR, &btree_ino->runtime_flags);
+       clear_bit(BTRFS_FS_LOG1_ERR, &root->fs_info->flags);
+       clear_bit(BTRFS_FS_LOG2_ERR, &root->fs_info->flags);
 
        btrfs_trans_release_chunk_metadata(trans);
 
@@ -2328,7 +2323,7 @@ int btrfs_clean_one_deleted_snapshot(struct btrfs_root *root)
        list_del_init(&root->root_list);
        spin_unlock(&fs_info->trans_lock);
 
-       pr_debug("BTRFS: cleaner removing %llu\n", root->objectid);
+       btrfs_debug(fs_info, "cleaner removing %llu", root->objectid);
 
        btrfs_kill_all_delayed_nodes(root);