allocating compressed page frames or their control blocks. Also note
that if buf_buddy_alloc() is used for allocating a control block,
it must be initialized before releasing buf_pool->mutex.
buf_page_init_for_read(): When the page hash check fails after
buf_buddy_alloc(), free the uninitialized control block before freeing
the compressed page frame. This fixes a potential error in
buf_buddy_relocate_block().
buf_buddy_alloc() until after the block has been found not to exist
in the buffer pool.
buf_buddy_alloc(), buf_buddy_alloc_low(): Make lru an output parameter.
Improve documentation.
buf_page_init_for_read(): Simplify the code. Check buf_page_hash_get()
again if buf_buddy_alloc() released buf_pool->mutex.
buf_buddy_get(): New function in buf0buddy.c, to replace the macro
in buf0buddy.h.
buf_buddy_get_offset(): Remove.
buf_buddy_get_slot(): Remove the prototype from buf0buddy.h. This function
is for internal use in buf0buddy.ic.
twice the maximum block size of the buddy system.
buf_page_t: Note that state may change from BUF_BLOCK_READY_FOR_USE
to BUF_BLOCK_MEMORY without buf_page_get_mutex() protection
[only buf_pool->mutex].
buf_buddy_get_slot(): Extend the output to BUF_BUDDY_SIZES.
buf_buddy_alloc(), buf_buddy_free(): Allow sizes up to UNIV_PAGE_SIZE.
buf_buddy_alloc_low(), buf_buddy_free_low(), buf_buddy_alloc_clean():
Allow i==BUF_BUDDY_SIZES.
buf_buddy_free(), buf_buddy_free_low(): Document that the data must
not be pointed to by the buffer pool. Add ut_ad(!buf_pool_contains_zip())
assertions to catch pointers to freed blocks.
Validate the zip_free[] lists #ifdef UNIV_DEBUG.
buf_buddy_relocate(): Ensure that the size of the compressed page
matches. The buddy block can be split, and the control block can be
pointing to a smaller compressed page than the one whose relocation
is being attempted.
buf_buddy_alloc(), buf_buddy_alloc_low(): Add parameter "lru" for
enabling allocation from the list of least-recently-used blocks.
buf_buddy_alloc_low(): Release buf_pool->mutex while calling
buf_LRU_get_free_block().
buf_LRU_free_block(): Free compressed-only pages and their
descriptors with buf_buddy_free().
buf_LRU_get_free_only(): New function for returning a block from
buf_pool->free if one is available. Split from buf_LRU_get_free_block().
buf_buddy_alloc_zip(): Rename from buf_buddy_alloc_low() and make static.
Remove parameter "split". Always try to split.
buf_buddy_free_block(): Rename to buf_buddy_block_free().
buf_buddy_block_register(): New function for registering buf_block_t
objects reserved by the allocator.
buf_buddy_alloc_from(): New function for allocating an object from a
bigger object, and putting the unused parts on the free list.
buf_buddy_alloc_clean_zip(): New function for allocating memory by
replacing an unmodified compressed page.
buf_buddy_alloc_low(): New function for allocating memory, either from
the free lists of compressed pages, from the global free list, or from
unmodified pages in the buffer pool.
to the buddy system for allocating compressed pages and their descriptors.
buf_buddy_free_block(): New function: Deallocate the buffer frame.
buf_buddy_free(), buf_buddy_free_low(): Return void instead of a pointer
to a freed buffer frame.
compressed pages from the buffer pool.
Makefile.am: Add buf0buddy.h, buf0buddy.ic.
buf/Makefile.am: Add buf0buddy.c.
Introduce the constants BUF_BUDDY_LOW and BUF_BUDDY_SIZES.
buf_pool_t: Add zip_mutex and the lists zip_clean and zip_free[].
buf_page_get_mutex(): Return &buf_pool->zip_mutex instead of NULL.
buf_buddy_get_offset(), buf_buddy_get(), buf_buddy_get_slot(),
buf_buddy_alloc_free(), buf_buddy_alloc_free_low(): New functions.