diff options
author | Trond Myklebust <Trond.Myklebust@netapp.com> | 2013-04-29 11:11:58 -0400 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2013-04-29 11:11:58 -0400 |
commit | 721ccfb79b6f74f4052de70236d24047e73682d4 (patch) | |
tree | e10899dc222012beccc2a99f03b8dae7c050fb37 | |
parent | ee3ae84ef40154c734dc2cbca5cf4b2f54c6c7c7 (diff) | |
download | linux-721ccfb79b6f74f4052de70236d24047e73682d4.tar.gz linux-721ccfb79b6f74f4052de70236d24047e73682d4.tar.bz2 linux-721ccfb79b6f74f4052de70236d24047e73682d4.zip |
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>
-rw-r--r-- | fs/nfs/nfs4proc.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c index 982b4527551d..9da4bd55eb30 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) |