From mboxrd@z Thu Jan 1 00:00:00 1970 From: Benjamin Coddington Subject: [PATCH 1/3] locks: introduce locks_lock_inode_wait() Date: Thu, 22 Oct 2015 11:35:54 -0400 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Cc: Latchesar Ionkov , linux-fsdevel@vger.kernel.org, Trond Myklebust , devel@driverdev.osuosl.org, Yan Zheng , cluster-devel@redhat.com, Sage Weil , Miklos Szeredi , Christoph Hellwig , fuse-devel@lists.sourceforge.net, Christine Caulfield , v9fs-developer@lists.sourceforge.net, Ilya Dryomov , linux-cifs@vger.kernel.org, Eric Van Hensbergen , Mark Fasheh , Oleg Drokin , Julia Lawall , David Teigland , Joel Becker , ceph-devel@vger.kernel.org, Abdul Hussain , Steven Whitehouse , linux-nfs@vger.kernel.org, Andreas Dilger , Greg K To: Jeff Layton , "J. Bruce Fields" , Alexander Viro Return-path: In-Reply-To: In-Reply-To: References: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: driverdev-devel-bounces@linuxdriverproject.org Sender: "devel" List-Id: linux-fsdevel.vger.kernel.org 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 --- fs/locks.c | 24 ++++++++++++++++++++++++ include/linux/fs.h | 11 +++++++++++ 2 files changed, 35 insertions(+), 0 deletions(-) diff --git a/fs/locks.c b/fs/locks.c index 2a54c80..68b1784 100644 --- a/fs/locks.c +++ b/fs/locks.c @@ -1876,6 +1876,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. * @cmd: the type of lock to apply. diff --git a/include/linux/fs.h b/include/linux/fs.h index 72d8a84..2e283b7 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 *); 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_file_wait(struct file *filp, 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; -- 1.7.1