aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfs/read.c
diff options
context:
space:
mode:
authorTrond Myklebust <Trond.Myklebust@netapp.com>2005-11-04 15:33:38 -0500
committerTrond Myklebust <Trond.Myklebust@netapp.com>2005-11-04 15:33:38 -0500
commitd530838bfa507d67b40d13b00d9cbd7a46a47e78 (patch)
treef4b2be26c0a7b9ed3233a2be016b7e97427f8705 /fs/nfs/read.c
parent4cecb76ff86db46d2823550256c828b6597f418e (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/read.c')
-rw-r--r--fs/nfs/read.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/fs/nfs/read.c b/fs/nfs/read.c
index 43b03b19731b..5f20eafba8ec 100644
--- a/fs/nfs/read.c
+++ b/fs/nfs/read.c
@@ -507,7 +507,7 @@ int nfs_readpage(struct file *file, struct page *page)
507 goto out_error; 507 goto out_error;
508 508
509 if (file == NULL) { 509 if (file == NULL) {
510 ctx = nfs_find_open_context(inode, FMODE_READ); 510 ctx = nfs_find_open_context(inode, NULL, FMODE_READ);
511 if (ctx == NULL) 511 if (ctx == NULL)
512 return -EBADF; 512 return -EBADF;
513 } else 513 } else
@@ -576,7 +576,7 @@ int nfs_readpages(struct file *filp, struct address_space *mapping,
576 nr_pages); 576 nr_pages);
577 577
578 if (filp == NULL) { 578 if (filp == NULL) {
579 desc.ctx = nfs_find_open_context(inode, FMODE_READ); 579 desc.ctx = nfs_find_open_context(inode, NULL, FMODE_READ);
580 if (desc.ctx == NULL) 580 if (desc.ctx == NULL)
581 return -EBADF; 581 return -EBADF;
582 } else 582 } else