From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pj1-f51.google.com (mail-pj1-f51.google.com [209.85.216.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0578823817E for ; Thu, 9 Jul 2026 14:52:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.51 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783608723; cv=none; b=W/UwcJY0r03HrXVcRs+sVSwrxYObHc/m0GtoqlmeCO8PcaBjgE6thZVebC+5tBgUfj5ZROMndNG4qtY8hdJeBAp/3CjsiFXA1CnyPWNJMz6n+SQLMfPpRhPdXLg4eYxLCiW0I5lBpmnM5MhSm3isI64GSBgodB29Jvbr/rLGWFo= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783608723; c=relaxed/simple; bh=2aWhzNwCb1BPCutP5oLGQCez7hpPKAKMLp03Caf1XA8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=SL9Ekc9unxfSVEIpmk9vdK1292m6C8CQxR0y9agJxkf7WmI36gqfWsvfv0V9pnq7vxCS1wMrY0xVGzWfKIjPsxiC1qApRi2UloBnTrCWu/n2ZM8uWod6pmt0hx0w3zGfx9ol/wEmSCRHb/5yAMacWv6CeKLwInH4aYj0i5dJSFY= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Dyxhg7J+; arc=none smtp.client-ip=209.85.216.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Dyxhg7J+" Received: by mail-pj1-f51.google.com with SMTP id 98e67ed59e1d1-383fff6e8b6so230674a91.0 for ; Thu, 09 Jul 2026 07:52:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783608721; x=1784213521; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=TomD5kQp4QDVC9gWt3p58S/rBPFQXp4PWIaI11lLUvQ=; b=Dyxhg7J+eRX9GjnoCLZSilWVAW3yQ+rCspOyMrKZPtGN5XTquiwjwcS7bHtDLb18rO iMmAiDDfQbZxJfWdo/nsMbzMZL+GvndWQdtXM/m9J729VnIyLldZjHOf/7i4mLX7VHRp xuqFFWYOxcx9224OKakmVmBSb1qUwZgZWeFOCFVxovxlC6roru1yR400TzALl8DXYAm9 PGw7WszWiwFMZFQ5WOMDNcHa4LLwFM2N2KkSRGf4yZ/4PBTDBs17520Og9vz3A319K0r RHi9v3s6Suolsf3BdrDJ7fmkEfJ8f66v7eYdQz6aehm5ZzxepIeysSckmqU/HNzXR1Df 57pw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783608721; x=1784213521; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=TomD5kQp4QDVC9gWt3p58S/rBPFQXp4PWIaI11lLUvQ=; b=L91Y3KdK5q1hy/zQBU1Zcyxqm5fYMQdMdpYfVM/zVxEQznLOv5EWp6RuO/4k3/g8tH RX4C33n0ukeGqDGCXerrzj2FhbjsX00BsP3KOKf+f6YVv9lU3APPmFPDpmaqcGz6Ioui s3Jxw2K6IKh3GZIgocjEEhYFz2qmyOXyh8avKShnre1HMKp77dhMH92tckUhl2JLAfsZ uFgk0J3wiKAUBpW1xy9FBi1zU6qi15pA7ErNLEkisBNyrMuZnsJ0YcPaTIEgTTg6t3qE ML1Qda0wmCvxFApk04dm0c2N2GsaRUqTQgLxE4tv/dp/YEs33o8v3JOxWuwWMs10blrk p87Q== X-Gm-Message-State: AOJu0YymwMaxHVsRYSxf1z+CXfufB2Sfx6CKQ6LZSB/uP0gg0jAORPko lG0jadPJAteWu7nBc6y50DIGCsf+0++BCudeywEqez+8jtBmGToqv2yv X-Gm-Gg: AfdE7clsbiq12T5Izj8oRWpU2wx/ksG9zMLk7AqxfVy8DQFPdNG8hGycTYTjvZw2XR0 +OJXOo6tPbtxfw1jiO6Cy9vPPgIBGltxMdWh6k/8HSC4TczHau0lMzHP+96HKqLm9aJlcNAJMhK UsMnv0Rwk7OHAKdE6JwrCsMWMokjqY5aRN2346+CSW1oGKQBoLyauFpTrlUxlE1ueQxVIzC0xLl yle65ckcqF44K+c/wyJZbjxbfmQP10hyqCiYdHdWpEqQ8gAw7nuBFVIJ3tZK0i8Dw5aD/6zyLW5 mwAZUZSl1CuYxHJEwoOh5B/ZMArA8NuW3yLS7i3MsWRNddxkKfxfSyAJ0E1zDIlo3OlROiwHL1t 6i0MjEEYUGKycG7ySBhhzJeIdUhNrT/z2JebYtMtVh19zFhzy1071zMqUvKqn2kK2/puhuR09Dq ok+ZB9WSVqR941IDH9JGEFO2kUtF6jnTjEls+R6aAj5VX7RC/HWM5AakQ01ZiA8dJrFvxLhd9Cx 8EvuvQ= X-Received: by 2002:a17:90b:37cc:b0:381:6cf0:d5f5 with SMTP id 98e67ed59e1d1-38a2122afafmr3620933a91.5.1783608721148; Thu, 09 Jul 2026 07:52:01 -0700 (PDT) Received: from debian.lan ([240e:391:ea3:6910:38e7:894b:82e3:a58b]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-38a57dc5820sm1286917a91.10.2026.07.09.07.51.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 09 Jul 2026 07:52:00 -0700 (PDT) From: Xueyuan Chen To: Andrew Morton , linux-mm@kvack.org Cc: linux-kernel@vger.kernel.org, cgroups@vger.kernel.org, Barry Song , Nanzhe Zhao , Johannes Weiner , Michal Hocko , Roman Gushchin , Shakeel Butt , Muchun Song , Chris Li , Kairui Song , Kemeng Shi , Nhat Pham , Baoquan He , Youngjun Park , David Hildenbrand , Lorenzo Stoakes , "Liam R . Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Qi Zheng , Axel Rasmussen , Yuanchu Xie , Wei Xu Subject: [RFC PATCH v2 3/3] mm/vmscan: avoid pointless large folio splits without swap Date: Thu, 9 Jul 2026 22:51:24 +0800 Message-ID: <20260709145124.764807-4-xueyuan.chen21@gmail.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260709145124.764807-1-xueyuan.chen21@gmail.com> References: <20260709145124.764807-1-xueyuan.chen21@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: "Barry Song (Xiaomi)" When swap is disabled, exhausted, or unavailable due to memcg swap limits, splitting a large anonymous folio cannot make swapout progress. The fallback only destroys the large folio and inflates split statistics. Use -E2BIG from folio_alloc_swap() as the explicit signal that splitting the folio might allow swapout of smaller pieces. For other allocation failures, keep the existing activation path and avoid the split. This preserves the split fallback for fragmented or partially available swap, while avoiding it when there is no backing space for any part of the folio. Reported-by: Nanzhe Zhao Signed-off-by: Barry Song (Xiaomi) --- mm/vmscan.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/mm/vmscan.c b/mm/vmscan.c index bd1b1aa12581..40340a88f78e 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -1260,6 +1260,8 @@ static unsigned int shrink_folio_list(struct list_head *folio_list, */ if (folio_test_anon(folio) && folio_test_swapbacked(folio) && !folio_test_swapcache(folio)) { + int ret; + if (!(sc->gfp_mask & __GFP_IO)) goto keep_locked; if (folio_maybe_dma_pinned(folio)) @@ -1278,10 +1280,11 @@ static unsigned int shrink_folio_list(struct list_head *folio_list, split_folio_to_list(folio, folio_list)) goto activate_locked; } - if (folio_alloc_swap(folio)) { + ret = folio_alloc_swap(folio); + if (ret) { int __maybe_unused order = folio_order(folio); - if (!folio_test_large(folio)) + if (!folio_test_large(folio) || ret != -E2BIG) goto activate_locked_split; /* Fallback to swap normal pages */ if (split_folio_to_list(folio, folio_list)) -- 2.47.3