diff options
| author | Neil Brown <neilb@cse.unsw.edu.au> | 2005-03-09 16:57:19 -0800 |
|---|---|---|
| committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-03-09 16:57:19 -0800 |
| commit | 690589732d253ffbfef15bb4262a47616cc027a6 (patch) | |
| tree | 025b0cb7c2aa622c98bcfeac769c2e3dbe6d2415 /include | |
| parent | c6399c163142ffcdec44cd9a5920c5a4d622903a (diff) | |
[PATCH] nfsd4: move delegation decisions to lock_manager callbacks
Remove nfs4_check_deleg_recall(). Move its checks into __setlease() via two
new lock_manager callbacks, fl_mylease and fl_change, so that all leases (not
just NFSv4 lease as with nfs4_check_deleg_recall) are checked. Default
implementations of fl_mylease and fl_change are provided for the sake of the
fcntl_setlease interface. Both callbacks must always be defined.
fl_mylease:
for the NFSv4 server, this check is used to see if an existing lease
comes from the same client. For the fcntl_setlease interface, the existing
logic is preserved. the fl_mylease check sees if the existing lease is
from the input filp.
fl_change: called if the fl_mylease returns true
the NFSv4 server does not hand out a delegation to a client that already
has one. -EAGAIN is returned. Otherwise lease_modify is used. For the
fcntl_setlease interface, the exisiting logic is preserved: The callback
used in lease_modify().
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')
| -rw-r--r-- | include/linux/fs.h | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/include/linux/fs.h b/include/linux/fs.h index 3ea266972f06..c54298dd3b06 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -649,6 +649,8 @@ struct lock_manager_operations { void (*fl_copy_lock)(struct file_lock *, struct file_lock *); void (*fl_release_private)(struct file_lock *); void (*fl_break)(struct file_lock *); + int (*fl_mylease)(struct file_lock *, struct file_lock *); + int (*fl_change)(struct file_lock **, int); }; /* that will die - we need it for nfs_lock_info */ @@ -715,6 +717,7 @@ extern int flock_lock_file_wait(struct file *filp, struct file_lock *fl); extern int __break_lease(struct inode *inode, unsigned int flags); extern void lease_get_mtime(struct inode *, struct timespec *time); extern int setlease(struct file *, long, struct file_lock **); +extern int lease_modify(struct file_lock **, int); extern void remove_lease(struct file_lock *); extern int lock_may_read(struct inode *, loff_t start, unsigned long count); extern int lock_may_write(struct inode *, loff_t start, unsigned long count); |
