[PATCH] erofs: allow large folios for compressed files

Barry Song 21cnbao at gmail.com
Tue Aug 20 19:29:42 AEST 2024


On Mon, Aug 19, 2024 at 2:52 PM Gao Xiang <hsiangkao at linux.alibaba.com> wrote:
>
> As commit 2e6506e1c4ee ("mm/migrate: fix deadlock in
> migrate_pages_batch() on large folios") already landed upstream,
> large folios can be safely enabled for compressed inodes since all
> prerequisites already landed in 6.11-rc1.
>
> Stress tests has been working on my fleet for > 20 days without any
> regression.  Besides, users [1] has requested it for months.  Let's
> allow large folios for EROFS full cases upstream now for wider testing.
>
> [1] https://lore.kernel.org/r/CAGsJ_4wtE8OcpinuqVwG4jtdx6Qh5f+TON6wz+4HMCq=A2qFcA@mail.gmail.com
> Cc: Barry Song <21cnbao at gmail.com>
> Cc: Matthew Wilcox (Oracle) <willy at infradead.org>
> Signed-off-by: Gao Xiang <hsiangkao at linux.alibaba.com>

Thank you, Xiang! We'll run some tests and update you with our findings.

> ---
>  Documentation/filesystems/erofs.rst |  2 +-
>  fs/erofs/inode.c                    | 18 ++++++++----------
>  2 files changed, 9 insertions(+), 11 deletions(-)
>
> diff --git a/Documentation/filesystems/erofs.rst b/Documentation/filesystems/erofs.rst
> index cc4626d6ee4f..c293f8e37468 100644
> --- a/Documentation/filesystems/erofs.rst
> +++ b/Documentation/filesystems/erofs.rst
> @@ -75,7 +75,7 @@ Here are the main features of EROFS:
>
>   - Support merging tail-end data into a special inode as fragments.
>
> - - Support large folios for uncompressed files.
> + - Support large folios to make use of THPs (Transparent Hugepages);
>
>   - Support direct I/O on uncompressed files to avoid double caching for loop
>     devices;
> diff --git a/fs/erofs/inode.c b/fs/erofs/inode.c
> index 43c09aae2afc..419432be3223 100644
> --- a/fs/erofs/inode.c
> +++ b/fs/erofs/inode.c
> @@ -257,25 +257,23 @@ static int erofs_fill_inode(struct inode *inode)
>                 goto out_unlock;
>         }
>
> +       mapping_set_large_folios(inode->i_mapping);
>         if (erofs_inode_is_data_compressed(vi->datalayout)) {
>  #ifdef CONFIG_EROFS_FS_ZIP
>                 DO_ONCE_LITE_IF(inode->i_blkbits != PAGE_SHIFT,
>                           erofs_info, inode->i_sb,
>                           "EXPERIMENTAL EROFS subpage compressed block support in use. Use at your own risk!");
>                 inode->i_mapping->a_ops = &z_erofs_aops;
> -               err = 0;
> -               goto out_unlock;
> -#endif
> +#else
>                 err = -EOPNOTSUPP;
> -               goto out_unlock;
> -       }
> -       inode->i_mapping->a_ops = &erofs_raw_access_aops;
> -       mapping_set_large_folios(inode->i_mapping);
> +#endif
> +       } else {
> +               inode->i_mapping->a_ops = &erofs_raw_access_aops;
>  #ifdef CONFIG_EROFS_FS_ONDEMAND
> -       if (erofs_is_fscache_mode(inode->i_sb))
> -               inode->i_mapping->a_ops = &erofs_fscache_access_aops;
> +               if (erofs_is_fscache_mode(inode->i_sb))
> +                       inode->i_mapping->a_ops = &erofs_fscache_access_aops;
>  #endif
> -
> +       }
>  out_unlock:
>         erofs_put_metabuf(&buf);
>         return err;
> --
> 2.43.5
>

Thanks
Barry


More information about the Linux-erofs mailing list