aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorTrond Myklebust <Trond.Myklebust@netapp.com>2013-04-29 11:11:58 -0400
committerTrond Myklebust <Trond.Myklebust@netapp.com>2013-04-29 11:11:58 -0400
commit721ccfb79b6f74f4052de70236d24047e73682d4 (patch)
treee10899dc222012beccc2a99f03b8dae7c050fb37 /fs
parentee3ae84ef40154c734dc2cbca5cf4b2f54c6c7c7 (diff)
downloadkernel_goldelico_gta04-721ccfb79b6f74f4052de70236d24047e73682d4.zip
kernel_goldelico_gta04-721ccfb79b6f74f4052de70236d24047e73682d4.tar.gz
kernel_goldelico_gta04-721ccfb79b6f74f4052de70236d24047e73682d4.tar.bz2
NFSv4: Warn once about servers that incorrectly apply open mode to setattr
Debugging aid to help identify servers that incorrectly apply open mode checks to setattr requests that are not changing the file size. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'fs')
-rw-r--r--fs/nfs/nfs4proc.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index 982b452..9da4bd5 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -2184,6 +2184,13 @@ static int nfs4_do_setattr(struct inode *inode, struct rpc_cred *cred,
err = _nfs4_do_setattr(inode, cred, fattr, sattr, state);
switch (err) {
case -NFS4ERR_OPENMODE:
+ if (!(sattr->ia_valid & ATTR_SIZE)) {
+ pr_warn_once("NFSv4: server %s is incorrectly "
+ "applying open mode checks to "
+ "a SETATTR that is not "
+ "changing file size.\n",
+ server->nfs_client->cl_hostname);
+ }
if (state && !(state->state & FMODE_WRITE)) {
err = -EBADF;
if (sattr->ia_valid & ATTR_OPEN)