aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/nfsd
diff options
context:
space:
mode:
authorNeilBrown <neilb@cse.unsw.edu.au>2005-07-07 20:59:27 -0400
committerLinus Torvalds <torvalds@g5.osdl.org>2005-07-07 21:24:11 -0400
commit4c4cd222ee329025840bc2f8cebf71d36c62440c (patch)
tree70d1d8e754e7ab7226a6eee6afeab8b892072600 /include/linux/nfsd
parent3a4f98bbf481cb9f755005ac569ceb5303e1b69f (diff)
[PATCH] nfsd4: check lock type against openmode.
We shouldn't be allowing, e.g., write locks on files not open for read. To enforce this, we add a pointer from the lock stateid back to the open stateid it came from, so that the check will continue to be correct even after the open is upgraded or downgraded. Signed-off-by: Andy Adamson <andros@citi.umich.edu> Signed-off-by: J. Bruce Fields <bfields@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 'include/linux/nfsd')
-rw-r--r--include/linux/nfsd/state.h5
1 files changed, 5 insertions, 0 deletions
diff --git a/include/linux/nfsd/state.h b/include/linux/nfsd/state.h
index 2d19431f47ea..8bf23cf8b603 100644
--- a/include/linux/nfsd/state.h
+++ b/include/linux/nfsd/state.h
@@ -237,6 +237,10 @@ struct nfs4_file {
237* st_perlockowner: (open stateid) list of lock nfs4_stateowners 237* st_perlockowner: (open stateid) list of lock nfs4_stateowners
238* st_access_bmap: used only for open stateid 238* st_access_bmap: used only for open stateid
239* st_deny_bmap: used only for open stateid 239* st_deny_bmap: used only for open stateid
240* st_openstp: open stateid lock stateid was derived from
241*
242* XXX: open stateids and lock stateids have diverged sufficiently that
243* we should consider defining separate structs for the two cases.
240*/ 244*/
241 245
242struct nfs4_stateid { 246struct nfs4_stateid {
@@ -250,6 +254,7 @@ struct nfs4_stateid {
250 struct file * st_vfs_file; 254 struct file * st_vfs_file;
251 unsigned long st_access_bmap; 255 unsigned long st_access_bmap;
252 unsigned long st_deny_bmap; 256 unsigned long st_deny_bmap;
257 struct nfs4_stateid * st_openstp;
253}; 258};
254 259
255/* flags for preprocess_seqid_op() */ 260/* flags for preprocess_seqid_op() */