aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorNeil Brown <neilb@cse.unsw.edu.au>2005-01-04 05:51:46 -0800
committerLinus Torvalds <torvalds@ppc970.osdl.org>2005-01-04 05:51:46 -0800
commit55d066111e4917f5b26604335fb79aaec6cdbc56 (patch)
treea564b4bd2244b0e8007af4fa3cf8ec6a83bfa5ae /fs
parent40ccba5fd08aac9ad9e8aa02281a023790993780 (diff)
downloadhistory-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.c14
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
*/