sys/vfs/union/union_vnops.c
static int
union_strategy(struct vop_strategy_args *ap)
{
	struct bio *bio = ap->a_bio;
	struct buf *bp = bio->bio_buf;
	struct vnode *othervp = OTHERVP(ap->a_vp);

#ifdef DIAGNOSTIC
	if (othervp == NULLVP)
		panic("union_strategy: nil vp");
	if (bp->b_cmd != BUF_CMD_READ && (othervp == LOWERVP(ap->a_vp)))
		panic("union_strategy: writing to lowervp");
#endif
	return (vn_strategy(othervp, bio));
}
/*
 * XXX - vop_strategy must be hand coded because it has no
 * YYY - and it is not coherent with anything
 *
 * vnode in its arguments.
 * This goes away with a merged VM/buffer cache.
 *
 * union_strategy(struct vnode *a_vp, struct bio *a_bio)
 */
vop_strategy must be hand coded because it has no
YYY - and it is not coherent with anything

vnode in its arguments.
This goes away with a merged VM/buffer cache.


vop_strategy must be hand coded because it has no YYY - and it is not coherent with anything vnode in its arguments . This goes away with a merged VM / buffer cache .
static int
union_strategy(struct vop_strategy_args *ap)
{
	struct bio *bio = ap->a_bio;
	struct buf *bp = bio->bio_buf;
	struct vnode *othervp = OTHERVP(ap->a_vp);
#ifdef DIAGNOSTIC
	if (othervp == NULLVP)
		panic("union_strategy: nil vp");
	if (bp->b_cmd != BUF_CMD_READ && (othervp == LOWERVP(ap->a_vp)))
		panic("union_strategy: writing to lowervp");
#endif
	return (vn_strategy(othervp, bio));
}
static int union_strategy ( struct vop_strategy_args * ap ) { struct bio * bio = ap -> a_bio ; struct buf * bp = bio -> bio_buf ; struct vnode * othervp = OTHERVP ( ap -> a_vp ) ; #ifdef DIAGNOSTIC if ( othervp == NULLVP ) panic ( " " ) ; if ( bp -> b_cmd != BUF_CMD_READ && ( othervp == LOWERVP ( ap -> a_vp ) ) ) panic ( " " ) ; #endif return ( vn_strategy ( othervp , bio ) ) ; }
XXX - vop_strategy must be hand coded because it has no
 YYY - and it is not coherent with anything
XXX - vop_strategy must be hand coded because it has no YYY - and it is not coherent with anything