From patchwork Mon Feb 24 18:02:06 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kairui Song X-Patchwork-Id: 13988662 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 C46D1C021A4 for ; Mon, 24 Feb 2025 18:02:58 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 5C84F28000F; Mon, 24 Feb 2025 13:02:58 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 5771828000C; Mon, 24 Feb 2025 13:02:58 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3F2F028000F; Mon, 24 Feb 2025 13:02:58 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 1A4E628000C for ; Mon, 24 Feb 2025 13:02:58 -0500 (EST) Received: from smtpin28.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 7E0BE121A4E for ; Mon, 24 Feb 2025 18:02:57 +0000 (UTC) X-FDA: 83155609194.28.1EDD69B Received: from mail-pl1-f174.google.com (mail-pl1-f174.google.com [209.85.214.174]) by imf12.hostedemail.com (Postfix) with ESMTP id 998F340017 for ; Mon, 24 Feb 2025 18:02:55 +0000 (UTC) Authentication-Results: imf12.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=AMTdFVBR; spf=pass (imf12.hostedemail.com: domain of ryncsn@gmail.com designates 209.85.214.174 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=1740420175; 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=xwT//N+9nfh7P5Px11klS6FaPMqYvLp+fVr/05Baw3w=; b=RdF8PtR77HQ47XUybkMiL06aoLSdj5SVHxHhEmeGNTro1MQxpV4vrCzHt5nsujeubWBypV O5LwMpGJPaiJLx/4C0NWcMocatZGJXjZwJwuN2Df4dBC1ILIHtabXz0sq+DLyPM1gKmvo8 3e5VCkKP+4CnwzGDt4rdQy6f7tArHco= ARC-Authentication-Results: i=1; imf12.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=AMTdFVBR; spf=pass (imf12.hostedemail.com: domain of ryncsn@gmail.com designates 209.85.214.174 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=1740420175; a=rsa-sha256; cv=none; b=fVsII/2BfdeQl/Jbd2XQv79SS7B6tYL60BFUS/lNa0WjHfhieBXtHfFAVPzln+EnIfaS5v sr3ZXobU1BJBQ12t7xXWG4SNX6PTdssN8eYNKY5lIFldHmGwsHeDXkWYLT0NDc0GKW+y1N R6LgCwE5hQe7nfP9h2plezZ5wXAKNGU= Received: by mail-pl1-f174.google.com with SMTP id d9443c01a7336-222e8d07dc6so22080405ad.1 for ; Mon, 24 Feb 2025 10:02:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740420174; x=1741024974; 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=xwT//N+9nfh7P5Px11klS6FaPMqYvLp+fVr/05Baw3w=; b=AMTdFVBRm6k6zH3Wn5dDoUjeixrZjoxYNZiMnKhVJ7rA0+oKryw0BTHOjZCTJ8y902 W0E/UD4fdfCIsWDR6GACfCIAKjNjp08XEAGEUBSQfMBJ4gEGu39uGBymcMcLIfX/uH6J tl7MTitXZzW0tyEN6Z3fZwykaZkEq1eWJL1YdzUgGW6Y3yR+zCE+14LUhMDhhzqBi975 H6+PGO5MVZ0ajDD0b2U78ZGw8A/U3tHfCA+Airx9BKjSzNk97C6+WDAkk27kyW/KY8WY os+Pn3RWqk+dGtzo8gc8WazuZLqCL6dDy1LuU0OQ4VfVH6ymWf5s++xnkp4pp4ft13RH 1cpw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740420174; x=1741024974; 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=xwT//N+9nfh7P5Px11klS6FaPMqYvLp+fVr/05Baw3w=; b=cZ5XanaJK/07RoNO9WFY8MiidhNHamVsPxI43fWQ7Gtx/0XVejppQQSn/2fnrzyV9o wIYnD/pOgl7wWO+33rxhcWpADYjM+0Ml9x7nvzABHsqlqKKPEVKoww8ZZmySki4OMj/9 prc5bRwiuI3x0FnJq90vlp0i3tcAxDwE+Po6kLVMgTpiTnYBbjnw0l6vncaTKiCvU8x1 +gEOTDjv+ld3lz0DJeecBcr8Ols0+S7xYZW2TxxY60H3j7ZeUzapKTBbsaEi8iLmxG9v Q3nI1t3LrE7vPAfBJKKoYRJN1pAMddYuzJ+uOypYWstdODadp7jujkmxW27BUIFekKLV dKTQ== X-Gm-Message-State: AOJu0YzdkWRKr4Wm9ZaLV9wA+4P3sbnrRIwxTzqkkPd0kyOFfZ3NR/g4 oyek3RjF4A+4FhzNNOoaeZIF1c3h09sMHRCgJ5ty+9KC2cf6nLDx+nT1rLTo3x8= X-Gm-Gg: ASbGncvIKtBpM3IPZ8A07UYngoQWBR4Bt616q+4qiilsvXwtnsjaFAcA29uN49flJVu zrVkjfxilPADuGFm47j770wAOPQaHbZi6tv2ZgX6cLDfuXOtG6Pqc2xselRS7voa3oqRS3RMW5m qt1rUlzoCXSZHCoAqXYHAmCbSUPxo8LgPTe/SCw4zrDc9esIWW/ZL90pzH3rwDvX4IG3MjtNuB/ q2bt28OPnSSRMSABQZA4iRnGPFsDo5B5ARqCrCnohAiu0s9YBHmGSWZOIrIgGeMJKATo3ZivagS CZEqiIWU27osBsEpBvAKhYttRli3SODZp5X9X/DmRE2L X-Google-Smtp-Source: AGHT+IHg1obCVKFszbKO58ucl3S2uuTMPf5zZW6roBu4cVs9S04wje26rUs4hychmcu7wQV7//msbA== X-Received: by 2002:a17:902:d2c1:b0:21a:7e04:7021 with SMTP id d9443c01a7336-221a001fb74mr213193225ad.24.1740420173812; Mon, 24 Feb 2025 10:02:53 -0800 (PST) Received: from KASONG-MC4.tencent.com ([1.203.117.88]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-220d556e15esm184834695ad.190.2025.02.24.10.02.50 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Mon, 24 Feb 2025 10:02:53 -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 , Baolin Wang , Kalesh Singh , Matthew Wilcox , linux-kernel@vger.kernel.org, Kairui Song Subject: [PATCH v2 1/7] mm, swap: avoid reclaiming irrelevant swap cache Date: Tue, 25 Feb 2025 02:02:06 +0800 Message-ID: <20250224180212.22802-2-ryncsn@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250224180212.22802-1-ryncsn@gmail.com> References: <20250224180212.22802-1-ryncsn@gmail.com> Reply-To: Kairui Song MIME-Version: 1.0 X-Rspamd-Queue-Id: 998F340017 X-Stat-Signature: 73zx3cnh66rbc7kme8sxkfq1tmxcn949 X-Rspam-User: X-Rspamd-Server: rspam01 X-HE-Tag: 1740420175-420131 X-HE-Meta: U2FsdGVkX19i/74kPw9F2GPjAQWn8aukW3iY6KkeEf4Y+Dc0HQRrD7R4qdc84lq/1iiAM4HsFgu1qpB9o99aftzSy9ammIVZiJ9y0/DtBsfMnSC6uLBeSfctAtAO2tIphQQmqruyvVLdeNY8vrQVuNptYEtGTzWZXlniiF+M1fYOyiBDXjEW+/f8/OWhE3T7geKdv1Y4/ywqwQXlgtRjVi4fByXsvj5i348JyzLube4r2DcfCjF6vK/qDA7XTM8fNGvq2lqCE+Z5LUZJjpA5biCdf7q7BHkOBKSWOcMI5FBjdSLbZiqvkpZ09XFedxDPk814VyoPx42YcSg+Eg6+sxPf4gWsXZqk969EE32Qr0Z0cXK56PdeQ1wduANngcRJByHXGPZDJzjQokEBWLNHmujLw0Dik8ysTpQ6l0madbnQWqjUKjWOEd6gHE9y4GYZFyxaPXRuZ/SM2qWJWm6qJSVsQQZIpiRcZpvtephQPUD4h35JPkX7zKIKRq+Ftf2X6JrIuFrcVanHzq/m6P2jR8D2IPPCCmIsqJxPlVd8HCyWQxsavNZb8F/HWrUP8qEc2Ki+Vh3n898d+s7eSxsxTsYaC4t9msg/ZIKNRLeqcVe7ZbMSz5qUwX7bMIuYLa6jXKjBGm38QidDPCErofSJH6DYJvo9KWvFNV3dXdOK9YnavSYDfWm0gxEC0D+PXLPOi+f2af/D6saeKQM0Ojg7taAYmGYEEfUjYgJ6o3U6LxSvNnscCVBoQ1EvKuenDHCZ8m3xwkjBASXCMif+21KqDdH2I61d1q8MLgr10Zu8JzRfeY8yYn9kX25DcuqnL/4AeiiBK/VAXxBA42Rp+D19yRIQfwHzFKvRghkGAkG7hoTxpz5m3JSVwqXMH9kGVsPnQOsT4JXTC8Q1u2+ZNBb7JhgeTse0TUYQwxjsn8eeF8dwUww6lW50JvWKKMcwU8c95Hvb7QMKSSsE6/LnWgQ 7Zqe1/Ok eWz5q1zSnlcobB4/HSBs647Oun13Siiuvrz4v5io8yFfrsxvLDffCawQVWA2rsw/cTgYwEtUUBZFrK6PQrhxNIlqO2G+hnuAbTEuUFtHlqKPCcrroVV1Vh/O3K0E/SSluUBR6vdE4CrYtOW2fRWI7x4reHpwR31sf2QqUGcsKyFP9Mfc+MVDEgsQSm9XR19oUQboFt0gaqtkpkrVd0oUnHM083XLxlBaKxixV+qm+zFTIxtrv1LD5njHQFSJ95zurLj9ZGEtvOdLDbC2Pc8WYiCfFBtIVvGCgdwcjunCvvYS8+Lu5oZTLI2BTfrdL/TP2gxUUsb6ST684cQbJeCWOifvOvFDDYcovzOgUyJOMIMdnQovkKX/FnTDqv7FR5vHv0eRzyD+YXCWBKwIsyduDnESJZ5rWYqwHjJI08+P7z8cgZnbIxe2EZWtzljgjmILFJ2Fz4gY16aOEpfCPtk82JsLlYMI1U4rVp2jJnEJX3aNan3lfYI7oJpciqUviZAeAGVnH204On/kGLeZ5ne0myjTOka2QsUW6aEJTaiVVIJopQJKCwZ67Cct4XJDiOdYMvuEhpIw3aed7t8uZSSQzb+JmFg== 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 a7f60006c52c..5618cd1c4b03 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) ||