Received: by 2002:a25:1506:0:0:0:0:0 with SMTP id 6csp968679ybv; Wed, 19 Feb 2020 13:03:19 -0800 (PST) X-Google-Smtp-Source: APXvYqyOb+FG9MsidFN1MJIdEh8fs47BJTmYDkHjMrPxNpUIYrFWbcmtz8KwTiHuPE5I1whDDdvg X-Received: by 2002:a9d:7b4e:: with SMTP id f14mr21115302oto.355.1582146199807; Wed, 19 Feb 2020 13:03:19 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1582146199; cv=none; d=google.com; s=arc-20160816; b=1FjDeJiZAPMZFMEg0aL11vxwa5L8W5DbTVnkyH5xzBD6G5XZIEmXFGek5y32blt1fq O89dG3237C4vCsMNiZNGwWn/ddAPp+sy2p46JqzkbGNqKRYZVkDGvMscw0IskpY/IR2K FuRCobJoXB/onKMrILVL78YiqxpXncFl1Kk6flJR3E255Sj3/guQq3jbNZ+ASJBNJCG1 VxaD2UCWJK4jYiRmykt0tiZviIkdrpaxLWPBDLYIbjrA6gQn/eqT0mZzQq6tZLJ49gxU /loe7jmhdlYOqtWKvOIz/5WMZq8hAtzWsMopG96nc6ub+UgTEXkW05mvYE1Y2t7d+Kms naiA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=xVXe2mHxuFlpJauTFAREACgBtskK8JQqv16NulPdwMo=; b=c/KHDP9PSTO+48PrLIH7k0W9QlyrAyzE8ZQgYf4ceP3lcDy972J4ppAx5Sz3mPLA3I l9CnF1BeP7Ub9qzbVGEJNfY+XgPsgfqGG8BAjpdv72XaI74wvRl88Z8Q0KSo3WvGL6kH 7GfNYdpV9gtGxEP7aqxw+puxgadse3jjVn+7jZxp3WFs9SSSn+X+7SCWZckFOaiJJxk0 kuwiBgW2ZrMUKlyEMx3rJx5fm8NtgQzuxgNnCFLhXRv8hoC+1QX8UgyyK1rUX1Y7mBJk g+Jg7o6+TTkO4EXMf2lnbtGs7ZZ+Q3754EMLZZqWG6ItR//GJrA9XKFqvPLgPGqKfFb3 P6cg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@infradead.org header.s=bombadil.20170209 header.b=F3kXDDpZ; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id u21si510569otq.137.2020.02.19.13.03.08; Wed, 19 Feb 2020 13:03:19 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=fail header.i=@infradead.org header.s=bombadil.20170209 header.b=F3kXDDpZ; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728215AbgBSVCt (ORCPT + 99 others); Wed, 19 Feb 2020 16:02:49 -0500 Received: from bombadil.infradead.org ([198.137.202.133]:35924 "EHLO bombadil.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727649AbgBSVBG (ORCPT ); Wed, 19 Feb 2020 16:01:06 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20170209; h=Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender :Reply-To:Content-Type:Content-ID:Content-Description; bh=xVXe2mHxuFlpJauTFAREACgBtskK8JQqv16NulPdwMo=; b=F3kXDDpZ016zj77nzf3xs9HNhB c39hgvEiXMXpDmXJJghRyVbQMd9bQMtSAzeQLHly/ybPqD2ydVSEI4rkiaB9n4MrV5lJMO5TAOHpT LsA4+sqAh3sjH6idXLPtUndMdxvuT67kL2DMo4IotYTvlEvyNqU15dBP/gmtAHMJiYi1zlhefB+pQ okljimRMCao3QCzBUAxBJQKIRfcethiQohvU/9XCsH/VS+Vpp+HAgX2+R1ONMyFmghwTrN6Tmau8B beKkIxg+LolJhz+78XZwS7VZsuxlQ7gLLHa+AyMl78a/LXsGBf7EVWA8feUeASUtSsf4m1jAST6h0 JPdvTb6Q==; Received: from willy by bombadil.infradead.org with local (Exim 4.92.3 #3 (Red Hat Linux)) id 1j4WSv-0008Ve-Kf; Wed, 19 Feb 2020 21:01:05 +0000 From: Matthew Wilcox To: linux-fsdevel@vger.kernel.org Cc: "Matthew Wilcox (Oracle)" , linux-mm@kvack.org, linux-kernel@vger.kernel.org, linux-btrfs@vger.kernel.org, linux-erofs@lists.ozlabs.org, linux-ext4@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, ocfs2-devel@oss.oracle.com, linux-xfs@vger.kernel.org, Cong Wang , Michal Hocko Subject: [PATCH v7 24/24] mm: Use memalloc_nofs_save in readahead path Date: Wed, 19 Feb 2020 13:01:03 -0800 Message-Id: <20200219210103.32400-25-willy@infradead.org> X-Mailer: git-send-email 2.21.1 In-Reply-To: <20200219210103.32400-1-willy@infradead.org> References: <20200219210103.32400-1-willy@infradead.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: "Matthew Wilcox (Oracle)" Ensure that memory allocations in the readahead path do not attempt to reclaim file-backed pages, which could lead to a deadlock. It is possible, though unlikely this is the root cause of a problem observed by Cong Wang. Signed-off-by: Matthew Wilcox (Oracle) Reported-by: Cong Wang Suggested-by: Michal Hocko --- mm/readahead.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/mm/readahead.c b/mm/readahead.c index bbe7208fcc2d..9fb5f77dcf69 100644 --- a/mm/readahead.c +++ b/mm/readahead.c @@ -22,6 +22,7 @@ #include #include #include +#include #include "internal.h" @@ -186,6 +187,18 @@ void page_cache_readahead_unbounded(struct address_space *mapping, }; unsigned long i; + /* + * Partway through the readahead operation, we will have added + * locked pages to the page cache, but will not yet have submitted + * them for I/O. Adding another page may need to allocate memory, + * which can trigger memory reclaim. Telling the VM we're in + * the middle of a filesystem operation will cause it to not + * touch file-backed pages, preventing a deadlock. Most (all?) + * filesystems already specify __GFP_NOFS in their mapping's + * gfp_mask, but let's be explicit here. + */ + unsigned int nofs = memalloc_nofs_save(); + /* * Preallocate as many pages as we will need. */ @@ -230,6 +243,7 @@ void page_cache_readahead_unbounded(struct address_space *mapping, * will then handle the error. */ read_pages(&rac, &page_pool); + memalloc_nofs_restore(nofs); } EXPORT_SYMBOL_GPL(page_cache_readahead_unbounded); -- 2.25.0