keep track of vnode size changes.
[unix-history] / usr / src / sys / miscfs / union / union.h
... / ...
CommitLineData
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 *
11 * @(#)union.h 8.4 (Berkeley) %G%
12 */
13
14struct union_args {
15 char *target; /* Target of loopback */
16 int mntflags; /* Options on the mount */
17};
18
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
24struct union_mount {
25 struct vnode *um_uppervp;
26 struct vnode *um_lowervp;
27 struct ucred *um_cred; /* Credentials of user calling mount */
28 int um_cmode; /* cmask from mount process */
29 int um_op; /* Operation mode */
30};
31
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 {
46 LIST_ENTRY(union_node) un_cache; /* Hash chain */
47 struct vnode *un_vnode; /* Back pointer */
48 struct vnode *un_uppervp; /* overlaying object */
49 struct vnode *un_lowervp; /* underlying object */
50 struct vnode *un_dirvp; /* Parent dir of uppervp */
51 char *un_path; /* saved component name */
52 int un_hash; /* saved un_path hash value */
53 int un_openl; /* # of opens on lowervp */
54 unsigned int un_flags;
55 off_t un_uppersz; /* size of upper object */
56 off_t un_lowersz; /* size of lower object */
57#ifdef DIAGNOSTIC
58 pid_t un_pid;
59#endif
60};
61
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 */
66#define UN_CACHED 0x10 /* In union cache */
67
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 *));
74extern int union_mkshadow __P((struct union_mount *, struct vnode *,
75 struct componentname *, struct vnode **));
76extern int union_vn_create __P((struct vnode **, struct union_node *,
77 struct proc *));
78extern int union_cn_close __P((struct vnode *, int, struct ucred *,
79 struct proc *));
80extern void union_removed_upper __P((struct union_node *un));
81extern struct vnode *union_lowervp __P((struct vnode *));
82extern void union_newlower __P((struct union_node *, struct vnode *));
83extern void union_newupper __P((struct union_node *, struct vnode *));
84extern void union_newsize __P((struct vnode *, off_t, off_t));
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)
90#define UPPERVP(vp) (VTOUNION(vp)->un_uppervp)
91#define OTHERVP(vp) (UPPERVP(vp) ? UPPERVP(vp) : LOWERVP(vp))
92
93extern int (**union_vnodeop_p)();
94extern struct vfsops union_vfsops;
95#endif /* KERNEL */