Re: [PATCH 03/16] huge tmpfs: remove shrinklist addition from shmem_setattr()

From: Yang Shi
Date: Fri Jul 30 2021 - 17:51:15 EST


On Fri, Jul 30, 2021 at 12:31 AM Hugh Dickins <hughd@xxxxxxxxxx> wrote:
>
> There's a block of code in shmem_setattr() to add the inode to
> shmem_unused_huge_shrink()'s shrinklist when lowering i_size: it dates
> from before 5.7 changed truncation to do split_huge_page() for itself,
> and should have been removed at that time.
>
> I am over-stating that: split_huge_page() can fail (notably if there's
> an extra reference to the page at that time), so there might be value in
> retrying. But there were already retries as truncation worked through
> the tails, and this addition risks repeating unsuccessful retries
> indefinitely: I'd rather remove it now, and work on reducing the
> chance of split_huge_page() failures separately, if we need to.

Yes, agreed. Reviewed-by: Yang Shi <shy828301@xxxxxxxxx>

>
> Fixes: 71725ed10c40 ("mm: huge tmpfs: try to split_huge_page() when punching hole")
> Signed-off-by: Hugh Dickins <hughd@xxxxxxxxxx>
> ---
> mm/shmem.c | 19 -------------------
> 1 file changed, 19 deletions(-)
>
> diff --git a/mm/shmem.c b/mm/shmem.c
> index 24c9da6b41c2..ce3ccaac54d6 100644
> --- a/mm/shmem.c
> +++ b/mm/shmem.c
> @@ -1061,7 +1061,6 @@ static int shmem_setattr(struct user_namespace *mnt_userns,
> {
> struct inode *inode = d_inode(dentry);
> struct shmem_inode_info *info = SHMEM_I(inode);
> - struct shmem_sb_info *sbinfo = SHMEM_SB(inode->i_sb);
> int error;
>
> error = setattr_prepare(&init_user_ns, dentry, attr);
> @@ -1097,24 +1096,6 @@ static int shmem_setattr(struct user_namespace *mnt_userns,
> if (oldsize > holebegin)
> unmap_mapping_range(inode->i_mapping,
> holebegin, 0, 1);
> -
> - /*
> - * Part of the huge page can be beyond i_size: subject
> - * to shrink under memory pressure.
> - */
> - if (IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE)) {
> - spin_lock(&sbinfo->shrinklist_lock);
> - /*
> - * _careful to defend against unlocked access to
> - * ->shrink_list in shmem_unused_huge_shrink()
> - */
> - if (list_empty_careful(&info->shrinklist)) {
> - list_add_tail(&info->shrinklist,
> - &sbinfo->shrinklist);
> - sbinfo->shrinklist_len++;
> - }
> - spin_unlock(&sbinfo->shrinklist_lock);
> - }
> }
> }
>
> --
> 2.26.2
>