Looks good, thanks! Reviewed-by: Harshad Shirwadkar <harshadshirwadkar@xxxxxxxxx> On Mon, Dec 20, 2021 at 6:28 PM Xin Yin <yinxin.x@xxxxxxxxxxxxx> 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@xxxxxxxxxxxxx> > --- > 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 >