From patchwork Tue Jun 25 09:06:43 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gavin Shan X-Patchwork-Id: 13710786 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 063C7C2BBCA for ; Tue, 25 Jun 2024 09:07:32 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 9575F6B0139; Tue, 25 Jun 2024 05:07:31 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 9078B6B0174; Tue, 25 Jun 2024 05:07:31 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 7A8C96B0176; Tue, 25 Jun 2024 05:07:31 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 5B02B6B0139 for ; Tue, 25 Jun 2024 05:07:31 -0400 (EDT) Received: from smtpin29.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 03F5B1A0DCE for ; Tue, 25 Jun 2024 09:07:30 +0000 (UTC) X-FDA: 82268832702.29.92CEAA8 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by imf07.hostedemail.com (Postfix) with ESMTP id 482E64000E for ; Tue, 25 Jun 2024 09:07:29 +0000 (UTC) Authentication-Results: imf07.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=UPslzcWw; dmarc=pass (policy=none) header.from=redhat.com; spf=pass (imf07.hostedemail.com: domain of gshan@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=gshan@redhat.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1719306438; a=rsa-sha256; cv=none; b=doNt8GGA7nk7qZ8pWEET94USdDwi7m5mx95jI5iEPjZeu8P+Q7EXzk/txtSwlzWxOCU9Ty 9dql72uQhW88mzpwfr/nBT4VNbP4nVIdpvGnor3TzDmoJy881jbV3Ezvfr8qf3nZ6bQOtM e5eJhMEmybTf666vJR2bma1iN/sJONA= ARC-Authentication-Results: i=1; imf07.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=UPslzcWw; dmarc=pass (policy=none) header.from=redhat.com; spf=pass (imf07.hostedemail.com: domain of gshan@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=gshan@redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1719306438; 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-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=C5gIbstmYx7+hVakYhvJm3/I7jrdwPXMN2vBR3BGT10=; b=UIglOTKb+fRIRfDPD9YvaVWZkuqJ3nWmUwwt+MYgR/8xg1NoAnOrsYkQbFhWRqv6rFC/d5 RIwLi4to0MLXWuUIc490Xd2y2VemfC0LdAKDVpVAJEvlEFerG3RI+jUKdJTwqOZNmgTILe Q6jAS+g6gsf1wC7fvW90BALIYKwvdZ8= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1719306448; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=C5gIbstmYx7+hVakYhvJm3/I7jrdwPXMN2vBR3BGT10=; b=UPslzcWwahHMh9iR3bSJx5hxboKzIIMfWfqaBuqWAlrtOf1TxDQ5FpnjO9ErtaaT9sRU9U wgetP3G8Q4aJhaXNr2KRfd3rlojh7t6Aj8YW7VjsDkiOr/UNZc+TWxBMC9Aiu6FITa1EoT RVHcf8BS4tuCYP47psO2Qk/JlSlFSnY= Received: from mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-599-Qm534JkkMrG-56Hj37KU5w-1; Tue, 25 Jun 2024 05:07:20 -0400 X-MC-Unique: Qm534JkkMrG-56Hj37KU5w-1 Received: from mx-prod-int-02.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-02.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.15]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 3A9931956050; Tue, 25 Jun 2024 09:07:18 +0000 (UTC) Received: from gshan-thinkpadx1nanogen2.remote.csb (unknown [10.67.24.180]) by mx-prod-int-02.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id D5AC11954AC0; Tue, 25 Jun 2024 09:07:11 +0000 (UTC) From: Gavin Shan To: linux-mm@kvack.org Cc: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, david@redhat.com, djwong@kernel.org, willy@infradead.org, akpm@linux-foundation.org, hughd@google.com, torvalds@linux-foundation.org, zhenyzha@redhat.com, shan.gavin@gmail.com Subject: [PATCH 1/4] mm/filemap: Make MAX_PAGECACHE_ORDER acceptable to xarray Date: Tue, 25 Jun 2024 19:06:43 +1000 Message-ID: <20240625090646.1194644-2-gshan@redhat.com> In-Reply-To: <20240625090646.1194644-1-gshan@redhat.com> References: <20240625090646.1194644-1-gshan@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.15 X-Rspamd-Queue-Id: 482E64000E X-Rspam-User: X-Rspamd-Server: rspam05 X-Stat-Signature: eewwsd47z6sbmsghmeufj448iiw7ztq9 X-HE-Tag: 1719306449-841132 X-HE-Meta: U2FsdGVkX19aksLlCWTb7BKB1O4K+P615jEenLvuA5Gc/4gG+6rwdS3JgNgWZ94fFN4kO8pLGGJe7q+HdhrJ3CAegZPQ/1TK9tueju/b1Iq59+uVzagZInBEwcfdt3qGZ2RqMZiWsAkwxM2f9nJFUIJj2DM4M12qh6ivbdd5Rkg+tkcBhgrr9mnhPvFLjIQ2lWbqJinnEqQrVAJZeaT6BTcswVLK75URlC4iFkn9qqlDfO89lAn//kvXLsKUeNG/7yOPlBZWRk/h5IQyA+nX+WITph1JZ82XSzB6dw1Ole2WvvRaVHoOB2+qDPJ0mu1Kctispk2f5R1kBIqKtY2EuS2c4BqRvNP0QuRyPu1mVkJqAcTdOXUvqqu0UUMZlrs06HBiakiD/mSkZCU8RRpk0bM8TgUUAbEyxL2Do/+2xFE8KkoQ7tWuJ1wVGdkBIoppoy02oNnq3k1nQwajev0kEwgM38wKIu+UoeFVwuR1VszsZw23rUGxw91iDivQP5YjOADSSP5tnIr7HtjCCYfL4enefx2sZ7WL4jqMdMoe1P3M0QXHfczCl8IbJhNE5borv5vLWQ8BbB7zzpSwmS/fghpF6WSV7TkU0ViU9937ZJCwxP81f6nTipJ+Aiko8VDVLapehICMD26a8ROM7Rn227Y1e4LrcKHXWhaxi6C8hS9CDjiJK5bn2qli2Avy/24Yj6Wovd75he4sNwed/BNDF6LClw4/fO4qHMj0n/eFsxuaIHAAy7K9PJKZPo4FEmmC/GmzkDbZX32T9C5tlqw7xAP+50CN2bpl2xtCWRedRaaFjv2NzjD8XL/e2niLuhBTZA0rwrm/jzIjmjpoDVUSozUmEn6NSvn7uTgn9c93wtTEiMgCrqVGFfhCJrjolmNJ+f1zKu1milLuXHoj5Tw1asGGCJJ11NvGGn5hz41beS2bvAZo7IwznFXyKj5PYy2+itB5cwz6nmU+/MggFxc qRJDatsw lybD8w7Z38qSRuPFaLoW2JENi7HQauYMF0sfdC/M8ugb2ki1bZ7AsBYVvST63IAKz3yhSz5eRQwgPfKK5SZVDZi4iiYy3mFM4iXCZTUaliieV4509i6wPIZQGzEyyIX0UOExBixS6p/z57tyLaohPeK9e1vzV6CQF+dQmXmRZRjrWgilrkIfxUsMdlQhgfo1srn2OfmW35GCEzAvBMLd6lGFiFZ95iXJW9/bd7tr8hZpdUNnrAW30VxaSS8OBJFUqhw5mwAomATq/cAciAyznNsDl4C46vjwXZL2AQ4R3Z6MODtmd1YWw83D0Q5D7qXLWf+UU+JHsAV6pIddTL+tmlPVGOmnol4LPeJwseJhRGbnKj9YMszMISan3RbXXcZwEB/z7kJFgjwH2KwFhGD5Q8C1NpkevmUHwo6xXXnNQhdBdIu379qHqpqMq9h7esy0qkchRojohj3SZrZCSP//wXRclr8iYXszAsLEDuASP3CilBx0= 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 largest page cache order can be HPAGE_PMD_ORDER (13) on ARM64 with 64KB base page size. The xarray entry with this order can't be split as the following error messages indicate. ------------[ cut here ]------------ WARNING: CPU: 35 PID: 7484 at lib/xarray.c:1025 xas_split_alloc+0xf8/0x128 Modules linked in: nft_fib_inet nft_fib_ipv4 nft_fib_ipv6 nft_fib \ nft_reject_inet nf_reject_ipv4 nf_reject_ipv6 nft_reject nft_ct \ nft_chain_nat nf_nat nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 \ ip_set rfkill nf_tables nfnetlink vfat fat virtio_balloon drm \ fuse xfs libcrc32c crct10dif_ce ghash_ce sha2_ce sha256_arm64 \ sha1_ce virtio_net net_failover virtio_console virtio_blk failover \ dimlib virtio_mmio CPU: 35 PID: 7484 Comm: test Kdump: loaded Tainted: G W 6.10.0-rc5-gavin+ #9 Hardware name: QEMU KVM Virtual Machine, BIOS edk2-20240524-1.el9 05/24/2024 pstate: 83400005 (Nzcv daif +PAN -UAO +TCO +DIT -SSBS BTYPE=--) pc : xas_split_alloc+0xf8/0x128 lr : split_huge_page_to_list_to_order+0x1c4/0x720 sp : ffff800087a4f6c0 x29: ffff800087a4f6c0 x28: ffff800087a4f720 x27: 000000001fffffff x26: 0000000000000c40 x25: 000000000000000d x24: ffff00010625b858 x23: ffff800087a4f720 x22: ffffffdfc0780000 x21: 0000000000000000 x20: 0000000000000000 x19: ffffffdfc0780000 x18: 000000001ff40000 x17: 00000000ffffffff x16: 0000018000000000 x15: 51ec004000000000 x14: 0000e00000000000 x13: 0000000000002000 x12: 0000000000000020 x11: 51ec000000000000 x10: 51ece1c0ffff8000 x9 : ffffbeb961a44d28 x8 : 0000000000000003 x7 : ffffffdfc0456420 x6 : ffff0000e1aa6eb8 x5 : 20bf08b4fe778fca x4 : ffffffdfc0456420 x3 : 0000000000000c40 x2 : 000000000000000d x1 : 000000000000000c x0 : 0000000000000000 Call trace: xas_split_alloc+0xf8/0x128 split_huge_page_to_list_to_order+0x1c4/0x720 truncate_inode_partial_folio+0xdc/0x160 truncate_inode_pages_range+0x1b4/0x4a8 truncate_pagecache_range+0x84/0xa0 xfs_flush_unmap_range+0x70/0x90 [xfs] xfs_file_fallocate+0xfc/0x4d8 [xfs] vfs_fallocate+0x124/0x2e8 ksys_fallocate+0x4c/0xa0 __arm64_sys_fallocate+0x24/0x38 invoke_syscall.constprop.0+0x7c/0xd8 do_el0_svc+0xb4/0xd0 el0_svc+0x44/0x1d8 el0t_64_sync_handler+0x134/0x150 el0t_64_sync+0x17c/0x180 Fix it by decreasing MAX_PAGECACHE_ORDER to the largest supported order by xarray. For this specific case, MAX_PAGECACHE_ORDER is dropped from 13 to 11 when CONFIG_BASE_SMALL is disabled. Fixes: 4f6617011910 ("filemap: Allow __filemap_get_folio to allocate large folios") Cc: stable@kernel.org # v6.6+ Suggested-by: David Hildenbrand Signed-off-by: Gavin Shan Acked-by: David Hildenbrand --- include/linux/pagemap.h | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h index 59f1df0cde5a..a0a026d2d244 100644 --- a/include/linux/pagemap.h +++ b/include/linux/pagemap.h @@ -354,11 +354,18 @@ static inline void mapping_set_gfp_mask(struct address_space *m, gfp_t mask) * a good order (that's 1MB if you're using 4kB pages) */ #ifdef CONFIG_TRANSPARENT_HUGEPAGE -#define MAX_PAGECACHE_ORDER HPAGE_PMD_ORDER +#define PREFERRED_MAX_PAGECACHE_ORDER HPAGE_PMD_ORDER #else -#define MAX_PAGECACHE_ORDER 8 +#define PREFERRED_MAX_PAGECACHE_ORDER 8 #endif +/* + * xas_split_alloc() does not support arbitrary orders. This implies no + * 512MB THP on ARM64 with 64KB base page size. + */ +#define MAX_XAS_ORDER (XA_CHUNK_SHIFT * 2 - 1) +#define MAX_PAGECACHE_ORDER min(MAX_XAS_ORDER, PREFERRED_MAX_PAGECACHE_ORDER) + /** * mapping_set_large_folios() - Indicate the file supports large folios. * @mapping: The file.