diff options
author | tjr <tjr@FreeBSD.org> | 2003-03-16 11:19:54 +0000 |
---|---|---|
committer | tjr <tjr@FreeBSD.org> | 2003-03-16 11:19:54 +0000 |
commit | c7f6ce0200c73f9bd40e24c337d29c1deeed5011 (patch) | |
tree | 553c850e9df37d80c4dc6535d1897b6c021253a8 | |
parent | 4641d3d127dcdaae61daa54f6eee3d51be117e44 (diff) | |
download | FreeBSD-src-c7f6ce0200c73f9bd40e24c337d29c1deeed5011.zip FreeBSD-src-c7f6ce0200c73f9bd40e24c337d29c1deeed5011.tar.gz |
Make udf_allocv() return an unlocked vnode instead of a locked one
to avoid a "locking against myself" panic when udf_hashins() tries
to lock it again. Lock the vnode in udf_hashins() before adding it to
the hash bucket.
-rw-r--r-- | sys/fs/udf/udf_vnops.c | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/sys/fs/udf/udf_vnops.c b/sys/fs/udf/udf_vnops.c index 6582f92..d48e36d 100644 --- a/sys/fs/udf/udf_vnops.c +++ b/sys/fs/udf/udf_vnops.c @@ -127,10 +127,10 @@ udf_hashins(struct udf_node *node) udfmp = node->udfmp; + vn_lock(node->i_vnode, LK_EXCLUSIVE | LK_RETRY, curthread); mtx_lock(&udfmp->hash_mtx); TAILQ_INSERT_TAIL(&udfmp->udf_tqh, node, tq); mtx_unlock(&udfmp->hash_mtx); - vn_lock(node->i_vnode, LK_EXCLUSIVE | LK_RETRY, curthread); return (0); } @@ -161,7 +161,6 @@ udf_allocv(struct mount *mp, struct vnode **vpp, struct thread *td) return (error); } - vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td); *vpp = vp; return (0); } |