Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp3913514pxf; Mon, 22 Mar 2021 19:59:02 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxjPBaYy8TSrUNne6LCbzdRxOJKSeitjl9R1UFypXW3+5XTM2U8MEGkQp0Q2P0OZgB7P83G X-Received: by 2002:aa7:d3ca:: with SMTP id o10mr2464976edr.374.1616468342053; Mon, 22 Mar 2021 19:59:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1616468342; cv=none; d=google.com; s=arc-20160816; b=WoU5/F9rPolfLSlUhaQiklqMDRGAAHVkJRYTU0Ymtn8BNNCdHMTTZdAMeLPXDnkWEI wvsSkx01HzB1Eh7Qx8l+kXyEjGyO0YT2bEtNMgxRJPvQRUrkoxrQ76+MlyoIHTXSEleM XY0qiUUtFkj3XvN9GeFaqMyt++Gy5sNMEyqaPwbu1gs+rDMaePm+yRFYyDBikLuVERpN GwO9UQv/1fpQqiDWk4NptkzTBvdMKtfnFX1/axkaWslJgEVReh3qwVQY7EEAT86m4Pyw 99/NpVtMsjwslaX3kAZYTbKzP5bi5DoWCxfuCY0L5BAvzBtOWDCYgR4y3Ms45RRtQS1R wRPQ== 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 :message-id:date:subject:cc:to:from; bh=j5I2FGMWjxRz9QkJ3JO1Q6VhlUj6DL+uEPwY3VLCMl8=; b=nJCDc39yQ3n1AxJVHXiO573/UoOJCSGjU1EEN46p5uNTwBo/5Fe/Ikz1iLRUI5A2UQ 9sL2Q+qjuADQMIYp8q0+Se7ZV2DG8nbKOpJP8AKo/ygTsi2t0eASCzoRX+zRNgFTJ5iC UNAnDtCdM0VbHA2LCg7Wi4Oo3kySXyOacSElSZAkfZXST1N00xw+IUVMgnp0CwZkb9JJ A/UabpJzt8Gny7CJNmBaNudgmrqDu+lBbrOMsmU+MqDxI/S9/RUxB09A6TUUQX7/KfnV /J4faD1e40Zd/vKD5ex3Zsf9N5ZjsZEsGMeO0cjyCx6zvTBEVqmI3/OL2LD7B8Xuwddv HAvw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-nfs-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=alibaba.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id f16si12597211edy.444.2021.03.22.19.58.31; Mon, 22 Mar 2021 19:59:02 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-nfs-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=alibaba.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229854AbhCWC5m (ORCPT + 99 others); Mon, 22 Mar 2021 22:57:42 -0400 Received: from out30-42.freemail.mail.aliyun.com ([115.124.30.42]:38680 "EHLO out30-42.freemail.mail.aliyun.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229639AbhCWC5a (ORCPT ); Mon, 22 Mar 2021 22:57:30 -0400 X-Alimail-AntiSpam: AC=PASS;BC=-1|-1;BR=01201311R201e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=e01e04400;MF=eguan@linux.alibaba.com;NM=1;PH=DS;RN=2;SR=0;TI=SMTPD_---0UT129ij_1616468247; Received: from localhost(mailfrom:eguan@linux.alibaba.com fp:SMTPD_---0UT129ij_1616468247) by smtp.aliyun-inc.com(127.0.0.1); Tue, 23 Mar 2021 10:57:28 +0800 From: Eryu Guan To: linux-nfs@vger.kernel.org Cc: Eryu Guan Subject: [PATCH v2 1/2] nfs: hornor timeo and retrans option when mounting NFSv3 Date: Tue, 23 Mar 2021 10:57:13 +0800 Message-Id: <20210323025714.28510-1-eguan@linux.alibaba.com> X-Mailer: git-send-email 2.26.1.107.gefe3874 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Mounting NFSv3 uses default timeout parameters specified by underlying sunrpc transport, and mount options like 'timeo' and 'retrans', unlike NFSv4, are not honored. But sometimes we want to set non-default timeout value when mounting NFSv3, so pass 'timeo' and 'retrans' to nfs_mount() and fill the 'timeout' field of struct rpc_create_args before creating RPC connection. This is also consistent with NFSv4 behavior. Note that this only sets the timeout value of rpc connection to mountd, but the timeout of rpcbind connection should be set as well. A later patch will fix the rpcbind part. Signed-off-by: Eryu Guan --- v2: - describe timeo and retrans param in nfs_mount() kernel-doc fs/nfs/internal.h | 2 +- fs/nfs/mount_clnt.c | 14 +++++++++----- fs/nfs/super.c | 2 +- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/fs/nfs/internal.h b/fs/nfs/internal.h index 7b644d6c09e4..cf0d7db24d44 100644 --- a/fs/nfs/internal.h +++ b/fs/nfs/internal.h @@ -180,7 +180,7 @@ struct nfs_mount_request { struct net *net; }; -extern int nfs_mount(struct nfs_mount_request *info); +extern int nfs_mount(struct nfs_mount_request *info, int timeo, int retrans); extern void nfs_umount(const struct nfs_mount_request *info); /* client.c */ diff --git a/fs/nfs/mount_clnt.c b/fs/nfs/mount_clnt.c index dda5c3e65d8d..edac6ff74b41 100644 --- a/fs/nfs/mount_clnt.c +++ b/fs/nfs/mount_clnt.c @@ -136,14 +136,16 @@ struct mnt_fhstatus { /** * nfs_mount - Obtain an NFS file handle for the given host and path * @info: pointer to mount request arguments + * @timeo: deciseconds the mount waits for a response before it retries + * @retrans: number of times the mount retries a request * - * Uses default timeout parameters specified by underlying transport. On - * successful return, the auth_flavs list and auth_flav_len will be populated - * with the list from the server or a faked-up list if the server didn't - * provide one. + * Uses timeout parameters specified by caller. On successful return, the + * auth_flavs list and auth_flav_len will be populated with the list from the + * server or a faked-up list if the server didn't provide one. */ -int nfs_mount(struct nfs_mount_request *info) +int nfs_mount(struct nfs_mount_request *info, int timeo, int retrans) { + static struct rpc_timeout mnt_timeout; struct mountres result = { .fh = info->fh, .auth_count = info->auth_flav_len, @@ -158,6 +160,7 @@ int nfs_mount(struct nfs_mount_request *info) .protocol = info->protocol, .address = info->sap, .addrsize = info->salen, + .timeout = &mnt_timeout, .servername = info->hostname, .program = &mnt_program, .version = info->version, @@ -177,6 +180,7 @@ int nfs_mount(struct nfs_mount_request *info) if (info->noresvport) args.flags |= RPC_CLNT_CREATE_NONPRIVPORT; + nfs_init_timeout_values(&mnt_timeout, info->protocol, timeo, retrans); mnt_clnt = rpc_create(&args); if (IS_ERR(mnt_clnt)) goto out_clnt_err; diff --git a/fs/nfs/super.c b/fs/nfs/super.c index 94885c6f8f54..13a650750f04 100644 --- a/fs/nfs/super.c +++ b/fs/nfs/super.c @@ -867,7 +867,7 @@ static int nfs_request_mount(struct fs_context *fc, * Now ask the mount server to map our export path * to a file handle. */ - status = nfs_mount(&request); + status = nfs_mount(&request, ctx->timeo, ctx->retrans); if (status != 0) { dfprintk(MOUNT, "NFS: unable to mount server %s, error %d\n", request.hostname, status); -- 2.26.1.107.gefe3874