_ma_bitmap_unpin_all() needs to unpin not-locked pages which were pinned by other threads
in write_changed_bitmap(), and page cache forbids that. Here we make the page cache more relaxed. Original patch by Sanja, simplified by me as limited to not-locked. See comment of ma_bitmap.c. With that, maria_stress.yy runs until hitting BUG 39665. storage/maria/ma_bitmap.c: A thread which unpins bitmap pages in _ma_bitmap_unpin_all() sometimes hit an assertion in the page cache (info!=0 in remove_pin()) which states that you can unpin/unlock only what *you* have pinned/locked. Fixed by setting the new last parameter of pagecache_unlock_by_link() to TRUE in _ma_bitmap_unpin_all(). storage/maria/ma_blockrec.c: new prototype and splitting assertion in three (3rd one fires: BUG 39665) storage/maria/ma_check.c: new prototype storage/maria/ma_key_recover.c: new prototype storage/maria/ma_loghandler.c: new prototype storage/maria/ma_pagecache.c: Allow a thread to unpin, with pagecache_unlock_by_link(), a non-locked page pinned by others. This is a hack for _ma_bitmap_unpin_all() which needs to unpin pages which were pinned by other threads in write_changed_bitmap(). storage/maria/ma_pagecache.h: new prototype storage/maria/ma_preload.c: new prototype storage/maria/unittest/ma_pagecache_rwconsist.c: new prototype storage/maria/unittest/ma_pagecache_single.c: new prototype
Showing
This diff is collapsed.
Please register or sign in to comment