| InnoDB Plugin
    1.0
    | 

| Data Fields | |
| page_zip_des_t | zip | 
| buf_page_t * | hash | 
| ibool | in_page_hash | 
| ibool | in_zip_hash | 
| unsigned | access_time | 
| ibool | file_page_was_freed | 
| General fields | |
| None of these bit-fields must be modified without holding buf_page_get_mutex() [buf_block_t::mutex or buf_pool->zip_mutex], since they can be stored in the same machine word. Some of these fields are additionally protected by buf_pool->mutex. | |
| ib_uint32_t | space | 
| ib_uint32_t | offset | 
| unsigned | buf_fix_count:19 | 
| unsigned | io_fix:2 | 
| unsigned | state:BUF_PAGE_STATE_BITS | 
| unsigned | flush_type:2 | 
| unsigned | buf_pool_index:6 | 
| Page flushing fields | |
| All these are protected by buf_pool->mutex. | |
| ut_list_node< buf_page_t > | list | 
| ibool | in_flush_list | 
| ibool | in_free_list | 
| lsn_t | newest_modification | 
| lsn_t | oldest_modification | 
| LRU replacement algorithm fields | |
| These fields are protected by buf_pool->mutex only (not buf_pool->zip_mutex or buf_block_t::mutex). | |
| ut_list_node< buf_page_t > | LRU | 
| ibool | in_LRU_list | 
| unsigned | old:1 | 
| unsigned | freed_page_clock:31 | 
| unsigned buf_page_t::access_time | 
time of first access, or 0 if the block was never accessed in the buffer pool. Protected by block mutex
| unsigned buf_page_t::buf_fix_count | 
count of how manyfold this block is currently bufferfixed
| unsigned buf_page_t::buf_pool_index | 
index number of the buffer pool that this block belongs to
| ibool buf_page_t::file_page_was_freed | 
this is set to TRUE when fsp frees a page in buffer pool; protected by buf_pool->zip_mutex or buf_block_t::mutex.
| unsigned buf_page_t::flush_type | 
if this block is currently being flushed to disk, this tells the flush_type.
| unsigned buf_page_t::freed_page_clock | 
the value of buf_pool->freed_page_clock when this block was the last time put to the head of the LRU list; a thread is allowed to read this for heuristic purposes without holding any mutex or latch
| buf_page_t* buf_page_t::hash | 
node used in chaining to buf_pool->page_hash or buf_pool->zip_hash
| ibool buf_page_t::in_flush_list | 
TRUE if in buf_pool->flush_list; when buf_pool->flush_list_mutex is free, the following should hold: in_flush_list == (state == BUF_BLOCK_FILE_PAGE || state == BUF_BLOCK_ZIP_DIRTY) Writes to this field must be covered by both block->mutex and buf_pool->flush_list_mutex. Hence reads can happen while holding any one of the two mutexes
| ibool buf_page_t::in_free_list | 
TRUE if in buf_pool->free; when buf_pool->mutex is free, the following should hold: in_free_list == (state == BUF_BLOCK_NOT_USED)
| ibool buf_page_t::in_LRU_list | 
TRUE if the page is in the LRU list; used in debugging
| ibool buf_page_t::in_page_hash | 
TRUE if in buf_pool->page_hash
| ibool buf_page_t::in_zip_hash | 
TRUE if in buf_pool->zip_hash
| unsigned buf_page_t::io_fix | 
type of pending I/O operation; also protected by
buf_pool->mutex for writes only
| ut_list_node< buf_page_t > buf_page_t::list | 
based on state, this is a list node, protected either by buf_pool->mutex or by buf_pool->flush_list_mutex, in one of the following lists in buf_pool:
If bpage is part of flush_list then the node pointers are covered by buf_pool->flush_list_mutex. Otherwise these pointers are protected by buf_pool->mutex.
The contents of the list node is undefined if !in_flush_list && state == BUF_BLOCK_FILE_PAGE, or if state is one of BUF_BLOCK_MEMORY, BUF_BLOCK_REMOVE_HASH or BUF_BLOCK_READY_IN_USE.
| ut_list_node< buf_page_t > buf_page_t::LRU | 
node of the LRU list
| lsn_t buf_page_t::newest_modification | 
log sequence number of the youngest modification to this block, zero if not modified. Protected by block mutex
| ib_uint32_t buf_page_t::offset | 
page number; also protected by buf_pool->mutex.
| unsigned buf_page_t::old | 
TRUE if the block is in the old blocks in buf_pool->LRU_old
| lsn_t buf_page_t::oldest_modification | 
log sequence number of the START of the log entry written of the oldest modification to this block which has not yet been flushed on disk; zero if all modifications are on disk. Writes to this field must be covered by both block->mutex and buf_pool->flush_list_mutex. Hence reads can happen while holding any one of the two mutexes
| ib_uint32_t buf_page_t::space | 
tablespace id; also protected by buf_pool->mutex.
| page_zip_des_t buf_page_t::zip | 
compressed page; zip.data (but not the data it points to) is also protected by buf_pool->mutex; state == BUF_BLOCK_ZIP_PAGE and zip.data == NULL means an active buf_pool->watch
 1.8.1.2
 1.8.1.2