mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 19:51:31 -04:00
locks: don't call ->copy_lock methods on return of conflicting locks
The file_lock structure is used both as a heavy-weight representation of an active lock, with pointers to reference-counted structures, etc., and as a simple container for parameters that describe a file lock. The conflicting lock returned from __posix_lock_file is an example of the latter; so don't call the filesystem or lock manager callbacks when copying to it. This also saves the need for an unnecessary locks_init_lock in the nfsv4 server. Thanks to Trond for pointing out the error. Signed-off-by: J. Bruce Fields <[email protected]> Cc: Trond Myklebust <[email protected]>
This commit is contained in:
parent
17efa372cf
commit
1a747ee0cc
4 changed files with 4 additions and 6 deletions
|
|
@ -224,7 +224,7 @@ static void locks_copy_private(struct file_lock *new, struct file_lock *fl)
|
|||
/*
|
||||
* Initialize a new lock from an existing file_lock structure.
|
||||
*/
|
||||
static void __locks_copy_lock(struct file_lock *new, const struct file_lock *fl)
|
||||
void __locks_copy_lock(struct file_lock *new, const struct file_lock *fl)
|
||||
{
|
||||
new->fl_owner = fl->fl_owner;
|
||||
new->fl_pid = fl->fl_pid;
|
||||
|
|
@ -833,7 +833,7 @@ static int __posix_lock_file(struct inode *inode, struct file_lock *request, str
|
|||
if (!posix_locks_conflict(request, fl))
|
||||
continue;
|
||||
if (conflock)
|
||||
locks_copy_lock(conflock, fl);
|
||||
__locks_copy_lock(conflock, fl);
|
||||
error = -EAGAIN;
|
||||
if (!(request->fl_flags & FL_SLEEP))
|
||||
goto out;
|
||||
|
|
|
|||
Loading…
Reference in a new issue