aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenjamin Coddington <bcodding@redhat.com>2015-10-22 13:38:13 -0400
committerJeff Layton <jeff.layton@primarydata.com>2015-10-22 14:57:20 -0400
commite55c34a66f87e78fb1fc6b623b78c5ad74b475af (patch)
treeaefee1b4c4e7a0fb2c6ba1db9fee681e52e08506
parent6ca7d910121af4dd8c83294b50546f4664b2a932 (diff)
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>
-rw-r--r--fs/locks.c24
-rw-r--r--include/linux/fs.h11
2 files changed, 35 insertions, 0 deletions
diff --git a/fs/locks.c b/fs/locks.c
index c74c9df419bc..c1745119fc5b 100644
--- a/fs/locks.c
+++ b/fs/locks.c
@@ -1882,6 +1882,30 @@ int flock_lock_inode_wait(struct inode *inode, struct file_lock *fl)
1882EXPORT_SYMBOL(flock_lock_inode_wait); 1882EXPORT_SYMBOL(flock_lock_inode_wait);
1883 1883
1884/** 1884/**
1885 * locks_lock_inode_wait - Apply a lock to an inode
1886 * @inode: inode of the file to apply to
1887 * @fl: The lock to be applied
1888 *
1889 * Apply a POSIX or FLOCK style lock request to an inode.
1890 */
1891int locks_lock_inode_wait(struct inode *inode, struct file_lock *fl)
1892{
1893 int res = 0;
1894 switch (fl->fl_flags & (FL_POSIX|FL_FLOCK)) {
1895 case FL_POSIX:
1896 res = posix_lock_inode_wait(inode, fl);
1897 break;
1898 case FL_FLOCK:
1899 res = flock_lock_inode_wait(inode, fl);
1900 break;
1901 default:
1902 BUG();
1903 }
1904 return res;
1905}
1906EXPORT_SYMBOL(locks_lock_inode_wait);
1907
1908/**
1885 * sys_flock: - flock() system call. 1909 * sys_flock: - flock() system call.
1886 * @fd: the file descriptor to lock. 1910 * @fd: the file descriptor to lock.
1887 * @cmd: the type of lock to apply. 1911 * @cmd: the type of lock to apply.
diff --git a/include/linux/fs.h b/include/linux/fs.h
index 72d8a844c692..b064d4c0b233 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -1059,6 +1059,7 @@ extern int vfs_test_lock(struct file *, struct file_lock *);
1059extern int vfs_lock_file(struct file *, unsigned int, struct file_lock *, struct file_lock *); 1059extern int vfs_lock_file(struct file *, unsigned int, struct file_lock *, struct file_lock *);
1060extern int vfs_cancel_lock(struct file *filp, struct file_lock *fl); 1060extern int vfs_cancel_lock(struct file *filp, struct file_lock *fl);
1061extern int flock_lock_inode_wait(struct inode *inode, struct file_lock *fl); 1061extern int flock_lock_inode_wait(struct inode *inode, struct file_lock *fl);
1062extern int locks_lock_inode_wait(struct inode *inode, struct file_lock *fl);
1062extern int __break_lease(struct inode *inode, unsigned int flags, unsigned int type); 1063extern int __break_lease(struct inode *inode, unsigned int flags, unsigned int type);
1063extern void lease_get_mtime(struct inode *, struct timespec *time); 1064extern void lease_get_mtime(struct inode *, struct timespec *time);
1064extern int generic_setlease(struct file *, long, struct file_lock **, void **priv); 1065extern 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 return -ENOLCK; 1178 return -ENOLCK;
1178} 1179}
1179 1180
1181static inline int locks_lock_inode_wait(struct inode *inode, struct file_lock *fl)
1182{
1183 return -ENOLCK;
1184}
1185
1180static inline int __break_lease(struct inode *inode, unsigned int mode, unsigned int type) 1186static inline int __break_lease(struct inode *inode, unsigned int mode, unsigned int type)
1181{ 1187{
1182 return 0; 1188 return 0;
@@ -1225,6 +1231,11 @@ static inline int flock_lock_file_wait(struct file *filp, struct file_lock *fl)
1225 return flock_lock_inode_wait(file_inode(filp), fl); 1231 return flock_lock_inode_wait(file_inode(filp), fl);
1226} 1232}
1227 1233
1234static inline int locks_lock_file_wait(struct file *filp, struct file_lock *fl)
1235{
1236 return locks_lock_inode_wait(file_inode(filp), fl);
1237}
1238
1228struct fasync_struct { 1239struct fasync_struct {
1229 spinlock_t fa_lock; 1240 spinlock_t fa_lock;
1230 int magic; 1241 int magic;