Annotation of XNU/bsd/miscfs/volfs/volfs.h, revision 1.1.1.1

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: /* Copyright (c) 1998, Apple Computer, Inc. All rights reserved. */
                     23: /*
                     24:  * Header file for volfs
                     25:  */
                     26: 
                     27: struct volfs_mntdata
                     28: {
                     29:        struct vnode *volfs_rootvp;
                     30:        LIST_HEAD(volfs_fsvnodelist, vnode) volfs_fsvnodes;
                     31: };
                     32: 
                     33: /*
                     34:  * Volfs vnodes exist only for the root, which allows for the enumeration
                     35:  * of all volfs accessible filesystems, and for the filesystems which
                     36:  * volfs handles.
                     37:  */
                     38: #define VOLFS_ROOT     1       /* This volfs vnode represents root of volfs */
                     39: #define        VOLFS_FSNODE    2       /* This volfs vnode represents a file system */
                     40: 
                     41: struct volfs_vndata
                     42: {
                     43:        int             vnode_type;
                     44:        struct lock__bsd__      lock;
                     45:        unsigned int    nodeID; /* the dev entry of a file system */
                     46:        struct mount *  fs_mount;
                     47: };
                     48: 
                     49: /* Flag set for HFS volumes to indicate roman-only encoding: */
                     50: #define VOLFS_ROMANONLY  0x40000000
                     51: 
                     52: /* Summary of all flags in volume id's exported to outside view: */
                     53: #define VOLFS_VOLIDFLAGS (VOLFS_ROMANONLY)
                     54: 
                     55: #define MAXVLFSNAMLEN  24      /* max length is really 10, pad to 24 since
                     56:                                 * some of the math depends on VLFSDIRENTLEN
                     57:                                 * being a power of 2 */
                     58: #define VLFSDIRENTLEN  (MAXVLFSNAMLEN + sizeof(u_int32_t) + sizeof(u_int16_t) + sizeof(u_int8_t) + sizeof(u_int8_t))
                     59: 
                     60: #define ROOT_DIRID     2
                     61: 
                     62: extern int (**volfs_vnodeop_p)();
                     63: __BEGIN_DECLS
                     64: 
                     65: int    volfs_mount __P((struct mount *, char *, caddr_t, struct nameidata *,
                     66:        struct proc *));
                     67: int    volfs_start __P((struct mount *, int, struct proc *));
                     68: int    volfs_unmount __P((struct mount *, int, struct proc *));
                     69: int    volfs_root __P((struct mount *, struct vnode **));
                     70: int    volfs_quotactl __P((struct mount *, int, uid_t, caddr_t, 
                     71:        struct proc *));
                     72: int    volfs_statfs __P((struct mount *, struct statfs *, struct proc *));
                     73: int    volfs_sync __P((struct mount *, int, struct ucred *, struct proc *));
                     74: int    volfs_vget __P((struct mount *, void *ino_t, struct vnode **));
                     75: int    volfs_fhtovp __P((struct mount *, struct fid *, struct mbuf *,
                     76:        struct vnode **, int *, struct ucred **));
                     77: int    volfs_vptofh __P((struct vnode *, struct fid *));
                     78: int    volfs_init __P((struct vfsconf *));
                     79: int    volfs_sysctl __P((int *, u_int, void *, size_t *, void *, size_t,
                     80:                struct proc *));
                     81: 
                     82: int    volfs_reclaim __P((struct vop_reclaim_args*));
                     83: int    volfs_access __P((struct vop_access_args *));
                     84: int    volfs_getattr __P((struct vop_getattr_args *));
                     85: int    volfs_select __P((struct vop_select_args *));
                     86: int    volfs_rmdir __P((struct vop_rmdir_args *));
                     87: int    volfs_readdir __P((struct vop_readdir_args *));
                     88: int    volfs_lock __P((struct vop_lock_args *));
                     89: int    volfs_unlock __P((struct vop_unlock_args *));
                     90: int    volfs_islocked __P((struct vop_islocked_args *));
                     91: int    volfs_pathconf __P((struct vop_pathconf_args *));
                     92: int    volfs_lookup __P((struct vop_lookup_args *));
                     93: __END_DECLS
                     94: 
                     95: #define VTOVL(VP) ((struct volfs_vndata *)((VP)->v_data))
                     96: 
                     97: #define PRINTIT kprintf
                     98: 
                     99: #if VOLFS_DEBUG
                    100:     #define    DBG_VOP_TEST_LOCKS                      1
                    101:     #define DBG_FUNC_NAME(FSTR)                static char *funcname = FSTR
                    102:     #define DBG_PRINT_FUNC_NAME()              PRINTIT("%s\n", funcname);
                    103:     #define DBG_VOP_PRINT_FUNCNAME()   PRINTIT("%s: ", funcname);
                    104:        #define DBG_VOP_PRINT_CPN_INFO(CN)      PRINTIT("name: %s",(CN)->cn_nameptr);
                    105:        #define DBG_VOP(STR)                            PRINTIT STR;
                    106:     #define DBG_VOP_PRINT_VNODE_INFO(VP)       {  if ((VP)) \
                    107:       { if ((VP)->v_tag == VT_NON) \
                    108:       PRINTIT("\tfs:%s id: %d v: 0x%x ", VTOVL(VP)->fs_mount->mnt_stat.f_fstypename, VTOVL(VP)->nodeID, (u_int)(VP)); \
                    109:       else  PRINTIT("\t%s v: 0x%x ", (VP)->v_mount->mnt_stat.f_fstypename, (u_int)(VP)); \
                    110:       } else { PRINTIT("*** NULL NODE ***"); } }
                    111: 
                    112: #else /* VOLFS_DEBUG */
                    113:     #define DBG_VOP_TEST_LOCKS 0
                    114:     #define DBG_FUNC_NAME(FSTR)
                    115:     #define DBG_PRINT_FUNC_NAME()
                    116:     #define DBG_VOP_PRINT_FUNCNAME()
                    117:     #define DBG_VOP_PRINT_CPN_INFO(CN)
                    118:        #define DBG_VOP(A)
                    119:        #define DBG_VOP_PRINT_VNODE_INFO(VP)
                    120: #endif /* VOLFS_DEBUG */
                    121: 
                    122: 
                    123: #if DBG_VOP_TEST_LOCKS
                    124: 
                    125: #define        VOPDBG_IGNORE                   0
                    126: #define        VOPDBG_LOCKED                   1
                    127: #define        VOPDBG_UNLOCKED                 -1
                    128: #define        VOPDBG_LOCKNOTNIL               2
                    129: #define        VOPDBG_SAME                             3
                    130: 
                    131: #define        VOPDBG_ZERO     0
                    132: #define        VOPDBG_POS      1
                    133: 
                    134: 
                    135: #define        MAXDBGLOCKS             15
                    136: 
                    137: typedef struct VopDbgStoreRec {
                    138:     short      id;
                    139:     struct vnode       *vp;
                    140:     short      inState;
                    141:     short      outState;
                    142:     short      errState;
                    143:     int                inValue;
                    144:     int                outValue;
                    145:     } VopDbgStoreRec;
                    146: 
                    147: 
                    148: /*             This sets up the test for the lock state of vnodes. The entry paramaters are:
                    149:  *                     I = index of paramater
                    150:  *                     VP = pointer to a vnode
                    151:  *                     ENTRYSTATE = the inState of the lock
                    152:  *                     EXITSTATE = the outState of the lock
                    153:  *                     ERRORSTATE = the error state of the lock
                    154:  *             It initializes the structure, does some preliminary validity checks, but does nothing
                    155:  *             if the instate is set to be ignored.
                    156:  */
                    157: 
                    158: #define  DBG_VOP_LOCKS_DECL(I) VopDbgStoreRec  VopDbgStore[I];short numOfLockSlots=I
                    159: #define  DBG_VOP_LOCKS_INIT(I,VP,ENTRYSTATE,EXITSTATE,ERRORSTATE,CHECKFLAG)            \
                    160:                if (I >= numOfLockSlots) { \
                    161:                 PRINTIT("%s: DBG_VOP_LOCKS_INIT: Entry #%d greater than allocated slots!\n", funcname, I); \
                    162:                }; \
                    163:             VopDbgStore[I].id                  = I; \
                    164:             VopDbgStore[I].vp                  = (VP); \
                    165:             VopDbgStore[I].inState             = ENTRYSTATE; \
                    166:             VopDbgStore[I].outState    = EXITSTATE; \
                    167:             VopDbgStore[I].errState    = ERRORSTATE; \
                    168:             VopDbgStore[I].inValue             = 0; \
                    169:             VopDbgStore[I].outValue    = 0; \
                    170:             if ((VopDbgStore[I].inState != VOPDBG_IGNORE)) {           \
                    171:                 if ((VP) == NULL)                                                                                                              \
                    172:                     PRINTIT ("%s: DBG_VOP_LOCK on start: Null vnode ptr\n", funcname);         \
                    173:                 else                                                                                                                                   \
                    174:                 VopDbgStore[I].inValue = lockstatus (&((struct volfs_vndata *)((VP)->v_data))->lock);                  \
                    175:                 }                                                                                                                                              \
                    176:             if ((VP) != NULL)                                                                                                                  \
                    177:                 {                                                                                                                                              \
                    178:                 if (CHECKFLAG==VOPDBG_POS && (VP)->v_usecount <= 0)                                    \
                    179:                     PRINTIT("%s: BAD USECOUNT OF %d !!!!\n", funcname, (VP)->v_usecount);      \
                    180:                 else if ((VP)->v_usecount < 0)                                                                                                         \
                    181:                     PRINTIT("%s: BAD USECOUNT OF %d !!!!\n", funcname, (VP)->v_usecount);      \
                    182:                 }
                    183: #define DBG_VOP_UPDATE_VP(I, VP) \
                    184:     VopDbgStore[I].vp                  = (VP);
                    185: 
                    186: 
                    187: #define  DBG_VOP_LOCKS_TEST(status) DbgVopTest (numOfLockSlots, status, VopDbgStore, funcname);
                    188: 
                    189: #else   /*DBG_VOP_TEST_LOCKS */
                    190: #define  DBG_VOP_LOCKS_DECL(A)
                    191: #define  DBG_VOP_LOCKS_INIT(A,B,C,D,E,F)
                    192: #define  DBG_VOP_LOCKS_TEST(a)
                    193: #define  DBG_VOP_UPDATE_VP(I, VP)
                    194: 
                    195: #endif /* DBG_VOP_TEST_LOCKS */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.