Btrfs: fix callers of btrfs_block_rsv_migrate
authorJosef Bacik <jbacik@fb.com>
Fri, 25 Mar 2016 17:25:48 +0000 (13:25 -0400)
committerDavid Sterba <dsterba@suse.com>
Thu, 7 Jul 2016 16:45:53 +0000 (18:45 +0200)
So btrfs_block_rsv_migrate just unconditionally calls block_rsv_migrate_bytes.
Not only this but it unconditionally changes the size of the block_rsv.  This
isn't a bug strictly speaking, but it makes truncate block rsv's look funny
because every time we migrate bytes over its size grows, even though we only
want it to be a specific size.  So collapse this into one function that takes an
update_size argument and make truncate and evict not update the size for
consistency sake.  Thanks,

Signed-off-by: Josef Bacik <jbacik@fb.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/ctree.h
fs/btrfs/delayed-inode.c
fs/btrfs/extent-tree.c
fs/btrfs/file.c
fs/btrfs/inode.c
fs/btrfs/relocation.c

index 4274a7b..fe16474 100644 (file)
@@ -2661,8 +2661,8 @@ int btrfs_block_rsv_refill(struct btrfs_root *root,
                           struct btrfs_block_rsv *block_rsv, u64 min_reserved,
                           enum btrfs_reserve_flush_enum flush);
 int btrfs_block_rsv_migrate(struct btrfs_block_rsv *src_rsv,
-                           struct btrfs_block_rsv *dst_rsv,
-                           u64 num_bytes);
+                           struct btrfs_block_rsv *dst_rsv, u64 num_bytes,
+                           int update_size);
 int btrfs_cond_migrate_bytes(struct btrfs_fs_info *fs_info,
                             struct btrfs_block_rsv *dest, u64 num_bytes,
                             int min_factor);
index d3aaabb..f749a54 100644 (file)
@@ -553,7 +553,7 @@ static int btrfs_delayed_item_reserve_metadata(struct btrfs_trans_handle *trans,
        dst_rsv = &root->fs_info->delayed_block_rsv;
 
        num_bytes = btrfs_calc_trans_metadata_size(root, 1);
-       ret = btrfs_block_rsv_migrate(src_rsv, dst_rsv, num_bytes);
+       ret = btrfs_block_rsv_migrate(src_rsv, dst_rsv, num_bytes, 1);
        if (!ret) {
                trace_btrfs_space_reservation(root->fs_info, "delayed_item",
                                              item->key.objectid,
@@ -649,7 +649,7 @@ static int btrfs_delayed_inode_reserve_metadata(
                if (!ret)
                        goto out;
 
-               ret = btrfs_block_rsv_migrate(src_rsv, dst_rsv, num_bytes);
+               ret = btrfs_block_rsv_migrate(src_rsv, dst_rsv, num_bytes, 1);
                if (!ret)
                        goto out;
 
@@ -663,12 +663,12 @@ static int btrfs_delayed_inode_reserve_metadata(
                 * since this really shouldn't happen that often.
                 */
                ret = btrfs_block_rsv_migrate(&root->fs_info->global_block_rsv,
-                                             dst_rsv, num_bytes);
+                                             dst_rsv, num_bytes, 1);
                goto out;
        }
 
 migrate:
-       ret = btrfs_block_rsv_migrate(src_rsv, dst_rsv, num_bytes);
+       ret = btrfs_block_rsv_migrate(src_rsv, dst_rsv, num_bytes, 1);
 
 out:
        /*
index 777d9a5..1ceabb7 100644 (file)
@@ -5265,8 +5265,9 @@ static void block_rsv_release_bytes(struct btrfs_fs_info *fs_info,
        }
 }
 
-static int block_rsv_migrate_bytes(struct btrfs_block_rsv *src,
-                                  struct btrfs_block_rsv *dst, u64 num_bytes)
+int btrfs_block_rsv_migrate(struct btrfs_block_rsv *src,
+                           struct btrfs_block_rsv *dst, u64 num_bytes,
+                           int update_size)
 {
        int ret;
 
@@ -5274,7 +5275,7 @@ static int block_rsv_migrate_bytes(struct btrfs_block_rsv *src,
        if (ret)
                return ret;
 
-       block_rsv_add_bytes(dst, num_bytes, 1);
+       block_rsv_add_bytes(dst, num_bytes, update_size);
        return 0;
 }
 
@@ -5381,13 +5382,6 @@ int btrfs_block_rsv_refill(struct btrfs_root *root,
        return ret;
 }
 
-int btrfs_block_rsv_migrate(struct btrfs_block_rsv *src_rsv,
-                           struct btrfs_block_rsv *dst_rsv,
-                           u64 num_bytes)
-{
-       return block_rsv_migrate_bytes(src_rsv, dst_rsv, num_bytes);
-}
-
 void btrfs_block_rsv_release(struct btrfs_root *root,
                             struct btrfs_block_rsv *block_rsv,
                             u64 num_bytes)
@@ -5567,7 +5561,7 @@ int btrfs_orphan_reserve_metadata(struct btrfs_trans_handle *trans,
        u64 num_bytes = btrfs_calc_trans_metadata_size(root, 1);
        trace_btrfs_space_reservation(root->fs_info, "orphan",
                                      btrfs_ino(inode), num_bytes, 1);
-       return block_rsv_migrate_bytes(src_rsv, dst_rsv, num_bytes);
+       return btrfs_block_rsv_migrate(src_rsv, dst_rsv, num_bytes, 1);
 }
 
 void btrfs_orphan_release_metadata(struct inode *inode)
@@ -5622,7 +5616,7 @@ int btrfs_subvolume_reserve_metadata(struct btrfs_root *root,
                                  BTRFS_RESERVE_FLUSH_ALL);
 
        if (ret == -ENOSPC && use_global_rsv)
-               ret = btrfs_block_rsv_migrate(global_rsv, rsv, num_bytes);
+               ret = btrfs_block_rsv_migrate(global_rsv, rsv, num_bytes, 1);
 
        if (ret && *qgroup_reserved)
                btrfs_qgroup_free_meta(root, *qgroup_reserved);
index 2234e88..f3f61d1 100644 (file)
@@ -2479,7 +2479,7 @@ static int btrfs_punch_hole(struct inode *inode, loff_t offset, loff_t len)
        }
 
        ret = btrfs_block_rsv_migrate(&root->fs_info->trans_block_rsv, rsv,
-                                     min_size);
+                                     min_size, 0);
        BUG_ON(ret);
        trans->block_rsv = rsv;
 
@@ -2522,7 +2522,7 @@ static int btrfs_punch_hole(struct inode *inode, loff_t offset, loff_t len)
                }
 
                ret = btrfs_block_rsv_migrate(&root->fs_info->trans_block_rsv,
-                                             rsv, min_size);
+                                             rsv, min_size, 0);
                BUG_ON(ret);    /* shouldn't happen */
                trans->block_rsv = rsv;
 
index 4421954..3e61bd1 100644 (file)
@@ -5264,7 +5264,7 @@ void btrfs_evict_inode(struct inode *inode)
                if (steal_from_global) {
                        if (!btrfs_check_space_for_delayed_refs(trans, root))
                                ret = btrfs_block_rsv_migrate(global_rsv, rsv,
-                                                             min_size);
+                                                             min_size, 0);
                        else
                                ret = -ENOSPC;
                }
@@ -9116,7 +9116,7 @@ static int btrfs_truncate(struct inode *inode)
 
        /* Migrate the slack space for the truncate to our reserve */
        ret = btrfs_block_rsv_migrate(&root->fs_info->trans_block_rsv, rsv,
-                                     min_size);
+                                     min_size, 0);
        BUG_ON(ret);
 
        /*
@@ -9156,7 +9156,7 @@ static int btrfs_truncate(struct inode *inode)
                }
 
                ret = btrfs_block_rsv_migrate(&root->fs_info->trans_block_rsv,
-                                             rsv, min_size);
+                                             rsv, min_size, 0);
                BUG_ON(ret);    /* shouldn't happen */
                trans->block_rsv = rsv;
        }
@@ -9177,7 +9177,6 @@ static int btrfs_truncate(struct inode *inode)
                ret = btrfs_end_transaction(trans, root);
                btrfs_btree_balance_dirty(root);
        }
-
 out:
        btrfs_free_block_rsv(root, rsv);
 
index 0477dca..0bf3bc8 100644 (file)
@@ -4643,7 +4643,7 @@ int btrfs_reloc_post_snapshot(struct btrfs_trans_handle *trans,
        if (rc->merge_reloc_tree) {
                ret = btrfs_block_rsv_migrate(&pending->block_rsv,
                                              rc->block_rsv,
-                                             rc->nodes_relocated);
+                                             rc->nodes_relocated, 1);
                if (ret)
                        return ret;
        }