Commit 2dfb928f authored by Jeff Layton's avatar Jeff Layton
Browse files

locks: move locks_free_lock calls in do_fcntl_add_lease outside spinlock



There's no need to call locks_free_lock here while still holding the
i_lock. Defer that until the lock has been dropped.

Acked-by: default avatarJ. Bruce Fields <bfields@fieldses.org>
Signed-off-by: default avatarJeff Layton <jlayton@primarydata.com>
parent ed9814d8
Loading
Loading
Loading
Loading
+7 −9
Original line number Diff line number Diff line
@@ -1761,13 +1761,10 @@ static int do_fcntl_add_lease(unsigned int fd, struct file *filp, long arg)
	ret = fl;
	spin_lock(&inode->i_lock);
	error = __vfs_setlease(filp, arg, &ret);
	if (error) {
		spin_unlock(&inode->i_lock);
		locks_free_lock(fl);
		goto out_free_fasync;
	}
	if (ret != fl)
		locks_free_lock(fl);
	if (error)
		goto out_unlock;
	if (ret == fl)
		fl = NULL;

	/*
	 * fasync_insert_entry() returns the old entry if any.
@@ -1779,9 +1776,10 @@ static int do_fcntl_add_lease(unsigned int fd, struct file *filp, long arg)
		new = NULL;

	error = __f_setown(filp, task_pid(current), PIDTYPE_PID, 0);
out_unlock:
	spin_unlock(&inode->i_lock);

out_free_fasync:
	if (fl)
		locks_free_lock(fl);
	if (new)
		fasync_free(new);
	return error;