locks: define a lm_setup handler for leases
authorJeff Layton <jlayton@primarydata.com>
Fri, 22 Aug 2014 14:55:47 +0000 (10:55 -0400)
committerJeff Layton <jlayton@primarydata.com>
Tue, 7 Oct 2014 18:06:12 +0000 (14:06 -0400)
commit1c7dd2ff430fa14b45c9def54468e3a25ab8342b
treea80695c6ca57be5da96c63b67d1264507bfe509e
parente6f5c78930e409f3a6b37f5484313a416359ac7f
locks: define a lm_setup handler for leases

...and move the fasync setup into it for fcntl lease calls. At the same
time, change the semantics of how the file_lock double-pointer is
handled. Up until now, on a successful lease return you got a pointer to
the lock on the list. This is bad, since that pointer can no longer be
relied on as valid once the inode->i_lock has been released.

Change the code to instead just zero out the pointer if the lease we
passed in ended up being used. Then the callers can just check to see
if it's NULL after the call and free it if it isn't.

The priv argument has the same semantics. The lm_setup function can
zero the pointer out to signal to the caller that it should not be
freed after the function returns.

Signed-off-by: Jeff Layton <jlayton@primarydata.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
fs/locks.c
fs/nfsd/nfs4state.c
include/linux/fs.h