Received: by 2002:ac2:464d:0:0:0:0:0 with SMTP id s13csp3662375lfo; Mon, 23 May 2022 10:40:45 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxgvvLkYrGf3vjQUI4nhGIudapTxL/LbeKs126gSJte29xhJgZh9IJ2fPzok4dp/Nld0HVV X-Received: by 2002:a17:903:40cc:b0:162:7ca:d83b with SMTP id t12-20020a17090340cc00b0016207cad83bmr11781434pld.56.1653327644748; Mon, 23 May 2022 10:40:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1653327644; cv=none; d=google.com; s=arc-20160816; b=jcbhQCeDTjSK8UGFlEQkGKvvc9RGQrMAey0K7OSTYvbmhqc+jVEY5rcD+yr2v7fR/0 3fdNsBzqdEUbtfFMZXkw31WfCyhBxZ/27052COYD+PX3JYkOsK8qiv3G7kBqDh6LapjK Z6+dQBw1FDjG+Q6qD9jiUETU8C71H1gus0QWAXqUJlVRNR2/u/QeqCBhcDvm8mFx/i2B 66YyZ91uP7qHLfgvYCrZJoqPFM5oGy64wygsVm4YsyGEWsa8SNs9S2wlu1auUc2avzJS rIxUWF7TReGv2H66kv1XpJ/ia9R6O3yO/5pLpb7cqb6JUfjs0HUk+7PBibvNaq/HSadT fSGQ== 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=1tqfAu4+PeiAMKCpvAFqLgEm5DpVdKjhKQMSE9WePwY=; b=sWgn0iGv7m1I8dpRAtbAgBU8vKXG25zHoxTUzO3j6OiPDRJgQyvMcVPVmvvSMg0iaw g7KToUuwspzjFokf6xTXl6iRHwIhI1wB32fxAvUwITv+Uizh2eFmbU7BxCa3+A6lMvA9 UAOXW8yrA60NeQmBl/pIWUF7a0QLaT0aXAMKvAx5AwpM2IwMt2xw/OPW/4SbzgQuNYLl ivOqxSmarAxb+8v920OLJkqVtMpgNJOzVnrx0skDF6Raveq62HgXEHTv9aBNgRq3saA2 IYkpD8vBVyr36fypvE30KI4f6bxBgDYiT7wM+9XiSGBR2b8zx13mMnQcRNdGW0YvObbg W+Hw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=nbTKDHBz; 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 s188-20020a635ec5000000b003820d821f00si10883048pgb.473.2022.05.23.10.40.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 May 2022 10:40:44 -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=nbTKDHBz; 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 B26649A992; Mon, 23 May 2022 10:40:25 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237160AbiEWRjB (ORCPT + 99 others); Mon, 23 May 2022 13:39:01 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43388 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240617AbiEWRZu (ORCPT ); Mon, 23 May 2022 13:25:50 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [145.40.68.75]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2CB3522BD7; Mon, 23 May 2022 10:21:05 -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 B09A0B8121A; Mon, 23 May 2022 17:19:13 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id ED80BC385A9; Mon, 23 May 2022 17:19:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1653326352; bh=7ORnn3JFvU6w8aQU8L+UaweZmp4SFBZtU6G2YBLCw2A=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=nbTKDHBzxp0MYZSKJP4LJyzCEvvyrvOIQWmufEilzsT+uJosf4pf1/S01vUJiZ4Gq QoXGxz9YK59Sb9Al9c1hOR9KLyKQqbGL0ZJ6gpSwL4NG2k+YUszsZYbkbL+bsaH0ay fY0ikSQogY+uKXFfs7r6sQQ2JRh5Ikb4rq02scJc= 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.15 025/132] gfs2: Disable page faults during lockless buffered reads Date: Mon, 23 May 2022 19:03:54 +0200 Message-Id: <20220523165827.674753669@linuxfoundation.org> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220523165823.492309987@linuxfoundation.org> References: <20220523165823.492309987@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 eb5ea0262f3c..60390f9dc31f 100644 --- a/fs/gfs2/file.c +++ b/fs/gfs2/file.c @@ -963,14 +963,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