Patch "locks: new helpers - flock_lock_inode_wait and posix_lock_inode_wait" has been added to the 4.1-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
locks: new helpers - flock_lock_inode_wait and posix_lock_inode_wait
to the 4.1-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
locks-new-helpers-flock_lock_inode_wait-and-posix_lock_inode_wait.patch
and it can be found in the queue-4.1 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
29d01b22eaa18d8b46091d3c98c6001c49f78e4aMon Sep 17 00:00:00 2001
From: Jeff Layton <[email protected]>
Date: Sat, 11 Jul 2015 06:43:02 -0400
Subject: locks: new helpers - flock_lock_inode_wait and posix_lock_inode_wait
From: Jeff Layton <[email protected]>
commit 29d01b22eaa18d8b46091d3c98c6001c49f78e4a upstream.
Allow callers to pass in an inode instead of a filp.
--- fs/locks.c | 50 ++++++++++++++++++++++++++++++++++++++------------ include/linux/fs.h | 14 ++++++++++++++ 2 files changed, 52 insertions(+), 12 deletions(-)
fs/locks.c +38 -12
@@ -1163,20 +1163,19 @@ int posix_lock_file(struct file *filp, sEXPORT_SYMBOL (posix_lock_file);/** -* posix_lock_file_wait - Apply a POSIX-style lock to a file -* @filp: The file to apply the lock to +* posix_lock_inode_wait - Apply a POSIX-style lock to a file +* @inode: inode of file to which lock request should be applied * @fl: The lock to be applied * -* Add a POSIX style lock to a file. -* We merge adjacent & overlapping locks whenever possible. -* POSIX locks are sorted by owner task, then by starting address +* Variant of posix_lock_file_wait that does not take a filp, and so can be +* used after the filp has already been torn down. */ -int posix_lock_file_wait (struct file *filp,struct file_lock *fl) +int posix_lock_inode_wait (struct inode *inode,struct file_lock *fl) {int error;might_sleep ();for (;;) { - error =posix_lock_file (filp, fl,NULL ); + error =__posix_lock_file (inode, fl,NULL );if (error !=FILE_LOCK_DEFERRED )break ; error =wait_event_interruptible (fl->fl_wait, !fl->fl_next);
@@ -1188,6 +1187,21 @@ int posix_lock_file_wait(struct file *fi }return error; } +EXPORT_SYMBOL (posix_lock_inode_wait); + +/** +* posix_lock_file_wait - Apply a POSIX-style lock to a file +* @filp: The file to apply the lock to +* @fl: The lock to be applied +* +* Add a POSIX style lock to a file. +* We merge adjacent & overlapping locks whenever possible. +* POSIX locks are sorted by owner task, then by starting address +*/ +int posix_lock_file_wait (struct file *filp,struct file_lock *fl) +{ +return posix_lock_inode_wait (file_inode (filp), fl); +}EXPORT_SYMBOL (posix_lock_file_wait);/**
@@ -1850,18 +1864,18 @@ int fcntl_setlease(unsigned int fd, stru }/** -* flock_lock_file_wait - Apply a FLOCK-style lock to a file -* @filp: The file to apply the lock to +* flock_lock_inode_wait - Apply a FLOCK-style lock to a file +* @inode: inode of the file to apply to * @fl: The lock to be applied * -* Add a FLOCK style lock to a file. +* Apply a FLOCK style lock request to an inode. */ -int flock_lock_file_wait (struct file *filp,struct file_lock *fl) +int flock_lock_inode_wait (struct inode *inode,struct file_lock *fl) {int error;might_sleep ();for (;;) { - error =flock_lock_inode (file_inode (filp), fl); + error =flock_lock_inode (inode, fl);if (error !=FILE_LOCK_DEFERRED )break ; error =wait_event_interruptible (fl->fl_wait, !fl->fl_next);
@@ -1873,7 +1887,19 @@ int flock_lock_file_wait(struct file *fi }return error; } +EXPORT_SYMBOL (flock_lock_inode_wait); +/** +* flock_lock_file_wait - Apply a FLOCK-style lock to a file +* @filp: The file to apply the lock to +* @fl: The lock to be applied +* +* Add a FLOCK style lock to a file. +*/ +int flock_lock_file_wait (struct file *filp,struct file_lock *fl) +{ +return flock_lock_inode_wait (file_inode (filp), fl); +}EXPORT_SYMBOL (flock_lock_file_wait);/**
include/linux/fs.h +14 -0
@@ -1036,11 +1036,13 @@ extern void locks_remove_file(struct filextern void locks_release_private (struct file_lock *);extern void posix_test_lock (struct file *,struct file_lock *);extern int posix_lock_file (struct file *,struct file_lock *,struct file_lock *); +extern int posix_lock_inode_wait (struct inode *,struct file_lock *);extern int posix_lock_file_wait (struct file *,struct file_lock *);extern int posix_unblock_lock (struct file_lock *);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 flock_lock_file_wait (struct file *filp,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);
@@ -1127,6 +1129,12 @@ static inline int posix_lock_file(structreturn -ENOLCK ; } +static inline int posix_lock_inode_wait (struct inode *inode, +struct file_lock *fl) +{ +return -ENOLCK ; +} +static inline int posix_lock_file_wait (struct file *filp,struct file_lock *fl) {return -ENOLCK ;
@@ -1153,6 +1161,12 @@ static inline int vfs_cancel_lock(structreturn 0 ; } +static inline int flock_lock_inode_wait (struct inode *inode, +struct file_lock *request) +{ +return -ENOLCK ; +} +static inline int flock_lock_file_wait (struct file *filp,struct file_lock *request) {
Patches currently in stable-queue which might be from [email protected] are
queue-4.1/locks-new-helpers-flock_lock_inode_wait-and-posix_lock_inode_wait.patch queue-4.1/locks-have-flock_lock_file-take-an-inode-pointer-instead-of-a-filp.patch queue-4.1/locks-inline-posix_lock_file_wait-and-flock_lock_file_wait.patch queue-4.1/nfs4-have-do_vfs_lock-take-an-inode-pointer.patch