[BACK]Return to mount.h CVS log [TXT][DIR] Up to [local] / sys / sys

Annotation of sys/sys/mount.h, Revision 1.1

1.1     ! nbrk        1: /*     $OpenBSD: mount.h,v 1.81 2007/06/01 05:37:14 deraadt Exp $      */
        !             2: /*     $NetBSD: mount.h,v 1.48 1996/02/18 11:55:47 fvdl Exp $  */
        !             3:
        !             4: /*
        !             5:  * Copyright (c) 1989, 1991, 1993
        !             6:  *     The Regents of the University of California.  All rights reserved.
        !             7:  *
        !             8:  * Redistribution and use in source and binary forms, with or without
        !             9:  * modification, are permitted provided that the following conditions
        !            10:  * are met:
        !            11:  * 1. Redistributions of source code must retain the above copyright
        !            12:  *    notice, this list of conditions and the following disclaimer.
        !            13:  * 2. Redistributions in binary form must reproduce the above copyright
        !            14:  *    notice, this list of conditions and the following disclaimer in the
        !            15:  *    documentation and/or other materials provided with the distribution.
        !            16:  * 3. Neither the name of the University nor the names of its contributors
        !            17:  *    may be used to endorse or promote products derived from this software
        !            18:  *    without specific prior written permission.
        !            19:  *
        !            20:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
        !            21:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
        !            22:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
        !            23:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
        !            24:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
        !            25:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
        !            26:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
        !            27:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
        !            28:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
        !            29:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
        !            30:  * SUCH DAMAGE.
        !            31:  *
        !            32:  *     @(#)mount.h     8.15 (Berkeley) 7/14/94
        !            33:  */
        !            34:
        !            35: #ifndef _SYS_MOUNT_H_
        !            36: #define _SYS_MOUNT_H_
        !            37:
        !            38: #include <sys/cdefs.h>
        !            39: #ifndef _KERNEL
        !            40: #include <sys/ucred.h>
        !            41: #endif
        !            42: #include <sys/queue.h>
        !            43: #include <sys/rwlock.h>
        !            44:
        !            45: typedef struct { int32_t val[2]; } fsid_t;     /* file system id type */
        !            46:
        !            47: /*
        !            48:  * File identifier.
        !            49:  * These are unique per filesystem on a single machine.
        !            50:  */
        !            51: #define        MAXFIDSZ        16
        !            52:
        !            53: struct fid {
        !            54:        u_short         fid_len;                /* length of data in bytes */
        !            55:        u_short         fid_reserved;           /* force longword alignment */
        !            56:        char            fid_data[MAXFIDSZ];     /* data (variable length) */
        !            57: };
        !            58:
        !            59: /*
        !            60:  * Export arguments for local filesystem mount calls.
        !            61:  */
        !            62: struct export_args {
        !            63:        int     ex_flags;               /* export related flags */
        !            64:        uid_t   ex_root;                /* mapping for root uid */
        !            65:        struct  ucred ex_anon;          /* mapping for anonymous user */
        !            66:        struct  sockaddr *ex_addr;      /* net address to which exported */
        !            67:        int     ex_addrlen;             /* and the net address length */
        !            68:        struct  sockaddr *ex_mask;      /* mask of valid bits in saddr */
        !            69:        int     ex_masklen;             /* and the smask length */
        !            70: };
        !            71:
        !            72: /*
        !            73:  * Arguments to mount UFS-based filesystems
        !            74:  */
        !            75: struct ufs_args {
        !            76:        char    *fspec;                 /* block special device to mount */
        !            77:        struct  export_args export_info;/* network export information */
        !            78: };
        !            79:
        !            80: /*
        !            81:  * Arguments to mount MFS
        !            82:  */
        !            83: struct mfs_args {
        !            84:        char    *fspec;                 /* name to export for statfs */
        !            85:        struct  export_args export_info;/* if exported MFSes are supported */
        !            86:        caddr_t base;                   /* base of file system in memory */
        !            87:        u_long  size;                   /* size of file system */
        !            88: };
        !            89:
        !            90: /*
        !            91:  * Arguments to mount ISO 9660 filesystems.
        !            92:  */
        !            93: struct iso_args {
        !            94:        char    *fspec;                 /* block special device to mount */
        !            95:        struct  export_args export_info;/* network export info */
        !            96:        int     flags;                  /* mounting flags, see below */
        !            97:        int     sess;                   /* start sector of session */
        !            98: };
        !            99:
        !           100: #define        ISOFSMNT_NORRIP         0x00000001      /* disable Rock Ridge Ext.*/
        !           101: #define        ISOFSMNT_GENS           0x00000002      /* enable generation numbers */
        !           102: #define        ISOFSMNT_EXTATT         0x00000004      /* enable extended attr. */
        !           103: #define        ISOFSMNT_NOJOLIET       0x00000008      /* disable Joliet Ext.*/
        !           104: #define        ISOFSMNT_SESS           0x00000010      /* use iso_args.sess */
        !           105:
        !           106: /*
        !           107:  * Arguments to mount NFS
        !           108:  */
        !           109: #define NFS_ARGSVERSION        4               /* change when nfs_args changes */
        !           110: struct nfs_args {
        !           111:        int             version;        /* args structure version number */
        !           112:        struct sockaddr *addr;          /* file server address */
        !           113:        int             addrlen;        /* length of address */
        !           114:        int             sotype;         /* Socket type */
        !           115:        int             proto;          /* and Protocol */
        !           116:        u_char          *fh;            /* File handle to be mounted */
        !           117:        int             fhsize;         /* Size, in bytes, of fh */
        !           118:        int             flags;          /* flags */
        !           119:        int             wsize;          /* write size in bytes */
        !           120:        int             rsize;          /* read size in bytes */
        !           121:        int             readdirsize;    /* readdir size in bytes */
        !           122:        int             timeo;          /* initial timeout in .1 secs */
        !           123:        int             retrans;        /* times to retry send */
        !           124:        int             maxgrouplist;   /* Max. size of group list */
        !           125:        int             readahead;      /* # of blocks to readahead */
        !           126:        int             leaseterm;      /* Term (sec) of lease */
        !           127:        int             deadthresh;     /* Retrans threshold */
        !           128:        char            *hostname;      /* server's name */
        !           129:        int             acregmin;       /* Attr cache file recently modified */
        !           130:        int             acregmax;       /* ac file not recently modified */
        !           131:        int             acdirmin;       /* ac for dir recently modified */
        !           132:        int             acdirmax;       /* ac for dir not recently modified */
        !           133: };
        !           134: /* NFS args version 3 (for backwards compatibility) */
        !           135: struct nfs_args3 {
        !           136:        int             version;        /* args structure version number */
        !           137:        struct sockaddr *addr;          /* file server address */
        !           138:        int             addrlen;        /* length of address */
        !           139:        int             sotype;         /* Socket type */
        !           140:        int             proto;          /* and Protocol */
        !           141:        u_char          *fh;            /* File handle to be mounted */
        !           142:        int             fhsize;         /* Size, in bytes, of fh */
        !           143:        int             flags;          /* flags */
        !           144:        int             wsize;          /* write size in bytes */
        !           145:        int             rsize;          /* read size in bytes */
        !           146:        int             readdirsize;    /* readdir size in bytes */
        !           147:        int             timeo;          /* initial timeout in .1 secs */
        !           148:        int             retrans;        /* times to retry send */
        !           149:        int             maxgrouplist;   /* Max. size of group list */
        !           150:        int             readahead;      /* # of blocks to readahead */
        !           151:        int             leaseterm;      /* Term (sec) of lease */
        !           152:        int             deadthresh;     /* Retrans threshold */
        !           153:        char            *hostname;      /* server's name */
        !           154: };
        !           155:
        !           156: /*
        !           157:  * NFS mount option flags
        !           158:  */
        !           159: #ifndef _KERNEL
        !           160: #define        NFSMNT_RESVPORT         0x00000000  /* always use reserved ports */
        !           161: #endif /* ! _KERNEL */
        !           162: #define        NFSMNT_SOFT             0x00000001  /* soft mount (hard is default) */
        !           163: #define        NFSMNT_WSIZE            0x00000002  /* set write size */
        !           164: #define        NFSMNT_RSIZE            0x00000004  /* set read size */
        !           165: #define        NFSMNT_TIMEO            0x00000008  /* set initial timeout */
        !           166: #define        NFSMNT_RETRANS          0x00000010  /* set number of request retries */
        !           167: #define        NFSMNT_MAXGRPS          0x00000020  /* set maximum grouplist size */
        !           168: #define        NFSMNT_INT              0x00000040  /* allow interrupts on hard mount */
        !           169: #define        NFSMNT_NOCONN           0x00000080  /* Don't Connect the socket */
        !           170: #define        NFSMNT_NQNFS            0x00000100  /* Use Nqnfs protocol */
        !           171: #define        NFSMNT_NFSV3            0x00000200  /* Use NFS Version 3 protocol */
        !           172: #define        NFSMNT_KERB             0x00000400  /* Use Kerberos authentication */
        !           173: #define        NFSMNT_DUMBTIMR         0x00000800  /* Don't estimate rtt dynamically */
        !           174: #define        NFSMNT_LEASETERM        0x00001000  /* set lease term (nqnfs) */
        !           175: #define        NFSMNT_READAHEAD        0x00002000  /* set read ahead */
        !           176: #define        NFSMNT_DEADTHRESH       0x00004000  /* set dead server retry thresh */
        !           177: #ifdef _KERNEL /* Coming soon to a system call near you! */
        !           178: #define        NFSMNT_NOAC             0x00008000  /* disable attribute cache */
        !           179: #endif /* _KERNEL */
        !           180: #define        NFSMNT_RDIRPLUS         0x00010000  /* Use Readdirplus for V3 */
        !           181: #define        NFSMNT_READDIRSIZE      0x00020000  /* Set readdir size */
        !           182:
        !           183: /* Flags valid only in mount syscall arguments */
        !           184: #define NFSMNT_ACREGMIN                0x00040000  /* acregmin field valid */
        !           185: #define NFSMNT_ACREGMAX                0x00080000  /* acregmax field valid */
        !           186: #define NFSMNT_ACDIRMIN                0x00100000  /* acdirmin field valid */
        !           187: #define NFSMNT_ACDIRMAX                0x00200000  /* acdirmax field valid */
        !           188:
        !           189: /* Flags valid only in kernel */
        !           190: #define        NFSMNT_INTERNAL         0xfffc0000  /* Bits set internally */
        !           191: #define NFSMNT_HASWRITEVERF    0x00040000  /* Has write verifier for V3 */
        !           192: #define NFSMNT_GOTPATHCONF     0x00080000  /* Got the V3 pathconf info */
        !           193: #define NFSMNT_GOTFSINFO       0x00100000  /* Got the V3 fsinfo */
        !           194: #define        NFSMNT_MNTD             0x00200000  /* Mnt server for mnt point */
        !           195: #define        NFSMNT_DISMINPROG       0x00400000  /* Dismount in progress */
        !           196: #define        NFSMNT_DISMNT           0x00800000  /* Dismounted */
        !           197: #define        NFSMNT_SNDLOCK          0x01000000  /* Send socket lock */
        !           198: #define        NFSMNT_WANTSND          0x02000000  /* Want above */
        !           199: #define        NFSMNT_RCVLOCK          0x04000000  /* Rcv socket lock */
        !           200: #define        NFSMNT_WANTRCV          0x08000000  /* Want above */
        !           201: #define        NFSMNT_WAITAUTH         0x10000000  /* Wait for authentication */
        !           202: #define        NFSMNT_HASAUTH          0x20000000  /* Has authenticator */
        !           203: #define        NFSMNT_WANTAUTH         0x40000000  /* Wants an authenticator */
        !           204: #define        NFSMNT_AUTHERR          0x80000000  /* Authentication error */
        !           205:
        !           206: /*
        !           207:  *  Arguments to mount MSDOS filesystems.
        !           208:  */
        !           209: struct msdosfs_args {
        !           210:        char    *fspec;         /* blocks special holding the fs to mount */
        !           211:        struct  export_args export_info;
        !           212:                                /* network export information */
        !           213:        uid_t   uid;            /* uid that owns msdosfs files */
        !           214:        gid_t   gid;            /* gid that owns msdosfs files */
        !           215:        mode_t  mask;           /* mask to be applied for msdosfs perms */
        !           216:        int     flags;          /* see below */
        !           217: };
        !           218:
        !           219: /*
        !           220:  * Msdosfs mount options:
        !           221:  */
        !           222: #define        MSDOSFSMNT_SHORTNAME    0x01    /* Force old DOS short names only */
        !           223: #define        MSDOSFSMNT_LONGNAME     0x02    /* Force Win'95 long names */
        !           224: #define        MSDOSFSMNT_NOWIN95      0x04    /* Completely ignore Win95 entries */
        !           225: #define MSDOSFSMNT_ALLOWDIRX   0x10    /* dir is mode +x if r */
        !           226:
        !           227: /*
        !           228:  * Arguments to mount ntfs filesystems
        !           229:  */
        !           230: struct ntfs_args {
        !           231:        char    *fspec;                 /* block special device to mount */
        !           232:        struct  export_args export_info;/* network export information */
        !           233:        uid_t   uid;                    /* uid that owns ntfs files */
        !           234:        gid_t   gid;                    /* gid that owns ntfs files */
        !           235:        mode_t  mode;                   /* mask to be applied for ntfs perms */
        !           236:        u_long  flag;                   /* additional flags */
        !           237: };
        !           238:
        !           239: /*
        !           240:  * ntfs mount options:
        !           241:  */
        !           242: #define        NTFS_MFLAG_CASEINS      0x00000001
        !           243: #define        NTFS_MFLAG_ALLNAMES     0x00000002
        !           244:
        !           245: /* Arguments to mount UDF file systems */
        !           246: struct udf_args {
        !           247:        char *fspec; /* Block special device to mount */
        !           248:        u_int32_t lastblock; /* Special device last block */
        !           249: };
        !           250:
        !           251: /*
        !           252:  * Arguments to mount procfs filesystems
        !           253:  */
        !           254: struct procfs_args {
        !           255:        int version;
        !           256:        int flags;
        !           257: };
        !           258:
        !           259: /*
        !           260:  * procfs mount options:
        !           261:  */
        !           262: #define PROCFS_ARGSVERSION      1
        !           263: #define PROCFSMNT_LINUXCOMPAT   0x01
        !           264:
        !           265:
        !           266: /*
        !           267:  * file system statistics
        !           268:  */
        !           269:
        !           270: #define        MFSNAMELEN      16      /* length of fs type name, including nul */
        !           271: #define        MNAMELEN        90      /* length of buffer for returned name */
        !           272:
        !           273: /* per-filesystem mount options */
        !           274: union mount_info {
        !           275:        struct ufs_args ufs_args;
        !           276:        struct mfs_args mfs_args;
        !           277:        struct nfs_args nfs_args;
        !           278:        struct iso_args iso_args;
        !           279:        struct procfs_args procfs_args;
        !           280:        struct msdosfs_args msdosfs_args;
        !           281:        struct ntfs_args ntfs_args;
        !           282:        char __align[160];      /* 64-bit alignment and room to grow */
        !           283: };
        !           284:
        !           285: /* new statfs structure with mount options */
        !           286: struct statfs {
        !           287:        u_int32_t  f_flags;             /* copy of mount flags */
        !           288:        int32_t    f_bsize;             /* fundamental file system block size */
        !           289:        u_int32_t  f_iosize;            /* optimal transfer block size */
        !           290:        u_int32_t  f_blocks;            /* total data blocks in file system */
        !           291:        u_int32_t  f_bfree;             /* free blocks in fs */
        !           292:        int32_t    f_bavail;            /* free blocks avail to non-superuser */
        !           293:        u_int32_t  f_files;             /* total file nodes in file system */
        !           294:        u_int32_t  f_ffree;             /* free file nodes in fs */
        !           295:        fsid_t     f_fsid;              /* file system id */
        !           296:        uid_t      f_owner;             /* user that mounted the file system */
        !           297:        u_int32_t  f_syncwrites;        /* count of sync writes since mount */
        !           298:        u_int32_t  f_asyncwrites;       /* count of async writes since mount */
        !           299:        u_int32_t  f_ctime;             /* last mount [-u] time */
        !           300:        u_int32_t  f_spare[3];          /* spare for later */
        !           301:        char       f_fstypename[MFSNAMELEN]; /* fs type name */
        !           302:        char       f_mntonname[MNAMELEN];    /* directory on which mounted */
        !           303:        char       f_mntfromname[MNAMELEN];  /* mounted file system */
        !           304:        union mount_info mount_info;        /* per-filesystem mount options */
        !           305: };
        !           306:
        !           307: /* old (pre-2.6) statfs structure */
        !           308: struct ostatfs {
        !           309:        short   f_type;                 /* type of file system (unused; zero) */
        !           310:        short   f_flags;                /* copy of mount flags */
        !           311:        long    f_bsize;                /* fundamental file system block size */
        !           312:        long    f_iosize;               /* optimal transfer block size */
        !           313:        long    f_blocks;               /* total data blocks in file system */
        !           314:        long    f_bfree;                /* free blocks in fs */
        !           315:        long    f_bavail;               /* free blocks avail to non-superuser */
        !           316:        long    f_files;                /* total file nodes in file system */
        !           317:        long    f_ffree;                /* free file nodes in fs */
        !           318:        fsid_t  f_fsid;                 /* file system id */
        !           319:        uid_t   f_owner;                /* user that mounted the file system */
        !           320:        long    f_syncwrites;           /* count of sync writes since mount */
        !           321:        long    f_asyncwrites;          /* count of async writes since mount */
        !           322:        long    f_spare[2];             /* spare for later */
        !           323:        char    f_fstypename[MFSNAMELEN]; /* fs type name */
        !           324:        char    f_mntonname[MNAMELEN];    /* directory on which mounted */
        !           325:        char    f_mntfromname[MNAMELEN];  /* mounted file system */
        !           326: };
        !           327:
        !           328: /*
        !           329:  * File system types.
        !           330:  */
        !           331: #define        MOUNT_FFS       "ffs"           /* UNIX "Fast" Filesystem */
        !           332: #define        MOUNT_UFS       MOUNT_FFS       /* for compatibility */
        !           333: #define        MOUNT_NFS       "nfs"           /* Network Filesystem */
        !           334: #define        MOUNT_MFS       "mfs"           /* Memory Filesystem */
        !           335: #define        MOUNT_MSDOS     "msdos"         /* MSDOS Filesystem */
        !           336: #define        MOUNT_PORTAL    "portal"        /* Portal Filesystem */
        !           337: #define        MOUNT_PROCFS    "procfs"        /* /proc Filesystem */
        !           338: #define        MOUNT_AFS       "afs"           /* Andrew Filesystem */
        !           339: #define        MOUNT_CD9660    "cd9660"        /* ISO9660 (aka CDROM) Filesystem */
        !           340: #define        MOUNT_EXT2FS    "ext2fs"        /* Second Extended Filesystem */
        !           341: #define        MOUNT_NCPFS     "ncpfs"         /* NetWare Network File System */
        !           342: #define        MOUNT_XFS       "xfs"           /* xfs */
        !           343: #define        MOUNT_NTFS      "ntfs"          /* NTFS */
        !           344: #define        MOUNT_UDF       "udf"           /* UDF */
        !           345:
        !           346: /*
        !           347:  * Structure per mounted file system.  Each mounted file system has an
        !           348:  * array of operations and an instance record.  The file systems are
        !           349:  * put on a doubly linked list.
        !           350:  */
        !           351: LIST_HEAD(vnodelst, vnode);
        !           352:
        !           353: struct mount {
        !           354:        CIRCLEQ_ENTRY(mount) mnt_list;          /* mount list */
        !           355:        const struct vfsops *mnt_op;            /* operations on fs */
        !           356:        struct vfsconf  *mnt_vfc;               /* configuration info */
        !           357:        struct vnode    *mnt_vnodecovered;      /* vnode we mounted on */
        !           358:        struct vnode    *mnt_syncer;            /* syncer vnode */
        !           359:        struct vnodelst mnt_vnodelist;          /* list of vnodes this mount */
        !           360:        struct rwlock   mnt_lock;               /* mount structure lock */
        !           361:        int             mnt_flag;               /* flags */
        !           362:        int             mnt_maxsymlinklen;      /* max size of short symlink */
        !           363:        struct statfs   mnt_stat;               /* cache of filesystem stats */
        !           364:        void            *mnt_data;              /* private data */
        !           365: };
        !           366:
        !           367: /*
        !           368:  * Mount flags.
        !           369:  *
        !           370:  * Unmount uses MNT_FORCE flag.
        !           371:  */
        !           372: #define        MNT_RDONLY      0x00000001      /* read only filesystem */
        !           373: #define        MNT_SYNCHRONOUS 0x00000002      /* file system written synchronously */
        !           374: #define        MNT_NOEXEC      0x00000004      /* can't exec from filesystem */
        !           375: #define        MNT_NOSUID      0x00000008      /* don't honor setuid bits on fs */
        !           376: #define        MNT_NODEV       0x00000010      /* don't interpret special files */
        !           377: #define        MNT_ASYNC       0x00000040      /* file system written asynchronously */
        !           378:
        !           379: /*
        !           380:  * exported mount flags.
        !           381:  */
        !           382: #define        MNT_EXRDONLY    0x00000080      /* exported read only */
        !           383: #define        MNT_EXPORTED    0x00000100      /* file system is exported */
        !           384: #define        MNT_DEFEXPORTED 0x00000200      /* exported to the world */
        !           385: #define        MNT_EXPORTANON  0x00000400      /* use anon uid mapping for everyone */
        !           386: #define        MNT_EXKERB      0x00000800      /* exported with Kerberos uid mapping */
        !           387:
        !           388: /*
        !           389:  * Flags set by internal operations.
        !           390:  */
        !           391: #define        MNT_LOCAL       0x00001000      /* filesystem is stored locally */
        !           392: #define        MNT_QUOTA       0x00002000      /* quotas are enabled on filesystem */
        !           393: #define        MNT_ROOTFS      0x00004000      /* identifies the root filesystem */
        !           394:
        !           395: /*
        !           396:  * Extra post 4.4BSD-lite2 mount flags.
        !           397:  */
        !           398: #define MNT_NOATIME    0x00008000      /* don't update access times on fs */
        !           399:
        !           400: /*
        !           401:  * Mask of flags that are visible to statfs()
        !           402:  */
        !           403: #define        MNT_VISFLAGMASK 0x0400ffff
        !           404:
        !           405: #define        MNT_BITS \
        !           406:     "\010\001RDONLY\002SYNCHRONOUS\003NOEXEC\004NOSUID\005NODEV" \
        !           407:     "\007ASYNC\010EXRDONLY\011EXPORTED\012DEFEXPORTED\013EXPORTANON" \
        !           408:     "\014EXKERB\015LOCAL\016QUOTA\017ROOTFS"
        !           409:
        !           410: /*
        !           411:  * filesystem control flags.
        !           412:  */
        !           413: #define        MNT_UPDATE      0x00010000      /* not a real mount, just an update */
        !           414: #define        MNT_DELEXPORT   0x00020000      /* delete export host lists */
        !           415: #define        MNT_RELOAD      0x00040000      /* reload filesystem data */
        !           416: #define        MNT_FORCE       0x00080000      /* force unmount or readonly change */
        !           417: #define MNT_WANTRDWR   0x02000000      /* want upgrade to read/write */
        !           418: #define MNT_SOFTDEP     0x04000000      /* soft dependencies being done */
        !           419: #define MNT_DOOMED     0x08000000      /* device behind filesystem is gone */
        !           420:
        !           421: /*
        !           422:  * Sysctl CTL_VFS definitions.
        !           423:  *
        !           424:  * Second level identifier specifies which filesystem. Second level
        !           425:  * identifier VFS_GENERIC returns information about all filesystems.
        !           426:  */
        !           427: #define        VFS_GENERIC     0       /* generic filesystem information */
        !           428: /*
        !           429:  * Third level identifiers for VFS_GENERIC are given below; third
        !           430:  * level identifiers for specific filesystems are given in their
        !           431:  * mount specific header files.
        !           432:  */
        !           433: #define VFS_MAXTYPENUM 1       /* int: highest defined filesystem type */
        !           434: #define VFS_CONF       2       /* struct: vfsconf for filesystem given
        !           435:                                   as next argument */
        !           436: #define        CTL_VFSGENCTL_NAMES { \
        !           437:        { 0, 0 }, \
        !           438:        { "maxtypenum", CTLTYPE_INT }, \
        !           439:        { "conf", CTLTYPE_NODE } \
        !           440: }
        !           441:
        !           442: /*
        !           443:  * Filesystem configuration information. One of these exists for each
        !           444:  * type of filesystem supported by the kernel. These are searched at
        !           445:  * mount time to identify the requested filesystem.
        !           446:  */
        !           447: struct vfsconf {
        !           448:        const struct vfsops *vfc_vfsops; /* filesystem operations vector */
        !           449:        char    vfc_name[MFSNAMELEN];   /* filesystem type name */
        !           450:        int     vfc_typenum;            /* historic filesystem type number */
        !           451:        int     vfc_refcount;           /* number mounted of this type */
        !           452:        int     vfc_flags;              /* permanent flags */
        !           453:        int     (*vfc_mountroot)(void); /* if != NULL, routine to mount root */
        !           454:        struct  vfsconf *vfc_next;      /* next in list */
        !           455: };
        !           456:
        !           457: /*
        !           458:  * Operations supported on mounted file system.
        !           459:  */
        !           460: #ifdef _KERNEL
        !           461: #ifdef __STDC__
        !           462: struct nameidata;
        !           463: struct mbuf;
        !           464: #endif
        !           465:
        !           466: extern int maxvfsconf;         /* highest defined filesystem type */
        !           467: extern struct vfsconf *vfsconf;        /* head of list of filesystem types */
        !           468:
        !           469: struct vfsops {
        !           470:        int     (*vfs_mount)(struct mount *mp, const char *path,
        !           471:                                    void *data,
        !           472:                                    struct nameidata *ndp, struct proc *p);
        !           473:        int     (*vfs_start)(struct mount *mp, int flags,
        !           474:                                    struct proc *p);
        !           475:        int     (*vfs_unmount)(struct mount *mp, int mntflags,
        !           476:                                    struct proc *p);
        !           477:        int     (*vfs_root)(struct mount *mp, struct vnode **vpp);
        !           478:        int     (*vfs_quotactl)(struct mount *mp, int cmds, uid_t uid,
        !           479:                                    caddr_t arg, struct proc *p);
        !           480:        int     (*vfs_statfs)(struct mount *mp, struct statfs *sbp,
        !           481:                                    struct proc *p);
        !           482:        int     (*vfs_sync)(struct mount *mp, int waitfor,
        !           483:                                    struct ucred *cred, struct proc *p);
        !           484:        int     (*vfs_vget)(struct mount *mp, ino_t ino,
        !           485:                                    struct vnode **vpp);
        !           486:        int     (*vfs_fhtovp)(struct mount *mp, struct fid *fhp,
        !           487:                                     struct vnode **vpp);
        !           488:        int     (*vfs_vptofh)(struct vnode *vp, struct fid *fhp);
        !           489:        int     (*vfs_init)(struct vfsconf *);
        !           490:        int     (*vfs_sysctl)(int *, u_int, void *, size_t *, void *,
        !           491:                                     size_t, struct proc *);
        !           492:        int     (*vfs_checkexp)(struct mount *mp, struct mbuf *nam,
        !           493:                                    int *extflagsp, struct ucred **credanonp);
        !           494: };
        !           495:
        !           496: #define VFS_MOUNT(MP, PATH, DATA, NDP, P) \
        !           497:        (*(MP)->mnt_op->vfs_mount)(MP, PATH, DATA, NDP, P)
        !           498: #define VFS_START(MP, FLAGS, P)          (*(MP)->mnt_op->vfs_start)(MP, FLAGS, P)
        !           499: #define VFS_UNMOUNT(MP, FORCE, P) (*(MP)->mnt_op->vfs_unmount)(MP, FORCE, P)
        !           500: #define VFS_ROOT(MP, VPP)        (*(MP)->mnt_op->vfs_root)(MP, VPP)
        !           501: #define VFS_QUOTACTL(MP,C,U,A,P)  (*(MP)->mnt_op->vfs_quotactl)(MP, C, U, A, P)
        !           502: #define VFS_STATFS(MP, SBP, P)   (*(MP)->mnt_op->vfs_statfs)(MP, SBP, P)
        !           503: #define VFS_SYNC(MP, WAIT, C, P)  (*(MP)->mnt_op->vfs_sync)(MP, WAIT, C, P)
        !           504: #define VFS_VGET(MP, INO, VPP)   (*(MP)->mnt_op->vfs_vget)(MP, INO, VPP)
        !           505: #define VFS_FHTOVP(MP, FIDP, VPP) \
        !           506:        (*(MP)->mnt_op->vfs_fhtovp)(MP, FIDP, VPP)
        !           507: #define        VFS_VPTOFH(VP, FIDP)      (*(VP)->v_mount->mnt_op->vfs_vptofh)(VP, FIDP)
        !           508: #define VFS_CHECKEXP(MP, NAM, EXFLG, CRED) \
        !           509:        (*(MP)->mnt_op->vfs_checkexp)(MP, NAM, EXFLG, CRED)
        !           510: #endif /* _KERNEL */
        !           511:
        !           512: /*
        !           513:  * Flags for various system call interfaces.
        !           514:  *
        !           515:  * waitfor flags to vfs_sync() and getfsstat()
        !           516:  */
        !           517: #define MNT_WAIT       1       /* synchronously wait for I/O to complete */
        !           518: #define MNT_NOWAIT     2       /* start all I/O, but do not wait for it */
        !           519: #define MNT_LAZY       3       /* push data not written by filesystem syncer */
        !           520:
        !           521: /*
        !           522:  * Generic file handle
        !           523:  */
        !           524: struct fhandle {
        !           525:        fsid_t  fh_fsid;        /* File system id of mount point */
        !           526:        struct  fid fh_fid;     /* File sys specific id */
        !           527: };
        !           528: typedef struct fhandle fhandle_t;
        !           529:
        !           530: #ifdef _KERNEL
        !           531: #include <net/radix.h>
        !           532: #include <sys/socket.h>                /* XXX for AF_MAX */
        !           533:
        !           534: /*
        !           535:  * Network address lookup element
        !           536:  */
        !           537: struct netcred {
        !           538:        struct  radix_node netc_rnodes[2];
        !           539:        int     netc_exflags;
        !           540:        struct  ucred netc_anon;
        !           541: };
        !           542:
        !           543: /*
        !           544:  * Network export information
        !           545:  */
        !           546: struct netexport {
        !           547:        struct  netcred ne_defexported;               /* Default export */
        !           548:        struct  radix_node_head *ne_rtable[AF_MAX+1]; /* Individual exports */
        !           549: };
        !           550: #endif /* _KERNEL */
        !           551:
        !           552: #ifdef _KERNEL
        !           553: /*
        !           554:  * exported vnode operations
        !           555:  */
        !           556: int    vfs_busy(struct mount *, int);
        !           557: #define VB_READ                0x01
        !           558: #define VB_WRITE       0x02
        !           559: #define VB_NOWAIT      0x04    /* immediately fail on busy lock */
        !           560: #define VB_WAIT                0x08    /* sleep fail on busy lock */
        !           561:
        !           562: int     vfs_isbusy(struct mount *);
        !           563: int     vfs_mount_foreach_vnode(struct mount *, int (*func)(struct vnode *,
        !           564:                                    void *), void *);
        !           565: void   vfs_getnewfsid(struct mount *);
        !           566: struct mount *vfs_getvfs(fsid_t *);
        !           567: int    vfs_mountedon(struct vnode *);
        !           568: int    vfs_mountroot(void);
        !           569: int    vfs_rootmountalloc(char *, char *, struct mount **);
        !           570: void   vfs_unbusy(struct mount *);
        !           571: void   vfs_unmountall(void);
        !           572: extern CIRCLEQ_HEAD(mntlist, mount) mountlist;
        !           573:
        !           574: struct mount *getvfs(fsid_t *);            /* return vfs given fsid */
        !           575:                                            /* process mount export info */
        !           576: int    vfs_export(struct mount *, struct netexport *, struct export_args *);
        !           577:                                            /* lookup host in fs export list */
        !           578: struct netcred *vfs_export_lookup(struct mount *, struct netexport *,
        !           579:            struct mbuf *);
        !           580: int    vfs_allocate_syncvnode(struct mount *);
        !           581: int    speedup_syncer(void);
        !           582:
        !           583: int    vfs_syncwait(int);      /* sync and wait for complete */
        !           584: void   vfs_shutdown(void);     /* unmount and sync file systems */
        !           585: long   makefstype(char *);
        !           586: int    dounmount(struct mount *, int, struct proc *, struct vnode *);
        !           587: void   vfsinit(void);
        !           588: void   vfs_bufstats(void);
        !           589: int    vfs_register(struct vfsconf *);
        !           590: int    vfs_unregister(struct vfsconf *);
        !           591: #else /* _KERNEL */
        !           592:
        !           593: #ifndef _SYS_STAT_H_
        !           594: struct stat;
        !           595: #endif
        !           596:
        !           597: __BEGIN_DECLS
        !           598: int    fstatfs(int, struct statfs *);
        !           599: int    getfh(const char *, fhandle_t *);
        !           600: int    getfsstat(struct statfs *, size_t, int);
        !           601: int    getmntinfo(struct statfs **, int);
        !           602: int    mount(const char *, const char *, int, void *);
        !           603: int    statfs(const char *, struct statfs *);
        !           604: int    unmount(const char *, int);
        !           605: #if __BSD_VISIBLE
        !           606: int    fhopen(const fhandle_t *, int);
        !           607: int    fhstat(const fhandle_t *, struct stat *);
        !           608: int    fhstatfs(const fhandle_t *, struct statfs *);
        !           609: #endif /* __BSD_VISIBLE */
        !           610:
        !           611: __END_DECLS
        !           612:
        !           613: #endif /* _KERNEL */
        !           614: #endif /* !_SYS_MOUNT_H_ */

CVSweb