Merge tag 'audit-pr-20200330' of git://git.kernel.org/pub/scm/linux/kernel/git/pcmoor...
[linux-2.6-microblaze.git] / fs / btrfs / free-space-cache.c
index 0598fd3..3613da0 100644 (file)
@@ -371,10 +371,10 @@ static void io_ctl_drop_pages(struct btrfs_io_ctl *io_ctl)
        }
 }
 
-static int io_ctl_prepare_pages(struct btrfs_io_ctl *io_ctl, struct inode *inode,
-                               int uptodate)
+static int io_ctl_prepare_pages(struct btrfs_io_ctl *io_ctl, bool uptodate)
 {
        struct page *page;
+       struct inode *inode = io_ctl->inode;
        gfp_t mask = btrfs_alloc_write_mask(inode->i_mapping);
        int i;
 
@@ -732,7 +732,7 @@ static int __load_free_space_cache(struct btrfs_root *root, struct inode *inode,
 
        readahead_cache(inode);
 
-       ret = io_ctl_prepare_pages(&io_ctl, inode, 1);
+       ret = io_ctl_prepare_pages(&io_ctl, true);
        if (ret)
                goto out;
 
@@ -1067,6 +1067,7 @@ fail:
 }
 
 static noinline_for_stack int write_pinned_extent_entries(
+                           struct btrfs_trans_handle *trans,
                            struct btrfs_block_group *block_group,
                            struct btrfs_io_ctl *io_ctl,
                            int *entries)
@@ -1085,7 +1086,7 @@ static noinline_for_stack int write_pinned_extent_entries(
         * We shouldn't have switched the pinned extents yet so this is the
         * right one
         */
-       unpin = block_group->fs_info->pinned_extents;
+       unpin = &trans->transaction->pinned_extents;
 
        start = block_group->start;
 
@@ -1190,7 +1191,7 @@ out:
                invalidate_inode_pages2(inode->i_mapping);
                BTRFS_I(inode)->generation = 0;
                if (block_group) {
-#ifdef DEBUG
+#ifdef CONFIG_BTRFS_DEBUG
                        btrfs_err(root->fs_info,
                                  "failed to write free space cache for block group %llu",
                                  block_group->start);
@@ -1291,7 +1292,7 @@ static int __btrfs_write_out_cache(struct btrfs_root *root, struct inode *inode,
        }
 
        /* Lock all pages first so we can lock the extent safely. */
-       ret = io_ctl_prepare_pages(io_ctl, inode, 0);
+       ret = io_ctl_prepare_pages(io_ctl, false);
        if (ret)
                goto out_unlock;
 
@@ -1317,7 +1318,7 @@ static int __btrfs_write_out_cache(struct btrfs_root *root, struct inode *inode,
         * If this changes while we are working we'll get added back to
         * the dirty list and redo it.  No locking needed
         */
-       ret = write_pinned_extent_entries(block_group, io_ctl, &entries);
+       ret = write_pinned_extent_entries(trans, block_group, io_ctl, &entries);
        if (ret)
                goto out_nospc_locked;
 
@@ -1366,18 +1367,6 @@ static int __btrfs_write_out_cache(struct btrfs_root *root, struct inode *inode,
 
        return 0;
 
-out:
-       io_ctl->inode = NULL;
-       io_ctl_free(io_ctl);
-       if (ret) {
-               invalidate_inode_pages2(inode->i_mapping);
-               BTRFS_I(inode)->generation = 0;
-       }
-       btrfs_update_inode(trans, root, inode);
-       if (must_iput)
-               iput(inode);
-       return ret;
-
 out_nospc_locked:
        cleanup_bitmap_list(&bitmap_list);
        spin_unlock(&ctl->tree_lock);
@@ -1390,7 +1379,17 @@ out_unlock:
        if (block_group && (block_group->flags & BTRFS_BLOCK_GROUP_DATA))
                up_write(&block_group->data_rwsem);
 
-       goto out;
+out:
+       io_ctl->inode = NULL;
+       io_ctl_free(io_ctl);
+       if (ret) {
+               invalidate_inode_pages2(inode->i_mapping);
+               BTRFS_I(inode)->generation = 0;
+       }
+       btrfs_update_inode(trans, root, inode);
+       if (must_iput)
+               iput(inode);
+       return ret;
 }
 
 int btrfs_write_out_cache(struct btrfs_trans_handle *trans,
@@ -1416,7 +1415,7 @@ int btrfs_write_out_cache(struct btrfs_trans_handle *trans,
        ret = __btrfs_write_out_cache(fs_info->tree_root, inode, ctl,
                                block_group, &block_group->io_ctl, trans);
        if (ret) {
-#ifdef DEBUG
+#ifdef CONFIG_BTRFS_DEBUG
                btrfs_err(fs_info,
                          "failed to write free space cache for block group %llu",
                          block_group->start);
@@ -4036,7 +4035,7 @@ int btrfs_write_out_ino_cache(struct btrfs_root *root,
                if (release_metadata)
                        btrfs_delalloc_release_metadata(BTRFS_I(inode),
                                        inode->i_size, true);
-#ifdef DEBUG
+#ifdef CONFIG_BTRFS_DEBUG
                btrfs_err(fs_info,
                          "failed to write free ino cache for root %llu",
                          root->root_key.objectid);