Definitely a bug, and a long standing one at that.
I'm currently re-working mm/page_alloc.c to give page-colouring support,
along with lazy-coalescing, a simple fragmentation control, and the
ability to quickly re-alloc "cache-hot" pages. I'm also looking at the
DMA problem. (The colouring, lazy-coalescing, and "hot" handling are
working well in my limited test environment. The fragmentation control
needs some more work, and I'm only maintaining DMA counts at the moment -
but its getting there).
markhe