aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfs/client.c
diff options
context:
space:
mode:
authorTrond Myklebust <Trond.Myklebust@netapp.com>2010-04-11 16:48:44 -0400
committerTrond Myklebust <Trond.Myklebust@netapp.com>2010-04-12 07:55:15 -0400
commit0df5dd4aae211edeeeb84f7f84f6d093406d7c22 (patch)
tree6e58bc436b873cf582f20cf0dbd21461c0a56837 /fs/nfs/client.c
parent2c61be0a9478258f77b66208a0c4b1f5f8161c3c (diff)
downloadkernel_samsung_smdk4412-0df5dd4aae211edeeeb84f7f84f6d093406d7c22.tar.gz
kernel_samsung_smdk4412-0df5dd4aae211edeeeb84f7f84f6d093406d7c22.tar.bz2
kernel_samsung_smdk4412-0df5dd4aae211edeeeb84f7f84f6d093406d7c22.zip
NFSv4: fix delegated locking
Arnaud Giersch reports that NFSv4 locking is broken when we hold a delegation since commit 8e469ebd6dc32cbaf620e134d79f740bf0ebab79 (NFSv4: Don't allow posix locking against servers that don't support it). According to Arnaud, the lock succeeds the first time he opens the file (since we cannot do a delegated open) but then fails after we start using delegated opens. The following patch fixes it by ensuring that locking behaviour is governed by a per-filesystem capability flag that is initially set, but gets cleared if the server ever returns an OPEN without the NFS4_OPEN_RESULT_LOCKTYPE_POSIX flag being set. Reported-by: Arnaud Giersch <arnaud.giersch@iut-bm.univ-fcomte.fr> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com> Cc: stable@kernel.org
Diffstat (limited to 'fs/nfs/client.c')
-rw-r--r--fs/nfs/client.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/fs/nfs/client.c b/fs/nfs/client.c
index 2a3d352c0bf..a8766c4ef2e 100644
--- a/fs/nfs/client.c
+++ b/fs/nfs/client.c
@@ -1294,7 +1294,8 @@ static int nfs4_init_server(struct nfs_server *server,
/* Initialise the client representation from the mount data */
server->flags = data->flags;
- server->caps |= NFS_CAP_ATOMIC_OPEN|NFS_CAP_CHANGE_ATTR;
+ server->caps |= NFS_CAP_ATOMIC_OPEN|NFS_CAP_CHANGE_ATTR|
+ NFS_CAP_POSIX_LOCK;
server->options = data->options;
/* Get a client record */