[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAD+ocbzN9FODr5b-pNBJoCB82Gy=J6JLUEooMVqUfCPky-J0cA@mail.gmail.com>
Date: Wed, 22 Dec 2021 18:41:12 -0800
From: harshad shirwadkar <harshadshirwadkar@...il.com>
To: Xin Yin <yinxin.x@...edance.com>
Cc: "Theodore Y. Ts'o" <tytso@....edu>,
Andreas Dilger <adilger.kernel@...ger.ca>,
Ext4 Developers List <linux-ext4@...r.kernel.org>,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH v2] ext4: fix fast commit may miss tracking range for FALLOC_FL_ZERO_RANGE
Looks good, thanks!
Reviewed-by: Harshad Shirwadkar <harshadshirwadkar@...il.com>
On Mon, Dec 20, 2021 at 6:28 PM Xin Yin <yinxin.x@...edance.com> wrote:
>
> when call falloc with FALLOC_FL_ZERO_RANGE, to set an range to unwritten,
> which has been already initialized. If the range is align to blocksize,
> fast commit will not track range for this change.
>
> Also track range for unwritten range in ext4_map_blocks().
>
> Signed-off-by: Xin Yin <yinxin.x@...edance.com>
> ---
> v2: change to track unwritten range in ext4_map_blocks()
> ---
> fs/ext4/extents.c | 2 --
> fs/ext4/inode.c | 7 ++++---
> 2 files changed, 4 insertions(+), 5 deletions(-)
>
> diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c
> index 9229ab1f99c5..6bce319f3bcd 100644
> --- a/fs/ext4/extents.c
> +++ b/fs/ext4/extents.c
> @@ -4599,8 +4599,6 @@ static long ext4_zero_range(struct file *file, loff_t offset,
> ret = ext4_mark_inode_dirty(handle, inode);
> if (unlikely(ret))
> goto out_handle;
> - ext4_fc_track_range(handle, inode, offset >> inode->i_sb->s_blocksize_bits,
> - (offset + len - 1) >> inode->i_sb->s_blocksize_bits);
> /* Zero out partial block at the edges of the range */
> ret = ext4_zero_partial_blocks(handle, inode, offset, len);
> if (ret >= 0)
> diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
> index 0afab6d5c65b..47ad4b8cb503 100644
> --- a/fs/ext4/inode.c
> +++ b/fs/ext4/inode.c
> @@ -741,10 +741,11 @@ int ext4_map_blocks(handle_t *handle, struct inode *inode,
> if (ret)
> return ret;
> }
> - ext4_fc_track_range(handle, inode, map->m_lblk,
> - map->m_lblk + map->m_len - 1);
> }
> -
> + if (retval > 0 && (map->m_flags & EXT4_MAP_UNWRITTEN ||
> + map->m_flags & EXT4_MAP_MAPPED))
> + ext4_fc_track_range(handle, inode, map->m_lblk,
> + map->m_lblk + map->m_len - 1);
> if (retval < 0)
> ext_debug(inode, "failed with err %d\n", retval);
> return retval;
> --
> 2.20.1
>
Powered by blists - more mailing lists