Subversion Repositories planix.SVN

Rev

Rev 2 | Blame | Compare with Previous | Last modification | View Log | RSS feed

/*
 *  format of cache on disk
 */
typedef struct Dptr     Dptr;
typedef struct Dahdr    Dahdr;
typedef struct Dalloc   Dalloc;
typedef struct Fphdr    Fphdr;
typedef struct Fptr     Fptr;
typedef struct Inode    Inode;
typedef struct Dihdr    Dihdr;
typedef struct Dinode   Dinode;

enum
{
        Amagic=         0xbebeefed,     /* allocation block magic */
        Imagic=         0xbadc00ce,     /* inode block magic */
        BtoUL=          8*sizeof(ulong),/* bits in a ulong */
        CACHENAMELEN=   128
};
#define Indbno          0x80000000      /* indirect block */
#define Notabno         0xFFFFFFFF      /* not a block number */

/*
 *  Allocation blocks at the begining of the disk.  There are
 *  enough of these blocks to supply 1 bit for each block on the
 *  disk;
 */
struct Dahdr
{
        ulong   magic;
        ulong   bsize;          /* logical block size */
        char    name[CACHENAMELEN];
        short   nab;            /* number of allocation blocks */
};
struct Dalloc
{
        Dahdr;
        ulong   bits[1];
};

/*
 *  A pointer to disk data
 */
struct Dptr
{
        ulong   fbno;           /* file block number */
        ulong   bno;            /* disk block number */
        ushort  start;          /* offset into block of valid data */
        ushort  end;            /* offset into block after valid data */
};

/*
 *  A file descriptor.
 */
struct Inode
{
        Qid     qid;
        vlong   length;
        Dptr    ptr;            /* pointer page */      
        char    inuse;
};

/*
 *  inode blocks (after allocation blocks)
 */
struct Dihdr
{
        ulong   magic;
        ulong   nino;           /* number of inodes */
};
struct Dinode
{
        Dihdr;
        Inode   inode[1];
};