From patchwork Wed Mar 27 07:55:16 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "zhaoyang.huang" X-Patchwork-Id: 13605842 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 303D6C54E67 for ; Wed, 27 Mar 2024 07:55:58 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 829256B0095; Wed, 27 Mar 2024 03:55:57 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 7DA3B6B009A; Wed, 27 Mar 2024 03:55:57 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 6A17C6B009D; Wed, 27 Mar 2024 03:55:57 -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 585336B0095 for ; Wed, 27 Mar 2024 03:55:57 -0400 (EDT) Received: from smtpin15.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 26BBE1C0122 for ; Wed, 27 Mar 2024 07:55:57 +0000 (UTC) X-FDA: 81942060354.15.031A39F Received: from SHSQR01.spreadtrum.com (mx1.unisoc.com [222.66.158.135]) by imf09.hostedemail.com (Postfix) with ESMTP id 843F8140018 for ; Wed, 27 Mar 2024 07:55:54 +0000 (UTC) Authentication-Results: imf09.hostedemail.com; dkim=none; spf=pass (imf09.hostedemail.com: domain of zhaoyang.huang@unisoc.com designates 222.66.158.135 as permitted sender) smtp.mailfrom=zhaoyang.huang@unisoc.com; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1711526155; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding:in-reply-to: references; bh=ri/8XUbygCYe6IZY6niv8E0/1ho14PqcOraf07HYPAg=; b=las3Ti+/cBNks5XxcCqF6KR4zA0y4hoTosBDXbNxhpYM4q1MbiuRxxZIuYzbjHJgFiMwY/ oN7peLM61BgTp3RNXTL1cqtxtB/NEr3RIcDbar39IHPAzBbfiq15p0bJ2o7oFDI5WG6kc/ /apm8LAKqNjXFEPAS8YG8Km0OM9Gr48= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1711526155; a=rsa-sha256; cv=none; b=MlGZgxIz6TPEhMMgb1A9m/Xv0AM6cb1dy40LGVrvWVgtnJMEQD46JQH7idKK2/kgU1KwM3 eEg4fsBtjKhOcxbefK9t2dumjENKkQjB1D5bAJUXlliHy3rP2xCpBfZf6FL0W0bZ+6We8q HWUYE791uQJBwpvu4CroBtZ7MutkLJM= ARC-Authentication-Results: i=1; imf09.hostedemail.com; dkim=none; spf=pass (imf09.hostedemail.com: domain of zhaoyang.huang@unisoc.com designates 222.66.158.135 as permitted sender) smtp.mailfrom=zhaoyang.huang@unisoc.com; dmarc=none Received: from dlp.unisoc.com ([10.29.3.86]) by SHSQR01.spreadtrum.com with ESMTP id 42R7tMMt081647; Wed, 27 Mar 2024 15:55:22 +0800 (+08) (envelope-from zhaoyang.huang@unisoc.com) Received: from SHDLP.spreadtrum.com (bjmbx01.spreadtrum.com [10.0.64.7]) by dlp.unisoc.com (SkyGuard) with ESMTPS id 4V4Jnv0Sg0z2Klktn; Wed, 27 Mar 2024 15:53:39 +0800 (CST) Received: from bj03382pcu01.spreadtrum.com (10.0.73.40) by BJMBX01.spreadtrum.com (10.0.64.7) with Microsoft SMTP Server (TLS) id 15.0.1497.23; Wed, 27 Mar 2024 15:55:20 +0800 From: "zhaoyang.huang" To: Andrew Morton , Matthew Wilcox , Christoph Hellwig , , , Zhaoyang Huang , Subject: [PATCH] mm: get the folio's refcnt before clear PG_lru in folio_isolate_lru Date: Wed, 27 Mar 2024 15:55:16 +0800 Message-ID: <20240327075516.1367097-1-zhaoyang.huang@unisoc.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 X-Originating-IP: [10.0.73.40] X-ClientProxiedBy: SHCAS03.spreadtrum.com (10.0.1.207) To BJMBX01.spreadtrum.com (10.0.64.7) X-MAIL: SHSQR01.spreadtrum.com 42R7tMMt081647 X-Rspamd-Queue-Id: 843F8140018 X-Rspam-User: X-Stat-Signature: mqabid8udeangotiiexwdzj3e39cz5cm X-Rspamd-Server: rspam03 X-HE-Tag: 1711526154-618390 X-HE-Meta: U2FsdGVkX1+hkPfN8qVtYwFOw3ZmN2nUozpDUt3zwskw+jvGbwqG+qWgIPM3Ja/RY5Y/s0p4bRF9Y/xmlNXZAgM+U62RTxuRo5QEDdIiRytDROPv3Rj6ejgS/4X+MwO6tAnMeySZUkP+MK+U/8TpTwgbnaQ/CtvUFrBkS4V8R6uILC7sWSfsySzIAo5b8jICl95URHGUE7zwhu2eH7FBrX36Nr0s55Rbl43OrOdJaLf5QNjpqo8w6Boz7xp8N5xwLHrxLrKMMIMZDmdP3FKRqoB4zJnDO5kQ9f8cm0ggvJ3et3vGRe8aPWS4qvFVB4qN3pmE8C5/ggAbG0939SEPwbicd1NOLE7tMpWQ805SJVRMwuN2lGCFh6AiZUNQX4PgvDTZNjmeOs2AuHiSJpYYL8y+XymYehCN657tKatqlapdHbc0aoq1Po31eIvGoE3M7EitESy8xROdp6A7pGi0HZOAW3xq2vRQaozsk9X6vy0exRaVUZLemjHpTklOudeIXbvXdgQr/W6pc6m3MD/RZ4PvMuSa6O+cuETQV+p+kXg6qGTa0KIamx3WiGWyXLKAIYocC0Uae8B/GDWADULV8xT/n2C5sfeb/QC8wwhOvsiOlOn4679Os4Zu+PRhMCDp2Vu+AqiTpOXaIPky13jTmce/qhAlDGgf2g6SGDEezFr+mFP7Bh56VAuTdgwXsToPHIDZAMALp1sp4M1Vxbeb2bxf15JtV/MfZWriXdMAQN4x++4hdSbRal+iCe4g5tKdzaHUxuMPECr74PYMwnzi+RKP4j2BGZBGTXN4IwcfeWEKQwvo3md/GmxWpto1vX+2aBnAWYvQScxlFrvB4ebZvbNdgM9xrKlrxEt/oPE56fM= 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: Zhaoyang Huang Bellowing race happens when the caller of folio_isolate_lru rely on the refcnt of page cache. Moving folio_get ahead of folio_test_clear_lru to make it more robust. 0. Thread_isolate calls folio_isolate_lru by holding one refcnt of page cache and get preempted before folio_get. folio_isolate_lru VM_BUG_ON(!folio->refcnt) if (folio_test_clear_lru(folio)) folio_get() 1. Thread_release calls release_pages and meet the scenario of the folio get its refcnt of page cache removed before folio_put_testzero release_pages folio_put_testzero(folio) == true if(folio_test_clear_lru(folio)) lruvec_del_folio(folio) list_add(folio, pages_to_free); Signed-off-by: Zhaoyang Huang --- mm/vmscan.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mm/vmscan.c b/mm/vmscan.c index 3ef654addd44..42f15ca06e09 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -1731,10 +1731,10 @@ bool folio_isolate_lru(struct folio *folio) VM_BUG_ON_FOLIO(!folio_ref_count(folio), folio); + folio_get(folio); if (folio_test_clear_lru(folio)) { struct lruvec *lruvec; - folio_get(folio); lruvec = folio_lruvec_lock_irq(folio); lruvec_del_folio(lruvec, folio); unlock_page_lruvec_irq(lruvec);