summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2019-10-08 17:03:45 +0300
committerMarko Mäkelä <marko.makela@mariadb.com>2019-10-08 17:03:45 +0300
commit81f603980d5eddde2cc3ed7f556f9f0959b0884c (patch)
tree588589791f33bb0b46acc251dfb1378ee19f0155
parentd653b4597c072e22bd89eb030fce6d0cc195c03b (diff)
downloadmariadb-git-bb-10.5-MDEV-19514.tar.gz
Try to catch writes of all-zero pagesbb-10.5-MDEV-19514
buf_flush_init_for_writing(): Assert that FIL_PAGE_TYPE is set buf_dblwr_create(): Ensure that FIL_PAGE_TYPE on all pages will be initialized. Reset buf_dblwr_being_created at the end.
-rw-r--r--storage/innobase/buf/buf0dblwr.cc3
-rw-r--r--storage/innobase/buf/buf0flu.cc1
2 files changed, 4 insertions, 0 deletions
diff --git a/storage/innobase/buf/buf0dblwr.cc b/storage/innobase/buf/buf0dblwr.cc
index 4c83e62dfe3..8b69bd5e9d6 100644
--- a/storage/innobase/buf/buf0dblwr.cc
+++ b/storage/innobase/buf/buf0dblwr.cc
@@ -264,6 +264,8 @@ too_small:
ut_ad(rw_lock_get_x_lock_count(&new_block->lock) == 1);
page_no = new_block->page.id.page_no();
+ mlog_write_ulint(FIL_PAGE_TYPE + new_block->frame,
+ FIL_PAGE_TYPE_SYS, MLOG_2BYTES, &mtr);
if (i == FSP_EXTENT_SIZE / 2) {
ut_a(page_no == FSP_EXTENT_SIZE);
@@ -326,6 +328,7 @@ too_small:
/* Flush the modified pages to disk and make a checkpoint */
log_make_checkpoint_at(LSN_MAX);
+ buf_dblwr_being_created = FALSE;
/* Remove doublewrite pages from LRU */
buf_pool_invalidate();
diff --git a/storage/innobase/buf/buf0flu.cc b/storage/innobase/buf/buf0flu.cc
index 658d023c9c7..5295cec44d3 100644
--- a/storage/innobase/buf/buf0flu.cc
+++ b/storage/innobase/buf/buf0flu.cc
@@ -789,6 +789,7 @@ buf_flush_init_for_writing(
ut_ad(block == NULL || page_zip_ == NULL
|| &block->page.zip == page_zip_);
ut_ad(page);
+ ut_ad(!block || fil_page_get_type(block->frame));
if (page_zip_) {
page_zip_des_t* page_zip;