Commit afdb5718 authored by Jeff Mahoney's avatar Jeff Mahoney Committed by David Sterba

btrfs: simplify btrfs_wait_cache_io prototype

With the exception of the one case where btrfs_wait_cache_io is called
without a block group, it's called with the same arguments.  The root
argument is only used in the special case, so let's factor out the core
and simplify the call in the normal case to require a trans, block group,
and path.
Signed-off-by: default avatarJeff Mahoney <jeffm@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent 71ff6437
...@@ -3610,9 +3610,7 @@ int btrfs_start_dirty_block_groups(struct btrfs_trans_handle *trans, ...@@ -3610,9 +3610,7 @@ int btrfs_start_dirty_block_groups(struct btrfs_trans_handle *trans,
*/ */
if (!list_empty(&cache->io_list)) { if (!list_empty(&cache->io_list)) {
list_del_init(&cache->io_list); list_del_init(&cache->io_list);
btrfs_wait_cache_io(root, trans, cache, btrfs_wait_cache_io(trans, cache, path);
&cache->io_ctl, path,
cache->key.objectid);
btrfs_put_block_group(cache); btrfs_put_block_group(cache);
} }
...@@ -3767,9 +3765,7 @@ int btrfs_write_dirty_block_groups(struct btrfs_trans_handle *trans, ...@@ -3767,9 +3765,7 @@ int btrfs_write_dirty_block_groups(struct btrfs_trans_handle *trans,
if (!list_empty(&cache->io_list)) { if (!list_empty(&cache->io_list)) {
spin_unlock(&cur_trans->dirty_bgs_lock); spin_unlock(&cur_trans->dirty_bgs_lock);
list_del_init(&cache->io_list); list_del_init(&cache->io_list);
btrfs_wait_cache_io(root, trans, cache, btrfs_wait_cache_io(trans, cache, path);
&cache->io_ctl, path,
cache->key.objectid);
btrfs_put_block_group(cache); btrfs_put_block_group(cache);
spin_lock(&cur_trans->dirty_bgs_lock); spin_lock(&cur_trans->dirty_bgs_lock);
} }
...@@ -3839,8 +3835,7 @@ int btrfs_write_dirty_block_groups(struct btrfs_trans_handle *trans, ...@@ -3839,8 +3835,7 @@ int btrfs_write_dirty_block_groups(struct btrfs_trans_handle *trans,
cache = list_first_entry(io, struct btrfs_block_group_cache, cache = list_first_entry(io, struct btrfs_block_group_cache,
io_list); io_list);
list_del_init(&cache->io_list); list_del_init(&cache->io_list);
btrfs_wait_cache_io(root, trans, cache, btrfs_wait_cache_io(trans, cache, path);
&cache->io_ctl, path, cache->key.objectid);
btrfs_put_block_group(cache); btrfs_put_block_group(cache);
} }
...@@ -10383,9 +10378,7 @@ int btrfs_remove_block_group(struct btrfs_trans_handle *trans, ...@@ -10383,9 +10378,7 @@ int btrfs_remove_block_group(struct btrfs_trans_handle *trans,
WARN_ON(!IS_ERR(inode) && inode != block_group->io_ctl.inode); WARN_ON(!IS_ERR(inode) && inode != block_group->io_ctl.inode);
spin_unlock(&trans->transaction->dirty_bgs_lock); spin_unlock(&trans->transaction->dirty_bgs_lock);
btrfs_wait_cache_io(root, trans, block_group, btrfs_wait_cache_io(trans, block_group, path);
&block_group->io_ctl, path,
block_group->key.objectid);
btrfs_put_block_group(block_group); btrfs_put_block_group(block_group);
spin_lock(&trans->transaction->dirty_bgs_lock); spin_lock(&trans->transaction->dirty_bgs_lock);
} }
......
...@@ -42,6 +42,10 @@ static int link_free_space(struct btrfs_free_space_ctl *ctl, ...@@ -42,6 +42,10 @@ static int link_free_space(struct btrfs_free_space_ctl *ctl,
struct btrfs_free_space *info); struct btrfs_free_space *info);
static void unlink_free_space(struct btrfs_free_space_ctl *ctl, static void unlink_free_space(struct btrfs_free_space_ctl *ctl,
struct btrfs_free_space *info); struct btrfs_free_space *info);
static int btrfs_wait_cache_io_root(struct btrfs_root *root,
struct btrfs_trans_handle *trans,
struct btrfs_io_ctl *io_ctl,
struct btrfs_path *path);
static struct inode *__lookup_free_space_inode(struct btrfs_root *root, static struct inode *__lookup_free_space_inode(struct btrfs_root *root,
struct btrfs_path *path, struct btrfs_path *path,
...@@ -244,9 +248,7 @@ int btrfs_truncate_free_space_cache(struct btrfs_root *root, ...@@ -244,9 +248,7 @@ int btrfs_truncate_free_space_cache(struct btrfs_root *root,
if (!list_empty(&block_group->io_list)) { if (!list_empty(&block_group->io_list)) {
list_del_init(&block_group->io_list); list_del_init(&block_group->io_list);
btrfs_wait_cache_io(root, trans, block_group, btrfs_wait_cache_io(trans, block_group, path);
&block_group->io_ctl, path,
block_group->key.objectid);
btrfs_put_block_group(block_group); btrfs_put_block_group(block_group);
} }
...@@ -1139,11 +1141,11 @@ cleanup_write_cache_enospc(struct inode *inode, ...@@ -1139,11 +1141,11 @@ cleanup_write_cache_enospc(struct inode *inode,
GFP_NOFS); GFP_NOFS);
} }
int btrfs_wait_cache_io(struct btrfs_root *root, static int __btrfs_wait_cache_io(struct btrfs_root *root,
struct btrfs_trans_handle *trans, struct btrfs_trans_handle *trans,
struct btrfs_block_group_cache *block_group, struct btrfs_block_group_cache *block_group,
struct btrfs_io_ctl *io_ctl, struct btrfs_io_ctl *io_ctl,
struct btrfs_path *path, u64 offset) struct btrfs_path *path, u64 offset)
{ {
int ret; int ret;
struct inode *inode = io_ctl->inode; struct inode *inode = io_ctl->inode;
...@@ -1154,9 +1156,6 @@ int btrfs_wait_cache_io(struct btrfs_root *root, ...@@ -1154,9 +1156,6 @@ int btrfs_wait_cache_io(struct btrfs_root *root,
fs_info = btrfs_sb(inode->i_sb); fs_info = btrfs_sb(inode->i_sb);
if (block_group)
root = fs_info->tree_root;
/* Flush the dirty pages in the cache file. */ /* Flush the dirty pages in the cache file. */
ret = flush_dirty_cache(inode); ret = flush_dirty_cache(inode);
if (ret) if (ret)
...@@ -1207,6 +1206,23 @@ int btrfs_wait_cache_io(struct btrfs_root *root, ...@@ -1207,6 +1206,23 @@ int btrfs_wait_cache_io(struct btrfs_root *root,
} }
static int btrfs_wait_cache_io_root(struct btrfs_root *root,
struct btrfs_trans_handle *trans,
struct btrfs_io_ctl *io_ctl,
struct btrfs_path *path)
{
return __btrfs_wait_cache_io(root, trans, NULL, io_ctl, path, 0);
}
int btrfs_wait_cache_io(struct btrfs_trans_handle *trans,
struct btrfs_block_group_cache *block_group,
struct btrfs_path *path)
{
return __btrfs_wait_cache_io(block_group->fs_info->tree_root, trans,
block_group, &block_group->io_ctl,
path, block_group->key.objectid);
}
/** /**
* __btrfs_write_out_cache - write out cached info to an inode * __btrfs_write_out_cache - write out cached info to an inode
* @root - the root the inode belongs to * @root - the root the inode belongs to
...@@ -3541,7 +3557,7 @@ int btrfs_write_out_ino_cache(struct btrfs_root *root, ...@@ -3541,7 +3557,7 @@ int btrfs_write_out_ino_cache(struct btrfs_root *root,
* with or without an error. * with or without an error.
*/ */
release_metadata = false; release_metadata = false;
ret = btrfs_wait_cache_io(root, trans, NULL, &io_ctl, path, 0); ret = btrfs_wait_cache_io_root(root, trans, &io_ctl, path);
} }
if (ret) { if (ret) {
......
...@@ -67,11 +67,9 @@ int btrfs_truncate_free_space_cache(struct btrfs_root *root, ...@@ -67,11 +67,9 @@ int btrfs_truncate_free_space_cache(struct btrfs_root *root,
struct inode *inode); struct inode *inode);
int load_free_space_cache(struct btrfs_fs_info *fs_info, int load_free_space_cache(struct btrfs_fs_info *fs_info,
struct btrfs_block_group_cache *block_group); struct btrfs_block_group_cache *block_group);
int btrfs_wait_cache_io(struct btrfs_root *root, int btrfs_wait_cache_io(struct btrfs_trans_handle *trans,
struct btrfs_trans_handle *trans,
struct btrfs_block_group_cache *block_group, struct btrfs_block_group_cache *block_group,
struct btrfs_io_ctl *io_ctl, struct btrfs_path *path);
struct btrfs_path *path, u64 offset);
int btrfs_write_out_cache(struct btrfs_fs_info *fs_info, int btrfs_write_out_cache(struct btrfs_fs_info *fs_info,
struct btrfs_trans_handle *trans, struct btrfs_trans_handle *trans,
struct btrfs_block_group_cache *block_group, struct btrfs_block_group_cache *block_group,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment