|
|
1.1 root 1: /*
2: * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
3: *
4: * @APPLE_LICENSE_HEADER_START@
5: *
6: * The contents of this file constitute Original Code as defined in and
7: * are subject to the Apple Public Source License Version 1.1 (the
8: * "License"). You may not use this file except in compliance with the
9: * License. Please obtain a copy of the License at
10: * http://www.apple.com/publicsource and read it before using this file.
11: *
12: * This Original Code and all software distributed under the License are
13: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
14: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
15: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
16: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
17: * License for the specific language governing rights and limitations
18: * under the License.
19: *
20: * @APPLE_LICENSE_HEADER_END@
21: */
22: /*
23: * Mach Operating System
24: * Copyright (c) 1987 Carnegie-Mellon University
25: * All rights reserved. The CMU software License Agreement specifies
26: * the terms and conditions for use and redistribution.
27: */
28: /*
29: * HISTORY
30: * 3-Aug-90 Doug Mitchell at NeXT
31: * Added prototypes for exported functions.
32: *
33: * 18-Feb-90 Gregg Kellogg (gk) at NeXT
34: * Merged in with Mach 2.5 stuff.
35: *
36: * 9-Mar-88 John Seamons (jks) at NeXT
37: * Allocate vm_info structures from a zone.
38: *
39: * 11-Jun-87 William Bolosky (bolosky) at Carnegie-Mellon University
40: * Changed pager_id to pager.
41: *
42: * 30-Apr-87 Avadis Tevanian (avie) at Carnegie-Mellon University
43: * Created.
44: */
45: /*
46: * File: mapfs.h
47: * Author: Avadis Tevanian, Jr.
48: * Copyright (C) 1987, Avadis Tevanian, Jr.
49: *
50: * Header file for mapped file system support.
51: *
52: */
53:
54: #ifndef _KERN_MAPFS_H_
55: #define _KERN_MAPFS_H_
56:
57: #include <vm/vnode_pager.h>
58: #include <kern/queue.h>
59: #include <sys/types.h>
60: #include <sys/vnode.h>
61:
62: #include <sys/lock.h>
63: /*
64: * Associated with each mapped file is information about its
65: * corresponding VM window. This information is kept in the following
66: * vm_info structure.
67: */
68: struct vm_info {
69: vnode_pager_t pager; /* pager */
70: short map_count; /* number of times mapped */
71: short use_count; /* number of times in use */
72: vm_offset_t va; /* mapped virtual address */
73: vm_size_t size; /* mapped size */
74: vm_offset_t offset; /* offset into file at va */
75: vm_size_t vnode_size; /* vnode size (not reflected in ip) */
76: void * lock; /* lock for changing window */
77: void * object; /* object [for KERNEL flushing] */
78: queue_chain_t lru_links; /* lru queue links */
79: struct ucred *cred; /* vnode credentials */
80: int error; /* holds error codes */
81: u_int queued:1, /* on lru queue? */
82: dirty:1, /* range needs flushing? */
83: close_flush:1, /* flush on close */
84: invalidate:1, /* is mapping invalid? */
85: busy:1, /* are we busy conducting an uiomove */
86: delayed_fsync:1,/* need to do a push after the uiomove completes */
87: filesize:1, /* want size as reflected in ip */
88: mapped:1, /* mapped into KERNEL VM? */
89: dying:1; /* vm_info being freed */
90: vm_size_t dirtysize; /* unwritten data so far */
91: vm_offset_t dirtyoffset; /* unwritten data so far */
92: };
93:
94: #define VM_INFO_NULL ((struct vm_info *) 0)
95:
96: extern struct zone *vm_info_zone;
97:
98: /*
99: * exported primitives for loadable file systems.
100: */
101: int vm_info_init __P((struct vnode *));
102: void vm_info_free __P((struct vnode *));
103:
104: #define ISMAPPABLEFILE(vp) \
105: (((vp)->v_type == VREG) && ((vp)->v_vm_info))
106:
107: #define ISMAPPEDFILE(vp) \
108: (((vp)->v_type == VREG) && \
109: ((vp)->v_vm_info) && ((vp)->v_vm_info->mapped))
110:
111: #define NOTMAPPEDFILE(vp) \
112: (((vp)->v_type == VREG) && \
113: (((vp)->v_vm_info) && !((vp)->v_vm_info->mapped)))
114:
115: #define ISMAPFILEFLUSH(vp) \
116: (((vp)->v_type == VREG) && \
117: ((vp)->v_vm_info) && ((vp)->v_vm_info->mapped) && \
118: ((vp)->v_vm_info->dirty))
119:
120:
121:
122: #endif /* _KERN_MAPFS_H_ */
123:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.