mirror of
https://git.FreeBSD.org/src.git
synced 2025-01-24 16:10:11 +00:00
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:
parent
fd5c6edb78
commit
ca846258e2
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=232959
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user