Not sure about your description of very small I/O units and buffer_heads. A single buffer_head can map a full page, it's only if you have a 512b file system block size that you get them linked. Which is not a huge surprise, since they represent the on-disk block mapping. But for "normal" 4kb block size file systems, you only get one bh per page.