diff options
author | NeilBrown <neilb@cse.unsw.edu.au> | 2005-07-07 20:59:27 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-07-07 21:24:11 -0400 |
commit | 4c4cd222ee329025840bc2f8cebf71d36c62440c (patch) | |
tree | 70d1d8e754e7ab7226a6eee6afeab8b892072600 /include/linux | |
parent | 3a4f98bbf481cb9f755005ac569ceb5303e1b69f (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')
-rw-r--r-- | include/linux/nfsd/state.h | 5 |
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 | ||
242 | struct nfs4_stateid { | 246 | struct 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() */ |