mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-01 14:44:12 +00:00
btrfs: pass btrfs_inode to btrfs_truncate
The function is for internal interfaces so we should use the btrfs_inode. Reviewed-by: Anand Jain <anand.jain@oracle.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
bb41632ea7
commit
d9dcae67b7
1 changed files with 20 additions and 21 deletions
|
@ -124,7 +124,7 @@ static const struct file_operations btrfs_dir_file_operations;
|
||||||
static struct kmem_cache *btrfs_inode_cachep;
|
static struct kmem_cache *btrfs_inode_cachep;
|
||||||
|
|
||||||
static int btrfs_setsize(struct inode *inode, struct iattr *attr);
|
static int btrfs_setsize(struct inode *inode, struct iattr *attr);
|
||||||
static int btrfs_truncate(struct inode *inode, bool skip_writeback);
|
static int btrfs_truncate(struct btrfs_inode *inode, bool skip_writeback);
|
||||||
static noinline int cow_file_range(struct btrfs_inode *inode,
|
static noinline int cow_file_range(struct btrfs_inode *inode,
|
||||||
struct page *locked_page,
|
struct page *locked_page,
|
||||||
u64 start, u64 end, int *page_started,
|
u64 start, u64 end, int *page_started,
|
||||||
|
@ -5270,7 +5270,7 @@ static int btrfs_setsize(struct inode *inode, struct iattr *attr)
|
||||||
|
|
||||||
inode_dio_wait(inode);
|
inode_dio_wait(inode);
|
||||||
|
|
||||||
ret = btrfs_truncate(inode, newsize == oldsize);
|
ret = btrfs_truncate(BTRFS_I(inode), newsize == oldsize);
|
||||||
if (ret && inode->i_nlink) {
|
if (ret && inode->i_nlink) {
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
|
@ -8632,16 +8632,16 @@ vm_fault_t btrfs_page_mkwrite(struct vm_fault *vmf)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int btrfs_truncate(struct inode *inode, bool skip_writeback)
|
static int btrfs_truncate(struct btrfs_inode *inode, bool skip_writeback)
|
||||||
{
|
{
|
||||||
struct btrfs_truncate_control control = {
|
struct btrfs_truncate_control control = {
|
||||||
.inode = BTRFS_I(inode),
|
.inode = inode,
|
||||||
.ino = btrfs_ino(BTRFS_I(inode)),
|
.ino = btrfs_ino(inode),
|
||||||
.min_type = BTRFS_EXTENT_DATA_KEY,
|
.min_type = BTRFS_EXTENT_DATA_KEY,
|
||||||
.clear_extent_range = true,
|
.clear_extent_range = true,
|
||||||
};
|
};
|
||||||
struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
|
struct btrfs_root *root = inode->root;
|
||||||
struct btrfs_root *root = BTRFS_I(inode)->root;
|
struct btrfs_fs_info *fs_info = root->fs_info;
|
||||||
struct btrfs_block_rsv *rsv;
|
struct btrfs_block_rsv *rsv;
|
||||||
int ret;
|
int ret;
|
||||||
struct btrfs_trans_handle *trans;
|
struct btrfs_trans_handle *trans;
|
||||||
|
@ -8649,7 +8649,8 @@ static int btrfs_truncate(struct inode *inode, bool skip_writeback)
|
||||||
u64 min_size = btrfs_calc_metadata_size(fs_info, 1);
|
u64 min_size = btrfs_calc_metadata_size(fs_info, 1);
|
||||||
|
|
||||||
if (!skip_writeback) {
|
if (!skip_writeback) {
|
||||||
ret = btrfs_wait_ordered_range(inode, inode->i_size & (~mask),
|
ret = btrfs_wait_ordered_range(&inode->vfs_inode,
|
||||||
|
inode->vfs_inode.i_size & (~mask),
|
||||||
(u64)-1);
|
(u64)-1);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -8708,34 +8709,32 @@ static int btrfs_truncate(struct inode *inode, bool skip_writeback)
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
struct extent_state *cached_state = NULL;
|
struct extent_state *cached_state = NULL;
|
||||||
const u64 new_size = inode->i_size;
|
const u64 new_size = inode->vfs_inode.i_size;
|
||||||
const u64 lock_start = ALIGN_DOWN(new_size, fs_info->sectorsize);
|
const u64 lock_start = ALIGN_DOWN(new_size, fs_info->sectorsize);
|
||||||
|
|
||||||
control.new_size = new_size;
|
control.new_size = new_size;
|
||||||
lock_extent(&BTRFS_I(inode)->io_tree, lock_start, (u64)-1,
|
lock_extent(&inode->io_tree, lock_start, (u64)-1, &cached_state);
|
||||||
&cached_state);
|
|
||||||
/*
|
/*
|
||||||
* We want to drop from the next block forward in case this new
|
* We want to drop from the next block forward in case this new
|
||||||
* size is not block aligned since we will be keeping the last
|
* size is not block aligned since we will be keeping the last
|
||||||
* block of the extent just the way it is.
|
* block of the extent just the way it is.
|
||||||
*/
|
*/
|
||||||
btrfs_drop_extent_map_range(BTRFS_I(inode),
|
btrfs_drop_extent_map_range(inode,
|
||||||
ALIGN(new_size, fs_info->sectorsize),
|
ALIGN(new_size, fs_info->sectorsize),
|
||||||
(u64)-1, false);
|
(u64)-1, false);
|
||||||
|
|
||||||
ret = btrfs_truncate_inode_items(trans, root, &control);
|
ret = btrfs_truncate_inode_items(trans, root, &control);
|
||||||
|
|
||||||
inode_sub_bytes(inode, control.sub_bytes);
|
inode_sub_bytes(&inode->vfs_inode, control.sub_bytes);
|
||||||
btrfs_inode_safe_disk_i_size_write(BTRFS_I(inode), control.last_size);
|
btrfs_inode_safe_disk_i_size_write(inode, control.last_size);
|
||||||
|
|
||||||
unlock_extent(&BTRFS_I(inode)->io_tree, lock_start, (u64)-1,
|
unlock_extent(&inode->io_tree, lock_start, (u64)-1, &cached_state);
|
||||||
&cached_state);
|
|
||||||
|
|
||||||
trans->block_rsv = &fs_info->trans_block_rsv;
|
trans->block_rsv = &fs_info->trans_block_rsv;
|
||||||
if (ret != -ENOSPC && ret != -EAGAIN)
|
if (ret != -ENOSPC && ret != -EAGAIN)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
ret = btrfs_update_inode(trans, root, BTRFS_I(inode));
|
ret = btrfs_update_inode(trans, root, inode);
|
||||||
if (ret)
|
if (ret)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -8766,7 +8765,7 @@ static int btrfs_truncate(struct inode *inode, bool skip_writeback)
|
||||||
btrfs_end_transaction(trans);
|
btrfs_end_transaction(trans);
|
||||||
btrfs_btree_balance_dirty(fs_info);
|
btrfs_btree_balance_dirty(fs_info);
|
||||||
|
|
||||||
ret = btrfs_truncate_block(BTRFS_I(inode), inode->i_size, 0, 0);
|
ret = btrfs_truncate_block(inode, inode->vfs_inode.i_size, 0, 0);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto out;
|
goto out;
|
||||||
trans = btrfs_start_transaction(root, 1);
|
trans = btrfs_start_transaction(root, 1);
|
||||||
|
@ -8774,14 +8773,14 @@ static int btrfs_truncate(struct inode *inode, bool skip_writeback)
|
||||||
ret = PTR_ERR(trans);
|
ret = PTR_ERR(trans);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
btrfs_inode_safe_disk_i_size_write(BTRFS_I(inode), 0);
|
btrfs_inode_safe_disk_i_size_write(inode, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (trans) {
|
if (trans) {
|
||||||
int ret2;
|
int ret2;
|
||||||
|
|
||||||
trans->block_rsv = &fs_info->trans_block_rsv;
|
trans->block_rsv = &fs_info->trans_block_rsv;
|
||||||
ret2 = btrfs_update_inode(trans, root, BTRFS_I(inode));
|
ret2 = btrfs_update_inode(trans, root, inode);
|
||||||
if (ret2 && !ret)
|
if (ret2 && !ret)
|
||||||
ret = ret2;
|
ret = ret2;
|
||||||
|
|
||||||
|
@ -8807,7 +8806,7 @@ static int btrfs_truncate(struct inode *inode, bool skip_writeback)
|
||||||
* extents beyond i_size to drop.
|
* extents beyond i_size to drop.
|
||||||
*/
|
*/
|
||||||
if (control.extents_found > 0)
|
if (control.extents_found > 0)
|
||||||
btrfs_set_inode_full_sync(BTRFS_I(inode));
|
btrfs_set_inode_full_sync(inode);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue