Received: by 2002:ac2:464d:0:0:0:0:0 with SMTP id s13csp3688424lfo; Mon, 23 May 2022 11:29:39 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwkbqhzWp2UEASKehjciiaMWMHDwSH9xIhGauzpH4BeddeTGw6Vf7t3q0xQ9t7kq3MKNS57 X-Received: by 2002:a17:902:e745:b0:161:ed86:30a6 with SMTP id p5-20020a170902e74500b00161ed8630a6mr18999781plf.102.1653330579440; Mon, 23 May 2022 11:29:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1653330579; cv=none; d=google.com; s=arc-20160816; b=gR1MPws50uIOgOKuxY798m9EB47m5GnJtv8jq4gsyPFqiZbX9y1XE2D1idkzzhO794 SLHa1Q2oEehhrQ/IygskwZmt6zzI1kSX5xDTToEZajjVFlo+aD8yUVi4pWkrEBXO8Ul0 CPRoCjmIjk9fpwDqwAYSrDHVDE54vncpu0LSIQVpsj2etbXWsi5FVyR1CchYJN5HMCsC TG6+x1z+ygggikDI0wogUp2fzRNj3e5V2UjoXJn7ERvyf5ndz1Rk2gI2DZpcUHyWGLzp kEEGni7D9o4Ue2nLQzX1mz2MK1sFxDRVdve5StoFz0Fa0BnmDgo49X0cQ3ZTmuKzw6hF aU5w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=oqjz+dgEL4QannYc28mBnRTe6zDJ35MNG7g//oWfmJ8=; b=F8N2tja+8Ptyi+9O0OPdjU78AHa4+PMbL5oYUpXq4vv6BPXC7l24k7lOIk4BF+RWk1 /MXqA/Uz0Oon65iOFiJyU4JuA64d9DVy+W+dUr+9LpXCU+biQGh1x8ZcBd4vYdf1DMA4 Uac3R6+8mgyjwv13d523JtScZlvMMqDMjT4u57GkXND5P8+3Jhd28CthKsNnb1chBERo SWMHGVn7ZrXl5dN4+ORho8bkadVf/AtLQa0qjdXEAC/QuMNhboh/kB8v/g/jx/bQWw+J G1x7/uwAXXJ2MeM/qPZW6FpKDggfwFGTAWk6i8zIlWg5rQ+sncvJQyqwNiD75lXipQJt Hdpg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=vQMCPerh; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [2620:137:e000::1:18]) by mx.google.com with ESMTPS id x16-20020a170902ec9000b00158643c240asi11918622plg.87.2022.05.23.11.29.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 May 2022 11:29:39 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) client-ip=2620:137:e000::1:18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=vQMCPerh; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id B853D134E36; Mon, 23 May 2022 11:29:20 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241765AbiEWRp0 (ORCPT + 99 others); Mon, 23 May 2022 13:45:26 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37312 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242877AbiEWR2I (ORCPT ); Mon, 23 May 2022 13:28:08 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 098908B0B6; Mon, 23 May 2022 10:24:42 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 04539B811FB; Mon, 23 May 2022 17:24:41 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 27C11C385A9; Mon, 23 May 2022 17:24:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1653326679; bh=BjLUN4csdZCLrnYxSslxYpcdSADwEQFWK4CgIkLut9g=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=vQMCPerhEVrYwOGMPR5V+ui/4IdiKi2YdOm6FuKhnWXbIkVD8Hp+FX+DkSLqFY1k7 NykmRTqTK0OTH6PghVartW+G/fxC2kCpNbOowum5jDNgYLQlU/OaiUTzcLEam3a7Iz t0zjzeSIQZXPyHYKO1Ze0H95eY+zm7Hng6mil5+M= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Andreas Gruenbacher , Sasha Levin Subject: [PATCH 5.17 026/158] gfs2: Disable page faults during lockless buffered reads Date: Mon, 23 May 2022 19:03:03 +0200 Message-Id: <20220523165834.860951526@linuxfoundation.org> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220523165830.581652127@linuxfoundation.org> References: <20220523165830.581652127@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RDNS_NONE,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Andreas Gruenbacher [ Upstream commit 52f3f033a5dbd023307520af1ff551cadfd7f037 ] During lockless buffered reads, filemap_read() holds page cache page references while trying to copy data to the user-space buffer. The calling process isn't holding the inode glock, but the page references it holds prevent those pages from being removed from the page cache, and that prevents the underlying inode glock from being moved to another node. Thus, we can end up in the same kinds of distributed deadlock situations as with normal (non-lockless) buffered reads. Fix that by disabling page faults during lockless reads as well. Signed-off-by: Andreas Gruenbacher Signed-off-by: Sasha Levin --- fs/gfs2/file.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/fs/gfs2/file.c b/fs/gfs2/file.c index fa071d738c78..c781c19303db 100644 --- a/fs/gfs2/file.c +++ b/fs/gfs2/file.c @@ -956,14 +956,16 @@ static ssize_t gfs2_file_read_iter(struct kiocb *iocb, struct iov_iter *to) return ret; iocb->ki_flags &= ~IOCB_DIRECT; } + pagefault_disable(); iocb->ki_flags |= IOCB_NOIO; ret = generic_file_read_iter(iocb, to); iocb->ki_flags &= ~IOCB_NOIO; + pagefault_enable(); if (ret >= 0) { if (!iov_iter_count(to)) return ret; written = ret; - } else { + } else if (ret != -EFAULT) { if (ret != -EAGAIN) return ret; if (iocb->ki_flags & IOCB_NOWAIT) -- 2.35.1