Commit e55c34a6 authored by Benjamin Coddington's avatar Benjamin Coddington Committed by Jeff Layton

locks: introduce locks_lock_inode_wait()

Users of the locks API commonly call either posix_lock_file_wait() or
flock_lock_file_wait() depending upon the lock type.  Add a new function
locks_lock_inode_wait() which will check and call the correct function for
the type of lock passed in.
Signed-off-by: default avatarBenjamin Coddington <bcodding@redhat.com>
Signed-off-by: default avatarJeff Layton <jeff.layton@primarydata.com>
parent 6ca7d910
...@@ -1881,6 +1881,30 @@ int flock_lock_inode_wait(struct inode *inode, struct file_lock *fl) ...@@ -1881,6 +1881,30 @@ int flock_lock_inode_wait(struct inode *inode, struct file_lock *fl)
} }
EXPORT_SYMBOL(flock_lock_inode_wait); EXPORT_SYMBOL(flock_lock_inode_wait);
/**
* locks_lock_inode_wait - Apply a lock to an inode
* @inode: inode of the file to apply to
* @fl: The lock to be applied
*
* Apply a POSIX or FLOCK style lock request to an inode.
*/
int locks_lock_inode_wait(struct inode *inode, struct file_lock *fl)
{
int res = 0;
switch (fl->fl_flags & (FL_POSIX|FL_FLOCK)) {
case FL_POSIX:
res = posix_lock_inode_wait(inode, fl);
break;
case FL_FLOCK:
res = flock_lock_inode_wait(inode, fl);
break;
default:
BUG();
}
return res;
}
EXPORT_SYMBOL(locks_lock_inode_wait);
/** /**
* sys_flock: - flock() system call. * sys_flock: - flock() system call.
* @fd: the file descriptor to lock. * @fd: the file descriptor to lock.
......
...@@ -1059,6 +1059,7 @@ extern int vfs_test_lock(struct file *, struct file_lock *); ...@@ -1059,6 +1059,7 @@ extern int vfs_test_lock(struct file *, struct file_lock *);
extern int vfs_lock_file(struct file *, unsigned int, struct file_lock *, struct file_lock *); extern int vfs_lock_file(struct file *, unsigned int, struct file_lock *, struct file_lock *);
extern int vfs_cancel_lock(struct file *filp, struct file_lock *fl); extern int vfs_cancel_lock(struct file *filp, struct file_lock *fl);
extern int flock_lock_inode_wait(struct inode *inode, struct file_lock *fl); extern int flock_lock_inode_wait(struct inode *inode, struct file_lock *fl);
extern int locks_lock_inode_wait(struct inode *inode, struct file_lock *fl);
extern int __break_lease(struct inode *inode, unsigned int flags, unsigned int type); extern int __break_lease(struct inode *inode, unsigned int flags, unsigned int type);
extern void lease_get_mtime(struct inode *, struct timespec *time); extern void lease_get_mtime(struct inode *, struct timespec *time);
extern int generic_setlease(struct file *, long, struct file_lock **, void **priv); extern int generic_setlease(struct file *, long, struct file_lock **, void **priv);
...@@ -1177,6 +1178,11 @@ static inline int flock_lock_inode_wait(struct inode *inode, ...@@ -1177,6 +1178,11 @@ static inline int flock_lock_inode_wait(struct inode *inode,
return -ENOLCK; return -ENOLCK;
} }
static inline int locks_lock_inode_wait(struct inode *inode, struct file_lock *fl)
{
return -ENOLCK;
}
static inline int __break_lease(struct inode *inode, unsigned int mode, unsigned int type) static inline int __break_lease(struct inode *inode, unsigned int mode, unsigned int type)
{ {
return 0; return 0;
...@@ -1225,6 +1231,11 @@ static inline int flock_lock_file_wait(struct file *filp, struct file_lock *fl) ...@@ -1225,6 +1231,11 @@ static inline int flock_lock_file_wait(struct file *filp, struct file_lock *fl)
return flock_lock_inode_wait(file_inode(filp), fl); return flock_lock_inode_wait(file_inode(filp), fl);
} }
static inline int locks_lock_file_wait(struct file *filp, struct file_lock *fl)
{
return locks_lock_inode_wait(file_inode(filp), fl);
}
struct fasync_struct { struct fasync_struct {
spinlock_t fa_lock; spinlock_t fa_lock;
int magic; int magic;
......
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