123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- /*
- * statfs.h - definitions for statistic gathering file server
- */
- #define DEBUGFILE "iostats.out"
- #define DONESTR "done"
- #define DEBUG if(!dbg){}else fprint
- #define MAXPROC 16
- #define FHASHSIZE 64
- #define fidhash(s) fhash[s%FHASHSIZE]
- enum{
- Maxfdata = 8192, /* max size of data in 9P message */
- Maxrpc = 20000, /* number of RPCs we'll log */
- };
- typedef struct Fsrpc Fsrpc;
- typedef struct Fid Fid;
- typedef struct File File;
- typedef struct Proc Proc;
- typedef struct Stats Stats;
- typedef struct Rpc Rpc;
- typedef struct Frec Frec;
- struct Frec
- {
- Frec *next;
- char *op;
- ulong nread;
- ulong nwrite;
- ulong bread;
- ulong bwrite;
- ulong opens;
- };
- struct Rpc
- {
- char *name;
- ulong count;
- ulong time;
- ulong loms;
- ulong hims;
- ulong bin;
- ulong bout;
- };
- struct Stats
- {
- ulong totread;
- ulong totwrite;
- ulong nrpc;
- ulong nproto;
- Rpc rpc[Maxrpc];
- };
- struct Fsrpc
- {
- int busy; /* Work buffer has pending rpc to service */
- int pid; /* Pid of slave process executing the rpc */
- int canint; /* Interrupt gate */
- int flushtag; /* Tag on which to reply to flush */
- Fcall work; /* Plan 9 incoming Fcall */
- uchar buf[IOHDRSZ+Maxfdata]; /* Data buffer */
- };
- struct Fid
- {
- int fid; /* system fd for i/o */
- File *f; /* File attached to this fid */
- int mode;
- int nr; /* fid number */
- Fid *next; /* hash link */
- ulong nread;
- ulong nwrite;
- ulong bread;
- ulong bwrite;
- vlong offset; /* for directories */
- };
- struct File
- {
- char *name;
- Qid qid;
- int inval;
- File *parent;
- File *child;
- File *childlist;
- };
- struct Proc
- {
- int pid;
- int busy;
- Proc *next;
- };
- enum
- {
- Nr_workbufs = 16,
- Dsegpad = 8192,
- Fidchunk = 1000,
- };
- Extern Fsrpc *Workq;
- Extern int dbg;
- Extern File *root;
- Extern Fid **fhash;
- Extern Fid *fidfree;
- Extern int qid;
- Extern Proc *Proclist;
- Extern int done;
- Extern Stats *stats;
- Extern Frec *frhead;
- Extern Frec *frtail;
- Extern int myiounit;
- /* File system protocol service procedures */
- void Xcreate(Fsrpc*), Xclunk(Fsrpc*);
- void Xversion(Fsrpc*), Xauth(Fsrpc*), Xflush(Fsrpc*);
- void Xattach(Fsrpc*), Xwalk(Fsrpc*), Xauth(Fsrpc*);
- void Xremove(Fsrpc*), Xstat(Fsrpc*), Xwstat(Fsrpc*);
- void slave(Fsrpc*);
- void reply(Fcall*, Fcall*, char*);
- Fid *getfid(int);
- int freefid(int);
- Fid *newfid(int);
- Fsrpc *getsbuf(void);
- void initroot(void);
- void fatal(char*);
- void makepath(char*, File*, char*);
- File *file(File*, char*);
- void slaveopen(Fsrpc*);
- void slaveread(Fsrpc*);
- void slavewrite(Fsrpc*);
- void blockingslave(void);
- void reopen(Fid *f);
- void noteproc(int, char*);
- void flushaction(void*, char*);
- void catcher(void*, char*);
- ulong msec(void);
- void fidreport(Fid*);
|