Annotation of kernel/bsd/sys/mount.h, revision 1.1

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: /* Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved */
        !            26: /*
        !            27:  * Copyright (c) 1989, 1991, 1993
        !            28:  *     The Regents of the University of California.  All rights reserved.
        !            29:  *
        !            30:  * Redistribution and use in source and binary forms, with or without
        !            31:  * modification, are permitted provided that the following conditions
        !            32:  * are met:
        !            33:  * 1. Redistributions of source code must retain the above copyright
        !            34:  *    notice, this list of conditions and the following disclaimer.
        !            35:  * 2. Redistributions in binary form must reproduce the above copyright
        !            36:  *    notice, this list of conditions and the following disclaimer in the
        !            37:  *    documentation and/or other materials provided with the distribution.
        !            38:  * 3. All advertising materials mentioning features or use of this software
        !            39:  *    must display the following acknowledgement:
        !            40:  *     This product includes software developed by the University of
        !            41:  *     California, Berkeley and its contributors.
        !            42:  * 4. Neither the name of the University nor the names of its contributors
        !            43:  *    may be used to endorse or promote products derived from this software
        !            44:  *    without specific prior written permission.
        !            45:  *
        !            46:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
        !            47:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
        !            48:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
        !            49:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
        !            50:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
        !            51:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
        !            52:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
        !            53:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
        !            54:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
        !            55:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
        !            56:  * SUCH DAMAGE.
        !            57:  *
        !            58:  *     @(#)mount.h     8.21 (Berkeley) 5/20/95
        !            59:  */
        !            60: 
        !            61: #ifndef _SYS_MOUNT_H_
        !            62: #define        _SYS_MOUNT_H_
        !            63: 
        !            64: #ifndef _KERNEL
        !            65: #include <sys/ucred.h>
        !            66: #endif
        !            67: #include <sys/queue.h>
        !            68: #include <sys/lock.h>
        !            69: #include <net/radix.h>
        !            70: #include <sys/socket.h>                /* XXX for AF_MAX */
        !            71: 
        !            72: typedef struct { int32_t val[2]; } fsid_t;     /* file system id type */
        !            73: 
        !            74: /*
        !            75:  * File identifier.
        !            76:  * These are unique per filesystem on a single machine.
        !            77:  */
        !            78: #define        MAXFIDSZ        16
        !            79: 
        !            80: struct fid {
        !            81:        u_short         fid_len;                /* length of data in bytes */
        !            82:        u_short         fid_reserved;           /* force longword alignment */
        !            83:        char            fid_data[MAXFIDSZ];     /* data (variable length) */
        !            84: };
        !            85: 
        !            86: /*
        !            87:  * file system statistics
        !            88:  */
        !            89: 
        !            90: #define        MFSNAMELEN      15      /* length of fs type name, not inc. null */
        !            91: #define        MNAMELEN        90      /* length of buffer for returned name */
        !            92: 
        !            93: struct statfs {
        !            94:        short   f_type;                 /* filesystem type number */
        !            95:        short   f_flags;                /* copy of mount flags */
        !            96:        long    f_bsize;                /* fundamental file system block size */
        !            97:        long    f_iosize;               /* optimal transfer block size */
        !            98:        long    f_blocks;               /* total data blocks in file system */
        !            99:        long    f_bfree;                /* free blocks in fs */
        !           100:        long    f_bavail;               /* free blocks avail to non-superuser */
        !           101:        long    f_files;                /* total file nodes in file system */
        !           102:        long    f_ffree;                /* free file nodes in fs */
        !           103:        fsid_t  f_fsid;                 /* file system id */
        !           104:        uid_t   f_owner;                /* user that mounted the filesystem */
        !           105:        long    f_spare[4];             /* spare for later */
        !           106:        char    f_fstypename[MFSNAMELEN]; /* fs type name */
        !           107:        char    f_mntonname[MNAMELEN];  /* directory on which mounted */
        !           108:        char    f_mntfromname[MNAMELEN];/* mounted filesystem */
        !           109: };
        !           110: 
        !           111: /*
        !           112:  * Structure per mounted file system.  Each mounted file system has an
        !           113:  * array of operations and an instance record.  The file systems are
        !           114:  * put on a doubly linked list.
        !           115:  */
        !           116: LIST_HEAD(vnodelst, vnode);
        !           117: 
        !           118: struct mount {
        !           119:        CIRCLEQ_ENTRY(mount) mnt_list;          /* mount list */
        !           120:        struct vfsops   *mnt_op;                /* operations on fs */
        !           121:        struct vfsconf  *mnt_vfc;               /* configuration info */
        !           122:        struct vnode    *mnt_vnodecovered;      /* vnode we mounted on */
        !           123:        struct vnodelst mnt_vnodelist;          /* list of vnodes this mount */
        !           124:        struct lock__bsd__ mnt_lock;            /* mount structure lock */
        !           125:        int             mnt_flag;               /* flags */
        !           126:        int             mnt_maxsymlinklen;      /* max size of short symlink */
        !           127:        struct statfs   mnt_stat;               /* cache of filesystem stats */
        !           128:        qaddr_t         mnt_data;               /* private data */
        !           129: };
        !           130: 
        !           131: /*
        !           132:  * Mount flags.
        !           133:  *
        !           134:  * Unmount uses MNT_FORCE flag.
        !           135:  */
        !           136: #define        MNT_RDONLY      0x00000001      /* read only filesystem */
        !           137: #define        MNT_SYNCHRONOUS 0x00000002      /* file system written synchronously */
        !           138: #define        MNT_NOEXEC      0x00000004      /* can't exec from filesystem */
        !           139: #define        MNT_NOSUID      0x00000008      /* don't honor setuid bits on fs */
        !           140: #define        MNT_NODEV       0x00000010      /* don't interpret special files */
        !           141: #define        MNT_UNION       0x00000020      /* union with underlying filesystem */
        !           142: #define        MNT_ASYNC       0x00000040      /* file system written asynchronously */
        !           143: 
        !           144: /*
        !           145:  * exported mount flags.
        !           146:  */
        !           147: #define        MNT_EXRDONLY    0x00000080      /* exported read only */
        !           148: #define        MNT_EXPORTED    0x00000100      /* file system is exported */
        !           149: #define        MNT_DEFEXPORTED 0x00000200      /* exported to the world */
        !           150: #define        MNT_EXPORTANON  0x00000400      /* use anon uid mapping for everyone */
        !           151: #define        MNT_EXKERB      0x00000800      /* exported with Kerberos uid mapping */
        !           152: 
        !           153: /*
        !           154:  * Flags set by internal operations.
        !           155:  */
        !           156: #define        MNT_LOCAL       0x00001000      /* filesystem is stored locally */
        !           157: #define        MNT_QUOTA       0x00002000      /* quotas are enabled on filesystem */
        !           158: #define        MNT_ROOTFS      0x00004000      /* identifies the root filesystem */
        !           159: #define        MNT_DOVOLFS     0x00008000      /* FS supports volfs */
        !           160: 
        !           161: /*
        !           162:  * Mask of flags that are visible to statfs()
        !           163:  */
        !           164: #define        MNT_VISFLAGMASK 0x0000ffff
        !           165: 
        !           166: /*
        !           167:  * External filesystem control flags.
        !           168:  */
        !           169: #define        MNT_UPDATE      0x00010000      /* not a real mount, just an update */
        !           170: #define        MNT_DELEXPORT   0x00020000      /* delete export host lists */
        !           171: #define        MNT_RELOAD      0x00040000      /* reload filesystem data */
        !           172: #define        MNT_FORCE       0x00080000      /* force unmount or readonly change */
        !           173: /*
        !           174:  * Internal filesystem control flags.
        !           175:  *
        !           176:  * MNT_UNMOUNT locks the mount entry so that name lookup cannot proceed
        !           177:  * past the mount point.  This keeps the subtree stable during mounts
        !           178:  * and unmounts.
        !           179:  */
        !           180: #define MNT_UNMOUNT    0x01000000      /* unmount in progress */
        !           181: #define        MNT_MWAIT       0x02000000      /* waiting for unmount to finish */
        !           182: #define MNT_WANTRDWR   0x04000000      /* upgrade to read/write requested */
        !           183: #if REV_ENDIAN_FS
        !           184: #define        MNT_REVEND      0x08000000      /* Reverse endian FS */
        !           185: #endif /* REV_ENDIAN_FS */
        !           186: 
        !           187: /*
        !           188:  * Sysctl CTL_VFS definitions.
        !           189:  *
        !           190:  * Second level identifier specifies which filesystem. Second level
        !           191:  * identifier VFS_GENERIC returns information about all filesystems.
        !           192:  */
        !           193: #define        VFS_GENERIC             0       /* generic filesystem information */
        !           194: #define VFS_NUMMNTOPS          1       /* int: total num of vfs mount/unmount operations */
        !           195: /*
        !           196:  * Third level identifiers for VFS_GENERIC are given below; third
        !           197:  * level identifiers for specific filesystems are given in their
        !           198:  * mount specific header files.
        !           199:  */
        !           200: #define VFS_MAXTYPENUM 1       /* int: highest defined filesystem type */
        !           201: #define VFS_CONF       2       /* struct: vfsconf for filesystem given
        !           202:                                   as next argument */
        !           203: /*
        !           204:  * Flags for various system call interfaces.
        !           205:  *
        !           206:  * waitfor flags to vfs_sync() and getfsstat()
        !           207:  */
        !           208: #define MNT_WAIT       1
        !           209: #define MNT_NOWAIT     2
        !           210: 
        !           211: /*
        !           212:  * Generic file handle
        !           213:  */
        !           214: struct fhandle {
        !           215:        fsid_t  fh_fsid;        /* File system id of mount point */
        !           216:        struct  fid fh_fid;     /* File sys specific id */
        !           217: };
        !           218: typedef struct fhandle fhandle_t;
        !           219: 
        !           220: /*
        !           221:  * Export arguments for local filesystem mount calls.
        !           222:  */
        !           223: struct export_args {
        !           224:        int     ex_flags;               /* export related flags */
        !           225:        uid_t   ex_root;                /* mapping for root uid */
        !           226:        struct  ucred ex_anon;          /* mapping for anonymous user */
        !           227:        struct  sockaddr *ex_addr;      /* net address to which exported */
        !           228:        int     ex_addrlen;             /* and the net address length */
        !           229:        struct  sockaddr *ex_mask;      /* mask of valid bits in saddr */
        !           230:        int     ex_masklen;             /* and the smask length */
        !           231: };
        !           232: 
        !           233: /*
        !           234:  * Filesystem configuration information. One of these exists for each
        !           235:  * type of filesystem supported by the kernel. These are searched at
        !           236:  * mount time to identify the requested filesystem.
        !           237:  */
        !           238: struct vfsconf {
        !           239:        struct  vfsops *vfc_vfsops;     /* filesystem operations vector */
        !           240:        char    vfc_name[MFSNAMELEN];   /* filesystem type name */
        !           241:        int     vfc_typenum;            /* historic filesystem type number */
        !           242:        int     vfc_refcount;           /* number mounted of this type */
        !           243:        int     vfc_flags;              /* permanent flags */
        !           244:        int     (*vfc_mountroot)(void); /* if != NULL, routine to mount root */
        !           245:        struct  vfsconf *vfc_next;      /* next in list */
        !           246: };
        !           247: 
        !           248: #ifdef _KERNEL
        !           249: 
        !           250: extern int maxvfsconf;         /* highest defined filesystem type */
        !           251: extern struct vfsconf *vfsconf;        /* head of list of filesystem types */
        !           252: extern int maxvfsslots;                /* Maximum slots available to be used */
        !           253: extern int numused_vfsslots;   /* number of slots already used */
        !           254: 
        !           255: int    vfsconf_add __P((struct vfsconf *));
        !           256: int    vfsconf_del __P((char *));
        !           257: 
        !           258: /*
        !           259:  * Operations supported on mounted file system.
        !           260:  */
        !           261: #ifdef __STDC__
        !           262: struct nameidata;
        !           263: struct mbuf;
        !           264: #endif
        !           265: 
        !           266: struct vfsops {
        !           267:        int     (*vfs_mount)    __P((struct mount *mp, char *path, caddr_t data,
        !           268:                                    struct nameidata *ndp, struct proc *p));
        !           269:        int     (*vfs_start)    __P((struct mount *mp, int flags,
        !           270:                                    struct proc *p));
        !           271:        int     (*vfs_unmount)  __P((struct mount *mp, int mntflags,
        !           272:                                    struct proc *p));
        !           273:        int     (*vfs_root)     __P((struct mount *mp, struct vnode **vpp));
        !           274:        int     (*vfs_quotactl) __P((struct mount *mp, int cmds, uid_t uid,
        !           275:                                    caddr_t arg, struct proc *p));
        !           276:        int     (*vfs_statfs)   __P((struct mount *mp, struct statfs *sbp,
        !           277:                                    struct proc *p));
        !           278:        int     (*vfs_sync)     __P((struct mount *mp, int waitfor,
        !           279:                                    struct ucred *cred, struct proc *p));
        !           280:        int     (*vfs_vget)     __P((struct mount *mp, void *ino,
        !           281:                                    struct vnode **vpp));
        !           282:        int     (*vfs_fhtovp)   __P((struct mount *mp, struct fid *fhp,
        !           283:                                    struct mbuf *nam, struct vnode **vpp,
        !           284:                                    int *exflagsp, struct ucred **credanonp));
        !           285:        int     (*vfs_vptofh)   __P((struct vnode *vp, struct fid *fhp));
        !           286:        int     (*vfs_init)     __P((struct vfsconf *));
        !           287:        int     (*vfs_sysctl)   __P((int *, u_int, void *, size_t *, void *,
        !           288:                                    size_t, struct proc *));
        !           289: };
        !           290: 
        !           291: #define VFS_MOUNT(MP, PATH, DATA, NDP, P) \
        !           292:        (*(MP)->mnt_op->vfs_mount)(MP, PATH, DATA, NDP, P)
        !           293: #define VFS_START(MP, FLAGS, P)          (*(MP)->mnt_op->vfs_start)(MP, FLAGS, P)
        !           294: #define VFS_UNMOUNT(MP, FORCE, P) (*(MP)->mnt_op->vfs_unmount)(MP, FORCE, P)
        !           295: #define VFS_ROOT(MP, VPP)        (*(MP)->mnt_op->vfs_root)(MP, VPP)
        !           296: #define VFS_QUOTACTL(MP,C,U,A,P)  (*(MP)->mnt_op->vfs_quotactl)(MP, C, U, A, P)
        !           297: #define VFS_STATFS(MP, SBP, P)   (*(MP)->mnt_op->vfs_statfs)(MP, SBP, P)
        !           298: #define VFS_SYNC(MP, WAIT, C, P)  (*(MP)->mnt_op->vfs_sync)(MP, WAIT, C, P)
        !           299: #define VFS_VGET(MP, INO, VPP)   (*(MP)->mnt_op->vfs_vget)(MP, INO, VPP)
        !           300: #define VFS_FHTOVP(MP, FIDP, NAM, VPP, EXFLG, CRED) \
        !           301:        (*(MP)->mnt_op->vfs_fhtovp)(MP, FIDP, NAM, VPP, EXFLG, CRED)
        !           302: #define        VFS_VPTOFH(VP, FIDP)      (*(VP)->v_mount->mnt_op->vfs_vptofh)(VP, FIDP)
        !           303: 
        !           304: /*
        !           305:  * Network address lookup element
        !           306:  */
        !           307: struct netcred {
        !           308:        struct  radix_node netc_rnodes[2];
        !           309:        int     netc_exflags;
        !           310:        struct  ucred netc_anon;
        !           311: };
        !           312: 
        !           313: /*
        !           314:  * Network export information
        !           315:  */
        !           316: struct netexport {
        !           317:        struct  netcred ne_defexported;               /* Default export */
        !           318:        struct  radix_node_head *ne_rtable[AF_MAX+1]; /* Individual exports */
        !           319: };
        !           320: 
        !           321: /*
        !           322:  * exported vnode operations
        !           323:  */
        !           324: int    vfs_busy __P((struct mount *, int, struct slock *, struct proc *));
        !           325: int    vfs_export __P((struct mount *, struct netexport *,
        !           326:            struct export_args *));
        !           327: struct netcred *vfs_export_lookup __P((struct mount *, struct netexport *,
        !           328:            struct mbuf *));
        !           329: void   vfs_getnewfsid __P((struct mount *));
        !           330: struct mount *vfs_getvfs __P((fsid_t *));
        !           331: int    vfs_mountedon __P((struct vnode *));
        !           332: int    vfs_mountroot __P((void));
        !           333: int    vfs_rootmountalloc __P((char *, char *, struct mount **));
        !           334: void   vfs_unbusy __P((struct mount *, struct proc *));
        !           335: void   vfs_unmountall __P((void));
        !           336: extern CIRCLEQ_HEAD(mntlist, mount) mountlist;
        !           337: extern struct slock mountlist_slock;
        !           338: 
        !           339: #else /* !_KERNEL */
        !           340: 
        !           341: #include <sys/cdefs.h>
        !           342: 
        !           343: __BEGIN_DECLS
        !           344: int    fstatfs __P((int, struct statfs *));
        !           345: int    getfh __P((const char *, fhandle_t *));
        !           346: int    getfsstat __P((struct statfs *, long, int));
        !           347: int    getmntinfo __P((struct statfs **, int));
        !           348: int    mount __P((const char *, const char *, int, void *));
        !           349: int    statfs __P((const char *, struct statfs *));
        !           350: int    unmount __P((const char *, int));
        !           351: __END_DECLS
        !           352: 
        !           353: #endif /* _KERNEL */
        !           354: #endif /* !_SYS_MOUNT_H_ */

unix.superglobalmegacorp.com

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