procfs_vfsops.c revision 1.1 1 1.1 pk /*
2 1.1 pk * %W% (Erasmus) %G% - pk (at) cs.few.eur.nl
3 1.1 pk */
4 1.1 pk
5 1.1 pk #include "param.h"
6 1.1 pk #include "time.h"
7 1.1 pk #include "kernel.h"
8 1.1 pk #include "proc.h"
9 1.1 pk #include "buf.h"
10 1.1 pk #include "mount.h"
11 1.1 pk #include "signalvar.h"
12 1.1 pk #include "vnode.h"
13 1.1 pk
14 1.1 pk #include "pfsnode.h"
15 1.1 pk
16 1.1 pk extern struct vnodeops pfs_vnodeops;
17 1.1 pk
18 1.1 pk /*
19 1.1 pk * mfs vfs operations.
20 1.1 pk */
21 1.1 pk int pfs_mount();
22 1.1 pk int pfs_start();
23 1.1 pk int pfs_unmount();
24 1.1 pk int pfs_root();
25 1.1 pk int pfs_quotactl();
26 1.1 pk int pfs_statfs();
27 1.1 pk int pfs_sync();
28 1.1 pk int pfs_fhtovp();
29 1.1 pk int pfs_vptofh();
30 1.1 pk int pfs_init();
31 1.1 pk
32 1.1 pk struct vfsops procfs_vfsops = {
33 1.1 pk pfs_mount,
34 1.1 pk pfs_start,
35 1.1 pk pfs_unmount,
36 1.1 pk pfs_root,
37 1.1 pk pfs_quotactl,
38 1.1 pk pfs_statfs,
39 1.1 pk pfs_sync,
40 1.1 pk pfs_fhtovp,
41 1.1 pk pfs_vptofh,
42 1.1 pk pfs_init,
43 1.1 pk };
44 1.1 pk
45 1.1 pk /*
46 1.1 pk * VFS Operations.
47 1.1 pk *
48 1.1 pk * mount system call
49 1.1 pk */
50 1.1 pk /* ARGSUSED */
51 1.1 pk pfs_mount(mp, path, data, ndp, p)
52 1.1 pk register struct mount *mp;
53 1.1 pk char *path;
54 1.1 pk caddr_t data;
55 1.1 pk struct nameidata *ndp;
56 1.1 pk struct proc *p;
57 1.1 pk {
58 1.1 pk #if 0
59 1.1 pk struct pfs_args args;
60 1.1 pk #endif
61 1.1 pk struct vnode *pvp;
62 1.1 pk u_int size;
63 1.1 pk int error;
64 1.1 pk
65 1.1 pk if (mp->mnt_flag & MNT_UPDATE) {
66 1.1 pk return (0);
67 1.1 pk }
68 1.1 pk
69 1.1 pk #if 0
70 1.1 pk if (error = copyin(data, (caddr_t)&args, sizeof (struct pfs_args)))
71 1.1 pk return (error);
72 1.1 pk #endif
73 1.1 pk (void) copyinstr(path, (caddr_t)mp->mnt_stat.f_mntonname, MNAMELEN, &size);
74 1.1 pk bzero(mp->mnt_stat.f_mntonname + size, MNAMELEN - size);
75 1.1 pk
76 1.1 pk size = sizeof("proc") - 1;
77 1.1 pk bcopy("proc", mp->mnt_stat.f_mntfromname, size);
78 1.1 pk bzero(mp->mnt_stat.f_mntfromname + size, MNAMELEN - size);
79 1.1 pk
80 1.1 pk (void) pfs_statfs(mp, &mp->mnt_stat, p);
81 1.1 pk return (0);
82 1.1 pk }
83 1.1 pk
84 1.1 pk /*
85 1.1 pk * unmount system call
86 1.1 pk */
87 1.1 pk pfs_unmount(mp, mntflags, p)
88 1.1 pk struct mount *mp;
89 1.1 pk int mntflags;
90 1.1 pk struct proc *p;
91 1.1 pk {
92 1.1 pk return (0);
93 1.1 pk }
94 1.1 pk
95 1.1 pk pfs_root(mp, vpp)
96 1.1 pk struct mount *mp;
97 1.1 pk struct vnode **vpp;
98 1.1 pk {
99 1.1 pk struct vnode *vp;
100 1.1 pk struct pfsnode *pfsp;
101 1.1 pk int error;
102 1.1 pk
103 1.1 pk error = getnewvnode(VT_PROCFS, mp, &pfs_vnodeops, &vp);
104 1.1 pk if (error)
105 1.1 pk return error;
106 1.1 pk
107 1.1 pk vp->v_type = VDIR;
108 1.1 pk vp->v_flag = VROOT;
109 1.1 pk pfsp = VTOPFS(vp);
110 1.1 pk pfsp->pfs_vnode = vp;
111 1.1 pk pfsp->pfs_pid = 0;
112 1.1 pk
113 1.1 pk *vpp = vp;
114 1.1 pk return 0;
115 1.1 pk }
116 1.1 pk
117 1.1 pk /*
118 1.1 pk */
119 1.1 pk /* ARGSUSED */
120 1.1 pk pfs_start(mp, flags, p)
121 1.1 pk struct mount *mp;
122 1.1 pk int flags;
123 1.1 pk struct proc *p;
124 1.1 pk {
125 1.1 pk return 0;
126 1.1 pk }
127 1.1 pk
128 1.1 pk /*
129 1.1 pk * Get file system statistics.
130 1.1 pk */
131 1.1 pk pfs_statfs(mp, sbp, p)
132 1.1 pk struct mount *mp;
133 1.1 pk struct statfs *sbp;
134 1.1 pk struct proc *p;
135 1.1 pk {
136 1.1 pk sbp->f_type = MOUNT_PROCFS;
137 1.1 pk sbp->f_fsize = nprocs;
138 1.1 pk sbp->f_bsize = 0;
139 1.1 pk sbp->f_blocks = 0;
140 1.1 pk sbp->f_bfree = maxproc - nprocs;
141 1.1 pk sbp->f_bavail = 0;
142 1.1 pk sbp->f_files = 0;
143 1.1 pk sbp->f_ffree = 0;
144 1.1 pk
145 1.1 pk return 0;
146 1.1 pk }
147 1.1 pk
148 1.1 pk
149 1.1 pk pfs_quotactl(mp, cmds, uid, arg, p)
150 1.1 pk struct mount *mp;
151 1.1 pk int cmds;
152 1.1 pk uid_t uid;
153 1.1 pk caddr_t arg;
154 1.1 pk struct proc *p;
155 1.1 pk {
156 1.1 pk return EOPNOTSUPP;
157 1.1 pk }
158 1.1 pk
159 1.1 pk pfs_sync(mp, waitfor)
160 1.1 pk struct mount *mp;
161 1.1 pk int waitfor;
162 1.1 pk {
163 1.1 pk return 0;
164 1.1 pk }
165 1.1 pk
166 1.1 pk pfs_fhtovp(mp, fhp, vpp)
167 1.1 pk register struct mount *mp;
168 1.1 pk struct fid *fhp;
169 1.1 pk struct vnode **vpp;
170 1.1 pk {
171 1.1 pk return EINVAL;
172 1.1 pk }
173 1.1 pk
174 1.1 pk pfs_vptofh(vp, fhp)
175 1.1 pk struct vnode *vp;
176 1.1 pk struct fid *fhp;
177 1.1 pk {
178 1.1 pk return EINVAL;
179 1.1 pk }
180 1.1 pk
181 1.1 pk pfs_init()
182 1.1 pk {
183 1.1 pk return 0;
184 1.1 pk }
185