fcntl(F_SETSIG) fix
fcntl(F_SETSIG) no longer works on leases because lease_release_private_callback() gets called as the lease is copied in order to initialise it. The problem is that lease_alloc() performs an unnecessary initialisation, which sets the lease_manager_ops. Avoid the problem by allocating the target lease structure using locks_alloc_lock(). Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com> Signed-off-by: Adrian Bunk <bunk@stusta.de>
This commit is contained in:
committed by
Adrian Bunk
parent
ba6c35f888
commit
25e1dd8a73
+4
-2
@@ -1356,8 +1356,9 @@ static int __setlease(struct file *filp, long arg, struct file_lock **flp)
|
||||
if (!leases_enable)
|
||||
goto out;
|
||||
|
||||
error = lease_alloc(filp, arg, &fl);
|
||||
if (error)
|
||||
error = -ENOMEM;
|
||||
fl = locks_alloc_lock();
|
||||
if (fl == NULL)
|
||||
goto out;
|
||||
|
||||
locks_copy_lock(fl, lease);
|
||||
@@ -1365,6 +1366,7 @@ static int __setlease(struct file *filp, long arg, struct file_lock **flp)
|
||||
locks_insert_lock(before, fl);
|
||||
|
||||
*flp = fl;
|
||||
error = 0;
|
||||
out:
|
||||
return error;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user