From patchwork Tue Feb 18 23:54:44 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zi Yan X-Patchwork-Id: 13981104 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 2BE91C021AA for ; Tue, 18 Feb 2025 23:56:32 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id BB7942801BD; Tue, 18 Feb 2025 18:56:31 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id B40252801BB; Tue, 18 Feb 2025 18:56:31 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 9935C2801BD; Tue, 18 Feb 2025 18:56:31 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 7723A2801BB for ; Tue, 18 Feb 2025 18:56:31 -0500 (EST) Received: from smtpin12.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 2C7DD4AF84 for ; Tue, 18 Feb 2025 23:56:31 +0000 (UTC) X-FDA: 83134727382.12.0ED1E38 Received: from NAM12-DM6-obe.outbound.protection.outlook.com (mail-dm6nam12on2089.outbound.protection.outlook.com [40.107.243.89]) by imf12.hostedemail.com (Postfix) with ESMTP id 0C02E40017 for ; Tue, 18 Feb 2025 23:56:27 +0000 (UTC) Authentication-Results: imf12.hostedemail.com; dkim=pass header.d=Nvidia.com header.s=selector2 header.b=n8Ohi2yH; spf=pass (imf12.hostedemail.com: domain of ziy@nvidia.com designates 40.107.243.89 as permitted sender) smtp.mailfrom=ziy@nvidia.com; dmarc=pass (policy=reject) header.from=nvidia.com; arc=pass ("microsoft.com:s=arcselector10001:i=1") ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1739922988; 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=ZSaLygK6n05T2AmjCflis9+gvKk+KoVwHlKgr40r1Tg=; b=R0KDN9JsLLjPCFRnLeuWMRlHx7+RQUiTSPml3jGYjUYQyPv0CL6fosn9SxRuwswHTik/Pc DqShZjz+vo0wHWYqwE/T3y6Xg+BjRo/oGJTBq7cfCPpnuj3IAiSUZuvElY8TljBTo3BMAq Hbd7zkWINWMDxtbulBLi0atwo8mFAvg= ARC-Authentication-Results: i=2; imf12.hostedemail.com; dkim=pass header.d=Nvidia.com header.s=selector2 header.b=n8Ohi2yH; spf=pass (imf12.hostedemail.com: domain of ziy@nvidia.com designates 40.107.243.89 as permitted sender) smtp.mailfrom=ziy@nvidia.com; dmarc=pass (policy=reject) header.from=nvidia.com; arc=pass ("microsoft.com:s=arcselector10001:i=1") ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1739922988; a=rsa-sha256; cv=pass; b=q/LjCrcBOjh4L/TPHE+gWMvNJEkr5L6oPrVn2OkTpVBurirq/B+jNl66YUfH7QFubAceBG 2NNqwH8b8pAjilfzbvaoGkRoIClO/Bz8WVzP+3A8softOTVSj3rLOfwvos+AZoMV+EQmSe u23ez9O/5CRuOeDLYzN2cEqkYaSx2lk= ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=hGJbAquKXAXrfmZB96EkqIvizLllw06rl3yeuK3wQhxvFViC0bhadlpRpg0Fx5QZmKhwyfnj7+/IedYuyZFw0gUF6L2kIbIjpIMgk+oCz46Xpz/tGQVVD6tTuucF+whfR6WpeF1nvGS971KafixODZW7ozSIyaSJpEqrhELV+LWfYs14KePI8QIv2oDI0LQFeQFbMO8jajZg/XpPAICzpz0b+daypFFrA23f2Jhsg9aDmo63t7HZrhmRxBk+znXSJ9+jSOKKNHX0ghhhZhXWCN7rVDU1NddZlHIo982plyK7FM6bZR4EnzrrJYm4NFsgzurIT6/bHlMprGwoJaKCxQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=ZSaLygK6n05T2AmjCflis9+gvKk+KoVwHlKgr40r1Tg=; b=B+diu3VzNhxVGLqz3mKGAdhRpQTysdTZgcVycz0PzkkoJ6nrZC5YM1NeHm9beHkbVKSFEzGjmtJJsNnrb9y2GUVRi8Rw5cDwUlg8R5EmrulvkpObcH94MGy1Qa7PF15mMH/YZCHwhfn0HHA7rcXQ6+5UL9WLYvYlVsC7CBAyFo3ickP6Dmz9wbsaI3uWfqXmRUlYVXXj0+iVudZjOpbKZwV5n7V/VpG/UFHxe9xESJfsyFHUseE2V7R8MVGV2Qr04T+Sdr4aTDNzuqTaEQepSSKqy6GjiMMpdtVIyHJEdZ/VPzEYmaDuS/vYiflZwsu/m0PH8ZOhRjgfydM8HtxQdQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ZSaLygK6n05T2AmjCflis9+gvKk+KoVwHlKgr40r1Tg=; b=n8Ohi2yH+oFRM0E8dicRBcy7uk2ED9cSJedn4iWYwaQlyRq1jdv8pXCWiQt8iAwWu27ndntg5UwiHkZ4S6tVSXbqi6yFoQv6fUnS7cZ8jd/4QX03Ma7n6/LyL07XLpa6Rx3PNNEhuIuq30oRPqhu0kP1aubYX0AxwClAB/FLnLsaBz2vCqe7729VGaSyX4GxYbRIVzq7yJ0V8mGNTNtC8PB6ptft7RpJqBpQ3RUtC/tlri9Omv8a0+rl0hNwq0WGpBrQoD/BV0Un5U3ozEK/eHkWsmzQYBMKFQPxH5X5FAgk3e4rHu3jzbrHA9feNpvg1ZhQxc8fAXiblIEDWhcogA== Received: from DS7PR12MB9473.namprd12.prod.outlook.com (2603:10b6:8:252::5) by CH2PR12MB4326.namprd12.prod.outlook.com (2603:10b6:610:af::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.14; Tue, 18 Feb 2025 23:54:54 +0000 Received: from DS7PR12MB9473.namprd12.prod.outlook.com ([fe80::5189:ecec:d84a:133a]) by DS7PR12MB9473.namprd12.prod.outlook.com ([fe80::5189:ecec:d84a:133a%5]) with mapi id 15.20.8445.017; Tue, 18 Feb 2025 23:54:51 +0000 From: Zi Yan To: Matthew Wilcox , linux-mm@kvack.org, linux-fsdevel@vger.kernel.org Cc: Andrew Morton , Hugh Dickins , Baolin Wang , Kairui Song , Miaohe Lin , linux-kernel@vger.kernel.org, Zi Yan Subject: [PATCH v2 2/2] mm/shmem: use xas_try_split() in shmem_split_large_entry() Date: Tue, 18 Feb 2025 18:54:44 -0500 Message-ID: <20250218235444.1543173-3-ziy@nvidia.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250218235444.1543173-1-ziy@nvidia.com> References: <20250218235444.1543173-1-ziy@nvidia.com> X-ClientProxiedBy: MN2PR12CA0031.namprd12.prod.outlook.com (2603:10b6:208:a8::44) To DS7PR12MB9473.namprd12.prod.outlook.com (2603:10b6:8:252::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS7PR12MB9473:EE_|CH2PR12MB4326:EE_ X-MS-Office365-Filtering-Correlation-Id: 40cf3213-d0da-4b4e-01cc-08dd5077a2af X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|366016|7053199007; X-Microsoft-Antispam-Message-Info: 7JPTErAzy8PqEVfv4RpUldDRVhzXz1+m7YFvOvRH5ABqwE4W0M0oC1qp+/RUw6h4FGwyyZkPj1s9+Y0Z0cqMTd2/PuL+QKDaoE6HFtKRtoRWh8nhK11h6Nob2mN7vT7rYXEyGiDBm50kV/dn3OLGVzjubznKS53WlufFGYjBp1BEjZNCsUapHuddy8LE69IJ36ODA7hInQ05WYLjDvgg7EFU2zApl6jl0cOsjJQ3QdZgIqEn6EkAlg2aMo9cGCQholZlJr6A9nwPMl8jIVvQ2bd6FopJE6m9mKxZmIrseK3WIjAuBkbkUePPkE+g9UW2dmW1BuQtbLoVeDlAAnYufQEguaD8uUle+gISyd9+LXpR+by1TL4vxH4LsJh4PYDD2o8ux5UQPOIjtXJCQRhzEPjr8tZw6HCkPCYSztp4hEBgti3AzDaH48GBe7U7LyZ1W7T8oQxNi9yPK+AZbbqDDYwPmRkoOeVxjYjCHE1y5EGsnQWaGsXCQWixBGQIl7QdeXfYDolvlaFiiRsdFkr4Ydhw4NpXkAJs28zsBGSvBebOvvSa6yxZlgG57hY3zqhu4WS+h+QGb2rVaBChlMIDk5g8yIJA9ujJq0277XHqTWdVLYDiCHIwEfDWrAshPknjfwYiewP+NY2hFfHLu11nL7qLCNjvfa/o4jTLcaNa9vRc2Z7EejiJcS5k59DOrwU2c/5xwUCjXXxcRfviL99HsCcZPWrCD3qvCAXFIwbPdTBK2cW3yBoSx8I+zvKxONRQH+TmS9He1KmTnwZ8R85BoXqwFD0LobJgicdWjrNPRhfIFueeZ7N7E7OR7e2uTjpKzGXtFZoNMDjbjTdnSd6gLUIafkaJ9nOyMeW6l+s7zMeo3vEUWEjv9nZErAmddU4v9uSxV5Yj2YPjP3IcOBD6n432tJ8/eUhqPkHzXKjCW5O98JUXR/pNFgGwVqRViPPa6aYa/LLY6BNCHhboZNxTFRD/MVuVRp72yNHOefV1W72UkQ9pzPIBwbC1v4we3IAtCnu8bvMngDz90Qz9sRxTGXbOuIburLdzdmNBt/k59laLQJ7fpgcQ5NHw9v1qBVOT5Rl/c6VnOZ4v2oXeLAptCwsrroGeIE2N3kLzE6YNYBCfQ5Td2HKGQEhmElORc/vD1AK8Swp8D+fakO48pH8rRxLZou1iuAxYV8kbxTJKfQrDmQ1h2eUms6XVwu3hqPeWmtcY9YZ+fYt5wVPo9Baa7AWSra+qDVN34htyQgYl9lakw5XkJKyVUCJcIOrs0xqVhpPwxjQez3TduRqKhSGbB4PPSE/lNC9XIbqH7Fs4iV3fzod9J2ORxhMXJn2uHlYbittuWM10+LCYjdIzbZN/R5kq05KNd+btMSa6FHy546xJxA8JRoJkuAIFJWo7Ks6o X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS7PR12MB9473.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016)(7053199007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: eTq+8wuZlUSauLfhVdZhboND1Jtk9tNKvvogaZ46u2HV9LEv2QVzWLkU9cFkT/ehR1R2eb6byeClzp7DT9SFncwltONV3pfp9lLoxTCETH1V9zdJlIRz6uMhW7bfvAvL448fx6cDVfN4eQP2H8kvOVct1gEr59yf2Rfin38u08lP6MUS4LvDWbSFKLmw6tXJbcd/hWWYHwqqkc0D3p3oK+xz1hSZkATJ+6MerpRivpkADN4jTd6FjA59Z1t8/uVLrmk54dQr7rG860/vMirIwTTZeH6W4He/f991ST1coC53JcjLkBnd7Atv48IsrnjckWBzccV7RUFpaozmtQndyyG3E2a7GoXbTbJRP40hdZOQgDvCnNVGWBXu7rLelReOHB3C6xotsKeUa+MIUQyQSmNe1yVVxA+yWdH/nLGPs4pHJ4jERYxwXEo2YEy+pRGy1x4a2kaEAKb/3/nikuFqJND1P8kPIh+BT6yq1Jgt5pGjJn+Xqo85OVxsAW26xeEQlhSUDrXZCx+2YPXgeMnr9XrovNb8wXmvZWctjj+WPpZFgQutI2lz5DLzPBuBR+B64JZ9l+hvHCYMRkh1/3D6hEZ5eg07O29Yf4qA9V1UI767nDWOxDw/ONG6qNx6m9c4fX8gLUwkcNR12N0nz8gC/U7D0bc+Of+85hejBCKVrsak3RwwQGR2AmquzjOF6J4nlHO88H3B9rIytH0C7oSVHVITBcdUGpljg4Qt5QUjzOOjYFttNSkt9DmjOPYSJfEuw5p9F031Ohh1VYT2+yuQxF5LRWbLQBDtKNT2y01MtqCzWyfqj/L2ho6ldKVuxQ9c5AaYcsRqS0xp4BnhxXZ+zugmyvVIOWQXLQCoav9VBWAWC5MUtjgv7ykBiKBWuShmo3t/sSdQesjb/PXidNOhL44I1Bymbq48M286drCbBT9XYiPozDKc6px3Y0EBHyrTVl0yJ/lIbWWJ4SUjvqJs3FrfoNayMx7qZB7yegquvkNLQyNTVoMWCa7ek5iUynLTHh4gj9WlGmRBySAJ4I6TKMhiR512/X/2zC13apff/u55M1EHKThrPJzQRbTqeYNIbpzrQjTBS90cChbY7ztww9QUT4PbS/AnsiP7xTaNjWpF0ogNnxwujwDB5S8zRPJ6nuPdsqdZZ5FtJ+y3pALsVHlnN9O7DviVUEDX/W48t/ztnUOqhUJvd7a4rmNS4bG8oYDJCMQOIBLSYfgnN9hkgYVKdMZlkmhE9QEo5r+fhHlqqREYSdKuBobTog589gXgmeJqV+X8A5sqSFrN4BwoiQSpckbg4AI6Heac1CisO798G5dKKI833b5ksfU1uMWylOB+6PNt64wMnKOgukZW3liu3bx30meN1QiHGbB+zSV609caho2XycUTALn6Pn21Op3ISKa32BCllJzYTInXX9JnnDng4eRuBlc6HZ5LsuS+t+vguczv8hE6Vb7WzR96NiTSDpzDi6rgLL2AINH6XH1jSV+CfzDFakRVEpTpqYozbQEPVkJeTsByIazoATZKpTrr9Z1/JQSJNvgHqJzFGjN7vF2ILV3sZdUjye2PnV9Rc6DnyXuADuRcy+HMrTmZ X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 40cf3213-d0da-4b4e-01cc-08dd5077a2af X-MS-Exchange-CrossTenant-AuthSource: DS7PR12MB9473.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Feb 2025 23:54:51.8384 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Vo6omoQZ4/8lg8PF28XCXQGOwFiPCH7MQCkNceB0BfkPBO9cy2P1AqbKIgXRpj06 X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH2PR12MB4326 X-Rspam-User: X-Rspamd-Queue-Id: 0C02E40017 X-Stat-Signature: fck6zu555i77zr8zhj7iantedothjce4 X-Rspamd-Server: rspam03 X-HE-Tag: 1739922987-98732 X-HE-Meta: U2FsdGVkX18cbohVW4W3G5wh1K28oVopO2ub21KIpwlSwHbz2/1TRGdgjaGz41aDFMTPr12A7muVwoHqXgMLCSWxoU1eAoq+95/NAL8QpjekrxSilGz+pqfmT+vCdp/ZmYxOsca37nifcFdGo8iVUEUlao2HWFC/ckDaOpvPKf7wJoy6GK1oFXrb6/IKbQzDfzRP2SLU4p2awlLUQrFUntI5VU5H5VNPrh87Swy48C2g9wpvjskfVuseH2qdhqJWMNOrRSbsiea3W+RhZ9A0paY5nQXo2BYjbdnn+aP2PJtpfoBTMn7pWNPsJ0LvcUzaLIuJDQ6dqsb/qYVLXFNt2423/6umMPT2uKgo53f2BMPoEKKh/tj0aBd2+ryatXfBdKy/AUtz5Cl753xWy2h5/FzobEH+sMGYtdjpoMGl5uKmRZjFUevrbE+OSw6vVB4Yd290tJvHrtrCjp3kjZOq0HI9p3klEI5GDTnrEYcrMNyDFM1YPasyc+b31dBG0+7QiBFsc8E7Ox0d9TSUvcGHjIWRDMbdL/lC4Uazj9yc96S5cHHTnq3F2lA2bCohs/y99sFBru3juOLmAnjpUL6y22/0ufjIln/B0B/4k4k2xXfPplXeqvg+kZhbsCS4kMGq2UI+vgIjHdRHPiURI8awlxxYY/lT2PrEpJHWkqFsXmOfqJvOwOgSVPHKjUNJMO6rtuaoMOcUU0Nux06lCE/N6GfiGx97g9olrlySmxf44pzOAqQnT2dXH8orllqKe/Q3/5IotrRF2SuOIpCU+N1xPFBd1CR8qkLZSCHrd8+MaabHXsL1dsAKH+ir+trPzaUJbVSI7W/6hnsZNZwtWApAlDVdbU+NCdNmxwtiF5XjctGQWJy4Ao5DJ7xQgjO4GNA7Nl8LeF+85krafh1Xx5Qfx+Kp0aKAMKVYfG1kf6y7XY1JRPu5Py69FZkX53sF2Q6YPNEuuCtobBnRDdh+viJ ys0dWzoE YzuVMpzPrh/xm89mVMbjSkTz15SN7Rxj9WnYpk7VsL6hiF/wIJJ8ZFtjj3A9wOVowg8pcOJZOc0rJbIFMaOTFDYYF3EYj39E53xB6l1EDMnc9f3b5iTvwc9ixhczYoNSYx1pCsSw1R6a2uyeOH3cfhPB7u5UiWSKYpjsxQZeKRZ2utB67B4P5wOpV0Zj0q4oM8vcpDz4duAldcH45i+3etad/V1uXkJT0DMn31QKVuK5ovrTLIjJqS1K5yd2ZfsdhPn5cBLRWla1jlDQjbaJixolpyd9WxJYyc+zO+gpaGJMcXnrpXNrPt+5o6xL6twPwx7FJQt4LQpxDKplTLVS0v0nvZcJ4akIJ1HvpXaBsgoEMALujke5Lzb5swKRKS0QzOeNfLxFi8hyg2Vk8fwLQUq1gIdDDdA7bk0n3fpZQWJMT/tye9KFQ0tx+sqj7dHU/BnBwQOzkde3HS9hgPdQk3ESgmzmCbBcxVupgOvYIWWSdj+wyGiJZhl9OFaSF8C/LL5T8fRo8jY/ekJS/3x+p1cUtbTkimiOKBnzK X-Bogosity: Ham, tests=bogofilter, spamicity=0.000002, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: During shmem_split_large_entry(), large swap entries are covering n slots and an order-0 folio needs to be inserted. Instead of splitting all n slots, only the 1 slot covered by the folio need to be split and the remaining n-1 shadow entries can be retained with orders ranging from 0 to n-1. This method only requires (n/XA_CHUNK_SHIFT) new xa_nodes instead of (n % XA_CHUNK_SHIFT) * (n/XA_CHUNK_SHIFT) new xa_nodes, compared to the original xas_split_alloc() + xas_split() one. For example, to split an order-9 large swap entry (assuming XA_CHUNK_SHIFT is 6), 1 xa_node is needed instead of 8. xas_try_split_min_order() is used to reduce the number of calls to xas_try_split() during split. Signed-off-by: Zi Yan Cc: Baolin Wang Cc: Hugh Dickens Cc: Kairui Song Cc: Mattew Wilcox Cc: Miaohe Lin --- mm/shmem.c | 43 ++++++++++++++++--------------------------- 1 file changed, 16 insertions(+), 27 deletions(-) diff --git a/mm/shmem.c b/mm/shmem.c index 671f63063fd4..b35ba250c53d 100644 --- a/mm/shmem.c +++ b/mm/shmem.c @@ -2162,14 +2162,14 @@ static int shmem_split_large_entry(struct inode *inode, pgoff_t index, { struct address_space *mapping = inode->i_mapping; XA_STATE_ORDER(xas, &mapping->i_pages, index, 0); - void *alloced_shadow = NULL; - int alloced_order = 0, i; + int split_order = 0; + int i; /* Convert user data gfp flags to xarray node gfp flags */ gfp &= GFP_RECLAIM_MASK; for (;;) { - int order = -1, split_order = 0; + int order = -1; void *old = NULL; xas_lock_irq(&xas); @@ -2181,20 +2181,21 @@ static int shmem_split_large_entry(struct inode *inode, pgoff_t index, order = xas_get_order(&xas); - /* Swap entry may have changed before we re-acquire the lock */ - if (alloced_order && - (old != alloced_shadow || order != alloced_order)) { - xas_destroy(&xas); - alloced_order = 0; - } - /* Try to split large swap entry in pagecache */ if (order > 0) { - if (!alloced_order) { - split_order = order; - goto unlock; + int cur_order = order; + + split_order = xas_try_split_min_order(cur_order); + + while (cur_order > 0) { + xas_set_order(&xas, index, split_order); + xas_try_split(&xas, old, cur_order, GFP_NOWAIT); + if (xas_error(&xas)) + goto unlock; + cur_order = split_order; + split_order = + xas_try_split_min_order(split_order); } - xas_split(&xas, old, order); /* * Re-set the swap entry after splitting, and the swap @@ -2213,26 +2214,14 @@ static int shmem_split_large_entry(struct inode *inode, pgoff_t index, unlock: xas_unlock_irq(&xas); - /* split needed, alloc here and retry. */ - if (split_order) { - xas_split_alloc(&xas, old, split_order, gfp); - if (xas_error(&xas)) - goto error; - alloced_shadow = old; - alloced_order = split_order; - xas_reset(&xas); - continue; - } - if (!xas_nomem(&xas, gfp)) break; } -error: if (xas_error(&xas)) return xas_error(&xas); - return alloced_order; + return split_order; } /*