diff options
author | Trond Myklebust <Trond.Myklebust@netapp.com> | 2005-11-04 15:33:38 -0500 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2005-11-04 15:33:38 -0500 |
commit | d530838bfa507d67b40d13b00d9cbd7a46a47e78 (patch) | |
tree | f4b2be26c0a7b9ed3233a2be016b7e97427f8705 /fs/nfs/write.c | |
parent | 4cecb76ff86db46d2823550256c828b6597f418e (diff) |
NFSv4: Fix problem with OPEN_DOWNGRADE
RFC 3530 states that for OPEN_DOWNGRADE "The share_access and share_deny
bits specified must be exactly equal to the union of the share_access and
share_deny bits specified for some subset of the OPENs in effect for
current openowner on the current file.
Setattr is currently violating the NFSv4 rules for OPEN_DOWNGRADE in that
it may cause a downgrade from OPEN4_SHARE_ACCESS_BOTH to
OPEN4_SHARE_ACCESS_WRITE despite the fact that there exists no open file
with O_WRONLY access mode.
Fix the problem by replacing nfs4_find_state() with a modified version of
nfs_find_open_context().
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'fs/nfs/write.c')
-rw-r--r-- | fs/nfs/write.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/fs/nfs/write.c b/fs/nfs/write.c index 819a65f5071f..1bdbd4f9fdd2 100644 --- a/fs/nfs/write.c +++ b/fs/nfs/write.c | |||
@@ -294,7 +294,7 @@ int nfs_writepage(struct page *page, struct writeback_control *wbc) | |||
294 | if (page->index >= end_index+1 || !offset) | 294 | if (page->index >= end_index+1 || !offset) |
295 | goto out; | 295 | goto out; |
296 | do_it: | 296 | do_it: |
297 | ctx = nfs_find_open_context(inode, FMODE_WRITE); | 297 | ctx = nfs_find_open_context(inode, NULL, FMODE_WRITE); |
298 | if (ctx == NULL) { | 298 | if (ctx == NULL) { |
299 | err = -EBADF; | 299 | err = -EBADF; |
300 | goto out; | 300 | goto out; |