Commit 6a2fcc51 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'nfsd-6.11-3' of git://git.kernel.org/pub/scm/linux/kernel/git/cel/linux

Pull nfsd fix from Chuck Lever:

 - One more write delegation fix

* tag 'nfsd-6.11-3' of git://git.kernel.org/pub/scm/linux/kernel/git/cel/linux:
  nfsd: fix nfsd4_deleg_getattr_conflict in presence of third party lease
parents 0efdc097 40927f3d
...@@ -8859,7 +8859,15 @@ nfsd4_deleg_getattr_conflict(struct svc_rqst *rqstp, struct dentry *dentry, ...@@ -8859,7 +8859,15 @@ nfsd4_deleg_getattr_conflict(struct svc_rqst *rqstp, struct dentry *dentry,
*/ */
if (type == F_RDLCK) if (type == F_RDLCK)
break; break;
goto break_lease;
nfsd_stats_wdeleg_getattr_inc(nn);
spin_unlock(&ctx->flc_lock);
status = nfserrno(nfsd_open_break_lease(inode, NFSD_MAY_READ));
if (status != nfserr_jukebox ||
!nfsd_wait_for_delegreturn(rqstp, inode))
return status;
return 0;
} }
if (type == F_WRLCK) { if (type == F_WRLCK) {
struct nfs4_delegation *dp = fl->c.flc_owner; struct nfs4_delegation *dp = fl->c.flc_owner;
...@@ -8868,7 +8876,6 @@ nfsd4_deleg_getattr_conflict(struct svc_rqst *rqstp, struct dentry *dentry, ...@@ -8868,7 +8876,6 @@ nfsd4_deleg_getattr_conflict(struct svc_rqst *rqstp, struct dentry *dentry,
spin_unlock(&ctx->flc_lock); spin_unlock(&ctx->flc_lock);
return 0; return 0;
} }
break_lease:
nfsd_stats_wdeleg_getattr_inc(nn); nfsd_stats_wdeleg_getattr_inc(nn);
dp = fl->c.flc_owner; dp = fl->c.flc_owner;
refcount_inc(&dp->dl_stid.sc_count); refcount_inc(&dp->dl_stid.sc_count);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment