Fix a bug in r214049. The nvp == vp case shall be handled specially

only for !usevget case. If VFS_VGET is working, the vnode shared lock
is obtained recursively and vput() shall be done, not vunref().

Submitted by:	rmacklem
Tested by:	Josh Carroll <josh.carroll gmail com>
MFC after:	3 days
This commit is contained in:
Konstantin Belousov 2010-11-05 21:13:16 +00:00
parent e7bb9ab605
commit fc79a404dd

View File

@ -3252,7 +3252,7 @@ nfsrv_readdirplus(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
nfhp->fh_fsid = nvp->v_mount->mnt_stat.f_fsid;
if ((error1 = VOP_VPTOFH(nvp, &nfhp->fh_fid)) == 0)
error1 = VOP_GETATTR(nvp, vap, cred);
if (vp == nvp)
if (!usevget && vp == nvp)
vunref(nvp);
else
vput(nvp);