2021-10-11 18:20:23 -03:00

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