btrfs: btrfs_truncate_free_space_cache always allocates path
authorJeff Mahoney <jeffm@suse.com>
Wed, 15 Feb 2017 21:28:32 +0000 (16:28 -0500)
committerDavid Sterba <dsterba@suse.com>
Fri, 17 Feb 2017 11:03:56 +0000 (12:03 +0100)
btrfs_truncate_free_space_cache always allocates a btrfs_path structure
but only uses it when the caller passes a block group.  Let's move the
allocation and free into the conditional.

Signed-off-by: Jeff Mahoney <jeffm@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/free-space-cache.c

index 27820d4..1a131f7 100644 (file)
@@ -232,15 +232,15 @@ int btrfs_truncate_free_space_cache(struct btrfs_trans_handle *trans,
 {
        struct btrfs_root *root = BTRFS_I(inode)->root;
        int ret = 0;
-       struct btrfs_path *path = btrfs_alloc_path();
        bool locked = false;
 
-       if (!path) {
-               ret = -ENOMEM;
-               goto fail;
-       }
-
        if (block_group) {
+               struct btrfs_path *path = btrfs_alloc_path();
+
+               if (!path) {
+                       ret = -ENOMEM;
+                       goto fail;
+               }
                locked = true;
                mutex_lock(&trans->transaction->cache_write_mutex);
                if (!list_empty(&block_group->io_list)) {
@@ -257,8 +257,8 @@ int btrfs_truncate_free_space_cache(struct btrfs_trans_handle *trans,
                spin_lock(&block_group->lock);
                block_group->disk_cache_state = BTRFS_DC_CLEAR;
                spin_unlock(&block_group->lock);
+               btrfs_free_path(path);
        }
-       btrfs_free_path(path);
 
        btrfs_i_size_write(inode, 0);
        truncate_pagecache(inode, 0);