140654Smckusick /* 240654Smckusick * Copyright (c) 1990 The Regents of the University of California. 340654Smckusick * All rights reserved. 440654Smckusick * 5*44523Sbostic * %sccs.include.redist.c% 640654Smckusick * 7*44523Sbostic * @(#)specdev.h 7.2 (Berkeley) 06/28/90 840654Smckusick */ 940654Smckusick 1040654Smckusick /* 1140654Smckusick * This structure defines the information maintained about 1240654Smckusick * special devices. It is allocated in checkalias and freed 1340654Smckusick * in vgone. 1440654Smckusick */ 1540654Smckusick struct specinfo { 1640654Smckusick struct vnode **si_hashchain; 1740654Smckusick struct vnode *si_specnext; 1840654Smckusick long si_flags; 1940654Smckusick dev_t si_rdev; 2040654Smckusick }; 2140654Smckusick /* 2240654Smckusick * Exported shorthand 2340654Smckusick */ 2440654Smckusick #define v_rdev v_specinfo->si_rdev 2540654Smckusick #define v_hashchain v_specinfo->si_hashchain 2640654Smckusick #define v_specnext v_specinfo->si_specnext 2740654Smckusick #define v_specflags v_specinfo->si_flags 2840654Smckusick 2940654Smckusick /* 3040654Smckusick * Flags for specinfo 3140654Smckusick */ 3240654Smckusick #define SI_MOUNTEDON 0x0001 /* block special device is mounted on */ 3340654Smckusick 3440654Smckusick /* 3540654Smckusick * Special device management 3640654Smckusick */ 3740654Smckusick #define SPECHSZ 64 3840654Smckusick #if ((SPECHSZ&(SPECHSZ-1)) == 0) 3940654Smckusick #define SPECHASH(rdev) (((rdev>>5)+(rdev))&(SPECHSZ-1)) 4040654Smckusick #else 4140654Smckusick #define SPECHASH(rdev) (((unsigned)((rdev>>5)+(rdev)))%SPECHSZ) 4240654Smckusick #endif 4340654Smckusick 4440654Smckusick struct vnode *speclisth[SPECHSZ]; 45