From patchwork Thu Feb 1 10:08:34 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Liu Shixin X-Patchwork-Id: 13540822 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 D6EA0C47DDB for ; Thu, 1 Feb 2024 09:13:21 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 062B96B0081; Thu, 1 Feb 2024 04:13:19 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id F050E6B0082; Thu, 1 Feb 2024 04:13:18 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id DCCDB6B0083; Thu, 1 Feb 2024 04:13:18 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id C56AA6B0082 for ; Thu, 1 Feb 2024 04:13:18 -0500 (EST) Received: from smtpin15.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 6B71E40614 for ; Thu, 1 Feb 2024 09:13:18 +0000 (UTC) X-FDA: 81742671276.15.0754011 Received: from szxga08-in.huawei.com (szxga08-in.huawei.com [45.249.212.255]) by imf27.hostedemail.com (Postfix) with ESMTP id 9318E40005 for ; Thu, 1 Feb 2024 09:13:15 +0000 (UTC) Authentication-Results: imf27.hostedemail.com; dkim=none; dmarc=pass (policy=quarantine) header.from=huawei.com; spf=pass (imf27.hostedemail.com: domain of liushixin2@huawei.com designates 45.249.212.255 as permitted sender) smtp.mailfrom=liushixin2@huawei.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1706778796; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=VLe+pmmDVDfQp16VtG7VOulZ/4B50muaiac6o0Il8VA=; b=xI3KUPp662whYBNDf7LFHThHv+hbVQX0IlVzm1EFTch6zWMSbwPWTk7h+wNlPJMPj7i599 /jQyyrGDrrVA3+DR48IZvO81PKo8F+iDqZszCJ7iY9eAHfAnEz0TWvp1rEf50xg1jOmWb0 DGEhDGxtvq+hOTxiiiX+OAKbydNwE90= ARC-Authentication-Results: i=1; imf27.hostedemail.com; dkim=none; dmarc=pass (policy=quarantine) header.from=huawei.com; spf=pass (imf27.hostedemail.com: domain of liushixin2@huawei.com designates 45.249.212.255 as permitted sender) smtp.mailfrom=liushixin2@huawei.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1706778796; a=rsa-sha256; cv=none; b=eCqOkJqkKWbLf1KFWv7sw9ksGcx50BeCagvWQ3eABrmnsIfXTLonU5/VFTUx8kfTL51xOg rtPacxmxzakDun1YxYyo2tN3RQGFVStakDnaR2xuCcZg3HIdoLPWuJ/tiMD+u1D3s91ufD IR6MstmsjEDzR/HBQ8/38QUCB62fmAQ= Received: from mail.maildlp.com (unknown [172.19.163.174]) by szxga08-in.huawei.com (SkyGuard) with ESMTP id 4TQY7c3fSJz1Q8hG; Thu, 1 Feb 2024 17:11:56 +0800 (CST) Received: from dggpemd200004.china.huawei.com (unknown [7.185.36.141]) by mail.maildlp.com (Postfix) with ESMTPS id 971BA1401E0; Thu, 1 Feb 2024 17:13:09 +0800 (CST) Received: from huawei.com (10.175.113.32) by dggpemd200004.china.huawei.com (7.185.36.141) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.2.1258.28; Thu, 1 Feb 2024 17:13:09 +0800 From: Liu Shixin To: Alexander Viro , Christian Brauner , Jan Kara , Matthew Wilcox , Andrew Morton CC: , , , Liu Shixin Subject: [PATCH 1/2] mm/readahead: stop readahead loop if memcg charge fails Date: Thu, 1 Feb 2024 18:08:34 +0800 Message-ID: <20240201100835.1626685-2-liushixin2@huawei.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240201100835.1626685-1-liushixin2@huawei.com> References: <20240201100835.1626685-1-liushixin2@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.175.113.32] X-ClientProxiedBy: dggems703-chm.china.huawei.com (10.3.19.180) To dggpemd200004.china.huawei.com (7.185.36.141) X-Rspamd-Queue-Id: 9318E40005 X-Rspam-User: X-Rspamd-Server: rspam02 X-Stat-Signature: aump89jbtd5z736dx1oyocgbunos39bh X-HE-Tag: 1706778795-973447 X-HE-Meta: U2FsdGVkX1+MKkWIiRw6pyFam44REkLMRobsEtz1AEzRRMJPzTxj8E2RWBljHA/4n18RafBMjbDLmlRzOLHrSR0Z4POD+4IYygSasdAJ7aDhhgstq4L3y7w6tpk3ctr84cBJTF2w+XvP9Hqk7vsdi3XI42nN69x0wkZZ1uTp+mX2p0BnPi0O5+UNw78GL9IQYvKpzQXklhM4QemCN/95eL8EmimE4jI9LYQLtLQZaXMNx/th9apEQ50MMYpmmqLAMnl0F6ASrooBSAh/YlnJbMuKNaF2mD9BNUNt2Vg8sfO9xdjWh2fwVwhPlE7+pkXp4QXTrjkIt1cprAE0Q/p06w4VUVnj7bp+a7ZQwOORqFitjUz7S2nagZKP5qCZ8OXCFfGhStFkEFPBccxFJAUVkU6j4ynkbWNGu2f2g3lPCuosLsMoxgaaIdRmN4etEaXNSEVHLwznXtIEkLSrucPw2YSvTd5L7xnkb5nqnM+G6OmHx7i2kaxycvY79qaAOfKP5ZnBsLGTG8zODajJ9mDXzGZyiN0Ss5a2Ga+DJTMG2+tSl7670HWhVXMSeR7AisFsTnFfeP/ssR3QQzg7YnEIxgl9BmCKtRJLHmYnmdOn+23rCpTvRcAsr4xLqVPqedNoGtMs3TEipT0A846g7pwVMsWH5fZ5oMW2GgqCV7KA1UVr6v38OYMWUhJ/xm0dyq/EgzpRiyadGN2sFX++rH22MlfXlg4ycps1t0y/4a2v//gSEnqbc+91N7TqwLFgP+idJVP8pA0eDryimmAM89FsP2J8NsOaXsRFKe+I+UB9shUh5fKJpXK+fZGfGQf/CgHLC0zvHA0XQj8XM/sPhP/Y6bystk230oTzVDIfk328bP38TT4hwDuoKLGxzeKiFrz9mQGhgCEy0b1xAU+Dk45pslUjokHuALP9AKaMN83U+d8ay1tMUECkz+E92Dnk5H1swmo/aZSZmPRsmAwCX72 tOJeIkE4 87JL81Ysv8qM3kyP82B6KPu/awy4nPBgbi+qC3mAjXs53L04PgZW2s8WK3yO4QYOP5Vf5A82sS0J41YQIk/lbff4AShfNDICaF3nbCtll7sjQuGyxDO944IltDkPs44zLkK5xtj9Qe++k+Jw= 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: When a task in memcg readaheads file pages, page_cache_ra_unbounded() will try to readahead nr_to_read pages. Even if the new allocated page fails to charge, page_cache_ra_unbounded() still tries to readahead next page. This leads to too much memory reclaim. Stop readahead if mem_cgroup_charge() fails, i.e. add_to_page_cache_lru() returns -ENOMEM. Signed-off-by: Liu Shixin Signed-off-by: Jinjiang Tu Reviewed-by: Jan Kara --- mm/readahead.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/mm/readahead.c b/mm/readahead.c index 23620c57c1225..cc4abb67eb223 100644 --- a/mm/readahead.c +++ b/mm/readahead.c @@ -228,6 +228,7 @@ void page_cache_ra_unbounded(struct readahead_control *ractl, */ for (i = 0; i < nr_to_read; i++) { struct folio *folio = xa_load(&mapping->i_pages, index + i); + int ret; if (folio && !xa_is_value(folio)) { /* @@ -247,9 +248,12 @@ void page_cache_ra_unbounded(struct readahead_control *ractl, folio = filemap_alloc_folio(gfp_mask, 0); if (!folio) break; - if (filemap_add_folio(mapping, folio, index + i, - gfp_mask) < 0) { + + ret = filemap_add_folio(mapping, folio, index + i, gfp_mask); + if (ret < 0) { folio_put(folio); + if (ret == -ENOMEM) + break; read_pages(ractl); ractl->_index++; i = ractl->_index + ractl->_nr_pages - index - 1;