It should be possible to avoid the user of buffer heads in the ordered write
mode by tagging each transaction and/or inode to indicate which page range(s)
need writing back at journal flush time. It might also be ok to just writeback
all dirty data for the inode in question without too much of a performance hit
since we'll only be doing it on a journal flush.
Either way it has two desirable properties: (1) we'd be able to move
gfs2_writepages() for ordered write files to use mpage_writepages() as per the
data=writeback mode and (2) we'd be able to get rid of all the ordered write
special casing in the databuf_ functions in lops.c which would considerably
simplify that code.
This has been pushed upstream: