From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from out-179.mta1.migadu.com (out-179.mta1.migadu.com [95.215.58.179]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 522EE2DB794 for ; Sat, 18 Jul 2026 09:54:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.179 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784368477; cv=none; b=pDktsodZTfcyd6PC3eVwYst/UdBcUjJ5f0zrDB6A0iPyByeGfTL67yobftxtvsxzmTWZCVuD2SnPgKKJXM8aEnIaU9/qH1UOsFta+oaarG22B5EfyNNn7nxzpKjgc5i7yChyB6DZhHEhHmjpdYhNhfCYuyqzYNmUT44oEdKs7NQ= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784368477; c=relaxed/simple; bh=QR/d3aVXWxmvjUUKKplUp3vHqgVcUD4lvlF0VCUhPKo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=l+IZq9Jb5MUDqVQJ82FYoMm9gDbRJH6OuRklud6U6YLtEal9LEQgWqHX63iDX69/ZRXuPkiu/S7cpLtedHZzDub9qtyomkiIo9J2ZNfMfV3LACoSRyaxDIlfWMyPSzg7UQ6+iUgKPpeu5x0ss+P0QmN/4luDAlJ9CdQPB36ktOo= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=M7Vle5EV; arc=none smtp.client-ip=95.215.58.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="M7Vle5EV" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1784368474; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=lO66TrggiuQ7p/0nxBhsLlU4BVpMMd+j4O5LEqrNdrI=; b=M7Vle5EV7fSyEDSoDc+ub+hZJ3XzmI8D08hPQ1s2AY4Zl02x7O6gHYGeqlsko18gRj5k9U IF4I4rqrl66FhbTOGVq5U8370Pr9XfmY3he+nMUypFBj2+o3+CBSqGulu8qQpPwkZtbEnk rdM+9yOjIv+BB9DYU2Xmz9HTphMUJgQ= From: Ridong Chen To: akpm@linux-foundation.org Cc: hannes@cmpxchg.org, david@kernel.org, mhocko@kernel.org, qi.zheng@linux.dev, shakeel.butt@linux.dev, ljs@kernel.org, kasong@tencent.com, baohua@kernel.org, axelrasmussen@google.com, yuanchu@google.com, weixugc@google.com, hezhongkun.hzk@bytedance.com, muchun.song@linux.dev, dave@stgolabs.net, roman.gushchin@linux.dev, linux-mm@kvack.org, linux-kernel@vger.kernel.org, ridong.chen@linux.dev, Ridong Chen Subject: [PATCH v2 4/4] mm/mglru: fix anon-only reclaim evicting file pages when swappiness=max Date: Sat, 18 Jul 2026 17:52:51 +0800 Message-ID: <20260718095251.82937-5-ridong.chen@linux.dev> In-Reply-To: <20260718095251.82937-1-ridong.chen@linux.dev> References: <20260718095251.82937-1-ridong.chen@linux.dev> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Migadu-Flow: FLOW_OUT From: Ridong Chen The previous patch fixes this issue for the traditional LRU, which also exists in MGLRU [1]. Fix this by checking whether swappiness is SWAPPINESS_ANON_ONLY in get_swappiness() first, and returning 0 from get_nr_to_scan() when swappiness is SWAPPINESS_ANON_ONLY and anon pages cannot be reclaimed, to avoid useless work. The test result: Before fix: # cat /sys/kernel/mm/lru_gen/enabled 0x0007 # cat memory.stat anon 204800 file 67108864 ... pgsteal_proactive 0 pgscan_proactive 0 # echo "64M swappiness=max" > memory.reclaim # cat memory.stat anon 208896 file 0 ... pgsteal_proactive 16384 pgscan_proactive 16384 After fix: # cat memory.stat anon 188416 file 67215360 kernel 1970176 ... pgsteal_proactive 0 pgscan_proactive 0 # echo "64M swappiness=max" > memory.reclaim -bash: echo: write error: Resource temporarily unavailable # cat memory.stat anon 204800 file 67215360 ... pgsteal_proactive 0 pgscan_proactive 0 [1] https://sashiko.dev/#/patchset/20260717113300.214717-1-ridong.chen@linux.dev Fixes: 68a1436bde00 ("mm: add swappiness=max arg to memory.reclaim for only anon reclaim") Signed-off-by: Ridong Chen --- mm/vmscan.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/mm/vmscan.c b/mm/vmscan.c index e1ef6350a300..240b04f0a21a 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -2702,6 +2702,10 @@ static int get_swappiness(struct lruvec *lruvec, struct scan_control *sc) { struct mem_cgroup *memcg = lruvec_memcg(lruvec); struct pglist_data *pgdat = lruvec_pgdat(lruvec); + int swappiness = sc_swappiness(sc, memcg); + + if (swappiness == SWAPPINESS_ANON_ONLY) + return swappiness; if (!sc->may_swap) return 0; @@ -2710,7 +2714,7 @@ static int get_swappiness(struct lruvec *lruvec, struct scan_control *sc) mem_cgroup_get_nr_swap_pages(memcg) < MIN_LRU_BATCH) return 0; - return sc_swappiness(sc, memcg); + return swappiness; } static int get_nr_gens(struct lruvec *lruvec, int type) @@ -4915,6 +4919,14 @@ static long get_nr_to_scan(struct lruvec *lruvec, struct scan_control *sc, struct mem_cgroup *memcg, int swappiness) { unsigned long nr_to_scan, evictable; + struct pglist_data *pgdat = lruvec_pgdat(lruvec); + + /* Proactive reclaim: anon-only requested but anon is not reclaimable */ + if (swappiness == SWAPPINESS_ANON_ONLY && + !can_reclaim_anon_pages(memcg, pgdat->node_id, sc)) { + WARN_ON_ONCE(!sc->proactive); + return 0; + } evictable = lruvec_evictable_size(lruvec, swappiness); -- 2.43.0