lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  PHC 
Open Source and information security mailing list archives
 
Hash Suite for Android: free password hash cracker in your pocket
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
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