diff options
author | Neil Brown <neilb@cse.unsw.edu.au> | 2005-01-04 05:51:46 -0800 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-01-04 05:51:46 -0800 |
commit | 55d066111e4917f5b26604335fb79aaec6cdbc56 (patch) | |
tree | a564b4bd2244b0e8007af4fa3cf8ec6a83bfa5ae /fs | |
parent | 40ccba5fd08aac9ad9e8aa02281a023790993780 (diff) | |
download | history-55d066111e4917f5b26604335fb79aaec6cdbc56.tar.gz |
[PATCH] knfsd: check for openmode violations given a delegation stateid.
Signed-off-by: Andy Adamson <andros@citi.umich.edu>
Signed-off-by: Neil Brown <neilb@cse.unsw.edu.au>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/nfsd/nfs4state.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c index ed5509f296b34f..091359052cdf3e 100644 --- a/fs/nfsd/nfs4state.c +++ b/fs/nfsd/nfs4state.c @@ -1956,6 +1956,20 @@ out: return status; } +static int +nfs4_check_delegmode(struct nfs4_delegation *dp, int flags) +{ + int status = nfserr_openmode; + + if ((flags & WR_STATE) & (dp->dl_type == NFS4_OPEN_DELEGATE_READ)) + goto out; + if ((flags & RD_STATE) & (dp->dl_type == NFS4_OPEN_DELEGATE_WRITE)) + goto out; + status = nfs_ok; +out: + return status; +} + /* * Checks for stateid operations */ |