From: Trond Myklebust Date: Tue, 29 Aug 2006 06:15:54 +0000 (-0400) Subject: fcntl(F_SETSIG) fix X-Git-Tag: v2.6.17.12~16 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f4eb9f37abad092ac27fabc7d451d6980fff8fb1;p=thirdparty%2Fkernel%2Fstable.git 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 Signed-off-by: Andrew Morton Signed-off-by: Greg Kroah-Hartman --- diff --git a/fs/locks.c b/fs/locks.c index ab61a8b548292..529a0ed179f15 100644 --- a/fs/locks.c +++ b/fs/locks.c @@ -1389,8 +1389,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); @@ -1398,6 +1399,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; }