int need_event = 0;
int has_listeners = 0;
+#if NAMEDRSRCFORK
+ /* unlink or delete is allowed on rsrc forks and named streams */
+ ndp->ni_cnd.cn_flags |= CN_ALLOWRSRCFORK;
+#endif
+
ndp->ni_cnd.cn_flags |= LOCKPARENT;
cnp = &ndp->ni_cnd;
* since it may need to release the fs_nodelock on the dvp
*/
out:
+#if NAMEDRSRCFORK
+ /* recycle deleted rsrc fork to force reclaim on shadow file if necessary */
+ if ((vnode_isnamedstream(ndp->ni_vp)) &&
+ (ndp->ni_vp->v_parent != NULLVP) &&
+ (vnode_isshadow(ndp->ni_vp))) {
+ vnode_recycle(ndp->ni_vp);
+ }
+#endif
+
nameidone(ndp);
vnode_put(dvp);
vnode_put(vp);
*/
if (vnode_isnamedstream(nd.ni_vp) &&
(nd.ni_vp->v_parent != NULLVP) &&
- ((nd.ni_vp->v_parent->v_mount->mnt_kern_flag & MNTK_NAMED_STREAMS) == 0)) {
+ (vnode_isshadow(nd.ni_vp))) {
is_namedstream = 1;
vnode_ref(nd.ni_vp);
}
*/
if (vnode_isnamedstream(ndp->ni_vp) &&
(ndp->ni_vp->v_parent != NULLVP) &&
- ((ndp->ni_vp->v_parent->v_mount->mnt_kern_flag & MNTK_NAMED_STREAMS) == 0)) {
+ (vnode_isshadow(ndp->ni_vp))) {
is_namedstream = 1;
vnode_ref (ndp->ni_vp);
}
if ((error == 0) &&
(vp->v_flag & VISNAMEDSTREAM) &&
(vp->v_parent != NULLVP) &&
- !(vp->v_parent->v_mount->mnt_kern_flag & MNTK_NAMED_STREAMS) &&
+ (vnode_isshadow(vp)) &&
(fp->f_flags & FP_WRITTEN)) {
(void) vnode_flushnamedstream(vp->v_parent, vp, ctx);
}