]> git.saurik.com Git - apple/xnu.git/blobdiff - bsd/vfs/vfs_vnops.c
xnu-1228.12.14.tar.gz
[apple/xnu.git] / bsd / vfs / vfs_vnops.c
index a8fc43f7c406b28937756011c947eeaf61b849ae..0eb1036ade45c86b423757895466f188b838da06 100644 (file)
@@ -424,7 +424,13 @@ bad2:
 bad:
        ndp->ni_vp = NULL;
        if (vp) {
-               vnode_put(vp);
+#if NAMEDRSRCFORK
+               if ((vnode_isnamedstream(vp)) && (vp->v_parent != NULLVP) &&
+                                       (vnode_isshadow (vp))) {
+                       vnode_recycle(vp);
+               }
+#endif
+               vnode_put(vp);
                /*
                 * Check for a race against unlink.  We had a vnode
                 * but according to vnode_authorize or VNOP_OPEN it
@@ -489,7 +495,7 @@ vn_close(struct vnode *vp, int flags, vfs_context_t ctx)
        /* Sync data from resource fork shadow file if needed. */
        if ((vp->v_flag & VISNAMEDSTREAM) && 
            (vp->v_parent != NULLVP) &&
-           !(vp->v_parent->v_mount->mnt_kern_flag & MNTK_NAMED_STREAMS)) {
+           (vnode_isshadow(vp))) {
                if (flags & FWASWRITTEN) {
                        (void) vnode_flushnamedstream(vp->v_parent, vp, ctx);
                }