From patchwork Fri Feb 14 17:57:03 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kairui Song X-Patchwork-Id: 13975436 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 25AF7C02198 for ; Fri, 14 Feb 2025 17:58:32 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 9D198280001; Fri, 14 Feb 2025 12:58:31 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 981F06B0089; Fri, 14 Feb 2025 12:58:31 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 7FA9B280001; Fri, 14 Feb 2025 12:58:31 -0500 (EST) 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 606206B0088 for ; Fri, 14 Feb 2025 12:58:31 -0500 (EST) Received: from smtpin14.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id E23DA1207F7 for ; Fri, 14 Feb 2025 17:58:30 +0000 (UTC) X-FDA: 83119309980.14.039B252 Received: from mail-pl1-f170.google.com (mail-pl1-f170.google.com [209.85.214.170]) by imf23.hostedemail.com (Postfix) with ESMTP id 09C5C140004 for ; Fri, 14 Feb 2025 17:58:28 +0000 (UTC) Authentication-Results: imf23.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=ZZRQDmBg; spf=pass (imf23.hostedemail.com: domain of ryncsn@gmail.com designates 209.85.214.170 as permitted sender) smtp.mailfrom=ryncsn@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1739555909; h=from:from:sender:reply-to: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=wbraR41/doRi2Xpub6gCucxiI0zUxRVmW0Za0OUBAfw=; b=QhpwAdVvz+ZofeLKJUVZEe280P3mgOuVq591CmNjtsxvUyU6Y4TEWTgbistIbF1Htz06CJ iI0dqrwM+A/1+9QCJdBUiwifK6pmNFXEzWcRQ2EL7X/ex1ohQ/rNaRQQBoMKtQUfbYPFR/ T29V79C02mdW9yX9Wjvf5NXfxHZM/6M= ARC-Authentication-Results: i=1; imf23.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=ZZRQDmBg; spf=pass (imf23.hostedemail.com: domain of ryncsn@gmail.com designates 209.85.214.170 as permitted sender) smtp.mailfrom=ryncsn@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1739555909; a=rsa-sha256; cv=none; b=7HulWwS5u38H8eBpNkAo/s8/IxInzKErRIwYastQjvh6CJXlfSGUtDYTgWMC5heXj2TQf9 u52rcTibC/Julw7yPMwukqF6TajbCUVvAYG4HkxSWIe5XA1gg+5TSc8p8pi8Yzwm8gnZZn QVpwGqoKeJ2HV1W/Pi7j3BaVDtqvrsQ= Received: by mail-pl1-f170.google.com with SMTP id d9443c01a7336-220e6028214so34413925ad.0 for ; Fri, 14 Feb 2025 09:58:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739555907; x=1740160707; darn=kvack.org; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to; bh=wbraR41/doRi2Xpub6gCucxiI0zUxRVmW0Za0OUBAfw=; b=ZZRQDmBgvWQJGQLMEbjqEbVq7GMNq/PoUXwnuzrlffo7MhaEBPY0qSILqV1jsrHJCl VLMHApMcP9o2v/+dxPPwn3+IbZWJrwnZO/lNvlyU6YjWEXzn123v/y5j2E+puSWjEAxF AqIl4EpF4qeg/OCzycQvyLMV2CxT3hF95LHnYCuygmHiW3OPSJLAbFHiBREw3p5OqAiO 8S9arn8a2D2OlpjzE7tOFaGcQMJDq5m3XLK1sZ/WPXDDcjNkHGV/J+KtP72F+vWWe4RC 7g5y+/4DeTbrqW6978Yvl9FQFOM4lRNCMXTMaXvC7RZj5wwPKAlbFN41+gf6i5P1hboS aLeg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739555907; x=1740160707; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=wbraR41/doRi2Xpub6gCucxiI0zUxRVmW0Za0OUBAfw=; b=VLlAGHF2zklN6zNf843zkUh377lPhgc7En5v50C2g4+6MUMOop4dR5JpLkoI1SkzYJ ZPO+nfS6c+Ufgw/I3V768cYc+TAJlyXzS88y9PtH9oquzPS+GCb+eXAz7m97nGFYlvug bJhWOVaLnDVEGeFjjeIC5kUzruemUIE7Lh2vr3OZKp67zNp1h/85FMhFWiGtf2FiUhrF UJaghIGfmfmb9hekGlHJFxEt/dO9ahmWmPHujzW2NksGiJSpMn3FXB2z/5uVRvjY+F8w p4vPXth6khHhITZqtryI85QgmDZyoE4na2uCXJ+3Rek0dVzzdvoWF/Fnwd7iu6ngVjPg y0bg== X-Gm-Message-State: AOJu0YyHR8FrFMTPjmmysKu62liOE9w64BsLM4BMrfrHU3l2ebo3cd2D 6Nel1Au8uMVOe1T2GU9LpKTG+lZ4Qdfklp3EmjHStGfGymuNcn8IkXjsD2env+4= X-Gm-Gg: ASbGncuoCYPKDx+/mu3CCl6m0S/cUDZj/lZwNqGCgZ+9dr7Cim8jyh/mKapwkWBlyLy tiA4hZfPq2NPtANggr6tpc3BO1D/gHtDs2lxy2f1zlX6GiDbflEt7FWF59zGtOTPxKsrj7ltTHj Rnr0gZk3r2q4Mbo36yC3DsYWsrrE3Lak545WkB+B3O1GfoF2cvG8SDwLAc88rHzDxyFKlhlbe2J EKmz7bY0psWbAIu+oAXQu5Mx5XRCAxcfrxNG8wDZOgCxeKYYDT0UZLMMMcROSQLgK2wiW9L89Uy Bie+iPjh/qFSoIaZOwLnxcS9sneYxvr5O1yQ X-Google-Smtp-Source: AGHT+IEcy2yWQYwogQ6KcjhIKWsRSf0nE2f/TYKhfF4cn7HOpM1wAXZnP8din7GApc5tHvB2ixsFGg== X-Received: by 2002:a17:903:18a:b0:220:c8e2:5e30 with SMTP id d9443c01a7336-221040bd29dmr1683615ad.46.1739555907510; Fri, 14 Feb 2025 09:58:27 -0800 (PST) Received: from KASONG-MC4.tencent.com ([106.37.120.226]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-220d55943b5sm31216605ad.246.2025.02.14.09.58.22 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Fri, 14 Feb 2025 09:58:27 -0800 (PST) From: Kairui Song To: linux-mm@kvack.org Cc: Andrew Morton , Chris Li , Barry Song , Hugh Dickins , Yosry Ahmed , "Huang, Ying" , Baoquan He , Nhat Pham , Johannes Weiner , Kalesh Singh , linux-kernel@vger.kernel.org, Kairui Song Subject: [PATCH 1/7] mm, swap: avoid reclaiming irrelevant swap cache Date: Sat, 15 Feb 2025 01:57:03 +0800 Message-ID: <20250214175709.76029-2-ryncsn@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250214175709.76029-1-ryncsn@gmail.com> References: <20250214175709.76029-1-ryncsn@gmail.com> Reply-To: Kairui Song MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Queue-Id: 09C5C140004 X-Stat-Signature: fq88yy88fc1cxbc8codr9ptf5dkga9eg X-Rspamd-Server: rspam03 X-HE-Tag: 1739555908-148780 X-HE-Meta: U2FsdGVkX1+mlWo70hxBQMmdW/3c4wGIeTk0/Oi5icZH6poOiRII30SB3x0LRgPIF/Fh40PTzlwDxvSDQG/m+l3eH7DU00lXajxq+ZqKyTXT69z9WFWv382sHPLdZ+FmJ6pOx42eXakAw2GSsQSnNdF0OGwBLOIPNV/3922oCtKzajq2Pf5yBA6n2lPO+I/ibe+dgzbrXOiG9+BvT+ztrahocbVHEluc0tH5Z/BBCaMECR/pqGQw49fKpx+zgIAZXvsU72EB8ZWvNKeakzb9gYVH3817gm0cHhyYSrNaVAUvR9UO7thhayZxqhhQIlk5xjyDxMvF7hya82I8VSNzln9fNY00zKRF8B2YfKGQvhmVeu2xUjP+AmBBZ4jLVap3NLt4jW6+xEnuKFGTekRPS5bgQo8OAYU6WfDq+9qT57kEGrdU7mNdB9u/b+OQNic1WWw1RqvGS9GLrgAOMdyUN0iFwJYqnCmwHDx6DaTmqQjkRnmIN7NYLuIdOu7zlTM8J2Xotm76KW8ZPAx44Gxiw/J33bhnR2U/Wb6cLwZN2QrOfyX/HrSjGD6MjisVKtBuK/6rZI7pUlrO9SeAD65M+cpgDqcW0BqbbBOEXRX0sCCGMIeSNu7TgPSup3wcu0QBX2PJtssPT+Mize+MdKIerYyEOb8hKzp5iKu12TUznU71QhnxCKn/nKC3qISKv48+q8hNsNpIMTC8NV0k7Yd3PCiUKxmP7XAq+y3uMAqzzqixbNZfL+9+X0JzlNsldAwPoI08FBCCH0wso4CdP0TyeU7EXU0z09p8kLRzq/HgO2ooMXkL24EQE97rVFPC0S+ItOHS7ui27dikDeYHnOXVNQm5pbvWpzYv6zbFvJDXRPUnMKaTjjDjCuNpisoJI92u/tpOL+FUsNjppthweDrS6lGqxw6BBtT+/L05d9MAELaxxUkaKPkwzSucZTkQTTtye5LNvlD6tIOrh5sJ5Hs BHM2If0S N+2CBflGg+2z6O3e+ddwQKTOK/S8Jqtek2T24kufr2aXTVHbi6/HAjw82gcMozowpAsf1RymmTKoCGfxNV7EoNTWFXyW+yQJW2XARpTUmE6+FIEFaVJIjX3Bhk/+a1OgfO1a5gqXEUekNpWIddyaFKT6EtF6m0h0MPb5Yn4s6T/3WN69rkj9nZMU+qT5/3Im8exim+mdqD1fm7bNF7U4WawEYLDtPw5thbKTDAI7DLZZKLtTuadgdvQhw25+MqgNNp+Pt38iWCWXh9gjapFkDPRqsaIL/CJJRnigpORVSewYUzMt9lm1S5syuL8mGqvCkFdycXnFrh05f0OVCzwuD8imPGiQMHd3rea6P9+HfjGCf5fowbGq9pSHAq0osud3uYUGW1B1nH2bmNyN45ZqOS/z4QRb/Cf9LFVxTjlCFfeppTpJQrRYkN4LVlu7OSYKOd1XU5AMvTx9eJSsyNesb4Lo8NwLZmGgbWbSYqAjA6rlSx+fhD2mvTRvs+ih1xdbY/KgFV0PMrSj2egka+wZdE41LwB8r4K5+HzVqNxVJ7SIj+KrW9U0nmIvTSQfqKqGyNRkgJrlPq5CQQ7mMFIJpsh4Gog8QwIrKfSNq8fVmpthliRE90leuaQRPh5naJxivgg3YYsgERScaP1O9ocMxWyjDAvGFxR3u8tDtbXan+46I+oosT2Vc0zYHcZagC6Tj7YkbxseJsEhR6ecshuoxIOnR2uvcH/dRR+bAfRXyNRxIDFbUQc68yKsilsSq4vLpKXJrY15+Pdd+5xXi50E4nP0k8zZTTAgEWNo4yBD4J2aIr3KUdDdoHTm5i8ZfLgvGwTswgu1qlgm5SVM64N1k0OZs3eWPvnKrIToxMa/ZW+EEDTgKczTLakLQSMuBY/fwgXof8HE8pNUvy2CiCiq+qeCv0HwzT0ze31DC63jNSn1mzn4= 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: From: Kairui Song Swap allocator will do swap cache reclaim to recycle HAS_CACHE slots for allocation. It initiates the reclaim from the offset to be reclaimed and looks up the corresponding folio. The lookup process is lockless, so it's possible the folio will be removed from the swap cache and given a different swap entry before the reclaim locks the folio. If it happens, the reclaim will end up reclaiming an irrelevant folio, and return wrong return value. This shouldn't cause any problem with correctness or stability, but it is indeed confusing and unexpected, and will increase fragmentation, decrease performance. Fix this by checking whether the folio is still pointing to the offset the allocator want to reclaim before reclaiming it. Signed-off-by: Kairui Song Reviewed-by: Baoquan He --- mm/swapfile.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/mm/swapfile.c b/mm/swapfile.c index 34baefb000b5..c77ffee4af86 100644 --- a/mm/swapfile.c +++ b/mm/swapfile.c @@ -210,6 +210,7 @@ static int __try_to_reclaim_swap(struct swap_info_struct *si, int ret, nr_pages; bool need_reclaim; +again: folio = filemap_get_folio(address_space, swap_cache_index(entry)); if (IS_ERR(folio)) return 0; @@ -227,8 +228,16 @@ static int __try_to_reclaim_swap(struct swap_info_struct *si, if (!folio_trylock(folio)) goto out; - /* offset could point to the middle of a large folio */ + /* + * Offset could point to the middle of a large folio, or folio + * may no longer point to the expected offset before it's locked. + */ entry = folio->swap; + if (offset < swp_offset(entry) || offset >= swp_offset(entry) + nr_pages) { + folio_unlock(folio); + folio_put(folio); + goto again; + } offset = swp_offset(entry); need_reclaim = ((flags & TTRS_ANYWAY) ||