Init
This commit is contained in:
79
sys/pcfs/pc_node.h
Normal file
79
sys/pcfs/pc_node.h
Normal file
@@ -0,0 +1,79 @@
|
||||
/* @(#)pc_node.h 1.1 94/10/31 SMI */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1989 by Sun Microsystems, Inc.
|
||||
*/
|
||||
|
||||
struct pcnode {
|
||||
struct pcnode *pc_forw; /* active list ptrs, must be first */
|
||||
struct pcnode *pc_back;
|
||||
int pc_flags; /* see below */
|
||||
struct vnode * pc_vn; /* vnode for pcnode */
|
||||
long pc_size; /* size of file */
|
||||
short pc_scluster; /* starting cluster of file */
|
||||
daddr_t pc_eblkno; /* disk blkno for entry */
|
||||
int pc_eoffset; /* offset in disk block of entry */
|
||||
struct pcdir pc_entry; /* directory entry of file */
|
||||
};
|
||||
|
||||
/*
|
||||
* flags
|
||||
*/
|
||||
#define PC_MOD 0x01 /* file data has been modified */
|
||||
#define PC_CHG 0x02 /* node data has been changed */
|
||||
#define PC_INVAL 0x04 /* node is invalid */
|
||||
#define PC_RELE_PEND 0x08 /* node is waiting to be released */
|
||||
#define PC_EXTERNAL 0x10 /* vnode ref is held externally */
|
||||
|
||||
#define PCTOV(PCP) ((PCP)->pc_vn)
|
||||
#define VTOPC(VP) ((struct pcnode *)((VP)->v_data))
|
||||
|
||||
#define PRIPCNODE (PZERO - 1)
|
||||
|
||||
/*
|
||||
* Make a unique integer for a file
|
||||
*/
|
||||
#define ENTPS (PC_SECSIZE / sizeof (struct pcdir))
|
||||
|
||||
#define pc_makenodeid(BN, OFF, EP) \
|
||||
((EP)->pcd_attr & PCA_DIR? \
|
||||
-ltohs((EP)->pcd_scluster) - 1: \
|
||||
((BN) * ENTPS) + ((OFF) / sizeof (struct pcdir)))
|
||||
|
||||
#define NPCHASH 1
|
||||
|
||||
#if NPCHASH == 1
|
||||
#define PCFHASH(FSP, BN, O) 0
|
||||
#define PCDHASH(FSP, SC) 0
|
||||
#else
|
||||
#define PCFHASH(FSP, BN, O) (((unsigned)FSP + BN + O) % NPCHASH)
|
||||
#define PCDHASH(FSP, SC) (((unsigned)FSP + SC) % NPCHASH)
|
||||
#endif
|
||||
|
||||
struct pchead {
|
||||
struct pcnode *pch_forw;
|
||||
struct pcnode *pch_back;
|
||||
};
|
||||
|
||||
/*
|
||||
* pcnode file, directory and invalid node operations vectors
|
||||
*/
|
||||
extern struct vnodeops pcfs_fvnodeops;
|
||||
extern struct vnodeops pcfs_dvnodeops;
|
||||
extern struct pchead pcfhead[];
|
||||
extern struct pchead pcdhead[];
|
||||
|
||||
/*
|
||||
* pcnode routines
|
||||
*/
|
||||
extern void pc_init();
|
||||
extern struct pcnode *pc_getnode(); /* get a pcnode for a file */
|
||||
extern void pc_rele(); /* release a pcnode */
|
||||
extern void pc_mark(); /* mark pcnode with current time */
|
||||
extern int pc_nodesync(); /* flush node blocks and update entry */
|
||||
extern int pc_nodeupdate(); /* update node directory entry */
|
||||
extern int pc_bmap(); /* map logical to physical blocks */
|
||||
extern int pc_balloc(); /* allocate blocks for a file */
|
||||
extern int pc_bfree(); /* free blocks for a file */
|
||||
extern int pc_verify(); /* verify a pcnode with the disk */
|
||||
extern void pc_diskchanged(); /* call when disk change is detected */
|
||||
Reference in New Issue
Block a user