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>
This commit is contained in:
@@ -3427,11 +3427,11 @@ static void nfsd_break_deleg_cb(struct file_lock *fl)
|
||||
spin_unlock(&fp->fi_lock);
|
||||
}
|
||||
|
||||
static
|
||||
int nfsd_change_deleg_cb(struct file_lock **onlist, int arg)
|
||||
static int
|
||||
nfsd_change_deleg_cb(struct file_lock **onlist, int arg, struct list_head *dispose)
|
||||
{
|
||||
if (arg & F_UNLCK)
|
||||
return lease_modify(onlist, arg);
|
||||
return lease_modify(onlist, arg, dispose);
|
||||
else
|
||||
return -EAGAIN;
|
||||
}
|
||||
|
Reference in New Issue
Block a user