From b0233f1a88128b8b2a05a10dbc70dab918cd0630 Mon Sep 17 00:00:00 2001 From: tol Date: Wed, 14 Mar 2007 16:44:30 +0000 Subject: [PATCH] take proper care of cache vnodes on MacOS too --- nnpfs/bsd/nnpfs/nnpfs_fs.h | 1 + nnpfs/bsd/nnpfs_message.c | 2 +- nnpfs/bsd/nnpfs_node-bsd.c | 29 +++++++++++++++++++++++++---- 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/nnpfs/bsd/nnpfs/nnpfs_fs.h b/nnpfs/bsd/nnpfs/nnpfs_fs.h index ef4df5d61..64df07bbb 100644 --- a/nnpfs/bsd/nnpfs/nnpfs_fs.h +++ b/nnpfs/bsd/nnpfs/nnpfs_fs.h @@ -72,6 +72,7 @@ int nnpfs_new_node(struct nnpfs *, struct nnpfs_msg_node *, char *, struct nnpfs_node **, d_thread_t *, int); void nnpfs_free_node(struct nnpfs *nnpfsp, struct nnpfs_node *node); int nnpfs_free_all_nodes(struct nnpfs *, int, int); +void nnpfs_release_cachevn(struct nnpfs_node *node); void nnpfs_release_data(struct nnpfs_node *node); int nnpfs_dnlc_enter(struct vnode *, nnpfs_componentname *, struct vnode *); diff --git a/nnpfs/bsd/nnpfs_message.c b/nnpfs/bsd/nnpfs_message.c index e33af1b7c..3430b1f55 100644 --- a/nnpfs/bsd/nnpfs_message.c +++ b/nnpfs/bsd/nnpfs_message.c @@ -286,7 +286,7 @@ nnpfs_message_installdata(int fd, t->cache_vn, vp, (unsigned long)t->index, (unsigned long)message->cache_id); - nnpfs_vletgo(t->cache_vn); + nnpfs_release_cachevn(t); } t->cache_vn = vp; } diff --git a/nnpfs/bsd/nnpfs_node-bsd.c b/nnpfs/bsd/nnpfs_node-bsd.c index 6c1e28ad0..66fc0f061 100644 --- a/nnpfs/bsd/nnpfs_node-bsd.c +++ b/nnpfs/bsd/nnpfs_node-bsd.c @@ -271,6 +271,24 @@ retry: * this should always be called with dev lock held */ void +nnpfs_release_cachevn(struct nnpfs_node *node) +{ + nnpfs_assert(node->cache_vn); +#ifdef __APPLE__ + vnode_close(node->cache_vn, 0, NULL); +#else + nnpfs_vletgo(node->cache_vn); +#endif + + node->cache_vn = NULL; +} + +/* + * clear data handle + * + * this should always be called with dev lock held + */ +void nnpfs_release_data(struct nnpfs_node *node) { NNPFS_TOKEN_CLEAR(node, ~0, @@ -279,11 +297,14 @@ nnpfs_release_data(struct nnpfs_node *node) if (node->index != NNPFS_NO_INDEX) { node->index = NNPFS_NO_INDEX; -#ifndef __APPLE__ /* XXX */ - nnpfs_assert(node->cache_vn); - nnpfs_vletgo(node->cache_vn); - node->cache_vn = NULL; + +#ifdef __APPLE__ + if (nnpfs_vnode_isdir(XNODE_TO_VNODE(node))) + nnpfs_release_cachevn(node); +#else + nnpfs_release_cachevn(node); #endif + nnpfs_block_free_all(node); } } -- 2.11.4.GIT