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