From mboxrd@z Thu Jan 1 00:00:00 1970 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 809E2C282EC for ; Thu, 13 Mar 2025 17:01:28 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C5590280002; Thu, 13 Mar 2025 13:01:25 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id C04E4280001; Thu, 13 Mar 2025 13:01:25 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A8234280002; Thu, 13 Mar 2025 13:01:25 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 866D9280001 for ; Thu, 13 Mar 2025 13:01:25 -0400 (EDT) Received: from smtpin17.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 25B37C0341 for ; Thu, 13 Mar 2025 17:01:27 +0000 (UTC) X-FDA: 83217143814.17.7C8260A Received: from mail-pl1-f174.google.com (mail-pl1-f174.google.com [209.85.214.174]) by imf26.hostedemail.com (Postfix) with ESMTP id DA6B5140016 for ; Thu, 13 Mar 2025 17:01:20 +0000 (UTC) Authentication-Results: imf26.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=UWB1pJuh; spf=pass (imf26.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=1741885280; 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=nUQ+OrAh02CbWtjPdQxW9RlcKT1xdT7Rpo6ksTT/P0Y=; b=RdkmJhYmcy4x1Z/yf8tFG1iXVHPeAvQyWnhZNuJT3r2dwwJFE+FbuHYDx3UbPo4YV7mcVf +ka7+dgWvRej0opFHxzMRZYaJ/IQSbZN7h0DgYjcJfW6yxY9zeVv3H05AkNkIePW0ndAB6 1LI2EZEwTl9hphFDbBkYV6XFY9YFprY= ARC-Authentication-Results: i=1; imf26.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=UWB1pJuh; spf=pass (imf26.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=1741885280; a=rsa-sha256; cv=none; b=3jmnMMU7Hf1ZiM7k3JSEA8nKW+sl1p+GGox22E9HSjGkcVC5K/lqF3QCWwBIKB3eT/MTCR leaVhzLLUysjqcTDXBZrJ7FY+0aU2HD3MvtXBmL+5UOgf9kPGbuQ/1PBGO6ecpBgD3m4eU ymgYZlKOcsI6k0/B6Y48XkmTI2k2Ap8= Received: by mail-pl1-f174.google.com with SMTP id d9443c01a7336-223fb0f619dso24720765ad.1 for ; Thu, 13 Mar 2025 10:01:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741885279; x=1742490079; 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=nUQ+OrAh02CbWtjPdQxW9RlcKT1xdT7Rpo6ksTT/P0Y=; b=UWB1pJuhchL1y+ImVTFPPBYIixRSmT5WZemwsdsdQg1mlAVaGavNKvsUGiLGVIfmnf y8EOGLVYdkDcTIj0J08+YDeeCgvpLABK847tbwlcUnhLaMhKAuNMctvcwGEB5qlToJgk pNdr6ksgpmLiqJxrCS8pp5Zq2UzN0T+V2Dqc1NQUODz1lY19R6ywn7iVkzfyMJMWkVE6 SqPnPMkFb5IZHt8jVMiYqZl0wrZpP8K2rlfoZtR3Lur6RgSUXqLXcOp5a44KWtm56lHn MhgU1LVzKiAwb9ocuGO57Fs6V7zVq4ARVoeppArmeUqfgIYhv7TeOFtxLZi2zawWzKcz aDjQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741885279; x=1742490079; 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=nUQ+OrAh02CbWtjPdQxW9RlcKT1xdT7Rpo6ksTT/P0Y=; b=hxl2kqCDPftE2wOwA4eAATkoCiu/zRlz7COA9rZQosz+4Eh3Ie9t/koIP2SsS294DC keHwQ7HZFD59c4zzuuGlHRm5yFVXvcg6cgmtG8vCi6jB0426nrQrzijmjd8vIGWzr2K9 xQg7ei3PEsMqNtMvB6bC9yxKYC/SWqTUmOXqVCN/oeGY1OzVZO0Vx3E3LY+Af5Argz8B o7uX6wRb1oPT4fDTLgCj8n/yPCK8Wh0NWvnmjNw/ZxlofiLNgBXLPiR/qu3s9avU86mv k4AIYYScrsH6e3dFTm2Sck9jOvlI+Mla2D1AEXuE7Y2TE0lXwWuu4ZDI5TtqGeDI/DN0 o49Q== X-Gm-Message-State: AOJu0YyDd87m53YCi+MWtURbkJegXm0IU+yRQox0fwuFOHNVTypA65Mb 5dppS72zyqfQwnwiF+hcNdv9kCYywTfOoR40KWFvi/MLDwJKkLu7K1yinSfjiI0= X-Gm-Gg: ASbGnctZosDM1KnNpP09BcsvffazXNZNk1ZBB1XMPUlZ/N2m+0QictXd6Kmw984XtzQ vkaxpF6/zu6XRc12nrP0vyIFJQ1fuJEJ37LK0AFZxz+U0/nuzNxjFXIuILMX+PUJrTtUT1INQJs SF1fTObRAbEntZEGN4gL1o3t93ZRtfTewQg0htoQm5S3hQWXeI5VQ/Wq7MN7ScuCPlT2KY7sEbz CN5R7V5oPlhkd5six+R3boUQJrfoq/++Tu2gyJpE92TzHTNarbCibGuSx3y/VZFtakHKpEgTwUl IKkjVfO7UD2LXIunF9lkTDqvOZhjDIo9FxZh1gjN7HPpXqXStejCJUyQh0+aU3fTFw== X-Google-Smtp-Source: AGHT+IEtL0owIxoYlBZ71gxEIW/LFwX9S1V54rOpGhTHmxstlznzvgnxMsNk+OzJF8x7byESxSp3WQ== X-Received: by 2002:a17:903:1c8:b0:223:26da:4b8e with SMTP id d9443c01a7336-22592e21948mr178552515ad.4.1741885278863; Thu, 13 Mar 2025 10:01:18 -0700 (PDT) Received: from KASONG-MC4.tencent.com ([106.37.123.220]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7371167df0esm1613529b3a.93.2025.03.13.10.01.13 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Thu, 13 Mar 2025 10:01:18 -0700 (PDT) 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 v3 1/7] mm, swap: avoid reclaiming irrelevant swap cache Date: Fri, 14 Mar 2025 00:59:29 +0800 Message-ID: <20250313165935.63303-2-ryncsn@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250313165935.63303-1-ryncsn@gmail.com> References: <20250313165935.63303-1-ryncsn@gmail.com> Reply-To: Kairui Song MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspam-User: X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: DA6B5140016 X-Stat-Signature: bpkj87nkbs7j8qxtarmoyfhtpsixa3yi X-HE-Tag: 1741885280-284810 X-HE-Meta: U2FsdGVkX1+B3YxvuBAGLliXADa8JKPzHduzNAbcFceGam6Fu+NTvWI0whlmHorBn+FE53/fwbb4Hy24n7GlA/scaffWWaSFnP+navRshwUCSo7KIO10zk1xEHsmjiqN1kP+QoJZFq619tPtJrMA9vjb0D/x4NxN5oSLbexEIOy+zhHWYMXH69VC0hO/G3Fe2pY+tWd5dJ+vAOff/pd7cSEntqo3CKjvpqsUmHBw6WvoWk5naJ4C2QLg+8XG/aeFsUIpHEohk+9afOUHzIHFDRCwEKAOCZeN+QfUQUMYkJbmiMjUjGNWkz0UL7XjQGQd4yuzAsnUnOl6zwREhXsk8mC+zfy6epVLE98oOmi0pEQJf3tzB5TmY4B9khc/EFcskLiBQPic6aWMQUC+Hrkl2ONQi5Ym/2t/JH8CV01AVChCfSsGUNoZiwGp8snkzyrdKVrnDwiLa8MqOTyhMLZTeSBRKOMlxa9UPDtD9mr+AGtCVDJvLpmJ++l9oXLe8vd6C5bJSZscoJ0nqHdcrrrxqZJSPxk+ZG61NEuDw/HYY+4B5mwf6KEGbeSB7BuOZNFr4vKrFat++XprfOf6h10W0UTWWW1OTwG4AM1Erngjl3ozdRvRMd+l77sL0tIzB0RKxnNeGK1lB4XD2IXGflRydN+J+KHwQN6zdxVxzJAW1PlIo3LPHeJ6bK9aECTwKzsml4/qqmxsVXqLgi92EkbQOuzcVZkoDc5YWucx6mDhtTLajE2FS2A7Kvwa9anPEFpzgZQOU6p7v82FKNJLwA56i0skD1d+1Po01AUuzcGoCpUGZoHKrfX97iBItUSFizRpt6AI/0uTmi65ChzrmXajQS2AMR9GT6yzzK/sKJyNoJ9b9JO9qyFxsm33OVy7G2rgFWT50K09QmiZgcrOE5QUe91lnY2OZ3+is1HT16RPtmpqI+5Lwvf3LrFOHb7Ba41GGOKaAYSVXoPHT8YOa8b djsrMD68 DeC19DtbkjsnsDXBt87VuRfKrJX5rNLWJq32WzTT3cirdqAU5QC9aCgl98EYkS9u7htF0I+pVk/Imobw+H3nKM40JzM5PaCtYHmNIzSqdKUamOJPaHxbeQJWjCiYvCRJjUm+mryozn4KJeefUMqQ+telCGkZyWVtsn+eLxfwfctG5fo5IfbaQblJUW9PyRvm2tk4qlvOSWrkO8UITIB5k4bUqQbcEUGWNM5lH7tXOUWWcfI4GUQ+IzWAM4lhCI0hq2rOGPLr4ITFE4lxwQMYOpFCe7QnNEC0H09/6VSJx9dr84cshvOWpk38xNqFkfBiJ0gtb/d1SmL87CmUrfE3mtqyQ2sKgKRPXj7EBCK0tzui+se8Nhl4Iwt4f+LfONbX327EQQkcQcC1qFGV0wgdkLn7zxny+htHxrjNuBdvOCQQc4zUT0l5Cg4wbj2SIYP9by89z4N+bosKvdp76GmyhtaV2FB6tREfGWjDq1NQftJGSCNJueIloF4MvV2VC9Cpt52XLU94oCkepPMciHtjydSx0MlaDV/muBiuIu6W1LzQ0ycNVnFrB4Ppz/+QNQqbCWsUT0e/B7/yIP07TrChIhiN33g== 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) || -- 2.48.1