vfs: fix LK_RETRY logic braino in r312600

This commit is contained in:
Mateusz Guzik 2017-01-21 20:34:20 +00:00
parent f348557302
commit eaf0969bda
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=312606

View File

@ -1549,13 +1549,15 @@ _vn_lock(struct vnode *vp, int flags, char *file, int line)
KASSERT((flags & LK_RETRY) == 0 || error == 0,
("LK_RETRY set with incompatible flags (0x%x) or "
" an error occurred (%d)", flags, error));
if (flags & LK_RETRY) {
if ((error != 0))
goto retry;
if ((vp->v_iflag & VI_DOOMED)) {
if ((flags & LK_RETRY) == 0) {
if (error == 0 && vp->v_iflag & VI_DOOMED) {
VOP_UNLOCK(vp, 0);
error = ENOENT;
}
} else {
if (error != 0)
goto retry;
}
return (error);
}