Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp3038246pxj; Mon, 17 May 2021 16:11:04 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyU/XQxcJWjtQwKzGLu3WGym+sUHWVLUKkYICZl3W/ar+lvXvgZYNHPVt05Tmo+ieKCoK3F X-Received: by 2002:a02:cb4f:: with SMTP id k15mr2370159jap.3.1621293064747; Mon, 17 May 2021 16:11:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1621293064; cv=none; d=google.com; s=arc-20160816; b=me6JmmtBAr3YW2fI+DKubngeBpYClF2KTJqcAZfsfX5JU2OM+fKHYkIFbT4ijNVJ+m Ppo/y/vBKLCIpGig70eU5oJsjo2v50mJ5Kr1olr4EGMfkBUBu4hvxFe71FkAVKwDFkT9 VCVlkD0gcL580Fl5iz53dCKey5C5Gh1M0Qx4KdQUMwZbp95u8ebhfRBiXhq9ZxB5qVlW iHMcW6I5p+jB6wDXzMBqgV8ZGd1/+Dp5/lkgmgjLmwxLXKgz3jQXHMD7wtBeRnnLSXl/ +JzWOppyamoKs1MDQnh3kfgf5jduXbGE4FS0v8bpI5WGfMa2pE9tc7HLllbcNVeersLl 4stQ== 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=eu+ec3DNuPP7IoVJ1B4nXmoGDtyADjaQYRJ4vtPArf8=; b=m1t/zi0vO9WAoJJSN/UaO1RZd/Tjx4Pvl3Lsf32RScsrfxOHAX980Zhn1u2EBOzdyh b5KRNDMF01Cun2gwScZh3he5x+B3BSmFRblSBoTcAXU+s5IqZxuu/k9npgPfThs7BgEp R0B4Q1i5CcmngXSbU0l7G87poaMh+QLogW/q9olQM262DNIEulDd+kuQ72yiyBwB1nDa nLe9cZsbzbZ8Kq/wf1FTgnFTR8bJ0JioEiwWtHXM6e0gUkTIriTo2PxYG8tDr8wmdyHy /m6qLb89GsQqkSxZ39ZrwpzFjB9Z02n8dlKhzVyZXNw+M/4e34E81sRooTfZRAC/EBFV T8GQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=xhNFhLM0; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.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 vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id h3si7700609jal.79.2021.05.17.16.10.52; Mon, 17 May 2021 16:11:04 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=xhNFhLM0; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.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: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238843AbhEQOVh (ORCPT + 99 others); Mon, 17 May 2021 10:21:37 -0400 Received: from mail.kernel.org ([198.145.29.99]:35958 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239125AbhEQOSr (ORCPT ); Mon, 17 May 2021 10:18:47 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 9D5A361412; Mon, 17 May 2021 14:10:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1621260625; bh=bKNhFBveHdwDoNAtbTqIATiKOLJdAXj4bNeR3HmWwAc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=xhNFhLM0K+9/KENNfY7VFSzHnQl6gJkOHFvggZxIykMAlFQEV0ri3qpEpcT3Sa5Tf jzmi1Etvr9ITweq2xy3lLkWUdzraUigQRXyaJ1BrCBQZhksBEe7h4jNs7T79SApCgV EPZ7Ad6z+I5A5G8YXXD0k0CITIZibJULF7Uqf+F0= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, "J. Bruce Fields" , Chuck Lever , Sasha Levin Subject: [PATCH 5.12 166/363] nfsd: ensure new clients break delegations Date: Mon, 17 May 2021 16:00:32 +0200 Message-Id: <20210517140308.215419946@linuxfoundation.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210517140302.508966430@linuxfoundation.org> References: <20210517140302.508966430@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: J. Bruce Fields [ Upstream commit 217fd6f625af591e2866bebb8cda778cf85bea2e ] If nfsd already has an open file that it plans to use for IO from another, it may not need to do another vfs open, but it still may need to break any delegations in case the existing opens are for another client. Symptoms are that we may incorrectly fail to break a delegation on a write open from a different client, when the delegation-holding client already has a write open. Fixes: 28df3d1539de ("nfsd: clients don't need to break their own delegations") Signed-off-by: J. Bruce Fields Signed-off-by: Chuck Lever Signed-off-by: Sasha Levin --- fs/nfsd/nfs4state.c | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c index 97447a64bad0..886e50ed07c2 100644 --- a/fs/nfsd/nfs4state.c +++ b/fs/nfsd/nfs4state.c @@ -4869,6 +4869,11 @@ static __be32 nfs4_get_vfs_file(struct svc_rqst *rqstp, struct nfs4_file *fp, if (nf) nfsd_file_put(nf); + status = nfserrno(nfsd_open_break_lease(cur_fh->fh_dentry->d_inode, + access)); + if (status) + goto out_put_access; + status = nfsd4_truncate(rqstp, cur_fh, open); if (status) goto out_put_access; @@ -6849,11 +6854,20 @@ out: static __be32 nfsd_test_lock(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file_lock *lock) { struct nfsd_file *nf; - __be32 err = nfsd_file_acquire(rqstp, fhp, NFSD_MAY_READ, &nf); - if (!err) { - err = nfserrno(vfs_test_lock(nf->nf_file, lock)); - nfsd_file_put(nf); - } + __be32 err; + + err = nfsd_file_acquire(rqstp, fhp, NFSD_MAY_READ, &nf); + if (err) + return err; + fh_lock(fhp); /* to block new leases till after test_lock: */ + err = nfserrno(nfsd_open_break_lease(fhp->fh_dentry->d_inode, + NFSD_MAY_READ)); + if (err) + goto out; + err = nfserrno(vfs_test_lock(nf->nf_file, lock)); +out: + fh_unlock(fhp); + nfsd_file_put(nf); return err; } -- 2.30.2