From patchwork Fri Feb 7 09:44:21 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Baolin Wang X-Patchwork-Id: 13964701 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 5ECFDC02196 for ; Fri, 7 Feb 2025 09:45:08 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 00573280005; Fri, 7 Feb 2025 04:45:08 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id EF7F5280001; Fri, 7 Feb 2025 04:45:07 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id DC174280005; Fri, 7 Feb 2025 04:45:07 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id BD1C4280001 for ; Fri, 7 Feb 2025 04:45:07 -0500 (EST) Received: from smtpin24.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 8E60B1C976C for ; Fri, 7 Feb 2025 09:44:37 +0000 (UTC) X-FDA: 83092663794.24.E573A4E Received: from out30-130.freemail.mail.aliyun.com (out30-130.freemail.mail.aliyun.com [115.124.30.130]) by imf08.hostedemail.com (Postfix) with ESMTP id 77639160006 for ; Fri, 7 Feb 2025 09:44:35 +0000 (UTC) Authentication-Results: imf08.hostedemail.com; dkim=pass header.d=linux.alibaba.com header.s=default header.b=oMbqE4Uv; spf=pass (imf08.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=1738921475; 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=3PS22iDEZK02vBCkQcniOhhJpKU1weoXF4MOKLaGix0=; b=f8RYIJSiBGf3Cm6gN4qBvMWMNrfkxsxahva7oc2C/cHrXyWoj9cfecXFVkdF6jLptpaguC RA68/zitweLMkpC6rmELcDGAUb0joyPdMyqf4RoSnTouVh9ea/ApJdlLTEzVvIxeC3sXtC FZxX4ZKQhPa2ADvC2kQ9r/18pSoyTvg= ARC-Authentication-Results: i=1; imf08.hostedemail.com; dkim=pass header.d=linux.alibaba.com header.s=default header.b=oMbqE4Uv; spf=pass (imf08.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=1738921475; a=rsa-sha256; cv=none; b=RFwV+x27wFBjV6jCF4N7E/aTcxCWM4itVM6PjED2t/NDRiue0UxXDeDJAhcWmZjojc5VPK Z7bjqexSq51yO7MYvnhO9rK9SejMfkvLATrTWJaZnQw4sPQUtfXPDcA2VRsN+grLu9KJNH cq0u2rKArfYFwGgDYq61dxETOUrHjNo= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.alibaba.com; s=default; t=1738921472; h=From:To:Subject:Date:Message-Id:MIME-Version; bh=3PS22iDEZK02vBCkQcniOhhJpKU1weoXF4MOKLaGix0=; b=oMbqE4Uv00/zuNB+vQ/BwfUVYClGY9Hhs6mBblpKB2ysEJKVjoYlXRKyGPlKoyXoJZRNls4ekMwuwRcV+AYapQy//UowJe40KwbSF9ZyK21QFYbOfhv7zYcN4DZHWuOHtQyozcFX/rP0jvf9bsIpKPvYjp/x+PhHtWkMeW7hn8w= Received: from localhost(mailfrom:baolin.wang@linux.alibaba.com fp:SMTPD_---0WOz6dmv_1738921471 cluster:ay36) by smtp.aliyun-inc.com; Fri, 07 Feb 2025 17:44:31 +0800 From: Baolin Wang To: akpm@linux-foundation.org, hughd@google.com Cc: david@redhat.com, baolin.wang@linux.alibaba.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: [PATCH 5/6] mm: shmem: factor out the within_size logic into a new helper Date: Fri, 7 Feb 2025 17:44:21 +0800 Message-Id: <527dea9d7e32fe6b94c7fe00df2c126203017911.1738918357.git.baolin.wang@linux.alibaba.com> X-Mailer: git-send-email 2.39.3 In-Reply-To: References: MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Queue-Id: 77639160006 X-Stat-Signature: 9ctkhifg8q33x8b9rpkhrhabtjiy6nfi X-Rspamd-Server: rspam03 X-HE-Tag: 1738921475-705501 X-HE-Meta: U2FsdGVkX1+5eCX++2t+nxupTgL6o31CnWpcRW4EiJK7SaiGkzEGnlVOW7gK+/tzZB/cwfZ7mS1mfpDoGobZTY944ERxDyygg2JblxxmzJXPpRDbJj952TbdXwepbCIrK5xLml02OIxCoH49gHAXqbAAb50XesRLXBeHPpzl0kMqIMWp5cTy/25e/mCbIMlPM3cuUUp7OaR1Sp4Yhb5EJ9e6LNB1X5uplN7LHYNEyeG/RUMcdH3apynsJnoo1PtmYdHlSBBEE2iBLrbSyw9rYGpjOB/sawXpg1p6cbR0D+qW2zifK6FEkMjCPN1zupZmJ/BpjAD5rJr0borR2vpEibAByEx4gKkrF4Jdt/fQ9aC1xWpO1fM1JZGOtt8LhO/i1OIEaaLWf/6Bhx2d5WaMRjwxBXmxdYd5iKwf3n9ObcHJY5/cmtic+C1F0v47dhzBGtjSEUvWPzep2uAI81MqB9CP1mvhPlOdi+ilv5C8i+x0fsS6z1Ice/JrgyrpsyyY8iKJpMRNqRxoL09ou4HSotPp4R3UdyoT+tVj64wRCRkPhMEcWuegLVtVFKX3o20czh6ui5EVraKfZ4u17m7k0WL/du3ObkHIvEQ2m1Xocnv2+dta+m90x0jZqZoxu6z08dFc294KawJbfMixebTklrAwkxEJWmdms8inG3ub69u6FbzI5wk3DyHvrRouG59NUkkCt4MI2RQWxgWXW+vpfCQ1xjrNvUbyBwJAEcjrlpLNrh9Xyo+wIqQoJqNRxm6SYe79VohpFmQmYH7lXSUvvjoYFvvclmjSWOcMuRe36Ct8DPKPKDPXMQ5vqpYP/8oHe4Rh56rQ6HiO0VfGYvq1s7zuTeKs1lbvhuH5fJQ/5jAbyeIWDEvQz1Zi1Wj2hCDSCsF10a5xXdL8EUgs/vNltTcscenKYtq2bMBfriVilfdcO3mE47u22/RJ71NWQX8qkcPwoAzah9gkzpfBbxx zOWI9DLT 8z7Opc4nGvfREguq31/EN43di72r3KkZm4ZCb6QmtFfsfCG9yxObOJttBORgDTEay0qZ6mTe6pMuuxwFeWruL5m+dap+rSy7VAUd/ndj0XsDuNAJGBgy4Zzv8A0lPjU1W6NuIrsdJZmmSwkpKRP5WaSXsh1k5PnuMl4wB7OMskAuUBafajCMOMr7Q/YS64Vx6smmE+ejQz4X+qmhAsh9CAAzUMlVIcfWj03Jm8r4hf3LhKgR0NQVl70iFRqPuVa/Omaldp1gsWpKMx7rSva1NnUmiYyttU0YdFifD6CDkShJ8LcY= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000160, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Factor out the within_size logic into a new helper to remove duplicate code. Suggested-by: David Hildenbrand Signed-off-by: Baolin Wang --- mm/shmem.c | 53 +++++++++++++++++++++++++++-------------------------- 1 file changed, 27 insertions(+), 26 deletions(-) diff --git a/mm/shmem.c b/mm/shmem.c index c243d814f2b0..671f63063fd4 100644 --- a/mm/shmem.c +++ b/mm/shmem.c @@ -590,6 +590,28 @@ shmem_mapping_size_orders(struct address_space *mapping, pgoff_t index, loff_t w return order > 0 ? BIT(order + 1) - 1 : 0; } +static unsigned int shmem_get_orders_within_size(struct inode *inode, + unsigned long within_size_orders, pgoff_t index, + loff_t write_end) +{ + pgoff_t aligned_index; + unsigned long order; + loff_t i_size; + + order = highest_order(within_size_orders); + while (within_size_orders) { + aligned_index = round_up(index + 1, 1 << order); + i_size = max(write_end, i_size_read(inode)); + i_size = round_up(i_size, PAGE_SIZE); + if (i_size >> PAGE_SHIFT >= aligned_index) + return within_size_orders; + + order = next_order(&within_size_orders, order); + } + + return 0; +} + static unsigned int shmem_huge_global_enabled(struct inode *inode, pgoff_t index, loff_t write_end, bool shmem_huge_force, struct vm_area_struct *vma, @@ -598,9 +620,6 @@ static unsigned int shmem_huge_global_enabled(struct inode *inode, pgoff_t index unsigned int maybe_pmd_order = HPAGE_PMD_ORDER > MAX_PAGECACHE_ORDER ? 0 : BIT(HPAGE_PMD_ORDER); unsigned long within_size_orders; - unsigned int order; - pgoff_t aligned_index; - loff_t i_size; if (!S_ISREG(inode->i_mode)) return 0; @@ -634,16 +653,11 @@ static unsigned int shmem_huge_global_enabled(struct inode *inode, pgoff_t index within_size_orders = shmem_mapping_size_orders(inode->i_mapping, index, write_end); - order = highest_order(within_size_orders); - while (within_size_orders) { - aligned_index = round_up(index + 1, 1 << order); - i_size = max(write_end, i_size_read(inode)); - i_size = round_up(i_size, PAGE_SIZE); - if (i_size >> PAGE_SHIFT >= aligned_index) - return within_size_orders; + within_size_orders = shmem_get_orders_within_size(inode, within_size_orders, + index, write_end); + if (within_size_orders > 0) + return within_size_orders; - order = next_order(&within_size_orders, order); - } fallthrough; case SHMEM_HUGE_ADVISE: if (vm_flags & VM_HUGEPAGE) @@ -1756,10 +1770,7 @@ unsigned long shmem_allowable_huge_orders(struct inode *inode, unsigned long mask = READ_ONCE(huge_shmem_orders_always); unsigned long within_size_orders = READ_ONCE(huge_shmem_orders_within_size); unsigned long vm_flags = vma ? vma->vm_flags : 0; - pgoff_t aligned_index; unsigned int global_orders; - loff_t i_size; - int order; if (thp_disabled_by_hw() || (vma && vma_thp_disabled(vma, vm_flags))) return 0; @@ -1785,17 +1796,7 @@ unsigned long shmem_allowable_huge_orders(struct inode *inode, return READ_ONCE(huge_shmem_orders_inherit); /* Allow mTHP that will be fully within i_size. */ - order = highest_order(within_size_orders); - while (within_size_orders) { - aligned_index = round_up(index + 1, 1 << order); - i_size = round_up(i_size_read(inode), PAGE_SIZE); - if (i_size >> PAGE_SHIFT >= aligned_index) { - mask |= within_size_orders; - break; - } - - order = next_order(&within_size_orders, order); - } + mask |= shmem_get_orders_within_size(inode, within_size_orders, index, 0); if (vm_flags & VM_HUGEPAGE) mask |= READ_ONCE(huge_shmem_orders_madvise);