summaryrefslogtreecommitdiff
path: root/storage
diff options
context:
space:
mode:
authorunknown <bell@desktop.sanja.is.com.ua>2007-07-03 01:19:26 +0300
committerunknown <bell@desktop.sanja.is.com.ua>2007-07-03 01:19:26 +0300
commitbca70f9f6ec10290a414c683eeecb612dda144f9 (patch)
treecb1addf35937c99e1b7de5fb00f8e0dc14512744 /storage
parentef7a757b7c09f65207e6f30619a32533c27f400f (diff)
downloadmariadb-git-bca70f9f6ec10290a414c683eeecb612dda144f9.tar.gz
Mark the page dirty if we store LSN on it.
New type of page in the page cache fixes. storage/maria/ma_pagecache.c: Mark the page dirty if we store LSN on it. Symbolic representation of new page type added (for debugging output). Asserts added (unknown type can't be used if we write the page).
Diffstat (limited to 'storage')
-rwxr-xr-xstorage/maria/ma_pagecache.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/storage/maria/ma_pagecache.c b/storage/maria/ma_pagecache.c
index 05173eddf46..bf66a8fd088 100755
--- a/storage/maria/ma_pagecache.c
+++ b/storage/maria/ma_pagecache.c
@@ -177,7 +177,8 @@ static const char *page_cache_page_type_str[]=
/* used only for control page type changing during debugging */
"EMPTY",
"PLAIN",
- "LSN"
+ "LSN",
+ "READ_UNKNOWN"
};
static const char *page_cache_page_write_mode_str[]=
@@ -584,6 +585,7 @@ static uint pagecache_fwrite(PAGECACHE *pagecache,
myf flags)
{
DBUG_ENTER("pagecache_fwrite");
+ DBUG_ASSERT(type != PAGECACHE_READ_UNKNOWN_PAGE);
if (type == PAGECACHE_LSN_PAGE)
{
LSN lsn;
@@ -2457,7 +2459,12 @@ static void check_and_set_lsn(LSN lsn, PAGECACHE_BLOCK_LINK *block)
(ulong)LSN_FILE_NO(old), (ulong)LSN_OFFSET(old),
(ulong)LSN_FILE_NO(lsn), (ulong)LSN_OFFSET(lsn)));
if (cmp_translog_addr(lsn, old) > 0)
+ {
+
+ DBUG_ASSERT(block->type != PAGECACHE_READ_UNKNOWN_PAGE);
lsn_store(block->buffer + PAGE_LSN_OFFSET, lsn);
+ block->status|= PCBLOCK_CHANGED;
+ }
DBUG_VOID_RETURN;
}
@@ -3179,6 +3186,7 @@ my_bool pagecache_write_part(PAGECACHE *pagecache,
page_cache_page_pin_str[pin],
page_cache_page_write_mode_str[write_mode],
offset, size));
+ DBUG_ASSERT(type != PAGECACHE_READ_UNKNOWN_PAGE);
DBUG_ASSERT(lock != PAGECACHE_LOCK_LEFT_READLOCKED);
DBUG_ASSERT(lock != PAGECACHE_LOCK_READ_UNLOCK);
DBUG_ASSERT(offset + size <= pagecache->block_size);