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: Benjamin Coddington <bcodding@redhat.com> Signed-off-by: Jeff Layton <jeff.layton@primarydata.com>
This commit is contained in:
Родитель
6ca7d91012
Коммит
e55c34a66f
24
fs/locks.c
24
fs/locks.c
|
@ -1881,6 +1881,30 @@ int flock_lock_inode_wait(struct inode *inode, struct file_lock *fl)
|
|||
}
|
||||
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.
|
||||
* @fd: the file descriptor to 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_cancel_lock(struct file *filp, 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 void lease_get_mtime(struct inode *, struct timespec *time);
|
||||
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,
|
|||
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)
|
||||
{
|
||||
return 0;
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
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 {
|
||||
spinlock_t fa_lock;
|
||||
int magic;
|
||||
|
|
Загрузка…
Ссылка в новой задаче