41 flst_base_node_t* base,
50 ut_ad(mtr && base && node);
52 ut_ad(mtr_memo_contains_page(mtr, base, MTR_MEMO_PAGE_X_FIX));
53 ut_ad(mtr_memo_contains_page(mtr, node, MTR_MEMO_PAGE_X_FIX));
77 flst_base_node_t* base,
85 flst_node_t* last_node;
87 ut_ad(mtr && base && node);
89 ut_ad(mtr_memo_contains_page(mtr, base, MTR_MEMO_PAGE_X_FIX));
90 ut_ad(mtr_memo_contains_page(mtr, node, MTR_MEMO_PAGE_X_FIX));
98 if (last_addr.
page == node_addr.
page) {
103 last_node =
fut_get_ptr(space, zip_size, last_addr,
110 flst_add_to_empty(base, node, mtr);
120 flst_base_node_t* base,
128 flst_node_t* first_node;
130 ut_ad(mtr && base && node);
132 ut_ad(mtr_memo_contains_page(mtr, base, MTR_MEMO_PAGE_X_FIX));
133 ut_ad(mtr_memo_contains_page(mtr, node, MTR_MEMO_PAGE_X_FIX));
141 if (first_addr.
page == node_addr.
page) {
146 first_node =
fut_get_ptr(space, zip_size, first_addr,
153 flst_add_to_empty(base, node, mtr);
163 flst_base_node_t* base,
175 ut_ad(mtr && node1 && node2 && base);
176 ut_ad(base != node1);
177 ut_ad(base != node2);
178 ut_ad(node2 != node1);
179 ut_ad(mtr_memo_contains_page(mtr, base, MTR_MEMO_PAGE_X_FIX));
180 ut_ad(mtr_memo_contains_page(mtr, node1, MTR_MEMO_PAGE_X_FIX));
181 ut_ad(mtr_memo_contains_page(mtr, node2, MTR_MEMO_PAGE_X_FIX));
197 node3_addr, RW_X_LATCH, mtr);
218 flst_base_node_t* base,
230 ut_ad(mtr && node2 && node3 && base);
231 ut_ad(base != node2);
232 ut_ad(base != node3);
233 ut_ad(node2 != node3);
234 ut_ad(mtr_memo_contains_page(mtr, base, MTR_MEMO_PAGE_X_FIX));
235 ut_ad(mtr_memo_contains_page(mtr, node2, MTR_MEMO_PAGE_X_FIX));
236 ut_ad(mtr_memo_contains_page(mtr, node3, MTR_MEMO_PAGE_X_FIX));
272 flst_base_node_t* base,
285 ut_ad(mtr && node2 && base);
286 ut_ad(mtr_memo_contains_page(mtr, base, MTR_MEMO_PAGE_X_FIX));
287 ut_ad(mtr_memo_contains_page(mtr, node2, MTR_MEMO_PAGE_X_FIX));
299 if (node1_addr.
page == node2_addr.
page) {
304 node1_addr, RW_X_LATCH, mtr);
307 ut_ad(node1 != node2);
318 if (node3_addr.
page == node2_addr.
page) {
323 node3_addr, RW_X_LATCH, mtr);
326 ut_ad(node2 != node3);
349 flst_base_node_t* base,
361 ut_ad(mtr && node2 && base);
362 ut_ad(mtr_memo_contains_page(mtr, base, MTR_MEMO_PAGE_X_FIX));
363 ut_ad(mtr_memo_contains_page(mtr, node2, MTR_MEMO_PAGE_X_FIX));
374 if (node1_addr.
page == node2_addr.
page) {
380 node1_addr, RW_X_LATCH, mtr);
393 ut_ad(len >= n_nodes);
406 flst_base_node_t* base,
415 ut_ad(mtr && node2 && base);
416 ut_ad(mtr_memo_contains_page(mtr, base, MTR_MEMO_PAGE_X_FIX));
417 ut_ad(mtr_memo_contains_page(mtr, node2, MTR_MEMO_PAGE_X_FIX));
434 ut_ad(len >= n_nodes);
446 const flst_base_node_t* base,
451 const flst_node_t* node;
459 ut_ad(mtr_memo_contains_page(mtr1, base, MTR_MEMO_PAGE_X_FIX));
475 for (i = 0; i < len; i++) {
479 node_addr, RW_X_LATCH, &mtr2);
490 for (i = 0; i < len; i++) {
494 node_addr, RW_X_LATCH, &mtr2);
512 const flst_base_node_t* base,
519 ut_ad(mtr_memo_contains_page(mtr, base, MTR_MEMO_PAGE_X_FIX));
526 "Base node in space %lu page %lu byte offset %lu; len %lu\n",
UNIV_INLINE ulint page_get_space_id(const page_t *page)
UNIV_INLINE void flst_write_addr(fil_faddr_t *faddr, fil_addr_t addr, mtr_t *mtr)
UNIV_INLINE fil_addr_t flst_get_last(const flst_base_node_t *base, mtr_t *mtr)
UNIV_INLINE fil_addr_t flst_get_prev_addr(const flst_node_t *node, mtr_t *mtr)
UNIV_INLINE page_t * page_align(const void *ptr) __attribute__((const ))
UNIV_INLINE ulint page_get_page_no(const page_t *page)
UNIV_INLINE fil_addr_t flst_get_next_addr(const flst_node_t *node, mtr_t *mtr)
UNIV_INTERN ibool flst_validate(const flst_base_node_t *base, mtr_t *mtr1)
UNIV_INTERN void flst_add_last(flst_base_node_t *base, flst_node_t *node, mtr_t *mtr)
UNIV_INTERN void flst_truncate_end(flst_base_node_t *base, flst_node_t *node2, ulint n_nodes, mtr_t *mtr)
UNIV_INTERN void mlog_write_ulint(byte *ptr, ulint val, byte type, mtr_t *mtr)
UNIV_INTERN ulint fil_space_get_zip_size(ulint id)
UNIV_INTERN void flst_remove(flst_base_node_t *base, flst_node_t *node2, mtr_t *mtr)
UNIV_INLINE void buf_ptr_get_fsp_addr(const void *ptr, ulint *space, fil_addr_t *addr)
UNIV_INLINE fil_addr_t flst_get_first(const flst_base_node_t *base, mtr_t *mtr)
UNIV_INTERN void mtr_commit(mtr_t *mtr) __attribute__((nonnull))
UNIV_INTERN void flst_insert_after(flst_base_node_t *base, flst_node_t *node1, flst_node_t *node2, mtr_t *mtr)
UNIV_INTERN void flst_print(const flst_base_node_t *base, mtr_t *mtr)
UNIV_INLINE ulint page_offset(const void *ptr) __attribute__((const ))
UNIV_INTERN void flst_cut_end(flst_base_node_t *base, flst_node_t *node2, ulint n_nodes, mtr_t *mtr)
UNIV_INTERN void flst_add_first(flst_base_node_t *base, flst_node_t *node, mtr_t *mtr)
UNIV_INTERN void flst_insert_before(flst_base_node_t *base, flst_node_t *node2, flst_node_t *node3, mtr_t *mtr)
UNIV_INLINE void mtr_start(mtr_t *mtr) __attribute__((nonnull))
UNIV_INTERN ibool fil_addr_is_null(fil_addr_t addr)
UNIV_INLINE ulint flst_get_len(const flst_base_node_t *base, mtr_t *mtr)
UNIV_INLINE byte * fut_get_ptr(ulint space, ulint zip_size, fil_addr_t addr, ulint rw_latch, mtr_t *mtr)