locks: pass correct "before" pointer to locks_unlink_lock in generic_add_lease
authorJeff Layton <jlayton@primarydata.com>
Tue, 9 Sep 2014 20:00:51 +0000 (16:00 -0400)
committerJeff Layton <jlayton@primarydata.com>
Tue, 9 Sep 2014 20:00:51 +0000 (16:00 -0400)
The argument to locks_unlink_lock can't be just any pointer to a
pointer. It must be a pointer to the fl_next field in the previous
lock in the list.

Cc: <stable@vger.kernel.org> # v3.15+
Signed-off-by: Jeff Layton <jlayton@primarydata.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
fs/locks.c

index cb66fb05ad4a97e6ed9e975dc631c09b42d7fc03..bb08857f90b56cb2b51a77b3f69acfef33a8fd9c 100644 (file)
@@ -1619,7 +1619,7 @@ static int generic_add_lease(struct file *filp, long arg, struct file_lock **flp
        smp_mb();
        error = check_conflicting_open(dentry, arg);
        if (error)
-               locks_unlink_lock(flp);
+               locks_unlink_lock(before);
 out:
        if (is_deleg)
                mutex_unlock(&inode->i_mutex);