Annotation of 3BSD/sys/h/buf.h, revision 1.1.1.1

1.1       root        1: /*     buf.h   2.1     1/5/80  */
                      2: 
                      3: /*
                      4:  * Each buffer in the pool is usually doubly linked into 2 lists:
                      5:  * the device with which it is currently associated (always)
                      6:  * and also on a list of blocks available for allocation
                      7:  * for other use (usually).
                      8:  * The latter list is kept in last-used order, and the two
                      9:  * lists are doubly linked to make it easy to remove
                     10:  * a buffer from one list when it was found by
                     11:  * looking through the other.
                     12:  * A buffer is on the available list, and is liable
                     13:  * to be reassigned to another disk block, if and only
                     14:  * if it is not marked BUSY.  When a buffer is busy, the
                     15:  * available-list pointers can be used for other purposes.
                     16:  * Most drivers use the forward ptr as a link in their I/O
                     17:  * active queue.
                     18:  * A buffer header contains all the information required
                     19:  * to perform I/O.
                     20:  * Most of the routines which manipulate these things
                     21:  * are in bio.c.
                     22:  */
                     23: struct buf
                     24: {
                     25:        int     b_flags;                /* see defines below */
                     26:        struct  buf *b_forw;            /* headed by d_tab of conf.c */
                     27:        struct  buf *b_back;            /*  "  */
                     28:        struct  buf *av_forw;           /* position on free list, */
                     29:        struct  buf *av_back;           /*     if not BUSY*/
                     30:        dev_t   b_dev;                  /* major+minor device name */
                     31:        unsigned b_bcount;              /* transfer count */
                     32:        union {
                     33:            caddr_t b_addr;             /* low order core address */
                     34:            int *b_words;               /* words for clearing */
                     35:            struct filsys *b_filsys;    /* superblocks */
                     36:            struct dinode *b_dino;      /* ilist */
                     37:            daddr_t *b_daddr;           /* indirect block */
                     38:        } b_un;
                     39:        daddr_t b_blkno;                /* block # on device */
                     40:        char    b_xmem;                 /* high order core address */
                     41:        char    b_error;                /* returned after I/O */
                     42:        unsigned int b_resid;           /* words not transferred after error */
                     43:        struct  proc  *b_proc;          /* process doing physical or swap I/O */
                     44: };
                     45: 
                     46: #ifdef KERNEL
                     47: extern struct buf buf[];               /* The buffer pool itself */
                     48: extern struct buf swbuf[];             /* swap I/O headers */
                     49: extern struct buf bfreelist;           /* head of available list */
                     50: extern struct buf bswlist;             /* head of free swap header list */
                     51: extern struct buf *bclnlist;           /* head of cleaned page list */
                     52: 
                     53: struct buf *alloc();
                     54: struct buf *baddr();
                     55: struct buf *getblk();
                     56: struct buf *geteblk();
                     57: struct buf *bread();
                     58: struct buf *breada();
                     59: 
                     60: unsigned minphys();
                     61: #endif
                     62: 
                     63: #define        NSWBUF  32                      /* number of swap I/O headers */
                     64: 
                     65: /*
                     66:  * These flags are kept in b_flags.
                     67:  */
                     68: #define        B_WRITE  0x0000 /* non-read pseudo-flag */
                     69: #define        B_READ   0x0001 /* read when I/O occurs */
                     70: #define        B_DONE   0x0002 /* transaction finished */
                     71: #define        B_ERROR  0x0004 /* transaction aborted */
                     72: #define        B_BUSY   0x0008 /* not on av_forw/back list */
                     73: #define        B_PHYS   0x0010 /* Physical IO potentially using UNIBUS map */
                     74: #define        B_MAP    0x0020 /* This block has the UNIBUS map allocated */
                     75: #define        B_WANTED 0x0040 /* issue wakeup when BUSY goes off */
                     76: #define        B_AGE    0x0080 /* delayed write for correct aging */
                     77: #define        B_ASYNC  0x0100 /* don't wait for I/O completion */
                     78: #define        B_DELWRI 0x0200 /* don't write till block leaves available list */
                     79: #define        B_TAPE   0x0400 /* this is a magtape (no bdwrite) */
                     80: #define        B_UAREA  0x0800 /* add u-area to a swap operation */
                     81: #define        B_PAGET  0x1000 /* page in/out of page table space */
                     82: #define        B_DIRTY  0x2000 /* dirty page to be pushed out async */
                     83: #define        B_PGIN   0x4000 /* page in flag to swap(), for counting */
                     84: 
                     85: /*
                     86:  * special redeclarations for
                     87:  * the head of the queue per
                     88:  * device driver.
                     89:  */
                     90: #define        b_actf          av_forw
                     91: #define        b_actl          av_back
                     92: #define        b_active        b_bcount
                     93: #define        b_errcnt        b_resid

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.