Linux核心数据结构--buffer_head

阅读更多
此结构包含关于buffer cache中一块缓存的信息。

/* bh state bits */

#define BH_Uptodate  0   /* 1 if the buffer contains valid data      */

#define BH_Dirty     1  /* 1 if the buffer is dirty                 */

#define BH_Lock     2   /* 1 if the buffer is locked                */

#define BH_Req      3    /* 0 if the buffer has been invalidated     */

#define BH_Touched   4   /* 1 if the buffer has been touched (aging) */

#define BH_Has_aged  5   /* 1 if the buffer has been aged (aging)    */

#define BH_Protected 6   /* 1 if the buffer is protected             */

#define BH_FreeOnIO  7
   /* 1 to discard the buffer_head after IO    */



struct buffer_head {

  /* First cache line: */

unsigned long      b_blocknr;    /* block number                   */

  kdev_t             b_dev;        /* device (B_FREE = free)         */

kdev_t             b_rdev;       /* Real device                    */

  unsigned long      b_rsector;    /* Real buffer location on disk   */

  struct buffer_head *b_next;      /* Hash queue list                */

struct buffer_head *b_this_page; /* circular list of buffers in one

                                      page                           */



  /* Second cache line: */

unsigned long      b_state;      /* buffer state bitmap (above)    */

  struct buffer_head *b_next_free;

  unsigned int       b_count;      /* users using this block         */

  unsigned long      b_size;       /* block size                     */



  /* Non-performance-critical data follows. */

char               *b_data;      /* pointer to data block          */

  unsigned int       b_list;       /* List that this buffer appears  */

  unsigned long      b_flushtime;  /* Time when this (dirty) buffer

                                    * should be written              */

unsigned long      b_lru_time;   /* Time when this buffer was

                                    * last used.                     */

  struct wait_queue  *b_wait;

  struct buffer_head *b_prev;      /* doubly linked hash list        */

  struct buffer_head *b_prev_free; /* doubly linked list of buffers  */

  struct buffer_head *b_reqnext;   /* request queue                  */

};

你可能感兴趣的:(数据结构,Linux,Cache,performance)