Commit | Line | Data |
---|---|---|
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 | ||
14 | struct 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 |
24 | struct 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 | */ | |
45 | struct 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 |
68 | extern int union_allocvp __P((struct vnode **, struct mount *, |
69 | struct vnode *, struct vnode *, | |
70 | struct componentname *, struct vnode *, | |
71 | struct vnode *)); | |
72 | extern int union_copyfile __P((struct proc *, struct ucred *, | |
73 | struct vnode *, struct vnode *)); | |
3b293975 JSP |
74 | extern int union_mkshadow __P((struct union_mount *, struct vnode *, |
75 | struct componentname *, struct vnode **)); | |
81be6ee0 | 76 | extern int union_vn_create __P((struct vnode **, struct union_node *, |
3b293975 | 77 | struct proc *)); |
15a86f7e JSP |
78 | extern int union_cn_close __P((struct vnode *, int, struct ucred *, |
79 | struct proc *)); | |
ed5969c8 | 80 | extern void union_removed_upper __P((struct union_node *un)); |
15a86f7e | 81 | extern struct vnode *union_lowervp __P((struct vnode *)); |
58572fc0 JSP |
82 | extern void union_newlower __P((struct union_node *, struct vnode *)); |
83 | extern void union_newupper __P((struct union_node *, struct vnode *)); | |
8a9c17f6 | 84 | extern 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 | ||
93 | extern int (**union_vnodeop_p)(); | |
94 | extern struct vfsops union_vfsops; | |
95 | #endif /* KERNEL */ |