Don't enforce LK_RETRY to get existing vnode in tmpfs_alloc_vp()

Doomed vnode is hardly of any use here, besides all callers handle error
case. vfs_hash_get() does the same.

Don't mess with vnode holdcount, vget() takes care of it already.

Approved by:	mdf (mentor)
This commit is contained in:
Gleb Kurtsou 2012-03-14 08:29:21 +00:00
parent fd5c6edb78
commit ca846258e2
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=232959

View file

@ -320,9 +320,11 @@ tmpfs_alloc_vp(struct mount *mp, struct tmpfs_node *node, int lkflag,
MPASS((node->tn_vpstate & TMPFS_VNODE_DOOMED) == 0);
VI_LOCK(vp);
TMPFS_NODE_UNLOCK(node);
vholdl(vp);
(void) vget(vp, lkflag | LK_INTERLOCK | LK_RETRY, curthread);
vdrop(vp);
error = vget(vp, lkflag | LK_INTERLOCK, curthread);
if (error != 0) {
vp = NULL;
goto out;
}
/*
* Make sure the vnode is still there after
@ -420,11 +422,13 @@ tmpfs_alloc_vp(struct mount *mp, struct tmpfs_node *node, int lkflag,
out:
*vpp = vp;
MPASS(IFF(error == 0, *vpp != NULL && VOP_ISLOCKED(*vpp)));
#ifdef INVARIANTS
TMPFS_NODE_LOCK(node);
MPASS(*vpp == node->tn_vnode);
TMPFS_NODE_UNLOCK(node);
if (error == 0) {
MPASS(*vpp != NULL && VOP_ISLOCKED(*vpp));
TMPFS_NODE_LOCK(node);
MPASS(*vpp == node->tn_vnode);
TMPFS_NODE_UNLOCK(node);
}
#endif
return error;