From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 18EBEC5AD49 for ; Thu, 29 May 2025 08:24:15 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A352A6B0117; Thu, 29 May 2025 04:24:11 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id A0CEC6B011A; Thu, 29 May 2025 04:24:11 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 8FC836B011B; Thu, 29 May 2025 04:24:11 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 61F256B0117 for ; Thu, 29 May 2025 04:24:11 -0400 (EDT) Received: from smtpin16.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 09B57160BBB for ; Thu, 29 May 2025 08:24:11 +0000 (UTC) X-FDA: 83495257902.16.3ED6066 Received: from out30-130.freemail.mail.aliyun.com (out30-130.freemail.mail.aliyun.com [115.124.30.130]) by imf25.hostedemail.com (Postfix) with ESMTP id 18FC6A0005 for ; Thu, 29 May 2025 08:24:08 +0000 (UTC) Authentication-Results: imf25.hostedemail.com; dkim=pass header.d=linux.alibaba.com header.s=default header.b=G8E6sIz7; spf=pass (imf25.hostedemail.com: domain of baolin.wang@linux.alibaba.com designates 115.124.30.130 as permitted sender) smtp.mailfrom=baolin.wang@linux.alibaba.com; dmarc=pass (policy=none) header.from=linux.alibaba.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1748507049; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=HepIRzU9yVfyc0yQbJg8CFCDS1fs2gXvJNO7QTz5Ovs=; b=6tIZF0S+EavwWbzJl32C0TpH1baKHzTuW+3zXFP4RGOYx34+bJpi9zVuNLHB9dFjynUKA3 hgHU+Ro3UuxtJUAIVQOrjfoaFuDXvq3RO8YBIRFy1yJL5eJY9HT7Gl5Ds9KeFzeZg1rORS NW506DUJphS3qJLR20+VhCx+mUv3gPI= ARC-Authentication-Results: i=1; imf25.hostedemail.com; dkim=pass header.d=linux.alibaba.com header.s=default header.b=G8E6sIz7; spf=pass (imf25.hostedemail.com: domain of baolin.wang@linux.alibaba.com designates 115.124.30.130 as permitted sender) smtp.mailfrom=baolin.wang@linux.alibaba.com; dmarc=pass (policy=none) header.from=linux.alibaba.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1748507049; a=rsa-sha256; cv=none; b=iW7vpC14aWZYr+UWj67ZGgSCQD39VSGBaRu9977KESJvR46RMncK15pTqKuCWy4+LuOpI2 rspnVhckbYEvzXOj1ruEtYl17+UF4JtRrWrjw+1fhFiAa/ykkQNjNSMK8unTWaevDLqDZp W/+grtRkjwg1+N0vObffnanLrQiNuRQ= DKIM-Signature:v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.alibaba.com; s=default; t=1748507046; h=From:To:Subject:Date:Message-ID:MIME-Version; bh=HepIRzU9yVfyc0yQbJg8CFCDS1fs2gXvJNO7QTz5Ovs=; b=G8E6sIz7puwJ/OZer7Hdvi/DmUH9PaCh3Vh0Cr0DywuXQvUiqRq+GgLws7DKfzr+99rhSFN3J4DrdEGzMCRbHSUubCS8eAXWDXTmRB9XKS/kbreDiGCryU3vmKMZEsDvM8yAyMVjSj5DUlWXRSB6SHYeYwqlZpDUIiek+eeXUSk= Received: from localhost(mailfrom:baolin.wang@linux.alibaba.com fp:SMTPD_---0WcGcFkd_1748507044 cluster:ay36) by smtp.aliyun-inc.com; Thu, 29 May 2025 16:24:05 +0800 From: Baolin Wang To: akpm@linux-foundation.org, hughd@google.com, david@redhat.com Cc: lorenzo.stoakes@oracle.com, Liam.Howlett@oracle.com, npache@redhat.com, ryan.roberts@arm.com, dev.jain@arm.com, ziy@nvidia.com, baolin.wang@linux.alibaba.com, linux-mm@kvack.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 2/2] mm: shmem: disallow hugepages if the system-wide shmem THP sysfs settings are disabled Date: Thu, 29 May 2025 16:23:55 +0800 Message-ID: X-Mailer: git-send-email 2.43.5 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 18FC6A0005 X-Stat-Signature: pcjr5is19f88gyjimotu6ys17rek1t7y X-Rspam-User: X-Rspamd-Server: rspam04 X-HE-Tag: 1748507048-974469 X-HE-Meta: U2FsdGVkX19ijQcQ65czGdhY8MLI6C0ckGs6eX/A69OsW9aAtsKqMDPaD4pdRpHkIw8ZLIeywGRjtNLoH8wVClBEiRpTYN5aL5erd4Mt+SFmqVajS41zJY5HINAvy1PvY73HmyQg4QATGwNiXgISMGAIPlyN+JAZxv2b1GqICntPpWHxNKomh3lTdvHNzZsG3O/fn6bcnfW9kqCS58tb5zUFJCJ5Qn/y1tBE9A/eYMeRbFkhVUOHeSkVXC+ZZkAICBCkVowQ83bqeBuAej7jWsbec9En/NkoRFCOjDqDSqWHVEW2JV0rwvg26490iI7K0Wk4BieePlpQLOCEesMfQnReDpF/uiWL1kH5zigPW0fwr5YHqDrVzgFSpdFDN0vx5aJXU+irr/wKxazAPkktg7UHWw4/oa2cjYXNkZxN+vtWe9ftK43Cs9vN5jB7HDhlhOcRm2FTWEzqDnN+F07qsMI5gti6mIz+oPw/ne0yn4aYeLe2MXyrimMsW0v7amfDxKHhFfiz7/jvCMwFTqxM66TeUSJYXqVYFSLHTeRgRp8Qa805yV/u9WTyKHoA0emZ+fXbumRbHNg5AfoEPBV7ggWgWb44JbA8Nh3pjE8y3NMFIlEWpvikLFAWtEBNsMqwsZIFoJtHIKwzML+s9JrxQwufv81jqGt6hbJAtQBkdPUAlIQDUpmTEg8DuU2xXzTt6WRpRTSQt0H0RiEH9eQVwhrbxXqn+olhRKWpIiuPAO443wXbnS1bVT5TBu/IbG2PcqLmxdnq/m6L3KEYh43OvvCpZHiy4ks7mwTCUe740uhxdg+aWZcrk9tALBzCwK7gO44ivT3AIjSag4KQXUNxxtH/IIZ3Y70fA1s03NySeZ7dXYtzFMm5Ax3A5v5Vgb9WEnvOsqmbiWs8gcDQmh1u+VfHAXey1WHt+PyiKu8FiyyAhCBluGIdVc1SXtTyl6iQdiVKnmU/BA+GfrRgqoU E7HbtCY5 DGzF/N4l3+cnB1iEzZf3Yd/tjCQDbfxjXf35vnM0KS2V7zhINlnzMBf33/XnkfV5nminOWbfTGn3un/JBIuhgRYPm1Z2Skb9ELH6Xmg+kQVdc0EUzDAxxrFoypU9nIvjHCu3qe+tGj3kh3p46TJTYA6lgK+7p+iIJk0S9HPg9EHvx9ow2C5bRJyGLmMCUZG6ia1QOmDh7TT0hVr/XMuin+UT4NfHWY3G0OQCsRwBlejIaR149y/d97IV080wAdQjrWDqJLA3h9gEbPig= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: The MADV_COLLAPSE will ignore the system-wide shmem THP sysfs settings, which means that even though we have disabled the shmem THP configuration, MADV_COLLAPSE will still attempt to collapse into a shmem THP. This violates the rule we have agreed upon: never means never. Then the current strategy is: For shmem, if none of always, madvise, within_size, and inherit have enabled PMD-sized mTHP, then MADV_COLLAPSE will be prohibited from collapsing PMD-sized mTHP. For tmpfs, if the mount option is set with the 'huge=never' parameter, then MADV_COLLAPSE will be prohibited from collapsing PMD-sized mTHP. Signed-off-by: Baolin Wang --- mm/huge_memory.c | 2 +- mm/shmem.c | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/mm/huge_memory.c b/mm/huge_memory.c index d3e66136e41a..a8cfa37cae72 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c @@ -166,7 +166,7 @@ unsigned long __thp_vma_allowable_orders(struct vm_area_struct *vma, * own flags. */ if (!in_pf && shmem_file(vma->vm_file)) - return shmem_allowable_huge_orders(file_inode(vma->vm_file), + return orders & shmem_allowable_huge_orders(file_inode(vma->vm_file), vma, vma->vm_pgoff, 0, !enforce_sysfs); diff --git a/mm/shmem.c b/mm/shmem.c index 4b42419ce6b2..4dbb28d85cd9 100644 --- a/mm/shmem.c +++ b/mm/shmem.c @@ -613,7 +613,7 @@ static unsigned int shmem_get_orders_within_size(struct inode *inode, } static unsigned int shmem_huge_global_enabled(struct inode *inode, pgoff_t index, - loff_t write_end, bool shmem_huge_force, + loff_t write_end, struct vm_area_struct *vma, unsigned long vm_flags) { @@ -625,7 +625,7 @@ static unsigned int shmem_huge_global_enabled(struct inode *inode, pgoff_t index return 0; if (shmem_huge == SHMEM_HUGE_DENY) return 0; - if (shmem_huge_force || shmem_huge == SHMEM_HUGE_FORCE) + if (shmem_huge == SHMEM_HUGE_FORCE) return maybe_pmd_order; /* @@ -860,7 +860,7 @@ static unsigned long shmem_unused_huge_shrink(struct shmem_sb_info *sbinfo, } static unsigned int shmem_huge_global_enabled(struct inode *inode, pgoff_t index, - loff_t write_end, bool shmem_huge_force, + loff_t write_end, struct vm_area_struct *vma, unsigned long vm_flags) { @@ -1261,7 +1261,7 @@ static int shmem_getattr(struct mnt_idmap *idmap, STATX_ATTR_NODUMP); generic_fillattr(idmap, request_mask, inode, stat); - if (shmem_huge_global_enabled(inode, 0, 0, false, NULL, 0)) + if (shmem_huge_global_enabled(inode, 0, 0, NULL, 0)) stat->blksize = HPAGE_PMD_SIZE; if (request_mask & STATX_BTIME) { @@ -1768,7 +1768,7 @@ unsigned long shmem_allowable_huge_orders(struct inode *inode, return 0; global_orders = shmem_huge_global_enabled(inode, index, write_end, - shmem_huge_force, vma, vm_flags); + vma, vm_flags); /* Tmpfs huge pages allocation */ if (!vma || !vma_is_anon_shmem(vma)) return global_orders; @@ -1790,7 +1790,7 @@ unsigned long shmem_allowable_huge_orders(struct inode *inode, /* Allow mTHP that will be fully within i_size. */ mask |= shmem_get_orders_within_size(inode, within_size_orders, index, 0); - if (vm_flags & VM_HUGEPAGE) + if (shmem_huge_force || (vm_flags & VM_HUGEPAGE)) mask |= READ_ONCE(huge_shmem_orders_madvise); if (global_orders > 0) -- 2.43.5