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

[PATCH] nfs4 lease: export setlease

Export setlease(), a direct interface to __setlease() used by nfsd
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 8a2b952d
...@@ -1342,6 +1342,39 @@ int __setlease(struct file *filp, long arg, struct file_lock **flp) ...@@ -1342,6 +1342,39 @@ int __setlease(struct file *filp, long arg, struct file_lock **flp)
return error; return error;
} }
/**
* setlease - sets a lease on an open file
* @filp: file pointer
* @arg: type of lease to obtain
* @lease: file_lock to use
*
* Call this to establish a lease on the file.
* The fl_lmops fl_break function is required by break_lease
*/
int setlease(struct file *filp, long arg, struct file_lock **lease)
{
struct dentry *dentry = filp->f_dentry;
struct inode *inode = dentry->d_inode;
int error;
if ((current->fsuid != inode->i_uid) && !capable(CAP_LEASE))
return -EACCES;
if (!S_ISREG(inode->i_mode))
return -EINVAL;
error = security_file_lock(filp, arg);
if (error)
return error;
lock_kernel();
error = __setlease(filp, arg, lease);
unlock_kernel();
return error;
}
EXPORT_SYMBOL(setlease);
/** /**
* fcntl_setlease - sets a lease on an open file * fcntl_setlease - sets a lease on an open file
* @fd: open file descriptor * @fd: open file descriptor
......
...@@ -701,6 +701,7 @@ extern int posix_locks_deadlock(struct file_lock *, struct file_lock *); ...@@ -701,6 +701,7 @@ extern int posix_locks_deadlock(struct file_lock *, struct file_lock *);
extern int flock_lock_file_wait(struct file *filp, struct file_lock *fl); extern int flock_lock_file_wait(struct file *filp, struct file_lock *fl);
extern int __break_lease(struct inode *inode, unsigned int flags); extern int __break_lease(struct inode *inode, unsigned int flags);
extern void lease_get_mtime(struct inode *, struct timespec *time); extern void lease_get_mtime(struct inode *, struct timespec *time);
extern int setlease(struct file *, long, struct file_lock **);
extern int lock_may_read(struct inode *, loff_t start, unsigned long count); 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); extern int lock_may_write(struct inode *, loff_t start, unsigned long count);
extern void steal_locks(fl_owner_t from); extern void steal_locks(fl_owner_t from);
......
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