From patchwork Tue Aug 24 17:51:03 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Olga Kornievskaia X-Patchwork-Id: 12455685 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 44871C432BE for ; Tue, 24 Aug 2021 18:02:07 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 2EF18610E6 for ; Tue, 24 Aug 2021 18:02:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238959AbhHXSCt (ORCPT ); Tue, 24 Aug 2021 14:02:49 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41922 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237105AbhHXSCn (ORCPT ); Tue, 24 Aug 2021 14:02:43 -0400 Received: from mail-qk1-x72a.google.com (mail-qk1-x72a.google.com [IPv6:2607:f8b0:4864:20::72a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 97C24C05340A for ; Tue, 24 Aug 2021 10:51:18 -0700 (PDT) Received: by mail-qk1-x72a.google.com with SMTP id a66so5340671qkc.1 for ; Tue, 24 Aug 2021 10:51:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=koi2dAiEUZGWQ61rcZsKU0jg5BRUtQ/tg2nRQ2aR2zE=; b=enVfT31jqUAud7b3MgK343g4uXuPgFNj2FDfP8ZadH6GmGvaEZQ4rqZsCQkOWtEEgk 1UOwotC2W3jEfeWH3RbmONsKdoRQayGeYhPPI6k53SsO8skWatAwP7fHRGpaxvX5NSBe /RM1IrGekDX06JGkwBh48pEGuJb0R4KHG7Iexq+n63IBisRcyO7o2voJCwGdzcTPpH4l S9xg1s7EPv9dHZ4wfIYt4GznGTsgaSixN+JARReIFZOspK/qTaeKwnsfGz3osRrCc0PI 8Ms7eBYCPn+MqeD3tvuMvJygh3n/Adlitr8C0PKSEqyPC31SRhCvXvqzJNxB1Z3brXxh utIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=koi2dAiEUZGWQ61rcZsKU0jg5BRUtQ/tg2nRQ2aR2zE=; b=ibRIiSSifTbWzHqyHn2d+brfFKl+aEt6eYZ8xomM+fe99jg5Jca2EO65w71pwQjab9 ZAfaNBFrq79YQ72alL6rxEoS4q3qW163/5HSXGuToyhogzqssqZqwWl8jZyYg7VNrw+7 uvSE9nyC08q7bV+29G9N4RVbzu7LqBgvPflve3IG7xccP5miz1oGAQWL0FLQTK+dloP4 tie3ZiVtJ6OQPwLxsR93S2L8oCdBPJds//jYAJZsyExXAV7lAJpmLpoAMcz0YRkhIm/2 ZuwqpZeBQZpcOp/o+P5qO6aQ7EaWYjXV5JwbYgTlKMTfzvDoVNDwyMGux8BWIqVa5MUM gqvw== X-Gm-Message-State: AOAM530JjxjB5CvYmw0gXzjINKhxlSNBg5o+94n80w8w8b7pmTvQU80g eZT7M3erPfhuF+gKSz2iDp3e2cJmnCenqA== X-Google-Smtp-Source: ABdhPJzj5CErqI+/v//a39GMx4tBeiTWQVsS9JqTifbV5FsdeMDB/IdvuCcIvTRu4C6pSu8ERU/NKA== X-Received: by 2002:a37:6697:: with SMTP id a145mr28269099qkc.5.1629827477761; Tue, 24 Aug 2021 10:51:17 -0700 (PDT) Received: from kolga-mac-1.vpn.netapp.com ([2600:1700:6a10:2e90:549b:da99:adb5:676c]) by smtp.gmail.com with ESMTPSA id n18sm11519658qkn.63.2021.08.24.10.51.16 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 24 Aug 2021 10:51:17 -0700 (PDT) From: Olga Kornievskaia To: trond.myklebust@hammerspace.com, anna.schumaker@netapp.com, steved@redhat.com Cc: linux-nfs@vger.kernel.org Subject: [PATCH v4 1/5] SUNRPC keep track of number of transports to unique addresses Date: Tue, 24 Aug 2021 13:51:03 -0400 Message-Id: <20210824175108.19746-2-olga.kornievskaia@gmail.com> X-Mailer: git-send-email 2.30.1 (Apple Git-130) In-Reply-To: <20210824175108.19746-1-olga.kornievskaia@gmail.com> References: <20210824175108.19746-1-olga.kornievskaia@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org From: Olga Kornievskaia Currently, xprt_switch keeps a number of all xprts (xps_nxprts) that were added to the switch regardless of whethere it's an nconnect transport or a transport to a trunkable address. Introduce a new counter to keep track of transports to unique destination addresses per xprt_switch. Signed-off-by: Olga Kornievskaia --- include/linux/sunrpc/xprtmultipath.h | 1 + net/sunrpc/clnt.c | 2 +- net/sunrpc/xprtmultipath.c | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/include/linux/sunrpc/xprtmultipath.h b/include/linux/sunrpc/xprtmultipath.h index b19addc8b715..bbb8a5fa0816 100644 --- a/include/linux/sunrpc/xprtmultipath.h +++ b/include/linux/sunrpc/xprtmultipath.h @@ -18,6 +18,7 @@ struct rpc_xprt_switch { unsigned int xps_id; unsigned int xps_nxprts; unsigned int xps_nactive; + unsigned int xps_nunique_destaddr_xprts; atomic_long_t xps_queuelen; struct list_head xps_xprt_list; diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c index a5b7f6e34d15..451ac7d031db 100644 --- a/net/sunrpc/clnt.c +++ b/net/sunrpc/clnt.c @@ -2799,7 +2799,7 @@ int rpc_clnt_test_and_add_xprt(struct rpc_clnt *clnt, task = rpc_call_null_helper(clnt, xprt, NULL, RPC_TASK_ASYNC, &rpc_cb_add_xprt_call_ops, data); - + data->xps->xps_nunique_destaddr_xprts++; rpc_put_task(task); success: return 1; diff --git a/net/sunrpc/xprtmultipath.c b/net/sunrpc/xprtmultipath.c index c60820e45082..1693f81aae37 100644 --- a/net/sunrpc/xprtmultipath.c +++ b/net/sunrpc/xprtmultipath.c @@ -139,6 +139,7 @@ struct rpc_xprt_switch *xprt_switch_alloc(struct rpc_xprt *xprt, xps->xps_iter_ops = &rpc_xprt_iter_singular; rpc_sysfs_xprt_switch_setup(xps, xprt, gfp_flags); xprt_switch_add_xprt_locked(xps, xprt); + xps->xps_nunique_destaddr_xprts = 1; rpc_sysfs_xprt_setup(xps, xprt, gfp_flags); } From patchwork Tue Aug 24 17:51:05 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Olga Kornievskaia X-Patchwork-Id: 12455683 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 30026C4320E for ; Tue, 24 Aug 2021 18:02:06 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 1351F610E6 for ; Tue, 24 Aug 2021 18:02:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240077AbhHXSCs (ORCPT ); Tue, 24 Aug 2021 14:02:48 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42738 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238959AbhHXSCo (ORCPT ); Tue, 24 Aug 2021 14:02:44 -0400 Received: from mail-qt1-x82d.google.com (mail-qt1-x82d.google.com [IPv6:2607:f8b0:4864:20::82d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B700CC05340C for ; Tue, 24 Aug 2021 10:51:20 -0700 (PDT) Received: by mail-qt1-x82d.google.com with SMTP id e15so17541856qtx.1 for ; Tue, 24 Aug 2021 10:51:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=t8C+GGrkuHZuCFx+eMpPXA1G1r6jwtJtqK4jsR12uQk=; b=jQhdyINnizSaMJaCWWONx1Iiu58miDDwYgXhQqVZ6Fyyl3PdPsZtPN8o5X61f9mTGZ HZ5UUSartqLgzEIJv7H6qKIx1O8dNeVSxt91/l2U6n/6FOSmGRlhzTyVl3v6yM6ZENcT jVFtCjESf/XpOxq0vxYJFKny2n92Fp3j0tT18RNLHqXS6v2tWasURaGt/GS5jVjtTfng bmvYwbDtZ/5+ehlEp5PK2IXNV//lDh13tHC/lllhlbuhRU5IQGp/oz8KOymgcpDBgwG9 AkC8igxFfkxzIZhZhlUi/hta4BL5DF4Oj0yw/pG0ylU4CKzFfDSeDxvFr9bik43DjLCd j4EQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=t8C+GGrkuHZuCFx+eMpPXA1G1r6jwtJtqK4jsR12uQk=; b=PkP20fIacTgGEdXmrMTfWBgQKac3v3Ei3l8QNY9TZI3WL+2s8AzN+/N3TM5QiJb92M EtT5xuK3dDWBFCZG5QQCO/V1ulO78l3JQMsmhUypJGj5z5ttzpb3oiVhcxkgE+vtNZ+I Q/NUVa5zVcnMywMI4gwZF5OPCePFehkocWO8KshW8erzZk4A3t52/RBY8KCWsEWQrtBp ljX5A0qA8RI8NEtulhlkN+wljD9vjXX0UxO8ppXYm+lgKVWr6gQ24nZGTGFAWD12PPBj PLZp9psfQdWlrfMlORYPOhYvIx/gdc05/BHbsr3ugblvZiklbZK8Oq9TaYQJdKR4ncfK wRnA== X-Gm-Message-State: AOAM533rjTm59P92e3CTYgO9ugDVXrIiZ+r2trxZ+NxdepTKTdANh1AI xBK5EBVnKKcqaOl6d3Nx55BFySSn2V2ODg== X-Google-Smtp-Source: ABdhPJwsAZ1O33jVKxNjBZw8baERdAcFzz59gNYZmY+k/pZpp0xS2WM2stAxMLBJtFvX6PhppvEp/g== X-Received: by 2002:aed:3082:: with SMTP id 2mr36496649qtf.98.1629827479882; Tue, 24 Aug 2021 10:51:19 -0700 (PDT) Received: from kolga-mac-1.vpn.netapp.com ([2600:1700:6a10:2e90:549b:da99:adb5:676c]) by smtp.gmail.com with ESMTPSA id n18sm11519658qkn.63.2021.08.24.10.51.18 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 24 Aug 2021 10:51:19 -0700 (PDT) From: Olga Kornievskaia To: trond.myklebust@hammerspace.com, anna.schumaker@netapp.com, steved@redhat.com Cc: linux-nfs@vger.kernel.org Subject: [PATCH v4 2/5] SUNRPC add xps_nunique_destaddr_xprts to xprt_switch_info in sysfs Date: Tue, 24 Aug 2021 13:51:05 -0400 Message-Id: <20210824175108.19746-4-olga.kornievskaia@gmail.com> X-Mailer: git-send-email 2.30.1 (Apple Git-130) In-Reply-To: <20210824175108.19746-1-olga.kornievskaia@gmail.com> References: <20210824175108.19746-1-olga.kornievskaia@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org From: Olga Kornievskaia In sysfs's xprt_switch_info attribute also display the value of number of transports with unique destination addresses for this xprt_switch. Signed-off-by: Olga Kornievskaia --- net/sunrpc/sysfs.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/net/sunrpc/sysfs.c b/net/sunrpc/sysfs.c index 414c664a3199..9a6f17e18f73 100644 --- a/net/sunrpc/sysfs.c +++ b/net/sunrpc/sysfs.c @@ -207,8 +207,10 @@ static ssize_t rpc_sysfs_xprt_switch_info_show(struct kobject *kobj, if (!xprt_switch) return 0; - ret = sprintf(buf, "num_xprts=%u\nnum_active=%u\nqueue_len=%ld\n", + ret = sprintf(buf, "num_xprts=%u\nnum_active=%u\n" + "num_unique_destaddr=%u\nqueue_len=%ld\n", xprt_switch->xps_nxprts, xprt_switch->xps_nactive, + xprt_switch->xps_nunique_destaddr_xprts, atomic_long_read(&xprt_switch->xps_queuelen)); xprt_switch_put(xprt_switch); return ret + 1; From patchwork Tue Aug 24 17:51:06 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Olga Kornievskaia X-Patchwork-Id: 12455689 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B8BDFC4320A for ; Tue, 24 Aug 2021 18:02:07 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id A5B28610D0 for ; Tue, 24 Aug 2021 18:02:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237105AbhHXSCu (ORCPT ); Tue, 24 Aug 2021 14:02:50 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42634 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239014AbhHXSCo (ORCPT ); Tue, 24 Aug 2021 14:02:44 -0400 Received: from mail-qt1-x82f.google.com (mail-qt1-x82f.google.com [IPv6:2607:f8b0:4864:20::82f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D6105C05340D for ; Tue, 24 Aug 2021 10:51:21 -0700 (PDT) Received: by mail-qt1-x82f.google.com with SMTP id g11so17521822qtk.5 for ; Tue, 24 Aug 2021 10:51:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=zo4TDIEYdHuube7ARu42vguc1kT5xIUZHuSRtmn9BqY=; b=FJxpTi8geLoqKsKLIcexjf6waudZ8cyg4btxviA4hy3Sv2Wcfpg9Iy3r4D5KmK2BMv 2dRH0FHAY/vjSIDie8uNaDqeTq71Vmw4BMUYtMRFhHksBBxDNDJaAAK7GeiYQJQTbUb0 mYideWXp7XPR/DnhWhJM0OpThru1X0zM8xF1rnJ9C/OjrnrW4C1Xq8mQStmXxc58MGP5 oTKhp38JmFJT4bdwTiVJ2FXhIujIlwUExmK/pUMmKatRW681PnIn2xLrvvpbAPW756+D BaYxZPmR0QD9+pVVizX2invHkJ7vi34B7nXp46UPmIKm1q6OJ4aBTP8729R+F/CaBUTY HQ1w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=zo4TDIEYdHuube7ARu42vguc1kT5xIUZHuSRtmn9BqY=; b=MYP0wX/zX1SzkMt/lppzr+yUKCfkaWGgPvNVNPKSUPf2w9HDKAURyiTHRYJ5/LdZ3s A2v3FAcHmZTq9a4NrnftzyCkBgC0eIIsuZgghKp4AeLfwAbeNEn0TxReb9F3i2Aj5XfI e+CAxwtphMcdL1S1XWIBa2Mt0Z4LWvZqaZyr0t8DoenP2D2K2rxk0HdWMGVbeVAayIl5 3sjfcA7qLFyqu+ks65DQ0NVY95DGEXPR4VnDj/2ebGkRPAw3KeBvqg2pHUs90LOHpM3A 2nQCjvNxfd7784b9GsDQyqOoy2nBfg0Yl6e0qquRIqOFRSmFo0RXRmAVASiZWDQmHDfC 7SAw== X-Gm-Message-State: AOAM531N0jDtPBOQQVCX56R4Br52TP6sKeSNtuYw4sJxxmBecU7HOG4/ v2Nsz2Qof5HkhJ5spmQnYfc= X-Google-Smtp-Source: ABdhPJyctZE/adiL8YeDHaJRJGaUSaHtfExuN76InTUTu3kN7ajKpVkQuIZxPXV9YnzPYhvNkCMRhQ== X-Received: by 2002:ac8:73d8:: with SMTP id v24mr1496538qtp.203.1629827480960; Tue, 24 Aug 2021 10:51:20 -0700 (PDT) Received: from kolga-mac-1.vpn.netapp.com ([2600:1700:6a10:2e90:549b:da99:adb5:676c]) by smtp.gmail.com with ESMTPSA id n18sm11519658qkn.63.2021.08.24.10.51.19 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 24 Aug 2021 10:51:20 -0700 (PDT) From: Olga Kornievskaia To: trond.myklebust@hammerspace.com, anna.schumaker@netapp.com, steved@redhat.com Cc: linux-nfs@vger.kernel.org Subject: [PATCH v4 3/5] NFSv4 introduce max_connect mount options Date: Tue, 24 Aug 2021 13:51:06 -0400 Message-Id: <20210824175108.19746-5-olga.kornievskaia@gmail.com> X-Mailer: git-send-email 2.30.1 (Apple Git-130) In-Reply-To: <20210824175108.19746-1-olga.kornievskaia@gmail.com> References: <20210824175108.19746-1-olga.kornievskaia@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org From: Olga Kornievskaia This option will control up to how many xprts can the client establish to the server with a distinct address (that means nconnect connections are not counted towards this new limit). This patch is setting up nfs structures to keeep track of the max_connect limit (does not enforce it). The default value is kept at 1 so that no current mounts that don't want any additional connections would be effected. The maximum value is set at 16. Mounts to DS are not limited to default value of 1 but instead set to the maximum default value of 16 (NFS_MAX_TRANSPORTS). Signed-off-by: Olga Kornievskaia --- fs/nfs/client.c | 1 + fs/nfs/fs_context.c | 7 +++++++ fs/nfs/internal.h | 2 ++ fs/nfs/nfs4client.c | 12 ++++++++++-- fs/nfs/super.c | 2 ++ include/linux/nfs_fs.h | 5 +++++ include/linux/nfs_fs_sb.h | 1 + 7 files changed, 28 insertions(+), 2 deletions(-) diff --git a/fs/nfs/client.c b/fs/nfs/client.c index 330f65727c45..486dec59972b 100644 --- a/fs/nfs/client.c +++ b/fs/nfs/client.c @@ -179,6 +179,7 @@ struct nfs_client *nfs_alloc_client(const struct nfs_client_initdata *cl_init) clp->cl_proto = cl_init->proto; clp->cl_nconnect = cl_init->nconnect; + clp->cl_max_connect = cl_init->max_connect ? cl_init->max_connect : 1; clp->cl_net = get_net(cl_init->net); clp->cl_principal = "*"; diff --git a/fs/nfs/fs_context.c b/fs/nfs/fs_context.c index d95c9a39bc70..0d444a90f513 100644 --- a/fs/nfs/fs_context.c +++ b/fs/nfs/fs_context.c @@ -60,6 +60,7 @@ enum nfs_param { Opt_mountvers, Opt_namelen, Opt_nconnect, + Opt_max_connect, Opt_port, Opt_posix, Opt_proto, @@ -158,6 +159,7 @@ static const struct fs_parameter_spec nfs_fs_parameters[] = { fsparam_u32 ("mountvers", Opt_mountvers), fsparam_u32 ("namlen", Opt_namelen), fsparam_u32 ("nconnect", Opt_nconnect), + fsparam_u32 ("max_connect", Opt_max_connect), fsparam_string("nfsvers", Opt_vers), fsparam_u32 ("port", Opt_port), fsparam_flag_no("posix", Opt_posix), @@ -770,6 +772,11 @@ static int nfs_fs_context_parse_param(struct fs_context *fc, goto out_of_bounds; ctx->nfs_server.nconnect = result.uint_32; break; + case Opt_max_connect: + if (result.uint_32 < 1 || result.uint_32 > NFS_MAX_TRANSPORTS) + goto out_of_bounds; + ctx->nfs_server.max_connect = result.uint_32; + break; case Opt_lookupcache: switch (result.uint_32) { case Opt_lookupcache_all: diff --git a/fs/nfs/internal.h b/fs/nfs/internal.h index a36af04188c2..66fc936834f2 100644 --- a/fs/nfs/internal.h +++ b/fs/nfs/internal.h @@ -67,6 +67,7 @@ struct nfs_client_initdata { int proto; u32 minorversion; unsigned int nconnect; + unsigned int max_connect; struct net *net; const struct rpc_timeout *timeparms; const struct cred *cred; @@ -121,6 +122,7 @@ struct nfs_fs_context { int port; unsigned short protocol; unsigned short nconnect; + unsigned short max_connect; unsigned short export_path_len; } nfs_server; diff --git a/fs/nfs/nfs4client.c b/fs/nfs/nfs4client.c index 28431acd1230..270caa1805a2 100644 --- a/fs/nfs/nfs4client.c +++ b/fs/nfs/nfs4client.c @@ -865,6 +865,7 @@ static int nfs4_set_client(struct nfs_server *server, const char *ip_addr, int proto, const struct rpc_timeout *timeparms, u32 minorversion, unsigned int nconnect, + unsigned int max_connect, struct net *net) { struct nfs_client_initdata cl_init = { @@ -883,6 +884,8 @@ static int nfs4_set_client(struct nfs_server *server, if (minorversion == 0) __set_bit(NFS_CS_REUSEPORT, &cl_init.init_flags); + else + cl_init.max_connect = max_connect; if (proto == XPRT_TRANSPORT_TCP) cl_init.nconnect = nconnect; @@ -952,8 +955,10 @@ struct nfs_client *nfs4_set_ds_client(struct nfs_server *mds_srv, return ERR_PTR(-EINVAL); cl_init.hostname = buf; - if (mds_clp->cl_nconnect > 1 && ds_proto == XPRT_TRANSPORT_TCP) + if (mds_clp->cl_nconnect > 1 && ds_proto == XPRT_TRANSPORT_TCP) { cl_init.nconnect = mds_clp->cl_nconnect; + cl_init.max_connect = NFS_MAX_TRANSPORTS; + } if (mds_srv->flags & NFS_MOUNT_NORESVPORT) __set_bit(NFS_CS_NORESVPORT, &cl_init.init_flags); @@ -1122,6 +1127,7 @@ static int nfs4_init_server(struct nfs_server *server, struct fs_context *fc) &timeparms, ctx->minorversion, ctx->nfs_server.nconnect, + ctx->nfs_server.max_connect, fc->net_ns); if (error < 0) return error; @@ -1211,6 +1217,7 @@ struct nfs_server *nfs4_create_referral_server(struct fs_context *fc) parent_server->client->cl_timeout, parent_client->cl_mvops->minor_version, parent_client->cl_nconnect, + parent_client->cl_max_connect, parent_client->cl_net); if (!error) goto init_server; @@ -1226,6 +1233,7 @@ struct nfs_server *nfs4_create_referral_server(struct fs_context *fc) parent_server->client->cl_timeout, parent_client->cl_mvops->minor_version, parent_client->cl_nconnect, + parent_client->cl_max_connect, parent_client->cl_net); if (error < 0) goto error; @@ -1323,7 +1331,7 @@ int nfs4_update_server(struct nfs_server *server, const char *hostname, error = nfs4_set_client(server, hostname, sap, salen, buf, clp->cl_proto, clnt->cl_timeout, clp->cl_minorversion, - clp->cl_nconnect, net); + clp->cl_nconnect, clp->cl_max_connect, net); clear_bit(NFS_MIG_TSM_POSSIBLE, &server->mig_status); if (error != 0) { nfs_server_insert_lists(server); diff --git a/fs/nfs/super.c b/fs/nfs/super.c index fe58525cfed4..e65c83494c05 100644 --- a/fs/nfs/super.c +++ b/fs/nfs/super.c @@ -480,6 +480,8 @@ static void nfs_show_mount_options(struct seq_file *m, struct nfs_server *nfss, if (clp->cl_nconnect > 0) seq_printf(m, ",nconnect=%u", clp->cl_nconnect); if (version == 4) { + if (clp->cl_max_connect > 1) + seq_printf(m, ",max_connect=%u", clp->cl_max_connect); if (nfss->port != NFS_PORT) seq_printf(m, ",port=%u", nfss->port); } else diff --git a/include/linux/nfs_fs.h b/include/linux/nfs_fs.h index ce6474594872..b9a8b925db43 100644 --- a/include/linux/nfs_fs.h +++ b/include/linux/nfs_fs.h @@ -40,6 +40,11 @@ #include +/* + * These are the default for number of transports to different server IPs + */ +#define NFS_MAX_TRANSPORTS 16 + /* * These are the default flags for swap requests */ diff --git a/include/linux/nfs_fs_sb.h b/include/linux/nfs_fs_sb.h index d71a0e90faeb..2a9acbfe00f0 100644 --- a/include/linux/nfs_fs_sb.h +++ b/include/linux/nfs_fs_sb.h @@ -62,6 +62,7 @@ struct nfs_client { u32 cl_minorversion;/* NFSv4 minorversion */ unsigned int cl_nconnect; /* Number of connections */ + unsigned int cl_max_connect; /* max number of xprts allowed */ const char * cl_principal; /* used for machine cred */ #if IS_ENABLED(CONFIG_NFS_V4) From patchwork Tue Aug 24 17:51:07 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Olga Kornievskaia X-Patchwork-Id: 12455687 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 22B54C43216 for ; Tue, 24 Aug 2021 18:02:08 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 0E1CF610D0 for ; Tue, 24 Aug 2021 18:02:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235283AbhHXSCv (ORCPT ); Tue, 24 Aug 2021 14:02:51 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41838 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239238AbhHXSCp (ORCPT ); Tue, 24 Aug 2021 14:02:45 -0400 Received: from mail-qk1-x72e.google.com (mail-qk1-x72e.google.com [IPv6:2607:f8b0:4864:20::72e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E8A17C05340F for ; Tue, 24 Aug 2021 10:51:22 -0700 (PDT) Received: by mail-qk1-x72e.google.com with SMTP id t190so24116429qke.7 for ; Tue, 24 Aug 2021 10:51:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=F8KcYL9V8Gr9TmhS+STckBBjAx/nEA/AO9iMBAsiRX0=; b=J7IBXC/AbOW3ZE5+mfYj2rLHOqSN1oRcimkFJ8BZsbU8JSos5nW871cdb7ApRAP/3W XGlEY0v+yJGL1effzfRtl6ofwbtHG72skguUIh9VWdikeREc/eC3PMwVMXGb/fB2kxw0 h681E6+wZ2Y2GSpL0vcXzu1G/1+TbgEByezQwZnM8JNQ6sgi+uSKoFkFKJn5ukua94Ie krSMlu7EMHBOFdFwRIeizvpFzXvQN6AroIQ0Fd47XjknXq++kGELTNXmRUjpskOFEtd3 qo+PxTiA6eilc5rfbxW5IFZVQEuNSDLpTKFl8j65DS0cI09cuAz59Y/EvRrLdhO92wiW mYjw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=F8KcYL9V8Gr9TmhS+STckBBjAx/nEA/AO9iMBAsiRX0=; b=Teyutpn7FRp0JrqsYmCnUJ5icq/UxI+KopflFe8adKaWqaLGeuf2eSp6xILy22DyVZ u9+cPICo8wx0sy2Dc1nQQkjxrUSlcljnQSNKGQL2IL5oOhMtmAhKYTrOfhgW6j8uI43T PQHT9QwvniovkGDdKQVcbuiMJGCcTEngHa4eqPRR6+upnQzb7DP64scjUm+0fNKxX4xD J9c50UBZx/YHAgfz8eaBxzEOeLSj3vw7iDu0CKgMl4zf4KuoQheLuFBoR8+EdwFBRnEN DzMl0E1lvfLfd1YiYOVh351UBtHoLoVk4cFTW638AldMNO4RqeaFlravpvOu3FBmP/wD N/dg== X-Gm-Message-State: AOAM531r8v58voO2uvaOfgI66R2oY5aB0nxA1JNSJrZscuwiD9+Bf9bu 9iBVjyRg048os83y2wU8C2Q= X-Google-Smtp-Source: ABdhPJzYQGxWU4jQ6okymIejvcexdccpJdi7lSmChetp2sE4SBSEDhr4VRx5MwFqtFi4Jat84EsRqQ== X-Received: by 2002:a37:2ec1:: with SMTP id u184mr27566745qkh.500.1629827482065; Tue, 24 Aug 2021 10:51:22 -0700 (PDT) Received: from kolga-mac-1.vpn.netapp.com ([2600:1700:6a10:2e90:549b:da99:adb5:676c]) by smtp.gmail.com with ESMTPSA id n18sm11519658qkn.63.2021.08.24.10.51.21 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 24 Aug 2021 10:51:21 -0700 (PDT) From: Olga Kornievskaia To: trond.myklebust@hammerspace.com, anna.schumaker@netapp.com, steved@redhat.com Cc: linux-nfs@vger.kernel.org Subject: [PATCH v4 4/5] SUNRPC enforce creation of no more than max_connect xprts Date: Tue, 24 Aug 2021 13:51:07 -0400 Message-Id: <20210824175108.19746-6-olga.kornievskaia@gmail.com> X-Mailer: git-send-email 2.30.1 (Apple Git-130) In-Reply-To: <20210824175108.19746-1-olga.kornievskaia@gmail.com> References: <20210824175108.19746-1-olga.kornievskaia@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org From: Olga Kornievskaia If we are adding new transports via rpc_clnt_test_and_add_xprt() then check if we've reached the limit. Currently only pnfs path adds transports via that function but this is done in preparation when the client would add new transports when session trunking is detected. A warning is logged if the limit is reached. Signed-off-by: Olga Kornievskaia Reported-by: kernel test robot --- fs/nfs/client.c | 1 + include/linux/sunrpc/clnt.h | 2 ++ net/sunrpc/clnt.c | 9 +++++++++ 3 files changed, 12 insertions(+) diff --git a/fs/nfs/client.c b/fs/nfs/client.c index 486dec59972b..23e165d5ec9c 100644 --- a/fs/nfs/client.c +++ b/fs/nfs/client.c @@ -541,6 +541,7 @@ int nfs_create_rpc_client(struct nfs_client *clp, clnt->cl_principal = clp->cl_principal; clp->cl_rpcclient = clnt; + clnt->cl_max_connect = clp->cl_max_connect; return 0; } EXPORT_SYMBOL_GPL(nfs_create_rpc_client); diff --git a/include/linux/sunrpc/clnt.h b/include/linux/sunrpc/clnt.h index b2edd5fc2f0c..a4661646adc9 100644 --- a/include/linux/sunrpc/clnt.h +++ b/include/linux/sunrpc/clnt.h @@ -82,6 +82,7 @@ struct rpc_clnt { struct work_struct cl_work; }; const struct cred *cl_cred; + unsigned int cl_max_connect; /* max number of transports not to the same IP */ }; /* @@ -136,6 +137,7 @@ struct rpc_create_args { char *client_name; struct svc_xprt *bc_xprt; /* NFSv4.1 backchannel */ const struct cred *cred; + unsigned int max_connect; }; struct rpc_add_xprt_test { diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c index 451ac7d031db..05edb2d4b022 100644 --- a/net/sunrpc/clnt.c +++ b/net/sunrpc/clnt.c @@ -2787,6 +2787,15 @@ int rpc_clnt_test_and_add_xprt(struct rpc_clnt *clnt, struct rpc_cb_add_xprt_calldata *data; struct rpc_task *task; + if (xps->xps_nunique_destaddr_xprts + 1 > clnt->cl_max_connect) { + rcu_read_lock(); + pr_warn("SUNRPC: reached max allowed number (%d) did not add " + "transport to server: %s\n", clnt->cl_max_connect, + rcu_dereference(xprt->address_strings[RPC_DISPLAY_ADDR])); + rcu_read_unlock(); + return -EINVAL; + } + data = kmalloc(sizeof(*data), GFP_NOFS); if (!data) return -ENOMEM; From patchwork Tue Aug 24 17:51:08 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Olga Kornievskaia X-Patchwork-Id: 12455691 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 891BCC4338F for ; Tue, 24 Aug 2021 18:02:10 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 732E8610D0 for ; Tue, 24 Aug 2021 18:02:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233519AbhHXSCx (ORCPT ); Tue, 24 Aug 2021 14:02:53 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42016 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239305AbhHXSCq (ORCPT ); Tue, 24 Aug 2021 14:02:46 -0400 Received: from mail-qv1-xf2d.google.com (mail-qv1-xf2d.google.com [IPv6:2607:f8b0:4864:20::f2d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EB6A8C053411 for ; Tue, 24 Aug 2021 10:51:23 -0700 (PDT) Received: by mail-qv1-xf2d.google.com with SMTP id gf5so590450qvb.9 for ; Tue, 24 Aug 2021 10:51:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=vIOWLAR5baQ4wudUHjXS8yJqf6XzOgQ0+NlfjuEdhJQ=; b=dku16MS4/sllkhLxUNb36DEZTfAIlkAoLodRFDWoGGvbwR713LqEHdZJeIbKY4q2Ka dNl+T+Z/3Vt7LBMyYPUv3CXlk+0iaRQBYOTvtpX/RBg8/SsXwhCl1jwv3+ZaC88xGol5 70QV6ks1o0vfLXtsDNZXMhUFz47904B5WkuKXJs1dZqOkVNcym2hHnBL5YLB0VqklS/e l6rsi1O73bYHdDCW/06RKpYly33QHvNzfeGg8IudPDhQCFj21om7sgWUegscH34EXECS HfAPCyDQXTuJYrmmXFhBX9M7jcu/KEIi/5XWIwACNoTmh+Tlb2nY4B0GzGerGyg/pjSt vUVw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=vIOWLAR5baQ4wudUHjXS8yJqf6XzOgQ0+NlfjuEdhJQ=; b=AQILzCgjLkaYD5w2pDK1bTZeiQ9Ec9XbR3dpLmVL7iO8W/RF4ZCt0V8SgncxCl5dqK LanIlG9qycEGr/ZkGXdxfQikxkri0HuYfPkn97twqZSuiU9aiLhhp9+UFH4ETRXnAN+K QplcQQdjFGKAb3X8pPJ9U4/ZlvDlbFiKKbC38ekoBm6xzHAebMpjrqYgmQgbI5nMNJOi UPAge8Mg/t7l+ovc8p9689bh7BrLHd5A0Sjh7qXPQJGlfNotfjRf5EuXs1uUZct7GAhB lfT3UPu22o6pdUo+mGD7FhbT/hrXY9nFEcY8eArqSYLCqDn5NIjNnZiDtk5LXn73WY05 GUAQ== X-Gm-Message-State: AOAM533FrVs4edKDbNpJBQV1GgJuPuwcJ1DCtTIGxNh/QqpqVKPiweGc ypP4YeGz4TGv1MDsc0e0s2s= X-Google-Smtp-Source: ABdhPJyeGhufCGfcoaENIFp0VcriYtNX4xHbFr1jhnx+/nxWpWJeSgDNw5RCDWiURMDimRlK001+SA== X-Received: by 2002:a0c:aac3:: with SMTP id g3mr23116438qvb.14.1629827483138; Tue, 24 Aug 2021 10:51:23 -0700 (PDT) Received: from kolga-mac-1.vpn.netapp.com ([2600:1700:6a10:2e90:549b:da99:adb5:676c]) by smtp.gmail.com with ESMTPSA id n18sm11519658qkn.63.2021.08.24.10.51.22 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 24 Aug 2021 10:51:22 -0700 (PDT) From: Olga Kornievskaia To: trond.myklebust@hammerspace.com, anna.schumaker@netapp.com, steved@redhat.com Cc: linux-nfs@vger.kernel.org Subject: [PATCH v4 5/5] NFSv4.1 add network transport when session trunking is detected Date: Tue, 24 Aug 2021 13:51:08 -0400 Message-Id: <20210824175108.19746-7-olga.kornievskaia@gmail.com> X-Mailer: git-send-email 2.30.1 (Apple Git-130) In-Reply-To: <20210824175108.19746-1-olga.kornievskaia@gmail.com> References: <20210824175108.19746-1-olga.kornievskaia@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org From: Olga Kornievskaia After trunking is discovered in nfs4_discover_server_trunking(), add the transport to the old client structure if the allowed limit of transports has not been reached. An example: there exists a multi-homed server and client mounts one server address and some volume and then doest another mount to a different address of the same server and perhaps a different volume. Previously, the client checks that this is a session trunkable servers (same server), and removes the newly created client structure along with its transport. Now, the client adds the connection from the 2nd mount into the xprt switch of the existing client (it leads to having 2 available connections). Signed-off-by: Olga Kornievskaia --- fs/nfs/nfs4client.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/fs/nfs/nfs4client.c b/fs/nfs/nfs4client.c index 270caa1805a2..af57332503be 100644 --- a/fs/nfs/nfs4client.c +++ b/fs/nfs/nfs4client.c @@ -402,6 +402,33 @@ static int nfs4_init_client_minor_version(struct nfs_client *clp) return nfs4_init_callback(clp); } +static void nfs4_add_trunk(struct nfs_client *clp, struct nfs_client *old) +{ + struct sockaddr_storage clp_addr, old_addr; + struct sockaddr *clp_sap = (struct sockaddr *)&clp_addr; + struct sockaddr *old_sap = (struct sockaddr *)&old_addr; + size_t clp_salen; + struct xprt_create xprt_args = { + .ident = old->cl_proto, + .net = old->cl_net, + .servername = old->cl_hostname, + }; + + if (clp->cl_proto != old->cl_proto) + return; + clp_salen = rpc_peeraddr(clp->cl_rpcclient, clp_sap, sizeof(clp_addr)); + rpc_peeraddr(old->cl_rpcclient, old_sap, sizeof(old_addr)); + + if (clp_addr.ss_family != old_addr.ss_family) + return; + + xprt_args.dstaddr = clp_sap; + xprt_args.addrlen = clp_salen; + + rpc_clnt_add_xprt(old->cl_rpcclient, &xprt_args, + rpc_clnt_test_and_add_xprt, NULL); +} + /** * nfs4_init_client - Initialise an NFS4 client record * @@ -436,6 +463,8 @@ struct nfs_client *nfs4_init_client(struct nfs_client *clp, * won't try to use it. */ nfs_mark_client_ready(clp, -EPERM); + if (old->cl_mvops->session_trunk) + nfs4_add_trunk(clp, old); } clear_bit(NFS_CS_TSM_POSSIBLE, &clp->cl_flags); nfs_put_client(clp);