]>
git.saurik.com Git - apple/xnu.git/blob - bsd/miscfs/procfs/procfs_vfsops.c
ef382ca6cd4d08191403e5fea895b3e2961d5ba2
2 * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
4 * @APPLE_LICENSE_HEADER_START@
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.
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
20 * @APPLE_LICENSE_HEADER_END@
22 /* $NetBSD: procfs_vfsops.c,v 1.23 1995/03/09 12:05:54 mycroft Exp $ */
25 * Copyright (c) 1993 Jan-Simon Pendry
27 * The Regents of the University of California. All rights reserved.
29 * This code is derived from software contributed to Berkeley by
32 * Redistribution and use in source and binary forms, with or without
33 * modification, are permitted provided that the following conditions
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.
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
60 * @(#)procfs_vfsops.c 8.5 (Berkeley) 6/15/94
64 * procfs VFS interface
67 #include <sys/param.h>
69 #include <sys/kernel.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 */
85 procfs_mount(mp
, path
, data
, ndp
, p
)
89 struct nameidata
*ndp
;
94 if (UIO_MX
& (UIO_MX
-1)) {
95 log(LOG_ERR
, "procfs: invalid directory entry size");
99 if (mp
->mnt_flag
& MNT_UPDATE
)
102 mp
->mnt_flag
|= MNT_LOCAL
;
104 getnewfsid(mp
, makefstype(MOUNT_PROCFS
));
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"));
114 * unmount system call
116 procfs_unmount(mp
, mntflags
, p
)
125 if (mntflags
& MNT_FORCE
) {
126 /* procfs can never be rootfs so don't check for it */
132 if (error
= vflush(mp
, 0, flags
))
143 return (procfs_allocvp(mp
, vpp
, 0, Proot
));
147 procfs_start(mp
, flags
, p
)
157 * Get file system statistics.
159 procfs_statfs(mp
, sbp
, p
)
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 */
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
);
182 strncpy(sbp
->f_fstypename
, mp
->mnt_op
->vfs_name
, MFSNAMELEN
);
183 sbp
->f_fstypename
[MFSNAMELEN
] = '\0';
187 procfs_quotactl(mp
, cmds
, uid
, arg
, p
)
198 procfs_sync(mp
, waitfor
)
206 procfs_vget(mp
, ino
, vpp
)
215 procfs_fhtovp(mp
, fhp
, vpp
)
224 procfs_vptofh(vp
, fhp
)
238 struct vfsops procfs_vfsops
= {