Commit aec15824 authored by Jeff Layton's avatar Jeff Layton Committed by Chuck Lever
Browse files

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: 7f024fcd ("Keep read and write fds with each nlm_file")
Signed-off-by: default avatarJeff Layton <jlayton@kernel.org>
Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
parent 5b2f3e07
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -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;
		}