Annotation of Net2/sys/mount.h, revision 1.1

1.1     ! root        1: /*
        !             2:  * Copyright (c) 1989 The 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:  *     @(#)mount.h     7.22 (Berkeley) 6/3/91
        !            34:  */
        !            35: 
        !            36: typedef quad fsid_t;                   /* file system id type */
        !            37: 
        !            38: /*
        !            39:  * File identifier.
        !            40:  * These are unique per filesystem on a single machine.
        !            41:  */
        !            42: #define        MAXFIDSZ        16
        !            43: 
        !            44: struct fid {
        !            45:        u_short         fid_len;                /* length of data in bytes */
        !            46:        u_short         fid_reserved;           /* force longword alignment */
        !            47:        char            fid_data[MAXFIDSZ];     /* data (variable length) */
        !            48: };
        !            49: 
        !            50: /*
        !            51:  * file system statistics
        !            52:  */
        !            53: 
        !            54: #define MNAMELEN 90    /* length of buffer for returned name */
        !            55: 
        !            56: struct statfs {
        !            57:        short   f_type;                 /* type of filesystem (see below) */
        !            58:        short   f_flags;                /* copy of mount flags */
        !            59:        long    f_fsize;                /* fundamental file system block size */
        !            60:        long    f_bsize;                /* optimal transfer block size */
        !            61:        long    f_blocks;               /* total data blocks in file system */
        !            62:        long    f_bfree;                /* free blocks in fs */
        !            63:        long    f_bavail;               /* free blocks avail to non-superuser */
        !            64:        long    f_files;                /* total file nodes in file system */
        !            65:        long    f_ffree;                /* free file nodes in fs */
        !            66:        fsid_t  f_fsid;                 /* file system id */
        !            67:        long    f_spare[9];             /* spare for later */
        !            68:        char    f_mntonname[MNAMELEN];  /* directory on which mounted */
        !            69:        char    f_mntfromname[MNAMELEN];/* mounted filesystem */
        !            70: };
        !            71: 
        !            72: /*
        !            73:  * File system types.
        !            74:  */
        !            75: #define        MOUNT_NONE      0
        !            76: #define        MOUNT_UFS       1
        !            77: #define        MOUNT_NFS       2
        !            78: #define        MOUNT_MFS       3
        !            79: #define        MOUNT_PC        4
        !            80: #define        MOUNT_MAXTYPE   4
        !            81: 
        !            82: /*
        !            83:  * Structure per mounted file system.
        !            84:  * Each mounted file system has an array of
        !            85:  * operations and an instance record.
        !            86:  * The file systems are put on a doubly linked list.
        !            87:  */
        !            88: struct mount {
        !            89:        struct mount    *mnt_next;              /* next in mount list */
        !            90:        struct mount    *mnt_prev;              /* prev in mount list */
        !            91:        struct vfsops   *mnt_op;                /* operations on fs */
        !            92:        struct vnode    *mnt_vnodecovered;      /* vnode we mounted on */
        !            93:        struct vnode    *mnt_mounth;            /* list of vnodes this mount */
        !            94:        int             mnt_flag;               /* flags */
        !            95:        uid_t           mnt_exroot;             /* exported mapping for uid 0 */
        !            96:        struct statfs   mnt_stat;               /* cache of filesystem stats */
        !            97:        qaddr_t         mnt_data;               /* private data */
        !            98: };
        !            99: 
        !           100: /*
        !           101:  * Mount flags.
        !           102:  */
        !           103: #define        MNT_RDONLY      0x00000001      /* read only filesystem */
        !           104: #define        MNT_SYNCHRONOUS 0x00000002      /* file system written synchronously */
        !           105: #define        MNT_NOEXEC      0x00000004      /* can't exec from filesystem */
        !           106: #define        MNT_NOSUID      0x00000008      /* don't honor setuid bits on fs */
        !           107: #define        MNT_NODEV       0x00000010      /* don't interpret special files */
        !           108: 
        !           109: /*
        !           110:  * exported mount flags.
        !           111:  */
        !           112: #define        MNT_EXPORTED    0x00000100      /* file system is exported */
        !           113: #define        MNT_EXRDONLY    0x00000200      /* exported read only */
        !           114: 
        !           115: /*
        !           116:  * Flags set by internal operations.
        !           117:  */
        !           118: #define        MNT_LOCAL       0x00001000      /* filesystem is stored locally */
        !           119: #define        MNT_QUOTA       0x00002000      /* quotas are enabled on filesystem */
        !           120: 
        !           121: /*
        !           122:  * Mask of flags that are visible to statfs()
        !           123:  */
        !           124: #define        MNT_VISFLAGMASK 0x0000ffff
        !           125: 
        !           126: /*
        !           127:  * filesystem control flags.
        !           128:  *
        !           129:  * MNT_MLOCK lock the mount entry so that name lookup cannot proceed
        !           130:  * past the mount point.  This keeps the subtree stable during mounts
        !           131:  * and unmounts.
        !           132:  */
        !           133: #define        MNT_UPDATE      0x00010000      /* not a real mount, just an update */
        !           134: #define        MNT_MLOCK       0x00100000      /* lock so that subtree is stable */
        !           135: #define        MNT_MWAIT       0x00200000      /* someone is waiting for lock */
        !           136: #define MNT_MPBUSY     0x00400000      /* scan of mount point in progress */
        !           137: #define MNT_MPWANT     0x00800000      /* waiting for mount point */
        !           138: #define MNT_UNMOUNT    0x01000000      /* unmount in progress */
        !           139: 
        !           140: /*
        !           141:  * Operations supported on mounted file system.
        !           142:  */
        !           143: #ifdef KERNEL
        !           144: #ifdef __STDC__
        !           145: struct nameidata;
        !           146: #endif
        !           147: 
        !           148: struct vfsops {
        !           149:        int     (*vfs_mount)    __P((struct mount *mp, char *path, caddr_t data,
        !           150:                                    struct nameidata *ndp, struct proc *p));
        !           151:        int     (*vfs_start)    __P((struct mount *mp, int flags,
        !           152:                                    struct proc *p));
        !           153:        int     (*vfs_unmount)  __P((struct mount *mp, int mntflags,
        !           154:                                    struct proc *p));
        !           155:        int     (*vfs_root)     __P((struct mount *mp, struct vnode **vpp));
        !           156:                        /* int uid,             should be uid_t */
        !           157:        int     (*vfs_quotactl) __P((struct mount *mp, int cmds, int uid,
        !           158:                                    caddr_t arg, struct proc *p));
        !           159:        int     (*vfs_statfs)   __P((struct mount *mp, struct statfs *sbp,
        !           160:                                    struct proc *p));
        !           161:        int     (*vfs_sync)     __P((struct mount *mp, int waitfor));
        !           162:        int     (*vfs_fhtovp)   __P((struct mount *mp, struct fid *fhp,
        !           163:                                    struct vnode **vpp));
        !           164:        int     (*vfs_vptofh)   __P((struct vnode *vp, struct fid *fhp));
        !           165:        int     (*vfs_init)     __P(());
        !           166: };
        !           167: 
        !           168: #define VFS_MOUNT(MP, PATH, DATA, NDP, P) \
        !           169:        (*(MP)->mnt_op->vfs_mount)(MP, PATH, DATA, NDP, P)
        !           170: #define VFS_START(MP, FLAGS, P)          (*(MP)->mnt_op->vfs_start)(MP, FLAGS, P)
        !           171: #define VFS_UNMOUNT(MP, FORCE, P) (*(MP)->mnt_op->vfs_unmount)(MP, FORCE, P)
        !           172: #define VFS_ROOT(MP, VPP)        (*(MP)->mnt_op->vfs_root)(MP, VPP)
        !           173: #define VFS_QUOTACTL(MP,C,U,A,P)  (*(MP)->mnt_op->vfs_quotactl)(MP, C, U, A, P)
        !           174: #define VFS_STATFS(MP, SBP, P)   (*(MP)->mnt_op->vfs_statfs)(MP, SBP, P)
        !           175: #define VFS_SYNC(MP, WAITFOR)    (*(MP)->mnt_op->vfs_sync)(MP, WAITFOR)
        !           176: #define VFS_FHTOVP(MP, FIDP, VPP) (*(MP)->mnt_op->vfs_fhtovp)(MP, FIDP, VPP)
        !           177: #define        VFS_VPTOFH(VP, FIDP)      (*(VP)->v_mount->mnt_op->vfs_vptofh)(VP, FIDP)
        !           178: #endif /* KERNEL */
        !           179: 
        !           180: /*
        !           181:  * Flags for various system call interfaces.
        !           182:  *
        !           183:  * forcibly flags for vfs_umount().
        !           184:  * waitfor flags to vfs_sync() and getfsstat()
        !           185:  */
        !           186: #define MNT_FORCE      1
        !           187: #define MNT_NOFORCE    2
        !           188: #define MNT_WAIT       1
        !           189: #define MNT_NOWAIT     2
        !           190: 
        !           191: /*
        !           192:  * Generic file handle
        !           193:  */
        !           194: struct fhandle {
        !           195:        fsid_t  fh_fsid;        /* File system id of mount point */
        !           196:        struct  fid fh_fid;     /* Id of file */
        !           197: };
        !           198: typedef struct fhandle fhandle_t;
        !           199: 
        !           200: /*
        !           201:  * Arguments to mount UFS
        !           202:  */
        !           203: struct ufs_args {
        !           204:        char    *fspec;         /* block special device to mount */
        !           205:        int     exflags;        /* export related flags */
        !           206:        uid_t   exroot;         /* mapping for root uid */
        !           207: };
        !           208: 
        !           209: #ifdef MFS
        !           210: /*
        !           211:  * Arguments to mount MFS
        !           212:  */
        !           213: struct mfs_args {
        !           214:        char    *name;          /* name to export for statfs */
        !           215:        caddr_t base;           /* base address of file system in memory */
        !           216:        u_long size;            /* size of file system */
        !           217: };
        !           218: #endif MFS
        !           219: 
        !           220: #ifdef NFS
        !           221: /*
        !           222:  * File Handle (32 bytes for version 2), variable up to 1024 for version 3
        !           223:  */
        !           224: union nfsv2fh {
        !           225:        fhandle_t       fh_generic;
        !           226:        u_char          fh_bytes[32];
        !           227: };
        !           228: typedef union nfsv2fh nfsv2fh_t;
        !           229: 
        !           230: /*
        !           231:  * Arguments to mount NFS
        !           232:  */
        !           233: struct nfs_args {
        !           234:        struct sockaddr *addr;          /* file server address */
        !           235:        int             sotype;         /* Socket type */
        !           236:        int             proto;          /* and Protocol */
        !           237:        nfsv2fh_t       *fh;            /* File handle to be mounted */
        !           238:        int             flags;          /* flags */
        !           239:        int             wsize;          /* write size in bytes */
        !           240:        int             rsize;          /* read size in bytes */
        !           241:        int             timeo;          /* initial timeout in .1 secs */
        !           242:        int             retrans;        /* times to retry send */
        !           243:        char            *hostname;      /* server's name */
        !           244: };
        !           245: /*
        !           246:  * NFS mount option flags
        !           247:  */
        !           248: #define        NFSMNT_SOFT     0x0001  /* soft mount (hard is default) */
        !           249: #define        NFSMNT_WSIZE    0x0002  /* set write size */
        !           250: #define        NFSMNT_RSIZE    0x0004  /* set read size */
        !           251: #define        NFSMNT_TIMEO    0x0008  /* set initial timeout */
        !           252: #define        NFSMNT_RETRANS  0x0010  /* set number of request retrys */
        !           253: #define        NFSMNT_HOSTNAME 0x0020  /* set hostname for error printf */
        !           254: #define        NFSMNT_INT      0x0040  /* allow interrupts on hard mount */
        !           255: #define        NFSMNT_NOCONN   0x0080  /* Don't Connect the socket */
        !           256: #define        NFSMNT_SCKLOCK  0x0100  /* Lock socket against others */
        !           257: #define        NFSMNT_WANTSCK  0x0200  /* Want a socket lock */
        !           258: #define        NFSMNT_SPONGY   0x0400  /* spongy mount (soft for stat and lookup) */
        !           259: #define        NFSMNT_COMPRESS 0x0800  /* Compress nfs rpc xdr */
        !           260: #define        NFSMNT_LOCKBITS (NFSMNT_SCKLOCK | NFSMNT_WANTSCK)
        !           261: #endif NFS
        !           262: 
        !           263: #ifdef KERNEL
        !           264: /*
        !           265:  * exported vnode operations
        !           266:  */
        !           267: void   vfs_remove __P((struct mount *mp)); /* remove a vfs from mount list */
        !           268: int    vfs_lock __P((struct mount *mp));   /* lock a vfs */
        !           269: void   vfs_unlock __P((struct mount *mp)); /* unlock a vfs */
        !           270: struct mount *getvfs __P((fsid_t *fsid));  /* return vfs given fsid */
        !           271: struct mount *rootfs;                      /* ptr to root mount structure */
        !           272: struct vfsops *vfssw[];                    /* mount filesystem type table */
        !           273: 
        !           274: #else /* KERNEL */
        !           275: 
        !           276: #include <sys/cdefs.h>
        !           277: 
        !           278: __BEGIN_DECLS
        !           279: int    fstatfs __P((int, struct statfs *));
        !           280: int    getfh __P((const char *, fhandle_t *));
        !           281: int    getfsstat __P((struct statfs *, long, int));
        !           282: int    getmntinfo __P((struct statfs **, int));
        !           283: int    mount __P((int, const char *, int, void *));
        !           284: int    statfs __P((const char *, struct statfs *));
        !           285: int    unmount __P((const char *, int));
        !           286: __END_DECLS
        !           287: 
        !           288: #endif /* KERNEL */

unix.superglobalmegacorp.com

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