Received: by 2002:ac0:e350:0:0:0:0:0 with SMTP id g16csp2741961imn; Tue, 2 Aug 2022 14:16:41 -0700 (PDT) X-Google-Smtp-Source: AGRyM1v2d2uYew/3eJ/ThmLzaTWDEP67TLTMGUGYR/h4udUIKm+7/Wj43QgxXq68T9CMxqf8vsJb X-Received: by 2002:a17:907:1c87:b0:6f0:29ea:cc01 with SMTP id nb7-20020a1709071c8700b006f029eacc01mr17872480ejc.671.1659475001266; Tue, 02 Aug 2022 14:16:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1659475001; cv=none; d=google.com; s=arc-20160816; b=BoK8/XIxIfs1IjTm8H7iDkBsJMIDJbvt4cQR4L8QGwUqqGdyLYWVnuE9K988t31IRB aNBTzmyIQUPZq0mnlsP9HnDMDLAgApAsiKijZv7wmAeCJj3NKwJV8wYu6ZdzuQIGM9oj 6lgqbpeTdhG+98Xx+gUcb+8Gr24psnudT3Lh4digVAHquoZcyLtuepgTmBIEcqYVT1aV ER10UwFONjjitBLoaaWMEB4LrH0Clpdwq000Wkbk4MqXz40ux5R7teqANP4by6lKv6RX 1Hr0xu4+aFrB/cYWsV+alZjZKlk/ur1uII9q+UWDalOXVd2bcx5g2VaA3XR7U1Ds8A08 udsg== 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 :message-id:date:subject:cc:to:from:dkim-signature; bh=jQXMVD17Q+oY1vQphivwjVRtcDEGg5bEem2kARFesYk=; b=s47QhraF/5JP9s1+0IDvmk8K68QW4ikocmy9X+ntZvxBLvW7Ize+BmyN8NuWxp7EUv qS2BgEkcr6CrapeMmhjfbbn3X8eaWSm5BnKksd4br4QndcRys3DpBZrY3AYVf//v0gxP Dx5hFo6k/u2CLpwpNifP3FNDjh56nDhFo0dNok+Uz2gFLwhbO8buDU1ZY6SSVCuRmrmu WwGzhKVlE73o60+36RBVu1p744e7svoOcSM8N075TL/XYXMnJE4aeRzeA4TfNhFdv0My LRI3J9nF9HGuiYbWIzUADfF2wbHMalRckppOgq/reepqSZ0mFeOZqhbiO2G4Qq2UAyYB 391Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@fb.com header.s=facebook header.b=qAyOMi7b; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=fb.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id dn10-20020a17090794ca00b0072ab7bc38eesi14374797ejc.950.2022.08.02.14.15.50; Tue, 02 Aug 2022 14:16:41 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@fb.com header.s=facebook header.b=qAyOMi7b; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=fb.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234721AbiHBUc4 (ORCPT + 99 others); Tue, 2 Aug 2022 16:32:56 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38232 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230385AbiHBUcy (ORCPT ); Tue, 2 Aug 2022 16:32:54 -0400 Received: from mx0b-00082601.pphosted.com (mx0b-00082601.pphosted.com [67.231.153.30]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8C8A317E08 for ; Tue, 2 Aug 2022 13:32:53 -0700 (PDT) Received: from pps.filterd (m0148460.ppops.net [127.0.0.1]) by mx0a-00082601.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 272I2Vrv019940 for ; Tue, 2 Aug 2022 13:32:52 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fb.com; h=from : to : cc : subject : date : message-id : mime-version : content-transfer-encoding : content-type; s=facebook; bh=jQXMVD17Q+oY1vQphivwjVRtcDEGg5bEem2kARFesYk=; b=qAyOMi7bZYNvENMzOmVY0oqbM0eZheloTjHmV76fIqCtjkKsd+IOsDwdNRh8zVVF06lU EWBla84eOhzI7pGy7befoH77mJffUwlwFGj5z8aHyZz1wEi8Ih3CeZsAysXe288KjsKz Bd9jZgbw0HQWQXGMW5VdALih4lRHtPi9q88= Received: from mail.thefacebook.com ([163.114.132.120]) by mx0a-00082601.pphosted.com (PPS) with ESMTPS id 3hq4b7kf9w-6 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Tue, 02 Aug 2022 13:32:52 -0700 Received: from twshared25107.07.ash9.facebook.com (2620:10d:c085:108::4) by mail.thefacebook.com (2620:10d:c085:21d::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.28; Tue, 2 Aug 2022 13:32:51 -0700 Received: by devvm6390.atn0.facebook.com (Postfix, from userid 352741) id E7BCA1B76716; Tue, 2 Aug 2022 13:32:48 -0700 (PDT) From: To: , , , , , , CC: Alexander Zhu Subject: [PATCH v3] btrfs: fix alginment of VMA for memory mapped files on THP Date: Tue, 2 Aug 2022 13:32:46 -0700 Message-ID: <20220802203246.434560-1-alexlzhu@fb.com> X-Mailer: git-send-email 2.30.2 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-FB-Internal: Safe Content-Type: text/plain X-Proofpoint-ORIG-GUID: SKiNhgxhnIdMznWxw6RlzQRzwC_68OvL X-Proofpoint-GUID: SKiNhgxhnIdMznWxw6RlzQRzwC_68OvL X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-08-02_14,2022-08-02_01,2022-06-22_01 X-Spam-Status: No, score=-2.7 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Alexander Zhu With CONFIG_READ_ONLY_THP_FOR_FS, the Linux kernel supports using THPs fo= r read-only mmapped files, such as shared libraries. However, the kernel makes no attempt to actually align those mappings on 2MB boundaries, which makes it impossible to use those THPs most of the time. This issue applies to general file mapping THP as well as existing setups using CONFIG_READ_ONLY_THP_FOR_FS. This is easily fixed by using thp_get_unmapped_area for the unmapped_area function in btrfs, which is what ext2, ext4, fuse, and xfs all use. Initially btrfs had been left out in Commit 8c07fc452ac0 ("btrfs: fix alginment of VMA for memory mapped files on THP") as btrfs does not suppo= rt DAX. However, Commit 1854bc6e2420 ("mm/readahead: Align file mappings for non-DAX") removed the DAX requirement. We should now be able to call thp_get_unmapped_area() for btrfs. The problem can be seen in /proc/PID/smaps where THPeligible is set to 0 on mappings to eligible shared object files as shown below. Before this patch: 7fc6a7e18000-7fc6a80cc000 r-xp 00000000 00:1e 199856 /usr/lib64/libcrypto.so.1.1.1k Size: 2768 kB THPeligible: 0 VmFlags: rd ex mr mw me With this patch the library is mapped at a 2MB aligned address: fbdfe200000-7fbdfe4b4000 r-xp 00000000 00:1e 199856 /usr/lib64/libcrypto.so.1.1.1k Size: 2768 kB THPeligible: 1 VmFlags: rd ex mr mw me This fixes the alignment of VMAs for any mmap of a file that has the rd and ex permissions and size >=3D 2MB. The VMA alignment and THPeligible field for anonymous memory is handled separately and is thus not effected by this change. Signed-off-by: Alexander Zhu Changes in v3: -Fixed subject to be btrfs instead of mm -Fixed Signed-off-by to use full name -Added to description explaining why thp_get_unmapped_area can be used for btrfs Changes in v2: -Changed from x86_64 diff to btrfs diff using thp_get_unmapped_area --- fs/btrfs/file.c | 1 + 1 file changed, 1 insertion(+) diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c index 9dfde1af8a64..2423040db167 100644 --- a/fs/btrfs/file.c +++ b/fs/btrfs/file.c @@ -3808,6 +3808,7 @@ const struct file_operations btrfs_file_operations = =3D { .mmap =3D btrfs_file_mmap, .open =3D btrfs_file_open, .release =3D btrfs_release_file, + .get_unmapped_area =3D thp_get_unmapped_area, .fsync =3D btrfs_sync_file, .fallocate =3D btrfs_fallocate, .unlocked_ioctl =3D btrfs_ioctl, --=20 2.30.2