Merge lp:~laurynas-biveinis/percona-server/bug1122462 into lp:percona-server/5.5
Status: | Work in progress |
---|---|
Proposed branch: | lp:~laurynas-biveinis/percona-server/bug1122462 |
Merge into: | lp:percona-server/5.5 |
Prerequisite: | lp:~laurynas-biveinis/percona-server/bug1086680-5.5 |
Diff against target: |
107 lines (+20/-13) 1 file modified
Percona-Server/storage/innobase/buf/buf0lru.c (+20/-13) |
To merge this branch: | bzr merge lp:~laurynas-biveinis/percona-server/bug1122462 |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Laurynas Biveinis (community) | Needs Fixing | ||
George Ormond Lorch III (community) | g2 | Approve | |
Review via email: mp+147863@code.launchpad.net |
Description of the change
Fix bug 1122462.
http://
Fix bug 1122462 (InnoDB: Failing assertion: bpage->
file buf0lru.c line 605).
The issue is that, even after fixing bug 934377 and friends, there is
not enough protection for the "prev" pointer in the
buf_flush_
or become dangling due to a compressed page flush list relocation.
The fix is two part. First is acquiring the compressed page flush
mutex in buf_flush_
buf_flush_yield()). This ensures that the prev pointer always points
to a valid page.
The second part is to fix that, while prev cannot become dangling
anymore, it still may get removed from the flush list when the flush
list mutex is released. This is handled by replacing the assertions
at the top of the buf_flush_
check.
Remove some comments that do not apply for XtraDB.
Unmerged revisions
- 441. By Laurynas Biveinis
-
Fix bug 1122462 (InnoDB: Failing assertion: bpage->
in_flush_ list in
file buf0lru.c line 605).The issue is that, even after fixing bug 934377 and friends, there is
not enough protection for the "prev" pointer in the
buf_flush_or_remove_ pages() loop to start pointing to a flushed page
or become dangling due to a compressed page flush list relocation.The fix is two part. First is acquiring the compressed page flush
mutex in buf_flush_dirty_pages( ) (and releasing it in
buf_flush_yield()). This ensures that the prev pointer always points
to a valid page.The second part is to fix that, while prev cannot become dangling
anymore, it still may get removed from the flush list when the flush
list mutex is released. This is handled by replacing the assertions
at the top of the buf_flush_or_remove_ pages() loop with a block state
check.Remove some comments that do not apply for XtraDB.
- 440. By Laurynas Biveinis
-
Automerge prerequisite branch
I will redo this after the new bug 1086680 fix.