mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	lockd: set fl_owner when unlocking files
Unlocking a POSIX lock on an inode with vfs_lock_file only works if
the owner matches. Ensure we set it in the request.
Cc: J. Bruce Fields <bfields@fieldses.org>
Fixes: 7f024fcd5c ("Keep read and write fds with each nlm_file")
Signed-off-by: Jeff Layton <jlayton@kernel.org>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
			
			
This commit is contained in:
		
							parent
							
								
									5b2f3e0777
								
							
						
					
					
						commit
						aec158242b
					
				
					 1 changed files with 3 additions and 2 deletions
				
			
		| 
						 | 
				
			
			@ -176,7 +176,7 @@ nlm_delete_file(struct nlm_file *file)
 | 
			
		|||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int nlm_unlock_files(struct nlm_file *file)
 | 
			
		||||
static int nlm_unlock_files(struct nlm_file *file, fl_owner_t owner)
 | 
			
		||||
{
 | 
			
		||||
	struct file_lock lock;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -184,6 +184,7 @@ static int nlm_unlock_files(struct nlm_file *file)
 | 
			
		|||
	lock.fl_type  = F_UNLCK;
 | 
			
		||||
	lock.fl_start = 0;
 | 
			
		||||
	lock.fl_end   = OFFSET_MAX;
 | 
			
		||||
	lock.fl_owner = owner;
 | 
			
		||||
	if (file->f_file[O_RDONLY] &&
 | 
			
		||||
	    vfs_lock_file(file->f_file[O_RDONLY], F_SETLK, &lock, NULL))
 | 
			
		||||
		goto out_err;
 | 
			
		||||
| 
						 | 
				
			
			@ -225,7 +226,7 @@ nlm_traverse_locks(struct nlm_host *host, struct nlm_file *file,
 | 
			
		|||
		if (match(lockhost, host)) {
 | 
			
		||||
 | 
			
		||||
			spin_unlock(&flctx->flc_lock);
 | 
			
		||||
			if (nlm_unlock_files(file))
 | 
			
		||||
			if (nlm_unlock_files(file, fl->fl_owner))
 | 
			
		||||
				return 1;
 | 
			
		||||
			goto again;
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue