vdropl() drops the vnode interlock. Thus, the code in the QUOTA case that

upgrades the vnode lock if it is share locked was dropping the interlock
before actually checking VI_DOOMED.  Fix this by do the vdropl() after the
check and relying on it to drop the vnode interlock.

Reported by:	pho
Reviewed by:	kib
MFC after:	1 week
This commit is contained in:
John Baldwin 2008-09-16 16:15:38 +00:00
parent 42ff2756c7
commit 1b7cf11b00
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=183078

View File

@ -335,13 +335,12 @@ ufs_access(ap)
vhold(vp);
vn_lock(vp, LK_UPGRADE | LK_RETRY);
VI_LOCK(vp);
vdropl(vp);
if (vp->v_iflag & VI_DOOMED) {
VI_UNLOCK(vp);
vdropl(vp);
error = ENOENT;
goto relock;
}
VI_UNLOCK(vp);
vdropl(vp);
} else
relocked = 0;
error = getinoquota(ip);