diff options
author | Jeff Layton <jlayton@primarydata.com> | 2014-09-01 07:12:07 -0400 |
---|---|---|
committer | Jeff Layton <jlayton@primarydata.com> | 2014-10-07 14:06:13 -0400 |
commit | c45198eda2794bb72601c9f96266d8b95db66dd5 (patch) | |
tree | 59c973d0d5356e113efd22ece677267cbc07e0af /fs/nfsd | |
parent | f82b4b6780afabce9d9a91c84fae17ec3d63b9d7 (diff) |
locks: move freeing of leases outside of i_lock
There was only one place where we still could free a file_lock while
holding the i_lock -- lease_modify. Add a new list_head argument to the
lm_change operation, pass in a private list when calling it, and fix
those callers to dispose of the list once the lock has been dropped.
Signed-off-by: Jeff Layton <jlayton@primarydata.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Diffstat (limited to 'fs/nfsd')
-rw-r--r-- | fs/nfsd/nfs4state.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c index 5349528136e2..604ab6decd28 100644 --- a/fs/nfsd/nfs4state.c +++ b/fs/nfsd/nfs4state.c | |||
@@ -3427,11 +3427,11 @@ static void nfsd_break_deleg_cb(struct file_lock *fl) | |||
3427 | spin_unlock(&fp->fi_lock); | 3427 | spin_unlock(&fp->fi_lock); |
3428 | } | 3428 | } |
3429 | 3429 | ||
3430 | static | 3430 | static int |
3431 | int nfsd_change_deleg_cb(struct file_lock **onlist, int arg) | 3431 | nfsd_change_deleg_cb(struct file_lock **onlist, int arg, struct list_head *dispose) |
3432 | { | 3432 | { |
3433 | if (arg & F_UNLCK) | 3433 | if (arg & F_UNLCK) |
3434 | return lease_modify(onlist, arg); | 3434 | return lease_modify(onlist, arg, dispose); |
3435 | else | 3435 | else |
3436 | return -EAGAIN; | 3436 | return -EAGAIN; |
3437 | } | 3437 | } |