Annotation of XNU/bsd/miscfs/procfs/procfs_vfsops.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
                      3:  *
                      4:  * @APPLE_LICENSE_HEADER_START@
                      5:  * 
                      6:  * The contents of this file constitute Original Code as defined in and
                      7:  * are subject to the Apple Public Source License Version 1.1 (the
                      8:  * "License").  You may not use this file except in compliance with the
                      9:  * License.  Please obtain a copy of the License at
                     10:  * http://www.apple.com/publicsource and read it before using this file.
                     11:  * 
                     12:  * This Original Code and all software distributed under the License are
                     13:  * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
                     14:  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
                     15:  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
                     16:  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
                     17:  * License for the specific language governing rights and limitations
                     18:  * under the License.
                     19:  * 
                     20:  * @APPLE_LICENSE_HEADER_END@
                     21:  */
                     22: /*     $NetBSD: procfs_vfsops.c,v 1.23 1995/03/09 12:05:54 mycroft Exp $       */
                     23: 
                     24: /*
                     25:  * Copyright (c) 1993 Jan-Simon Pendry
                     26:  * Copyright (c) 1993
                     27:  *     The Regents of the University of California.  All rights reserved.
                     28:  *
                     29:  * This code is derived from software contributed to Berkeley by
                     30:  * Jan-Simon Pendry.
                     31:  *
                     32:  * Redistribution and use in source and binary forms, with or without
                     33:  * modification, are permitted provided that the following conditions
                     34:  * are met:
                     35:  * 1. Redistributions of source code must retain the above copyright
                     36:  *    notice, this list of conditions and the following disclaimer.
                     37:  * 2. Redistributions in binary form must reproduce the above copyright
                     38:  *    notice, this list of conditions and the following disclaimer in the
                     39:  *    documentation and/or other materials provided with the distribution.
                     40:  * 3. All advertising materials mentioning features or use of this software
                     41:  *    must display the following acknowledgement:
                     42:  *     This product includes software developed by the University of
                     43:  *     California, Berkeley and its contributors.
                     44:  * 4. Neither the name of the University nor the names of its contributors
                     45:  *    may be used to endorse or promote products derived from this software
                     46:  *    without specific prior written permission.
                     47:  *
                     48:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
                     49:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     50:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     51:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
                     52:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     53:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     54:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     55:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     56:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     57:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     58:  * SUCH DAMAGE.
                     59:  *
                     60:  *     @(#)procfs_vfsops.c     8.5 (Berkeley) 6/15/94
                     61:  */
                     62: 
                     63: /*
                     64:  * procfs VFS interface
                     65:  */
                     66: 
                     67: #include <sys/param.h>
                     68: #include <sys/time.h>
                     69: #include <sys/kernel.h>
                     70: #include <sys/proc.h>
                     71: #include <sys/buf.h>
                     72: #include <sys/syslog.h>
                     73: #include <sys/mount.h>
                     74: #include <sys/signalvar.h>
                     75: #include <sys/vnode.h>
                     76: #include <miscfs/procfs/procfs.h>
                     77: #include <vm/vm.h>                     /* for PAGE_SIZE */
                     78: 
                     79: /*
                     80:  * VFS Operations.
                     81:  *
                     82:  * mount system call
                     83:  */
                     84: /* ARGSUSED */
                     85: procfs_mount(mp, path, data, ndp, p)
                     86:        struct mount *mp;
                     87:        char *path;
                     88:        caddr_t data;
                     89:        struct nameidata *ndp;
                     90:        struct proc *p;
                     91: {
                     92:        size_t size;
                     93: 
                     94:        if (UIO_MX & (UIO_MX-1)) {
                     95:                log(LOG_ERR, "procfs: invalid directory entry size");
                     96:                return (EINVAL);
                     97:        }
                     98: 
                     99:        if (mp->mnt_flag & MNT_UPDATE)
                    100:                return (EOPNOTSUPP);
                    101: 
                    102:        mp->mnt_flag |= MNT_LOCAL;
                    103:        mp->mnt_data = 0;
                    104:        getnewfsid(mp, makefstype(MOUNT_PROCFS));
                    105: 
                    106:        (void) copyinstr(path, mp->mnt_stat.f_mntonname, MNAMELEN, &size);
                    107:        bzero(mp->mnt_stat.f_mntonname + size, MNAMELEN - size);
                    108:        bzero(mp->mnt_stat.f_mntfromname, MNAMELEN);
                    109:        bcopy("procfs", mp->mnt_stat.f_mntfromname, sizeof("procfs"));
                    110:        return (0);
                    111: }
                    112: 
                    113: /*
                    114:  * unmount system call
                    115:  */
                    116: procfs_unmount(mp, mntflags, p)
                    117:        struct mount *mp;
                    118:        int mntflags;
                    119:        struct proc *p;
                    120: {
                    121:        int error;
                    122:        extern int doforce;
                    123:        int flags = 0;
                    124: 
                    125:        if (mntflags & MNT_FORCE) {
                    126:                /* procfs can never be rootfs so don't check for it */
                    127:                if (!doforce)
                    128:                        return (EINVAL);
                    129:                flags |= FORCECLOSE;
                    130:        }
                    131: 
                    132:        if (error = vflush(mp, 0, flags))
                    133:                return (error);
                    134: 
                    135:        return (0);
                    136: }
                    137: 
                    138: procfs_root(mp, vpp)
                    139:        struct mount *mp;
                    140:        struct vnode **vpp;
                    141: {
                    142: 
                    143:        return (procfs_allocvp(mp, vpp, 0, Proot));
                    144: }
                    145: 
                    146: /* ARGSUSED */
                    147: procfs_start(mp, flags, p)
                    148:        struct mount *mp;
                    149:        int flags;
                    150:        struct proc *p;
                    151: {
                    152: 
                    153:        return (0);
                    154: }
                    155: 
                    156: /*
                    157:  * Get file system statistics.
                    158:  */
                    159: procfs_statfs(mp, sbp, p)
                    160:        struct mount *mp;
                    161:        struct statfs *sbp;
                    162:        struct proc *p;
                    163: {
                    164: 
                    165: #ifdef COMPAT_09
                    166:        sbp->f_type = 10;
                    167: #else
                    168:        sbp->f_type = 0;
                    169: #endif
                    170:        sbp->f_bsize = PAGE_SIZE;
                    171:        sbp->f_iosize = PAGE_SIZE;
                    172:        sbp->f_blocks = 1;      /* avoid divide by zero in some df's */
                    173:        sbp->f_bfree = 0;
                    174:        sbp->f_bavail = 0;
                    175:        sbp->f_files = maxproc;                 /* approx */
                    176:        sbp->f_ffree = maxproc - nprocs;        /* approx */
                    177:        if (sbp != &mp->mnt_stat) {
                    178:                bcopy(&mp->mnt_stat.f_fsid, &sbp->f_fsid, sizeof(sbp->f_fsid));
                    179:                bcopy(mp->mnt_stat.f_mntonname, sbp->f_mntonname, MNAMELEN);
                    180:                bcopy(mp->mnt_stat.f_mntfromname, sbp->f_mntfromname, MNAMELEN);
                    181:        }
                    182:        strncpy(sbp->f_fstypename, mp->mnt_op->vfs_name, MFSNAMELEN);
                    183:        sbp->f_fstypename[MFSNAMELEN] = '\0';
                    184:        return (0);
                    185: }
                    186: 
                    187: procfs_quotactl(mp, cmds, uid, arg, p)
                    188:        struct mount *mp;
                    189:        int cmds;
                    190:        uid_t uid;
                    191:        caddr_t arg;
                    192:        struct proc *p;
                    193: {
                    194: 
                    195:        return (EOPNOTSUPP);
                    196: }
                    197: 
                    198: procfs_sync(mp, waitfor)
                    199:        struct mount *mp;
                    200:        int waitfor;
                    201: {
                    202: 
                    203:        return (0);
                    204: }
                    205: 
                    206: procfs_vget(mp, ino, vpp)
                    207:        struct mount *mp;
                    208:        ino_t ino;
                    209:        struct vnode **vpp;
                    210: {
                    211: 
                    212:        return (EOPNOTSUPP);
                    213: }
                    214: 
                    215: procfs_fhtovp(mp, fhp, vpp)
                    216:        struct mount *mp;
                    217:        struct fid *fhp;
                    218:        struct vnode **vpp;
                    219: {
                    220: 
                    221:        return (EINVAL);
                    222: }
                    223: 
                    224: procfs_vptofh(vp, fhp)
                    225:        struct vnode *vp;
                    226:        struct fid *fhp;
                    227: {
                    228: 
                    229:        return (EINVAL);
                    230: }
                    231: 
                    232: procfs_init()
                    233: {
                    234: 
                    235:        return (0);
                    236: }
                    237: 
                    238: struct vfsops procfs_vfsops = {
                    239:        MOUNT_PROCFS,
                    240:        procfs_mount,
                    241:        procfs_start,
                    242:        procfs_unmount,
                    243:        procfs_root,
                    244:        procfs_quotactl,
                    245:        procfs_statfs,
                    246:        procfs_sync,
                    247:        procfs_vget,
                    248:        procfs_fhtovp,
                    249:        procfs_vptofh,
                    250:        procfs_init,
                    251: };

unix.superglobalmegacorp.com

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