From: Sasha Levin <sashal@kernel.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: Chuck Lever <chuck.lever@oracle.com>,
Trond Myklebust <trond.myklebust@hammerspace.com>,
Sasha Levin <sashal@kernel.org>,
linux-nfs@vger.kernel.org
Subject: [PATCH AUTOSEL 4.19 07/19] NFS: Zero-stateid SETATTR should first return delegation
Date: Mon, 14 Sep 2020 09:04:50 -0400 [thread overview]
Message-ID: <20200914130502.1804708-7-sashal@kernel.org> (raw)
In-Reply-To: <20200914130502.1804708-1-sashal@kernel.org>
From: Chuck Lever <chuck.lever@oracle.com>
[ Upstream commit 644c9f40cf71969f29add32f32349e71d4995c0b ]
If a write delegation isn't available, the Linux NFS client uses
a zero-stateid when performing a SETATTR.
NFSv4.0 provides no mechanism for an NFS server to match such a
request to a particular client. It recalls all delegations for that
file, even delegations held by the client issuing the request. If
that client happens to hold a read delegation, the server will
recall it immediately, resulting in an NFS4ERR_DELAY/CB_RECALL/
DELEGRETURN sequence.
Optimize out this pipeline bubble by having the client return any
delegations it may hold on a file before it issues a
SETATTR(zero-stateid) on that file.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
fs/nfs/nfs4proc.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index 929f1d72bfd39..b2a2ff3f22a46 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -3129,8 +3129,10 @@ static int _nfs4_do_setattr(struct inode *inode,
/* Servers should only apply open mode checks for file size changes */
truncate = (arg->iap->ia_valid & ATTR_SIZE) ? true : false;
- if (!truncate)
+ if (!truncate) {
+ nfs4_inode_make_writeable(inode);
goto zero_stateid;
+ }
if (nfs4_copy_delegation_stateid(inode, FMODE_WRITE, &arg->stateid, &delegation_cred)) {
/* Use that stateid */
--
2.25.1
next prev parent reply other threads:[~2020-09-14 14:32 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-14 13:04 [PATCH AUTOSEL 4.19 01/19] NFSv4.1 handle ERR_DELAY error reclaiming locking state on delegation recall Sasha Levin
2020-09-14 13:04 ` [PATCH AUTOSEL 4.19 02/19] scsi: pm8001: Fix memleak in pm8001_exec_internal_task_abort Sasha Levin
2020-09-14 13:04 ` [PATCH AUTOSEL 4.19 03/19] scsi: libfc: Fix for double free() Sasha Levin
2020-09-14 13:04 ` [PATCH AUTOSEL 4.19 04/19] scsi: lpfc: Fix FLOGI/PLOGI receive race condition in pt2pt discovery Sasha Levin
2020-09-14 13:04 ` [PATCH AUTOSEL 4.19 05/19] regulator: pwm: Fix machine constraints application Sasha Levin
2020-09-14 13:04 ` [PATCH AUTOSEL 4.19 06/19] spi: spi-loopback-test: Fix out-of-bounds read Sasha Levin
2020-09-14 13:04 ` Sasha Levin [this message]
2020-09-14 13:04 ` [PATCH AUTOSEL 4.19 08/19] SUNRPC: stop printk reading past end of string Sasha Levin
2020-09-14 13:04 ` [PATCH AUTOSEL 4.19 09/19] rapidio: Replace 'select' DMAENGINES 'with depends on' Sasha Levin
2020-09-14 13:04 ` [PATCH AUTOSEL 4.19 10/19] kobject: Drop unneeded conditional in __kobject_del() Sasha Levin
2020-09-14 13:04 ` [OpenRISC] [PATCH AUTOSEL 4.19 11/19] openrisc: Fix cache API compile issue when not inlining Sasha Levin
2020-09-14 13:04 ` Sasha Levin
2020-09-14 13:04 ` [PATCH AUTOSEL 4.19 12/19] nvme-fc: cancel async events before freeing event struct Sasha Levin
2020-09-14 13:04 ` Sasha Levin
2020-09-14 13:04 ` [PATCH AUTOSEL 4.19 13/19] nvme-rdma: " Sasha Levin
2020-09-14 13:04 ` Sasha Levin
2020-09-14 13:04 ` [f2fs-dev] [PATCH AUTOSEL 4.19 14/19] f2fs: fix indefinite loop scanning for free nid Sasha Levin
2020-09-14 13:04 ` Sasha Levin
2020-09-14 13:04 ` [f2fs-dev] [PATCH AUTOSEL 4.19 15/19] f2fs: Return EOF on unaligned end of file DIO read Sasha Levin
2020-09-14 13:04 ` Sasha Levin
2020-09-14 13:04 ` [PATCH AUTOSEL 4.19 16/19] i2c: algo: pca: Reapply i2c bus settings after reset Sasha Levin
2020-09-14 13:05 ` [PATCH AUTOSEL 4.19 17/19] spi: Fix memory leak on splited transfers Sasha Levin
2020-09-14 13:05 ` [PATCH AUTOSEL 4.19 18/19] gcov: add support for GCC 10.1 Sasha Levin
2020-09-14 13:05 ` [PATCH AUTOSEL 4.19 19/19] KVM: MIPS: Change the definition of kvm type Sasha Levin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200914130502.1804708-7-sashal@kernel.org \
--to=sashal@kernel.org \
--cc=chuck.lever@oracle.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-nfs@vger.kernel.org \
--cc=stable@vger.kernel.org \
--cc=trond.myklebust@hammerspace.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.