Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp2993660imu; Mon, 19 Nov 2018 09:06:25 -0800 (PST) X-Google-Smtp-Source: AJdET5ePsVAFIu+Oyi1BYXdS1lsyg240bXr7Yl5YqOLf68T3OANDxkM7UEAcwomtLnMEjD709tbN X-Received: by 2002:a62:4d82:: with SMTP id a124-v6mr22295071pfb.113.1542647184997; Mon, 19 Nov 2018 09:06:24 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1542647184; cv=none; d=google.com; s=arc-20160816; b=1CKVZUu3OOLHIQTDPETYZsusPKJqAra2FvisbTU/sBZnaRioIzjROBuH8UGxwQbk3I KIl+W56Ngbs8WyhTTAaZWhAfGobLYD2aWMGurAmjADcgygPv6+xrQrYTyN02CL1a3pBS JmzxRlrFezaT9KmvOMMAHRlofWL+kObcMXQfgepKrhPa5K/aTqrmANGFW3EmbxSe0BQq w1NlAOgSrZfGDJrW5fZ/cXcGcmAq6Qop4MoCIc4k/nDSmV0jzvDU2/wDDZ9Dy9uZGgMc E/gL4zS2PXVjmDgXge83fSQGcr9qOKB29lwq+RLV0Vf3m53eK1Oo6fhpiaz9NYlRVxgr CY5w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=6bqmLkl2eJh7YLTafT1ACkoNUcAAxlAJhBVOo6b0stk=; b=WlHhQ64WmR4CZQEvqrqFBiirdLoO4J9F6QIjy3XO1UMcNzsa4TUCWr/mmH2tgUYnf8 T36bgLcKjdXBvDnu3Ew6bwEfoAuJTU8cq5tJYa9hm+s+NHD12gGRwVsDzTROBHiwnsDm /DQZPGwH66vZCq5G/fqPOtdCtinKDHjWyJ8Q9Ca3JXuyo7lXQLN+TpkPXAe/MEmRRbV+ 8QE/aEHeHhpXxoS3BGL5v7RcjFWOze/U/sfdrhfR+99zVWAC0tVkhBrIj/+DtIU9yxFK oqurDAVaULZBgKPqBvYDT2U+xQidlJ8QZdSWpTBmaRAiTpXpSSDvMl8sbX4/YWZsUOzu rKZg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=UuSQDiCq; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id b4-v6si44363741pfa.25.2018.11.19.09.06.09; Mon, 19 Nov 2018 09:06:24 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=UuSQDiCq; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2406608AbeKTD26 (ORCPT + 99 others); Mon, 19 Nov 2018 22:28:58 -0500 Received: from mail.kernel.org ([198.145.29.99]:43462 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2405880AbeKTD25 (ORCPT ); Mon, 19 Nov 2018 22:28:57 -0500 Received: from localhost (5356596B.cm-6-7b.dynamic.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 274C52146D; Mon, 19 Nov 2018 17:04:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1542647079; bh=mcooEFy4V21rTj7GUPBRsMt24wf2PZoJTUzROqmURlY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=UuSQDiCqcnamN3gDQSzJTaJJVIPgoKU9DM4Fcs5DAu/0Fyr9RJ4Wq6M9U/SNXkgzE gd9npcrujeQbyUj9Pne5Tmsix/ImNmhw2wsEB6cmvAOT6MFMmmd92/LzlAvoN8CWed p9O1EgegJ3WJBouG/BIqsHkJFHHRg1Fuexf272O4= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Trond Myklebust Subject: [PATCH 3.18 43/90] NFSv4.1: Fix the r/wsize checking Date: Mon, 19 Nov 2018 17:29:25 +0100 Message-Id: <20181119162627.729145573@linuxfoundation.org> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181119162620.585061184@linuxfoundation.org> References: <20181119162620.585061184@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 3.18-stable review patch. If anyone has any objections, please let me know. ------------------ From: Trond Myklebust commit 943cff67b842839f4f35364ba2db5c2d3f025d94 upstream. The intention of nfs4_session_set_rwsize() was to cap the r/wsize to the buffer sizes negotiated by the CREATE_SESSION. The initial code had a bug whereby we would not check the values negotiated by nfs_probe_fsinfo() (the assumption being that CREATE_SESSION will always negotiate buffer values that are sane w.r.t. the server's preferred r/wsizes) but would only check values set by the user in the 'mount' command. The code was changed in 4.11 to _always_ set the r/wsize, meaning that we now never use the server preferred r/wsizes. This is the regression that this patch fixes. Also rename the function to nfs4_session_limit_rwsize() in order to avoid future confusion. Fixes: 033853325fe3 (NFSv4.1 respect server's max size in CREATE_SESSION") Cc: stable@vger.kernel.org # v4.11+ Signed-off-by: Trond Myklebust Signed-off-by: Greg Kroah-Hartman --- fs/nfs/nfs4client.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) --- a/fs/nfs/nfs4client.c +++ b/fs/nfs/nfs4client.c @@ -891,10 +891,10 @@ EXPORT_SYMBOL_GPL(nfs4_set_ds_client); /* * Session has been established, and the client marked ready. - * Set the mount rsize and wsize with negotiated fore channel - * attributes which will be bound checked in nfs_server_set_fsinfo. + * Limit the mount rsize, wsize and dtsize using negotiated fore + * channel attributes. */ -static void nfs4_session_set_rwsize(struct nfs_server *server) +static void nfs4_session_limit_rwsize(struct nfs_server *server) { #ifdef CONFIG_NFS_V4_1 struct nfs4_session *sess; @@ -907,9 +907,11 @@ static void nfs4_session_set_rwsize(stru server_resp_sz = sess->fc_attrs.max_resp_sz - nfs41_maxread_overhead; server_rqst_sz = sess->fc_attrs.max_rqst_sz - nfs41_maxwrite_overhead; - if (!server->rsize || server->rsize > server_resp_sz) + if (server->dtsize > server_resp_sz) + server->dtsize = server_resp_sz; + if (server->rsize > server_resp_sz) server->rsize = server_resp_sz; - if (!server->wsize || server->wsize > server_rqst_sz) + if (server->wsize > server_rqst_sz) server->wsize = server_rqst_sz; #endif /* CONFIG_NFS_V4_1 */ } @@ -956,12 +958,12 @@ static int nfs4_server_common_setup(stru (unsigned long long) server->fsid.minor); nfs_display_fhandle(mntfh, "Pseudo-fs root FH"); - nfs4_session_set_rwsize(server); - error = nfs_probe_fsinfo(server, mntfh, fattr); if (error < 0) goto out; + nfs4_session_limit_rwsize(server); + if (server->namelen == 0 || server->namelen > NFS4_MAXNAMLEN) server->namelen = NFS4_MAXNAMLEN;