Journalling is quite necessary so that we don't need to load too many different pages from memory. And given that we already use a handle it should be straightforward to relocate things as we go along.
Efficient journalling at this level will require a separation of the block metadata and their location on disk. So the prev_block, next_block and other pointers will need to be taken out, otherwise we might need to update them, which would lead to another update.