On Wed, 29 Jan 2014, Mikulas Patocka wrote: > The page cache doesn't handle different-size buffers for one page. HPFS > has some 2kB structures (dnodes, bitmaps) and some 512-byte structures > (fnodes, anodes). We can have a 4kB page that contains one 2kB dnode and > four 512-byte anodes or fnodes. That is impossible to create with > create_empty_buffers. > > (you can't access 512-byte structures using 2kB buffers because that could > trash file data that lie in the same 2kB area) > > __find_get_block_slow walks all the buffers on the page and finds the one > that matches, that is fixable. But I have no clue how to replace > create_empty_buffers. How much other code does depend on the fact that > buffers completely cover a page and have the same size? Another question is - what would happen with direct access to the block device using read or write on nodes in /dev? Direct access must use buffers - the reason is that some programs (lilo, grub, tune2fs) can write to a block device with mounted filesystem. They must write only the buffer they are modifying; if they were using full-page writes, they could destroy nearby data. Now, how this could work with variable-size buffers? What happens if the block device is being read or written with some buffer size and the filesystem needs a different buffer size on the same place? It doesn't seem so easy to solve... Mikulas -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html