Add primary cache management feature to libminixfs as mfs and ext2 currently do separately, remove cache code from mfs and ext2, and make them use the libminixfs interface. This makes all fields of the buf struct private to libminixfs and FS clients aren't supposed to access them at all. Only the opaque 'void *data' field (the FS block contents, used to be called bp) is to be accessed by the FS client. The main purpose is to implement the interface to the 2ndary vm cache just once, get rid of some code duplication, and add a little abstraction to reduce the code inertia of the whole caching business. Some minor sanity checking and prohibition done by mfs in this code as removed from the generic primary cache code as a result: - checking all inodes are not in use when allocating/resizing the cache - checking readonly filesystems aren't written to - checking the superblock isn't written to on mounted filesystems The minixfslib code relies on fs_blockstats() in the client filesystem to return some FS usage information.
54 lines
1.5 KiB
C
54 lines
1.5 KiB
C
/* EXTERN should be extern except for the table file */
|
|
|
|
#ifndef EXT2_GLO_H
|
|
#define EXT2_GLO_H
|
|
|
|
#ifdef _TABLE
|
|
#undef EXTERN
|
|
#define EXTERN
|
|
#endif
|
|
|
|
#include <minix/vfsif.h>
|
|
|
|
/* The following variables are used for returning results to the caller. */
|
|
EXTERN int err_code; /* temporary storage for error number */
|
|
EXTERN int rdwt_err; /* status of last disk i/o request */
|
|
|
|
EXTERN int cch[NR_INODES];
|
|
|
|
extern char dot1[2]; /* dot1 (&dot1[0]) and dot2 (&dot2[0]) have a special */
|
|
extern char dot2[3]; /* meaning to search_dir: no access permission check. */
|
|
|
|
extern int(*fs_call_vec[]) (void);
|
|
|
|
EXTERN message fs_m_in;
|
|
EXTERN message fs_m_out;
|
|
EXTERN vfs_ucred_t credentials;
|
|
|
|
EXTERN uid_t caller_uid;
|
|
EXTERN gid_t caller_gid;
|
|
|
|
EXTERN int req_nr;
|
|
|
|
EXTERN endpoint_t SELF_E;
|
|
|
|
EXTERN char user_path[PATH_MAX+1]; /* pathname to be processed */
|
|
|
|
EXTERN dev_t fs_dev; /* The device that is handled by this FS proc
|
|
*/
|
|
EXTERN char fs_dev_label[16]; /* Name of the device driver that is handled
|
|
* by this FS proc.
|
|
*/
|
|
EXTERN int unmountdone;
|
|
EXTERN int exitsignaled;
|
|
|
|
/* Little hack for syncing group descriptors. */
|
|
EXTERN int group_descriptors_dirty;
|
|
|
|
EXTERN struct opt opt; /* global options */
|
|
|
|
/* On ext2 metadata is stored in little endian format, so we shoud take
|
|
* care about byte swapping, when have BE CPU. */
|
|
EXTERN int le_CPU; /* little/big endian, if TRUE do not swap bytes */
|
|
|
|
#endif /* EXT2_GLO_H */
|