Commit 67db781f authored by William A. Adamson's avatar William A. Adamson Committed by Linus Torvalds

[PATCH] nfs4 lease: add a lock manager break callback

- Add a lock manager break callback to break_lease() for lock managers to
  initiate breaking a lease.

- Move the break_lease() kill_fasync() call to a default lock manager
  fl_break callback
Signed-off-by: default avatarAndy Adamson <andros@citi.umich.edu>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 6a0ddd15
...@@ -391,6 +391,16 @@ static int flock64_to_posix_lock(struct file *filp, struct file_lock *fl, ...@@ -391,6 +391,16 @@ static int flock64_to_posix_lock(struct file *filp, struct file_lock *fl,
} }
#endif #endif
/* default lease lock manager operations */
static void lease_break_callback(struct file_lock *fl)
{
kill_fasync(&fl->fl_fasync, SIGIO, POLL_MSG);
}
struct lock_manager_operations lease_manager_ops = {
.fl_break = lease_break_callback,
};
/* Allocate a file_lock initialised to this type of lease */ /* Allocate a file_lock initialised to this type of lease */
static int lease_alloc(struct file *filp, int type, struct file_lock **flp) static int lease_alloc(struct file *filp, int type, struct file_lock **flp)
{ {
...@@ -1127,7 +1137,10 @@ int __break_lease(struct inode *inode, unsigned int mode) ...@@ -1127,7 +1137,10 @@ int __break_lease(struct inode *inode, unsigned int mode)
if (fl->fl_type != future) { if (fl->fl_type != future) {
fl->fl_type = future; fl->fl_type = future;
fl->fl_break_time = break_time; fl->fl_break_time = break_time;
kill_fasync(&fl->fl_fasync, SIGIO, POLL_MSG); if (fl->fl_lmops && fl->fl_lmops->fl_break)
fl->fl_lmops->fl_break(fl);
else /* lease must have lmops break callback */
BUG();
} }
} }
......
...@@ -635,6 +635,7 @@ struct lock_manager_operations { ...@@ -635,6 +635,7 @@ struct lock_manager_operations {
void (*fl_notify)(struct file_lock *); /* unblock callback */ void (*fl_notify)(struct file_lock *); /* unblock callback */
void (*fl_copy_lock)(struct file_lock *, struct file_lock *); void (*fl_copy_lock)(struct file_lock *, struct file_lock *);
void (*fl_release_private)(struct file_lock *); void (*fl_release_private)(struct file_lock *);
void (*fl_break)(struct file_lock *);
}; };
/* that will die - we need it for nfs_lock_info */ /* that will die - we need it for nfs_lock_info */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment