On Wed, Jan 15, 2020 at 5:20 PM Josef Bacik <josef@xxxxxxxxxxxxxx> wrote:
>
> On 1/15/20 12:12 PM, Filipe Manana wrote:
> > On Tue, Jan 7, 2020 at 7:43 PM Josef Bacik <josef@xxxxxxxxxxxxxx> wrote:
> >>
> >> We want to use this everywhere we modify the file extent items
> >> permanently. These include
> >>
> >> 1) Inserting new file extents for writes and prealloc extents.
> >> 2) Truncating inode items.
> >> 3) btrfs_cont_expand().
> >> 4) Insert inline extents.
> >> 5) Insert new extents from log replay.
> >> 6) Insert a new extent for clone, as it could be past isize.
> >>
> >> We do not however call the clear helper for hole punching because it
> >> simply swaps out an existing file extent for a hole, so there's
> >> effectively no change as far as the i_size is concerned.
> >>
> >> Signed-off-by: Josef Bacik <josef@xxxxxxxxxxxxxx>
> >> ---
> >> fs/btrfs/delayed-inode.c | 4 +++
> >> fs/btrfs/file.c | 6 ++++
> >> fs/btrfs/inode.c | 59 +++++++++++++++++++++++++++++++++++++++-
> >> fs/btrfs/tree-log.c | 5 ++++
> >> 4 files changed, 73 insertions(+), 1 deletion(-)
> >>
> >> diff --git a/fs/btrfs/delayed-inode.c b/fs/btrfs/delayed-inode.c
> >> index d3e15e1d4a91..8b4dcf4f6b3e 100644
> >> --- a/fs/btrfs/delayed-inode.c
> >> +++ b/fs/btrfs/delayed-inode.c
> >> @@ -1762,6 +1762,7 @@ int btrfs_fill_inode(struct inode *inode, u32 *rdev)
> >> {
> >> struct btrfs_delayed_node *delayed_node;
> >> struct btrfs_inode_item *inode_item;
> >> + struct btrfs_fs_info *fs_info = BTRFS_I(inode)->root->fs_info;
> >>
> >> delayed_node = btrfs_get_delayed_node(BTRFS_I(inode));
> >> if (!delayed_node)
> >> @@ -1779,6 +1780,9 @@ int btrfs_fill_inode(struct inode *inode, u32 *rdev)
> >> i_uid_write(inode, btrfs_stack_inode_uid(inode_item));
> >> i_gid_write(inode, btrfs_stack_inode_gid(inode_item));
> >> btrfs_i_size_write(BTRFS_I(inode), btrfs_stack_inode_size(inode_item));
> >> + btrfs_inode_set_file_extent_range(BTRFS_I(inode), 0,
> >> + round_up(i_size_read(inode),
> >> + fs_info->sectorsize));
> >
> > Why set it here when we have already done it at btrfs_read_locked_inode()?
> > This seems duplicated.
> >
>
> Because if btrfs_fill_inode() returns true it means we had a delayed inode in
> memory still and we skip the reading of the inode off of disk, so it's an either
> or case, not a duplicate. Thanks,
Oh, yes, I missed that.
Reviewed-by: Filipe Manana <fdmanana@xxxxxxxx>
Thanks.
>
> Josef
--
Filipe David Manana,
“Whether you think you can, or you think you can't — you're right.”