sys/vfs/union/union_vnops.c
static int
union_close(struct vop_close_args *ap)
{
	struct union_node *un = VTOUNION(ap->a_vp);
	struct vnode *vp;

	if ((vp = un->un_uppervp) == NULLVP) {
#ifdef UNION_DIAGNOSTIC
		if (un->un_openl <= 0)
			panic("union: un_openl cnt");
#endif
		--un->un_openl;
		vp = un->un_lowervp;
	}
	ap->a_head.a_ops = *vp->v_ops;
	ap->a_vp = vp;
	return(vop_close_ap(ap));
}
/*
 *	union_close:
 *
 *	It is unclear whether a_vp is passed locked or unlocked.  Whatever
 *	the case we do not change it.
 *
 * union_close(struct vnode *a_vp, int a_fflag, struct ucred *a_cred,
 *		struct thread *a_td)
 */
It is unclear whether a_vp is passed locked or unlocked.  Whatever
the case we do not change it.


It is unclear whether a_vp is passed locked or unlocked . Whatever the case we do not change it .
static int
union_close(struct vop_close_args *ap)
{
	struct union_node *un = VTOUNION(ap->a_vp);
	struct vnode *vp;
	if ((vp = un->un_uppervp) == NULLVP) {
#ifdef UNION_DIAGNOSTIC
		if (un->un_openl <= 0)
			panic("union: un_openl cnt");
#endif
		--un->un_openl;
		vp = un->un_lowervp;
	}
	ap->a_head.a_ops = *vp->v_ops;
	ap->a_vp = vp;
	return(vop_close_ap(ap));
}
static int union_close ( struct vop_close_args * ap ) { struct union_node * un = VTOUNION ( ap -> a_vp ) ; struct vnode * vp ; if ( ( vp = un -> un_uppervp ) == NULLVP ) { #ifdef UNION_DIAGNOSTIC if ( un -> un_openl <= 0 ) panic ( " " ) ; #endif -- un -> un_openl ; vp = un -> un_lowervp ; } ap -> a_head . a_ops = * vp -> v_ops ; ap -> a_vp = vp ; return ( vop_close_ap ( ap ) ) ; }
union_close:
      It is unclear whether a_vp is passed locked or unlocked.
union_close : It is unclear whether a_vp is passed locked or unlocked .