函数fsp_alloc_seg_inode_page

 

分配一个新的inode page

/**********************************************************************//**
Allocates a new file segment inode page.
@return    TRUE if could be allocated */
static
ibool
fsp_alloc_seg_inode_page(
/*=====================*/
    fsp_header_t*    space_header,    /*!< in: space header */
    mtr_t*        mtr)        /*!< in: mini-transaction handle */
{
    fseg_inode_t*    inode;
    buf_block_t*    block;
    page_t*        page; //详见
    ulint        space;
    ulint        zip_size;
    ulint        i;

    ut_ad(page_offset(space_header) == FSP_HEADER_OFFSET);
/**
*
*
*/ space
= page_get_space_id(page_align(space_header)); //详见 page_align详见
zip_size
= dict_table_flags_to_zip_size(mach_read_from_4(FSP_SPACE_FLAGS + space_header));
block
= fsp_alloc_free_page(space, zip_size, 0, mtr, mtr); //详见
if (block == NULL) { return(FALSE); } buf_block_dbg_add_level(block, SYNC_FSP_PAGE); ut_ad(rw_lock_get_x_lock_count(&block->lock) == 1); block->check_index_page_at_flush = FALSE; page = buf_block_get_frame(block);

//#define FIL_PAGE_TYPE 24页类型为 inodb page mlog_write_ulint(page
+ FIL_PAGE_TYPE, FIL_PAGE_INODE,MLOG_2BYTES, mtr);

//for循环86次
for (i = 0; i < FSP_SEG_INODES_PER_PAGE(zip_size); i++) { inode = fsp_seg_inode_page_get_nth_inode(page, i,zip_size, mtr); mlog_write_ull(inode + FSEG_ID, 0, mtr); }
/**
*#define FSP_SEG_INODES_FREE (32 + 4 * FLST_BASE_NODE_SIZE
*#define FLST_BASE_NODE_SIZE (4 + 2 * FIL_ADDR_SIZE)
*#define FIL_ADDR_SIZE 6
*
*函数fsp_alloc_seg_inode_page_第1张图片





*#define FSP_SEG_INODES_FREE (32 + 4 * FLST_BASE_NODE_SIZE)
*#define FLST_BASE_NODE_SIZE (4 + 2 * FIL_ADDR_SIZE)
*#define FIL_ADDR_SIZE 6
*/
 
    *#define FSEG_INODE_PAGE_NODE FSEG_PAGE_DATA
*#define FSEG_PAGE_DATA FIL_PAGE_DATA
*#define FIL_PAGE_DATA 38

函数fsp_alloc_seg_inode_page_第2张图片


函数fsp_alloc_seg_inode_page_第3张图片

//FSP_SEG_INODES_FREE 134 所在页为 fsp 页

//FSEG_INODE_PAGE_NODE 38 所在页为inode 页
  flst_add_last(space_header + FSP_SEG_INODES_FREE,page + FSEG_INODE_PAGE_NODE, mtr);//详见 

return(TRUE);
}

 

你可能感兴趣的:(函数fsp_alloc_seg_inode_page)