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: Filipe Manana <fdmanana@suse.com> Signed-off-by: Josef Bacik <josef@toxicpanda.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
5caa490ed8
commit
655807b895
@ -294,6 +294,7 @@ int btrfs_truncate_free_space_cache(struct btrfs_trans_handle *trans,
|
||||
struct btrfs_truncate_control control = {
|
||||
.new_size = 0,
|
||||
.min_type = BTRFS_EXTENT_DATA_KEY,
|
||||
.clear_extent_range = true,
|
||||
};
|
||||
struct btrfs_inode *inode = BTRFS_I(vfs_inode);
|
||||
struct btrfs_root *root = inode->root;
|
||||
|
@ -624,11 +624,11 @@ search_again:
|
||||
}
|
||||
delete:
|
||||
/*
|
||||
* We use btrfs_truncate_inode_items() to clean up log trees for
|
||||
* multiple fsyncs, and in this case we don't want to clear the
|
||||
* file extent range because it's just the log.
|
||||
* We only want to clear the file extent range if we're
|
||||
* modifying the actual inode's mapping, which is just the
|
||||
* normal truncate path.
|
||||
*/
|
||||
if (root == inode->root) {
|
||||
if (control->clear_extent_range) {
|
||||
ret = btrfs_inode_clear_file_extent_range(inode,
|
||||
clear_start, clear_len);
|
||||
if (ret) {
|
||||
|
@ -43,6 +43,12 @@ struct btrfs_truncate_control {
|
||||
* extents we drop.
|
||||
*/
|
||||
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,
|
||||
|
@ -8534,6 +8534,7 @@ static int btrfs_truncate(struct inode *inode, bool skip_writeback)
|
||||
{
|
||||
struct btrfs_truncate_control control = {
|
||||
.min_type = BTRFS_EXTENT_DATA_KEY,
|
||||
.clear_extent_range = true,
|
||||
};
|
||||
struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
|
||||
struct btrfs_root *root = BTRFS_I(inode)->root;
|
||||
|
Loading…
x
Reference in New Issue
Block a user