82 lines
2.9 KiB
C
82 lines
2.9 KiB
C
/* @(#)tmp.h 1.1 92/07/30 SMI */
|
|
|
|
/*
|
|
* Utility and library routines that look at directories want to
|
|
* `see' something like an inode. While each tmpnode has a unique
|
|
* number (its memory address), the address turns out (signed long)
|
|
* to be unsuitable for library utilities. The following data structure
|
|
* is used to allocate a (small) tmpfs index number for these purposes.
|
|
*/
|
|
#define TMPIMAPNODES 128
|
|
#define TMPIMAPSIZE TMPIMAPNODES/NBBY
|
|
|
|
#define MAXMNTLEN 512 /* max length of pathname tmpfs is mounted on */
|
|
|
|
struct tmpimap {
|
|
u_char timap_bits[TMPIMAPSIZE]; /* bitmap of available index numbers */
|
|
/* 0 == free number */
|
|
struct tmpimap *timap_next; /* ptr to more index numbers */
|
|
};
|
|
|
|
/*
|
|
* Temporary file system per-mount data and other random stuff
|
|
* There is a linked list of these things rooted at tmpfs_mountp
|
|
*/
|
|
|
|
struct tmount {
|
|
struct tmount *tm_next; /* for linked list */
|
|
struct vfs *tm_vfsp; /* filesystem's vfs struct */
|
|
struct tmpnode *tm_rootnode; /* root tmpnode */
|
|
u_int tm_mntno; /* minor # of mounted `device' */
|
|
struct tmpimap tm_inomap; /* inode allocator maps */
|
|
u_int tm_direntries; /* number of directory entries */
|
|
u_int tm_directories; /* number of directories */
|
|
u_int tm_files; /* number of regular files */
|
|
u_int tm_kmemspace; /* bytes of kmem_alloc'd memory */
|
|
u_int tm_anonmem; /* bytes of anon memory actually used */
|
|
char tm_mntpath[MAXMNTLEN]; /* name of tmpfs mount point */
|
|
|
|
};
|
|
|
|
#ifdef KERNEL
|
|
char *tmp_memalloc();
|
|
void tmp_memfree();
|
|
#define GET_TIME(tv) ((*tv) = time)
|
|
#define VFSP_TO_TM(vfsp) ((struct tmount *)(vfsp)->vfs_data)
|
|
#define VP_TO_TM(vp) ((struct tmount *)(vp)->v_vfsp->vfs_data)
|
|
#define VP_TO_TN(vp) ((struct tmpnode *)(vp)->v_data)
|
|
#endif KERNEL
|
|
|
|
/*
|
|
* Don't allocate more anon pages for tmp files if free anon space
|
|
* goes under TMPHIWATER. Hideous deadlocks can occur. This can be
|
|
* patched in tmpfs_hiwater.
|
|
* XXX better heuristic needed
|
|
*/
|
|
#define TMPHIWATER 4*1024*1024 /* ie, 4 Megabytes */
|
|
|
|
/*
|
|
* Each tmpfs can allocate only a certain amount of kernel memory,
|
|
* which is used for directories (may change), anon maps, inode maps,
|
|
* and other goodies. This is statically set (during first tmp_mount())
|
|
* as a percent of physmem. The actual percentage can be patched in
|
|
* tmpfs_maxprockmem.
|
|
* XXX better heuristic needed
|
|
*/
|
|
#define TMPMAXPROCKMEM 2 /* Means 2 procent of physical memory */
|
|
|
|
/*
|
|
* patchable variables controlling debugging output
|
|
* defined in tmp_vnodeops XXX
|
|
*/
|
|
#define TMPFSDEBUG 1 /* XXX REMOVE ALL OF THESE FOR FCS!! */
|
|
|
|
#ifdef TMPFSDEBUG
|
|
extern int tmpfsdebug; /* general debugging (e.g. function calls) */
|
|
extern int tmpdebugerrs; /* report non-fatal error conditions */
|
|
extern int tmplockdebug; /* report on tmpnode locking and unlocking */
|
|
extern int tmpdirdebug; /* report of file and directory manipulation */
|
|
extern int tmprwdebug; /* read/write debugging */
|
|
extern int tmpdebugalloc; /* tmpfs memory and swap allocation */
|
|
#endif TMPFSDEBUG
|