|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1982, 1986, 1989 Regents of the University of California. ! 3: * All rights reserved. ! 4: * ! 5: * Redistribution and use in source and binary forms, with or without ! 6: * modification, are permitted provided that the following conditions ! 7: * are met: ! 8: * 1. Redistributions of source code must retain the above copyright ! 9: * notice, this list of conditions and the following disclaimer. ! 10: * 2. Redistributions in binary form must reproduce the above copyright ! 11: * notice, this list of conditions and the following disclaimer in the ! 12: * documentation and/or other materials provided with the distribution. ! 13: * 3. All advertising materials mentioning features or use of this software ! 14: * must display the following acknowledgement: ! 15: * This product includes software developed by the University of ! 16: * California, Berkeley and its contributors. ! 17: * 4. Neither the name of the University nor the names of its contributors ! 18: * may be used to endorse or promote products derived from this software ! 19: * without specific prior written permission. ! 20: * ! 21: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ! 22: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ! 23: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ! 24: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE ! 25: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL ! 26: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS ! 27: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ! 28: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ! 29: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY ! 30: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ! 31: * SUCH DAMAGE. ! 32: * ! 33: * @(#)ufs_subr.c 7.13 (Berkeley) 6/28/90 ! 34: */ ! 35: ! 36: #ifdef KERNEL ! 37: #include "param.h" ! 38: #include "../ufs/fs.h" ! 39: #else ! 40: #include <sys/param.h> ! 41: #include <ufs/fs.h> ! 42: #endif ! 43: ! 44: extern int around[9]; ! 45: extern int inside[9]; ! 46: extern u_char *fragtbl[]; ! 47: ! 48: /* ! 49: * Update the frsum fields to reflect addition or deletion ! 50: * of some frags. ! 51: */ ! 52: fragacct(fs, fragmap, fraglist, cnt) ! 53: struct fs *fs; ! 54: int fragmap; ! 55: long fraglist[]; ! 56: int cnt; ! 57: { ! 58: int inblk; ! 59: register int field, subfield; ! 60: register int siz, pos; ! 61: ! 62: inblk = (int)(fragtbl[fs->fs_frag][fragmap]) << 1; ! 63: fragmap <<= 1; ! 64: for (siz = 1; siz < fs->fs_frag; siz++) { ! 65: if ((inblk & (1 << (siz + (fs->fs_frag % NBBY)))) == 0) ! 66: continue; ! 67: field = around[siz]; ! 68: subfield = inside[siz]; ! 69: for (pos = siz; pos <= fs->fs_frag; pos++) { ! 70: if ((fragmap & field) == subfield) { ! 71: fraglist[siz] += cnt; ! 72: pos += siz; ! 73: field <<= siz; ! 74: subfield <<= siz; ! 75: } ! 76: field <<= 1; ! 77: subfield <<= 1; ! 78: } ! 79: } ! 80: } ! 81: ! 82: /* ! 83: * block operations ! 84: * ! 85: * check if a block is available ! 86: */ ! 87: isblock(fs, cp, h) ! 88: struct fs *fs; ! 89: unsigned char *cp; ! 90: daddr_t h; ! 91: { ! 92: unsigned char mask; ! 93: ! 94: switch ((int)fs->fs_frag) { ! 95: case 8: ! 96: return (cp[h] == 0xff); ! 97: case 4: ! 98: mask = 0x0f << ((h & 0x1) << 2); ! 99: return ((cp[h >> 1] & mask) == mask); ! 100: case 2: ! 101: mask = 0x03 << ((h & 0x3) << 1); ! 102: return ((cp[h >> 2] & mask) == mask); ! 103: case 1: ! 104: mask = 0x01 << (h & 0x7); ! 105: return ((cp[h >> 3] & mask) == mask); ! 106: default: ! 107: panic("isblock"); ! 108: return (NULL); ! 109: } ! 110: } ! 111: ! 112: /* ! 113: * take a block out of the map ! 114: */ ! 115: clrblock(fs, cp, h) ! 116: struct fs *fs; ! 117: u_char *cp; ! 118: daddr_t h; ! 119: { ! 120: ! 121: switch ((int)fs->fs_frag) { ! 122: case 8: ! 123: cp[h] = 0; ! 124: return; ! 125: case 4: ! 126: cp[h >> 1] &= ~(0x0f << ((h & 0x1) << 2)); ! 127: return; ! 128: case 2: ! 129: cp[h >> 2] &= ~(0x03 << ((h & 0x3) << 1)); ! 130: return; ! 131: case 1: ! 132: cp[h >> 3] &= ~(0x01 << (h & 0x7)); ! 133: return; ! 134: default: ! 135: panic("clrblock"); ! 136: } ! 137: } ! 138: ! 139: /* ! 140: * put a block into the map ! 141: */ ! 142: setblock(fs, cp, h) ! 143: struct fs *fs; ! 144: unsigned char *cp; ! 145: daddr_t h; ! 146: { ! 147: ! 148: switch ((int)fs->fs_frag) { ! 149: ! 150: case 8: ! 151: cp[h] = 0xff; ! 152: return; ! 153: case 4: ! 154: cp[h >> 1] |= (0x0f << ((h & 0x1) << 2)); ! 155: return; ! 156: case 2: ! 157: cp[h >> 2] |= (0x03 << ((h & 0x3) << 1)); ! 158: return; ! 159: case 1: ! 160: cp[h >> 3] |= (0x01 << (h & 0x7)); ! 161: return; ! 162: default: ! 163: panic("setblock"); ! 164: } ! 165: } ! 166: ! 167: #if (!defined(vax) && !defined(tahoe) && !defined(hp300)) \ ! 168: || defined(VAX630) || defined(VAX650) ! 169: /* ! 170: * C definitions of special instructions. ! 171: * Normally expanded with inline. ! 172: */ ! 173: scanc(size, cp, table, mask) ! 174: u_int size; ! 175: register u_char *cp, table[]; ! 176: register u_char mask; ! 177: { ! 178: register u_char *end = &cp[size]; ! 179: ! 180: while (cp < end && (table[*cp] & mask) == 0) ! 181: cp++; ! 182: return (end - cp); ! 183: } ! 184: #endif ! 185: ! 186: #if !defined(vax) && !defined(tahoe) && !defined(hp300) ! 187: skpc(mask, size, cp) ! 188: register u_char mask; ! 189: u_int size; ! 190: register u_char *cp; ! 191: { ! 192: register u_char *end = &cp[size]; ! 193: ! 194: while (cp < end && *cp == mask) ! 195: cp++; ! 196: return (end - cp); ! 197: } ! 198: ! 199: locc(mask, size, cp) ! 200: register u_char mask; ! 201: u_int size; ! 202: register u_char *cp; ! 203: { ! 204: register u_char *end = &cp[size]; ! 205: ! 206: while (cp < end && *cp != mask) ! 207: cp++; ! 208: return (end - cp); ! 209: } ! 210: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.