Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp884339pxb; Wed, 3 Mar 2021 19:40:17 -0800 (PST) X-Google-Smtp-Source: ABdhPJyG8LSIFZXOYvDhQkKDHNzTtgci78JtUaImyvUWjxWoOOCql7JtN5udb61pFKuzsZHheakW X-Received: by 2002:a17:907:2054:: with SMTP id pg20mr1993995ejb.213.1614829217572; Wed, 03 Mar 2021 19:40:17 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1614829217; cv=none; d=google.com; s=arc-20160816; b=TWmGSeA2waP2YAnJhrmtdGsAfpAljYeqB6EsAqm17pSJiMKChlrm1BKMyiltYK2AQg q1mr7LGoyToYHxmuivmeMcZ/I9vSFa1c1vm1agGJHPy8yu4vE2I30wSZt6tjaOOyENRg DeVfCcO5zVuU7bNT2+Z2PgGINmnMogCvtjgtQKxpF9XohkZxHDzBOsPvMggaOc4IvyBF xJVI90AB0l4QwrnpCBarntCrcN1JwL5lqAL37F+huxsZEcjeJn9dlcJy4onUtOEkwcIb EpH9+ujZGf6b8nQEEyx1Tm8dDQK09h4opJKdznnt1eZeHGwdFAaM2LaOxIaWzuJW+xpL zaKg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=L/lSI87j8hcK1VbTxRj1f0Wwz+H6V1KKFtxjCn8VY80=; b=UKcOM5TGsor920dFwrG8ZsJyNQGP30b3kDIfz27e8mS+OqW7ylSpLtU04UN47VSvhg 1qFuQNg5XWmXfMx0dx2ZMoj9q2RdsulY2f3RsB4Aghljnfv3Vc72vW7Msl3hITIT1/Qp nJuDXMF63c9mKZmll+Rxz9BIknbJbcf7G5vCmBLPUXEe3MT4C1W6h2/6vv8xdZh6oMIA mEAfsKB7fysIdGajdX1HyqbLuEecZrI+1GbWpFPYdR3Dep6aMXya8Nto83gSE6xmp3uK 8Q3XdjcT4RPsqxLkHFEKZUsgPjdQdtGsxvDmm/4J4tIAPf9B0EATVHo+VddUNsfJmvGs f0Ww== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=fh7PLi60; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id d1si12887008edo.324.2021.03.03.19.39.55; Wed, 03 Mar 2021 19:40:17 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=fh7PLi60; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1379607AbhCBB3v (ORCPT + 99 others); Mon, 1 Mar 2021 20:29:51 -0500 Received: from mail.kernel.org ([198.145.29.99]:43774 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241339AbhCATRm (ORCPT ); Mon, 1 Mar 2021 14:17:42 -0500 Received: by mail.kernel.org (Postfix) with ESMTPSA id 34EF365068; Mon, 1 Mar 2021 17:24:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1614619478; bh=0eGqftxQxzienYajeGk+Xp7ikPeduQ7Mfd2qzY0bKJo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=fh7PLi60OXAT5O9noaPbLCpBsbo9koVi/TiPYwFPKCJ4fhEJBHmyTiIKWDvPiPbmc rZiA/tHBjI7FsjjSxukoKgBRo/xYIiaQI5gGZubvvVU9RDvTf+jzVyWSL3VMeoUdQb PZHlhCk5xQQXMayPWQLwzAOUdrdcSdAP9T2/0MpE= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Rik van Riel , Andrea Arcangeli , Hugh Dickins , "Matthew Wilcox (Oracle)" , Mel Gorman , Michal Hocko , Vlastimil Babka , Xu Yu , Andrew Morton , Linus Torvalds , Sasha Levin Subject: [PATCH 5.10 469/663] mm,thp,shmem: make khugepaged obey tmpfs mount flags Date: Mon, 1 Mar 2021 17:11:57 +0100 Message-Id: <20210301161205.065557554@linuxfoundation.org> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210301161141.760350206@linuxfoundation.org> References: <20210301161141.760350206@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Rik van Riel [ Upstream commit cd89fb06509903f942a0ffe97ffa63034671ed0c ] Currently if thp enabled=[madvise], mounting a tmpfs filesystem with huge=always and mmapping files from that tmpfs does not result in khugepaged collapsing those mappings, despite the mount flag indicating that it should. Fix that by breaking up the blocks of tests in hugepage_vma_check a little bit, and testing things in the correct order. Link: https://lkml.kernel.org/r/20201124194925.623931-4-riel@surriel.com Fixes: c2231020ea7b ("mm: thp: register mm for khugepaged when merging vma for shmem") Signed-off-by: Rik van Riel Cc: Andrea Arcangeli Cc: Hugh Dickins Cc: Matthew Wilcox (Oracle) Cc: Mel Gorman Cc: Michal Hocko Cc: Vlastimil Babka Cc: Xu Yu Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds Signed-off-by: Sasha Levin --- include/linux/khugepaged.h | 2 ++ mm/khugepaged.c | 22 ++++++++++++++++------ 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/include/linux/khugepaged.h b/include/linux/khugepaged.h index c941b73773216..2fcc01891b474 100644 --- a/include/linux/khugepaged.h +++ b/include/linux/khugepaged.h @@ -3,6 +3,7 @@ #define _LINUX_KHUGEPAGED_H #include /* MMF_VM_HUGEPAGE */ +#include #ifdef CONFIG_TRANSPARENT_HUGEPAGE @@ -57,6 +58,7 @@ static inline int khugepaged_enter(struct vm_area_struct *vma, { if (!test_bit(MMF_VM_HUGEPAGE, &vma->vm_mm->flags)) if ((khugepaged_always() || + (shmem_file(vma->vm_file) && shmem_huge_enabled(vma)) || (khugepaged_req_madv() && (vm_flags & VM_HUGEPAGE))) && !(vm_flags & VM_NOHUGEPAGE) && !test_bit(MMF_DISABLE_THP, &vma->vm_mm->flags)) diff --git a/mm/khugepaged.c b/mm/khugepaged.c index 4e3dff13eb70c..abab394c42062 100644 --- a/mm/khugepaged.c +++ b/mm/khugepaged.c @@ -440,18 +440,28 @@ static inline int khugepaged_test_exit(struct mm_struct *mm) static bool hugepage_vma_check(struct vm_area_struct *vma, unsigned long vm_flags) { - if ((!(vm_flags & VM_HUGEPAGE) && !khugepaged_always()) || - (vm_flags & VM_NOHUGEPAGE) || + /* Explicitly disabled through madvise. */ + if ((vm_flags & VM_NOHUGEPAGE) || test_bit(MMF_DISABLE_THP, &vma->vm_mm->flags)) return false; - if (shmem_file(vma->vm_file) || - (IS_ENABLED(CONFIG_READ_ONLY_THP_FOR_FS) && - vma->vm_file && - (vm_flags & VM_DENYWRITE))) { + /* Enabled via shmem mount options or sysfs settings. */ + if (shmem_file(vma->vm_file) && shmem_huge_enabled(vma)) { return IS_ALIGNED((vma->vm_start >> PAGE_SHIFT) - vma->vm_pgoff, HPAGE_PMD_NR); } + + /* THP settings require madvise. */ + if (!(vm_flags & VM_HUGEPAGE) && !khugepaged_always()) + return false; + + /* Read-only file mappings need to be aligned for THP to work. */ + if (IS_ENABLED(CONFIG_READ_ONLY_THP_FOR_FS) && vma->vm_file && + (vm_flags & VM_DENYWRITE)) { + return IS_ALIGNED((vma->vm_start >> PAGE_SHIFT) - vma->vm_pgoff, + HPAGE_PMD_NR); + } + if (!vma->anon_vma || vma->vm_ops) return false; if (vma_is_temporary_stack(vma)) -- 2.27.0