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:
parent
42ff2756c7
commit
1b7cf11b00
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=183078
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user