Merge tag 'nfsd-6.8-3' of git://git.kernel.org/pub/scm/linux/kernel/git/cel/linux
Pull nfsd fix from Chuck Lever: - Address a deadlock regression in RELEASE_LOCKOWNER * tag 'nfsd-6.8-3' of git://git.kernel.org/pub/scm/linux/kernel/git/cel/linux: nfsd: don't take fi_lock in nfsd_break_deleg_cb()
This commit is contained in:
@@ -4945,10 +4945,8 @@ nfsd_break_deleg_cb(struct file_lock *fl)
|
||||
*/
|
||||
fl->fl_break_time = 0;
|
||||
|
||||
spin_lock(&fp->fi_lock);
|
||||
fp->fi_had_conflict = true;
|
||||
nfsd_break_one_deleg(dp);
|
||||
spin_unlock(&fp->fi_lock);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -5557,11 +5555,12 @@ nfs4_set_delegation(struct nfsd4_open *open, struct nfs4_ol_stateid *stp,
|
||||
if (status)
|
||||
goto out_unlock;
|
||||
|
||||
status = -EAGAIN;
|
||||
if (fp->fi_had_conflict)
|
||||
goto out_unlock;
|
||||
|
||||
spin_lock(&state_lock);
|
||||
spin_lock(&fp->fi_lock);
|
||||
if (fp->fi_had_conflict)
|
||||
status = -EAGAIN;
|
||||
else
|
||||
status = hash_delegation_locked(dp, fp);
|
||||
spin_unlock(&fp->fi_lock);
|
||||
spin_unlock(&state_lock);
|
||||
|
Reference in New Issue
Block a user