Annotation of Net2/sys/mount.h, revision 1.1.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.