keep track of vnode size changes.
[unix-history] / usr / src / sys / miscfs / union / union.h
CommitLineData
cad9958b
JSP
1/*
2 * Copyright (c) 1994 The Regents of the University of California.
3 * Copyright (c) 1994 Jan-Simon Pendry.
4 * All rights reserved.
5 *
6 * This code is derived from software donated to Berkeley by
7 * Jan-Simon Pendry.
8 *
9 * %sccs.include.redist.c%
10 *
8a9c17f6 11 * @(#)union.h 8.4 (Berkeley) %G%
cad9958b
JSP
12 */
13
14struct union_args {
15 char *target; /* Target of loopback */
692a90df 16 int mntflags; /* Options on the mount */
cad9958b
JSP
17};
18
692a90df
JSP
19#define UNMNT_ABOVE 0x0001 /* Target appears below mount point */
20#define UNMNT_BELOW 0x0002 /* Target appears below mount point */
21#define UNMNT_REPLACE 0x0003 /* Target replaces mount point */
22#define UNMNT_OPMASK 0x0003
23
cad9958b
JSP
24struct union_mount {
25 struct vnode *um_uppervp;
26 struct vnode *um_lowervp;
27 struct ucred *um_cred; /* Credentials of user calling mount */
3b293975 28 int um_cmode; /* cmask from mount process */
c1b204a8 29 int um_op; /* Operation mode */
cad9958b
JSP
30};
31
cad9958b
JSP
32#ifdef KERNEL
33
34/*
35 * DEFDIRMODE is the mode bits used to create a shadow directory.
36 */
37#define VRWXMODE (VREAD|VWRITE|VEXEC)
38#define VRWMODE (VREAD|VWRITE)
39#define UN_DIRMODE ((VRWXMODE)|(VRWXMODE>>3)|(VRWXMODE>>6))
40#define UN_FILEMODE ((VRWMODE)|(VRWMODE>>3)|(VRWMODE>>6))
41
42/*
43 * A cache of vnode references
44 */
45struct union_node {
58572fc0 46 LIST_ENTRY(union_node) un_cache; /* Hash chain */
79f80c71 47 struct vnode *un_vnode; /* Back pointer */
cad9958b
JSP
48 struct vnode *un_uppervp; /* overlaying object */
49 struct vnode *un_lowervp; /* underlying object */
50 struct vnode *un_dirvp; /* Parent dir of uppervp */
cad9958b 51 char *un_path; /* saved component name */
ed5969c8
JSP
52 int un_hash; /* saved un_path hash value */
53 int un_openl; /* # of opens on lowervp */
7ba0f812 54 unsigned int un_flags;
8a9c17f6
JSP
55 off_t un_uppersz; /* size of upper object */
56 off_t un_lowersz; /* size of lower object */
ed5969c8 57#ifdef DIAGNOSTIC
cad9958b 58 pid_t un_pid;
ed5969c8 59#endif
cad9958b
JSP
60};
61
e2a2f3a7
JSP
62#define UN_WANT 0x01
63#define UN_LOCKED 0x02
64#define UN_ULOCK 0x04 /* Upper node is locked */
65#define UN_KLOCK 0x08 /* Keep upper node locked on vput */
7ba0f812 66#define UN_CACHED 0x10 /* In union cache */
e2a2f3a7 67
81be6ee0
JSP
68extern int union_allocvp __P((struct vnode **, struct mount *,
69 struct vnode *, struct vnode *,
70 struct componentname *, struct vnode *,
71 struct vnode *));
72extern int union_copyfile __P((struct proc *, struct ucred *,
73 struct vnode *, struct vnode *));
3b293975
JSP
74extern int union_mkshadow __P((struct union_mount *, struct vnode *,
75 struct componentname *, struct vnode **));
81be6ee0 76extern int union_vn_create __P((struct vnode **, struct union_node *,
3b293975 77 struct proc *));
15a86f7e
JSP
78extern int union_cn_close __P((struct vnode *, int, struct ucred *,
79 struct proc *));
ed5969c8 80extern void union_removed_upper __P((struct union_node *un));
15a86f7e 81extern struct vnode *union_lowervp __P((struct vnode *));
58572fc0
JSP
82extern void union_newlower __P((struct union_node *, struct vnode *));
83extern void union_newupper __P((struct union_node *, struct vnode *));
8a9c17f6 84extern void union_newsize __P((struct vnode *, off_t, off_t));
cad9958b
JSP
85
86#define MOUNTTOUNIONMOUNT(mp) ((struct union_mount *)((mp)->mnt_data))
87#define VTOUNION(vp) ((struct union_node *)(vp)->v_data)
88#define UNIONTOV(un) ((un)->un_vnode)
89#define LOWERVP(vp) (VTOUNION(vp)->un_lowervp)
01dac67e 90#define UPPERVP(vp) (VTOUNION(vp)->un_uppervp)
cad9958b
JSP
91#define OTHERVP(vp) (UPPERVP(vp) ? UPPERVP(vp) : LOWERVP(vp))
92
93extern int (**union_vnodeop_p)();
94extern struct vfsops union_vfsops;
95#endif /* KERNEL */