29 # include "buf0buddy.ic"
52 if (((ulint) page) & size) {
63 buf_buddy_add_to_free(
70 #ifdef UNIV_DEBUG_VALGRIND
78 ut_ad(buf_pool->zip_free[i].start != bpage);
81 #ifdef UNIV_DEBUG_VALGRIND
91 buf_buddy_remove_from_free(
98 #ifdef UNIV_DEBUG_VALGRIND
113 #ifdef UNIV_DEBUG_VALGRIND
134 #ifndef UNIV_DEBUG_VALGRIND
146 buf_buddy_remove_from_free(buf_pool, bpage, i);
149 bpage = (
buf_page_t *)buf_buddy_alloc_zip(buf_pool, i + 1);
155 ut_ad(!buf_pool_contains_zip(buf_pool, buddy));
158 buf_buddy_add_to_free(buf_pool, buddy, i);
177 buf_buddy_block_free(
192 && bpage->in_zip_hash && !bpage->in_page_hash),
196 ut_ad(!bpage->in_page_hash);
197 ut_ad(bpage->in_zip_hash);
198 ut_d(bpage->in_zip_hash = FALSE);
201 ut_d(memset(buf, 0, UNIV_PAGE_SIZE));
202 UNIV_MEM_INVALID(buf, UNIV_PAGE_SIZE);
205 mutex_enter(&block->
mutex);
206 buf_LRU_block_free_non_file_page(block);
207 mutex_exit(&block->
mutex);
209 ut_ad(buf_pool->buddy_n_frames > 0);
210 ut_d(buf_pool->buddy_n_frames--);
217 buf_buddy_block_register(
222 const ulint fold = BUF_POOL_ZIP_FOLD(block);
234 ut_d(block->
page.in_zip_hash = TRUE);
237 ut_d(buf_pool->buddy_n_frames++);
245 buf_buddy_alloc_from(
269 #ifndef UNIV_DEBUG_VALGRIND
276 buf_buddy_add_to_free(buf_pool, bpage, j);
308 block = (
buf_block_t *)buf_buddy_alloc_zip(buf_pool, i);
316 block = buf_LRU_get_free_only(buf_pool);
335 buf_buddy_block_register(block);
350 buf_buddy_relocate_block(
383 buf_relocate(bpage, dpage);
396 UNIV_MEM_INVALID(bpage,
sizeof *bpage);
425 UNIV_MEM_ASSERT_W(dst, size);
457 UNIV_MEM_VALID(&space,
sizeof space);
458 UNIV_MEM_VALID(&page_no,
sizeof page_no);
461 if (!bpage || bpage->
zip.
data != src) {
470 ut_ad(!buf_pool_watch_is_sentinel(buf_pool, bpage));
483 UNIV_MEM_ASSERT_W(src, size);
492 memcpy(dst, src, size);
496 UNIV_MEM_INVALID(src, size);
508 }
else if (i == buf_buddy_get_slot(
sizeof(
buf_page_t))) {
510 #if UNIV_WORD_SIZE == 4
514 UNIV_MEM_ASSERT_RW(src, size);
551 buf_buddy_block_free(buf_pool, buf);
557 ut_ad(!buf_pool_contains_zip(buf_pool, buf));
563 #ifndef UNIV_DEBUG_VALGRIND
580 if (bpage == buddy) {
583 buf_buddy_remove_from_free(buf_pool, bpage, i);
586 ut_ad(!buf_pool_contains_zip(buf_pool, buddy));
602 #ifndef UNIV_DEBUG_VALGRIND
618 buf_buddy_remove_from_free(buf_pool, bpage, i);
621 if (buf_buddy_relocate(buf_pool, buddy, bpage, i)) {
627 buf_buddy_add_to_free(buf_pool, bpage, i);
630 buddy = (
buf_page_t*) buf_buddy_get(((byte*) bpage),
633 #ifndef UNIV_DEBUG_VALGRIND
645 && ut_list_node_313 != buddy)));
648 if (buf_buddy_relocate(buf_pool, buddy, buf, i)) {
671 # ifndef UNIV_DEBUG_VALGRIND
679 for (; b < b_end; b++) {
687 "buddy dirty %p %u (%u,%u) %p,%lu\n",
702 c-- > (
char*) buf; ) {
711 buf_buddy_add_to_free(buf_pool, bpage, i);