Commit 655807b8 authored by Josef Bacik's avatar Josef Bacik Committed by David Sterba

btrfs: use a flag to control when to clear the file extent range

We only care about updating the file extent range when we are doing a
normal truncation.  We skip this for tree logging currently, but we can
also skip this for eviction as well.  Using a flag makes it more
explicit when we want to do this work.
Reviewed-by: default avatarFilipe Manana <fdmanana@suse.com>
Signed-off-by: default avatarJosef Bacik <josef@toxicpanda.com>
Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent 5caa490e
...@@ -294,6 +294,7 @@ int btrfs_truncate_free_space_cache(struct btrfs_trans_handle *trans, ...@@ -294,6 +294,7 @@ int btrfs_truncate_free_space_cache(struct btrfs_trans_handle *trans,
struct btrfs_truncate_control control = { struct btrfs_truncate_control control = {
.new_size = 0, .new_size = 0,
.min_type = BTRFS_EXTENT_DATA_KEY, .min_type = BTRFS_EXTENT_DATA_KEY,
.clear_extent_range = true,
}; };
struct btrfs_inode *inode = BTRFS_I(vfs_inode); struct btrfs_inode *inode = BTRFS_I(vfs_inode);
struct btrfs_root *root = inode->root; struct btrfs_root *root = inode->root;
......
...@@ -624,11 +624,11 @@ int btrfs_truncate_inode_items(struct btrfs_trans_handle *trans, ...@@ -624,11 +624,11 @@ int btrfs_truncate_inode_items(struct btrfs_trans_handle *trans,
} }
delete: delete:
/* /*
* We use btrfs_truncate_inode_items() to clean up log trees for * We only want to clear the file extent range if we're
* multiple fsyncs, and in this case we don't want to clear the * modifying the actual inode's mapping, which is just the
* file extent range because it's just the log. * normal truncate path.
*/ */
if (root == inode->root) { if (control->clear_extent_range) {
ret = btrfs_inode_clear_file_extent_range(inode, ret = btrfs_inode_clear_file_extent_range(inode,
clear_start, clear_len); clear_start, clear_len);
if (ret) { if (ret) {
......
...@@ -43,6 +43,12 @@ struct btrfs_truncate_control { ...@@ -43,6 +43,12 @@ struct btrfs_truncate_control {
* extents we drop. * extents we drop.
*/ */
bool skip_ref_updates; bool skip_ref_updates;
/*
* IN: true if we need to clear the file extent range for the inode as
* we drop the file extent items.
*/
bool clear_extent_range;
}; };
int btrfs_truncate_inode_items(struct btrfs_trans_handle *trans, int btrfs_truncate_inode_items(struct btrfs_trans_handle *trans,
......
...@@ -8534,6 +8534,7 @@ static int btrfs_truncate(struct inode *inode, bool skip_writeback) ...@@ -8534,6 +8534,7 @@ static int btrfs_truncate(struct inode *inode, bool skip_writeback)
{ {
struct btrfs_truncate_control control = { struct btrfs_truncate_control control = {
.min_type = BTRFS_EXTENT_DATA_KEY, .min_type = BTRFS_EXTENT_DATA_KEY,
.clear_extent_range = true,
}; };
struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb); struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
struct btrfs_root *root = BTRFS_I(inode)->root; struct btrfs_root *root = BTRFS_I(inode)->root;
......
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