* Copyright (c) 1994 The Regents of the University of California.
* Copyright (c) 1994 Jan-Simon Pendry.
* This code is derived from software donated to Berkeley by
* %sccs.include.redist.c%
* @(#)union.h 1.2 (Berkeley) %G%
char *target
; /* Target of loopback */
struct vnode
*um_uppervp
;
struct vnode
*um_lowervp
;
struct ucred
*um_cred
; /* Credentials of user calling mount */
/*#define MOUNT_UNION 15*/
* DEFDIRMODE is the mode bits used to create a shadow directory.
#define VRWXMODE (VREAD|VWRITE|VEXEC)
#define VRWMODE (VREAD|VWRITE)
#define UN_DIRMODE ((VRWXMODE)|(VRWXMODE>>3)|(VRWXMODE>>6))
#define UN_FILEMODE ((VRWMODE)|(VRWMODE>>3)|(VRWMODE>>6))
* A cache of vnode references
struct union_node
*un_next
; /* Hash chain */
struct vnode
*un_uppervp
; /* overlaying object */
struct vnode
*un_lowervp
; /* underlying object */
struct vnode
*un_dirvp
; /* Parent dir of uppervp */
struct vnode
*un_vnode
; /* Back pointer */
char *un_path
; /* saved component name */
extern int union_node_create
__P((struct mount
*mp
, struct vnode
*target
, struct vnode
**vpp
));
#define MOUNTTOUNIONMOUNT(mp) ((struct union_mount *)((mp)->mnt_data))
#define VTOUNION(vp) ((struct union_node *)(vp)->v_data)
#define UNIONTOV(un) ((un)->un_vnode)
#define LOWERVP(vp) (VTOUNION(vp)->un_lowervp)
#define UPPERVP(vp) (VTOUNION(vp)->un_lowervp)
#define OTHERVP(vp) (UPPERVP(vp) ? UPPERVP(vp) : LOWERVP(vp))
extern int (**union_vnodeop_p
)();
extern struct vfsops union_vfsops
;