35
35
buf_flush_insert_into_flush_list(
36
36
/*=============================*/
37
buf_block_t* block); /*!< in/out: block which is modified */
37
buf_pool_t* buf_pool, /*!< buffer pool instance */
38
buf_block_t* block, /*!< in/out: block which is modified */
39
ib_uint64_t lsn); /*!< in: oldest modification */
38
40
/********************************************************************//**
39
41
Inserts a modified block into the flush list in the right sorted position.
40
42
This function is used by recovery, because there the modifications do not
44
46
buf_flush_insert_sorted_into_flush_list(
45
47
/*====================================*/
46
buf_block_t* block); /*!< in/out: block which is modified */
48
buf_pool_t* buf_pool, /*!< buffer pool instance */
49
buf_block_t* block, /*!< in/out: block which is modified */
50
ib_uint64_t lsn); /*!< in: oldest modification */
48
52
/********************************************************************//**
49
53
This function should be called at a mini-transaction commit, if a page was
56
60
buf_block_t* block, /*!< in: block which is modified */
57
61
mtr_t* mtr) /*!< in: mtr */
63
buf_pool_t* buf_pool = buf_pool_from_block(block);
60
66
ut_ad(buf_block_get_state(block) == BUF_BLOCK_FILE_PAGE);
61
67
ut_ad(block->page.buf_fix_count > 0);
62
68
#ifdef UNIV_SYNC_DEBUG
63
69
ut_ad(rw_lock_own(&(block->lock), RW_LOCK_EX));
64
70
#endif /* UNIV_SYNC_DEBUG */
65
ut_ad(buf_pool_mutex_own());
72
ut_ad(!buf_pool_mutex_own(buf_pool));
73
ut_ad(!buf_flush_list_mutex_own(buf_pool));
74
ut_ad(log_flush_order_mutex_own());
67
76
ut_ad(mtr->start_lsn != 0);
68
77
ut_ad(mtr->modifications);
79
mutex_enter(&block->mutex);
69
80
ut_ad(block->page.newest_modification <= mtr->end_lsn);
71
82
block->page.newest_modification = mtr->end_lsn;
73
84
if (!block->page.oldest_modification) {
75
block->page.oldest_modification = mtr->start_lsn;
76
ut_ad(block->page.oldest_modification != 0);
78
buf_flush_insert_into_flush_list(block);
85
buf_flush_insert_into_flush_list(
86
buf_pool, block, mtr->start_lsn);
80
88
ut_ad(block->page.oldest_modification <= mtr->start_lsn);
91
mutex_exit(&block->mutex);
83
93
++srv_buf_pool_write_requests;
95
105
ib_uint64_t end_lsn) /*!< in: end lsn of the last mtr in the
108
buf_pool_t* buf_pool = buf_pool_from_block(block);
99
111
ut_ad(buf_block_get_state(block) == BUF_BLOCK_FILE_PAGE);
100
112
ut_ad(block->page.buf_fix_count > 0);
102
114
ut_ad(rw_lock_own(&(block->lock), RW_LOCK_EX));
103
115
#endif /* UNIV_SYNC_DEBUG */
105
buf_pool_mutex_enter();
117
ut_ad(!buf_pool_mutex_own(buf_pool));
118
ut_ad(!buf_flush_list_mutex_own(buf_pool));
119
ut_ad(log_flush_order_mutex_own());
121
ut_ad(start_lsn != 0);
107
122
ut_ad(block->page.newest_modification <= end_lsn);
124
mutex_enter(&block->mutex);
109
125
block->page.newest_modification = end_lsn;
111
127
if (!block->page.oldest_modification) {
113
block->page.oldest_modification = start_lsn;
115
ut_ad(block->page.oldest_modification != 0);
117
buf_flush_insert_sorted_into_flush_list(block);
128
buf_flush_insert_sorted_into_flush_list(
129
buf_pool, block, start_lsn);
119
131
ut_ad(block->page.oldest_modification <= start_lsn);
122
buf_pool_mutex_exit();
134
mutex_exit(&block->mutex);
124
137
#endif /* !UNIV_HOTBACKUP */