• Guilhem Bichot's avatar
    _ma_bitmap_unpin_all() needs to unpin not-locked pages which were pinned by other threads · 8ecda6cd
    Guilhem Bichot authored
    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
    8ecda6cd
ma_bitmap.c 82.5 KB