summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean-Pierre André <jpandre@users.sourceforge.net>2012-08-22 10:00:22 +0200
committerJean-Pierre André <jpandre@users.sourceforge.net>2012-08-22 10:00:22 +0200
commit263ae23c5fd69a76e83561e1210e434cc73cb73d (patch)
tree7ce3d7c0b41ac7543df0e00392e004e7f21ef2b8
parent3cc3a491a428082bd64a676cc96360dee643dcae (diff)
downloadillumos-fusefs-263ae23c5fd69a76e83561e1210e434cc73cb73d.tar.gz
Released the locks before deleting inodes
-rw-r--r--kernel/fuse_vnops.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/kernel/fuse_vnops.c b/kernel/fuse_vnops.c
index a6e8526..237283f 100644
--- a/kernel/fuse_vnops.c
+++ b/kernel/fuse_vnops.c
@@ -2221,6 +2221,7 @@ sendmsg:
* XXX: This call releases vnode with vn_free, can this
* be an issue? Or does VN_RELE do the required job for us?
*/
+ VN_RELE(vp);
fuse_vnode_free(vp, sep);
vp = NULL;
}
@@ -2997,6 +2998,7 @@ fuse_remove(vnode_t *dvp, char *name, cred_t *credp, caller_context_t *ct,
* XXX: This call releases vnode with vn_free, can this
* be an issue? Or does VN_RELE do the required job for us?
*/
+ VN_RELE(vp);
fuse_vnode_free(vp, sep);
cleanup:
fuse_free_msg(msgp);
@@ -3031,6 +3033,7 @@ fuse_vnode_free(struct vnode *vp, fuse_session_t *sep)
}
vp->v_data = NULL;
+ VFS_RELE(vp->v_vfsp);
if (!vn_has_cached_data(vp)) /* be safe : better leak than corruption */
vn_free(vp);
}
@@ -3074,6 +3077,7 @@ void fuse_destroy_cache(fuse_session_t *sep)
fuse_vnode_cache_remove(vp, sep);
fuse_free_vdata(vp);
vp->v_data = NULL;
+ VFS_RELE(vp->v_vfsp);
if (!vn_has_cached_data(vp))
vn_free(vp);
item = (fuse_avl_cache_node_t*)