Received: by 2002:a05:6a10:6d10:0:0:0:0 with SMTP id gq16csp785025pxb; Tue, 12 Apr 2022 13:23:38 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx5Z0OWAiE5Ma4mBbtkL+rKp6/lQGHSaGU5A1LaQRkerHMEA9bz/WNUmb1q3qvYjUvVhNxk X-Received: by 2002:a65:4681:0:b0:382:b4f5:84c2 with SMTP id h1-20020a654681000000b00382b4f584c2mr31799375pgr.218.1649795018537; Tue, 12 Apr 2022 13:23:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1649795018; cv=none; d=google.com; s=arc-20160816; b=vn4LgK+i0PdcDpnQ26tZPjEX7CwkEY0Vmr18ORF+Agff6F0JMclLQ42btQOQ0WvMbT 742sjXj5MvMF1dJ6c0jxZB6gXE4V39o9+CHsIX+OaxZOPwKxz/CYbVR0eEAcDdEOxuH2 Y6QDDa0bUHJDKKvG2aQStMORx0Hjz6LDalaMjoWSL3Tb77RMPKjMTbnoxA9eZKJiWCMB GXf0aeIYo4BSLZ6Uw37EiiEEKfgfHCfOy8D2nsZajsAufeS8bE9kcudQDtdRVIRfeb+D WMzdJMm5jVr3F8f9ZRmkcSS4AwjqXi2aTuj/crtw3LVsJ6PRmrCdZHBn/Ytk74je9/Kc r5YQ== 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=SHHKLne9t1LbRroIWeTjsQcQ5QDzeBMpGigUmknabx0=; b=FJKwIXJu/WPWQyD+uDnuvppoYtbqvAN3VaBERILCOYBZOlUk6B0kkV9zManyXRBchF DfnskDCZ9cG21qzyhUNvr4z1Cmb7pc7ahLIT0Cwdiy0x7fNZJWyOFJkDPPak/KZIs63M MzPqrsBcGhntdVTTyz1e9O80NTHKVYoMhGE7rxZKQAYNcmSzW6Dn663x+QzSM+jSaunx IsYaeGTQToK9+g4u2+bxfPK+mDmosCWeu4exuQbv06EjUJA7WG7PgZwwghkdZAuxrYok W0e6HCeaMwD0VHPCLKGvJxMQ+SWApYqPApNUPaaBEA0WxFm0z8RKanyHY1pY479e00gD 3hVQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=ev+fynPq; 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 c12-20020a170902724c00b00153b2d165c2si11464843pll.458.2022.04.12.13.23.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Apr 2022 13:23:38 -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=ev+fynPq; 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 4079BDE3; Tue, 12 Apr 2022 13:04:09 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1350785AbiDLGue (ORCPT + 99 others); Tue, 12 Apr 2022 02:50:34 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37760 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1350637AbiDLGmk (ORCPT ); Tue, 12 Apr 2022 02:42:40 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8CFA337A84; Mon, 11 Apr 2022 23:36:34 -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 dfw.source.kernel.org (Postfix) with ESMTPS id CBC0C618FF; Tue, 12 Apr 2022 06:36:33 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id DA017C385A1; Tue, 12 Apr 2022 06:36:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1649745393; bh=eXCTnhBMDSi9LGLaJX4Otpaaqm7MtAtgKEfyeEd7b9M=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ev+fynPqvlvPGuErqaX12CXmM8ODR2RPeFZs7b10m+5dPNcvfdaKdN+qm5YJjPid4 DJgX++SLBeZ1pw1Jhkfani28KotIxZCPZE/MXUBlRoSLiAndbbYOv6YQDrIILJEkPf OKsb1LCkwgY/eLIbZxGlqxjMGQD1lIu21zM7n0VY= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, NeilBrown , Trond Myklebust , Sasha Levin Subject: [PATCH 5.10 082/171] SUNRPC/call_alloc: async tasks mustnt block waiting for memory Date: Tue, 12 Apr 2022 08:29:33 +0200 Message-Id: <20220412062930.259731583@linuxfoundation.org> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220412062927.870347203@linuxfoundation.org> References: <20220412062927.870347203@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.0 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=no 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: NeilBrown [ Upstream commit c487216bec83b0c5a8803e5c61433d33ad7b104d ] When memory is short, new worker threads cannot be created and we depend on the minimum one rpciod thread to be able to handle everything. So it must not block waiting for memory. mempools are particularly a problem as memory can only be released back to the mempool by an async rpc task running. If all available workqueue threads are waiting on the mempool, no thread is available to return anything. rpc_malloc() can block, and this might cause deadlocks. So check RPC_IS_ASYNC(), rather than RPC_IS_SWAPPER() to determine if blocking is acceptable. Signed-off-by: NeilBrown Signed-off-by: Trond Myklebust Signed-off-by: Sasha Levin --- net/sunrpc/sched.c | 4 +++- net/sunrpc/xprtrdma/transport.c | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/net/sunrpc/sched.c b/net/sunrpc/sched.c index c045f63d11fa..6e4d476c6324 100644 --- a/net/sunrpc/sched.c +++ b/net/sunrpc/sched.c @@ -1012,8 +1012,10 @@ int rpc_malloc(struct rpc_task *task) struct rpc_buffer *buf; gfp_t gfp = GFP_NOFS; + if (RPC_IS_ASYNC(task)) + gfp = GFP_NOWAIT | __GFP_NOWARN; if (RPC_IS_SWAPPER(task)) - gfp = __GFP_MEMALLOC | GFP_NOWAIT | __GFP_NOWARN; + gfp |= __GFP_MEMALLOC; size += sizeof(struct rpc_buffer); if (size <= RPC_BUFFER_MAXSIZE) diff --git a/net/sunrpc/xprtrdma/transport.c b/net/sunrpc/xprtrdma/transport.c index 8e2368a0c2a2..fb7a0ab27899 100644 --- a/net/sunrpc/xprtrdma/transport.c +++ b/net/sunrpc/xprtrdma/transport.c @@ -572,8 +572,10 @@ xprt_rdma_allocate(struct rpc_task *task) gfp_t flags; flags = RPCRDMA_DEF_GFP; + if (RPC_IS_ASYNC(task)) + flags = GFP_NOWAIT | __GFP_NOWARN; if (RPC_IS_SWAPPER(task)) - flags = __GFP_MEMALLOC | GFP_NOWAIT | __GFP_NOWARN; + flags |= __GFP_MEMALLOC; if (!rpcrdma_check_regbuf(r_xprt, req->rl_sendbuf, rqst->rq_callsize, flags)) -- 2.35.1