diff options
author | Benjamin Coddington <bcodding@redhat.com> | 2015-10-22 13:38:13 -0400 |
---|---|---|
committer | Jeff Layton <jeff.layton@primarydata.com> | 2015-10-22 14:57:20 -0400 |
commit | e55c34a66f87e78fb1fc6b623b78c5ad74b475af (patch) | |
tree | aefee1b4c4e7a0fb2c6ba1db9fee681e52e08506 | |
parent | 6ca7d910121af4dd8c83294b50546f4664b2a932 (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.c | 24 | ||||
-rw-r--r-- | include/linux/fs.h | 11 |
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) | |||
1882 | EXPORT_SYMBOL(flock_lock_inode_wait); | 1882 | EXPORT_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 | */ | ||
1891 | int 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 | } | ||
1906 | EXPORT_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 *); | |||
1059 | extern int vfs_lock_file(struct file *, unsigned int, struct file_lock *, struct file_lock *); | 1059 | extern int vfs_lock_file(struct file *, unsigned int, struct file_lock *, struct file_lock *); |
1060 | extern int vfs_cancel_lock(struct file *filp, struct file_lock *fl); | 1060 | extern int vfs_cancel_lock(struct file *filp, struct file_lock *fl); |
1061 | extern int flock_lock_inode_wait(struct inode *inode, struct file_lock *fl); | 1061 | extern int flock_lock_inode_wait(struct inode *inode, struct file_lock *fl); |
1062 | extern int locks_lock_inode_wait(struct inode *inode, struct file_lock *fl); | ||
1062 | extern int __break_lease(struct inode *inode, unsigned int flags, unsigned int type); | 1063 | extern int __break_lease(struct inode *inode, unsigned int flags, unsigned int type); |
1063 | extern void lease_get_mtime(struct inode *, struct timespec *time); | 1064 | extern void lease_get_mtime(struct inode *, struct timespec *time); |
1064 | extern int generic_setlease(struct file *, long, struct file_lock **, void **priv); | 1065 | 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 | return -ENOLCK; | 1178 | return -ENOLCK; |
1178 | } | 1179 | } |
1179 | 1180 | ||
1181 | static inline int locks_lock_inode_wait(struct inode *inode, struct file_lock *fl) | ||
1182 | { | ||
1183 | return -ENOLCK; | ||
1184 | } | ||
1185 | |||
1180 | static inline int __break_lease(struct inode *inode, unsigned int mode, unsigned int type) | 1186 | static 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 | ||
1234 | static 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 | |||
1228 | struct fasync_struct { | 1239 | struct fasync_struct { |
1229 | spinlock_t fa_lock; | 1240 | spinlock_t fa_lock; |
1230 | int magic; | 1241 | int magic; |