version 1.9, 1993/05/28 16:47:05 |
version 1.14, 1993/12/18 03:56:12 |
|
|
* Kernel parameter filesystem |
* Kernel parameter filesystem |
*/ |
*/ |
|
|
#include "param.h" |
#include <sys/param.h> |
#include "systm.h" |
#include <sys/systm.h> |
#include "kernel.h" |
#include <sys/kernel.h> |
#include "types.h" |
#include <sys/types.h> |
#include "time.h" |
#include <sys/time.h> |
#include "proc.h" |
#include <sys/proc.h> |
#include "file.h" |
#include <sys/file.h> |
#include "vnode.h" |
#include <sys/vnode.h> |
#include "stat.h" |
#include <sys/stat.h> |
#include "mount.h" |
#include <sys/mount.h> |
#include "namei.h" |
#include <sys/namei.h> |
#include "buf.h" |
#include <sys/buf.h> |
#include "miscfs/kernfs/kernfs.h" |
|
|
|
#include "../ufs/dir.h" /* For readdir() XXX */ |
#include <ufs/dir.h> /* For readdir() XXX */ |
|
|
|
#include <miscfs/kernfs/kernfs.h> |
|
|
struct kernfs_target kernfs_targets[] = { |
struct kernfs_target kernfs_targets[] = { |
/* NOTE: The name must be less than UIO_MX-16 chars in length */ |
/* NOTE: The name must be less than UIO_MX-16 chars in length */ |
Line 65 REG_TARGET("hostname", 0, KTT_HOSTNAME, |
|
Line 66 REG_TARGET("hostname", 0, KTT_HOSTNAME, |
|
REG_TARGET("hz", &hz, KTT_INT, KTM_RO_PERMS ) |
REG_TARGET("hz", &hz, KTT_INT, KTM_RO_PERMS ) |
REG_TARGET("loadavg", 0, KTT_AVENRUN, KTM_RO_PERMS ) |
REG_TARGET("loadavg", 0, KTT_AVENRUN, KTM_RO_PERMS ) |
REG_TARGET("physmem", &physmem, KTT_INT, KTM_RO_PERMS ) |
REG_TARGET("physmem", &physmem, KTT_INT, KTM_RO_PERMS ) |
|
#ifdef KERNFS_HAVE_ROOTDIR |
DIR_TARGET("root", 0, KTT_NULL, KTM_DIR_PERMS ) |
DIR_TARGET("root", 0, KTT_NULL, KTM_DIR_PERMS ) |
|
#endif |
BLK_TARGET("rootdev", 0, KTT_NULL, KTM_RO_PERMS ) |
BLK_TARGET("rootdev", 0, KTT_NULL, KTM_RO_PERMS ) |
CHR_TARGET("rrootdev", 0, KTT_NULL, KTM_RO_PERMS ) |
CHR_TARGET("rrootdev", 0, KTT_NULL, KTM_RO_PERMS ) |
REG_TARGET("time", 0, KTT_TIME, KTM_RO_PERMS ) |
REG_TARGET("time", 0, KTT_TIME, KTM_RO_PERMS ) |
Line 185 kernfs_lookup(dvp, ndp, p) |
|
Line 188 kernfs_lookup(dvp, ndp, p) |
|
/*VOP_LOCK(dvp);*/ |
/*VOP_LOCK(dvp);*/ |
return (0); |
return (0); |
} |
} |
|
|
|
#ifdef KERNFS_HAVE_ROOTDIR |
if (ndp->ni_namelen == 4 && bcmp(pname, "root", 4) == 0) { |
if (ndp->ni_namelen == 4 && bcmp(pname, "root", 4) == 0) { |
ndp->ni_dvp = dvp; |
ndp->ni_dvp = dvp; |
ndp->ni_vp = rootdir; |
ndp->ni_vp = rootdir; |
Line 193 kernfs_lookup(dvp, ndp, p) |
|
Line 197 kernfs_lookup(dvp, ndp, p) |
|
VOP_LOCK(rootdir); |
VOP_LOCK(rootdir); |
return (0); |
return (0); |
} |
} |
|
#endif |
|
|
/* |
/* |
* /kern/rootdev is the root device |
* /kern/rootdev is the root device |
*/ |
*/ |
Line 237 kernfs_lookup(dvp, ndp, p) |
|
Line 242 kernfs_lookup(dvp, ndp, p) |
|
#ifdef KERNFS_DIAGNOSTIC |
#ifdef KERNFS_DIAGNOSTIC |
printf("kernfs_lookup: allocate new vnode\n"); |
printf("kernfs_lookup: allocate new vnode\n"); |
#endif |
#endif |
error = getnewvnode(VT_UFS, dvp->v_mount, &kernfs_vnodeops, &fvp); |
error = getnewvnode(VT_KERNFS, dvp->v_mount, &kernfs_vnodeops, &fvp); |
if (error) |
if (error) |
goto bad; |
goto bad; |
VTOKERN(fvp)->kf_kt = &kernfs_targets[i]; |
VTOKERN(fvp)->kf_kt = &kernfs_targets[i]; |
Line 556 kernfs_write(vp, uio, ioflag, cred) |
|
Line 561 kernfs_write(vp, uio, ioflag, cred) |
|
return (kernfs_xwrite(kt, strbuf, xlen)); |
return (kernfs_xwrite(kt, strbuf, xlen)); |
} |
} |
|
|
kernfs_readdir(vp, uio, cred, eofflagp) |
kernfs_readdir(vp, uio, cred, eofflagp, cookies, ncookies) |
struct vnode *vp; |
struct vnode *vp; |
struct uio *uio; |
struct uio *uio; |
struct ucred *cred; |
struct ucred *cred; |
int *eofflagp; |
int *eofflagp; |
|
u_int *cookies; |
|
int ncookies; |
{ |
{ |
struct filedesc *fdp; |
struct filedesc *fdp; |
int i; |
int i; |
Line 568 kernfs_readdir(vp, uio, cred, eofflagp) |
|
Line 575 kernfs_readdir(vp, uio, cred, eofflagp) |
|
|
|
i = uio->uio_offset / UIO_MX; |
i = uio->uio_offset / UIO_MX; |
error = 0; |
error = 0; |
while (uio->uio_resid > 0) { |
while (uio->uio_resid > 0 && (!cookies || ncookies > 0)) { |
#ifdef KERNFS_DIAGNOSTIC |
#ifdef KERNFS_DIAGNOSTIC |
printf("kernfs_readdir: i = %d\n", i); |
printf("kernfs_readdir: i = %d\n", i); |
#endif |
#endif |
Line 601 kernfs_readdir(vp, uio, cred, eofflagp) |
|
Line 608 kernfs_readdir(vp, uio, cred, eofflagp) |
|
error = uiomove((caddr_t) dp, UIO_MX, uio); |
error = uiomove((caddr_t) dp, UIO_MX, uio); |
if (error) |
if (error) |
break; |
break; |
|
if (cookies) { |
|
*cookies = (i + 1) * UIO_MX; |
|
ncookies--; |
|
} |
} |
} |
i++; |
i++; |
} |
} |
Line 629 kernfs_inactive(vp, p) |
|
Line 640 kernfs_inactive(vp, p) |
|
* Print out the contents of a kernfs vnode. |
* Print out the contents of a kernfs vnode. |
*/ |
*/ |
/* ARGSUSED */ |
/* ARGSUSED */ |
|
void |
kernfs_print(vp) |
kernfs_print(vp) |
struct vnode *vp; |
struct vnode *vp; |
{ |
{ |
printf("tag VT_NON, kernfs vnode\n"); |
printf("tag VT_KERNFS, kernfs vnode\n"); |
} |
} |
|
|
/* |
/* |