Linux kernel module OOM when there is memory in cache

view story

http://stackoverflow.com – Embedded system, no swap, kernel v2.6.36, memory compaction enabled. Under heavy usage, all the RAM is tied up in cache. Cache was using about 70M of memory. When a user space process allocates memory, no problem, cache gives it up. But there's a 3rd party device driver that seems to try to allocate a physical 5th order page, and fails with OOM. A quick look at buddyinfo confirms this... no 5th order page available. But as soon as I drop cache, plenty becomes available and the device driver no longer OOM. So it seems to me that virtual memory allocation will trigger cache drop, but physical (HowTos)